详解在Python中把一个图像叠加在另一个图像上

在Python中把一个图像叠加在另一个图像上的过程中,可以用OpenCV库来实现。具体步骤如下:

1.读取原图和覆盖图

import cv2

# 读取原图和覆盖图
img1 = cv2.imread("image1.png")
img2 = cv2.imread("image2.png")

2.确定图像叠加的位置

# 确定图像叠加的位置
rows, cols, channels = img2.shape
roi = img1[0:rows, 0:cols]

这里img2的大小要小于img1,才能在img1的特定区域上叠加。rows, cols, channels = img2.shape得到img2的行、列和通道数,然后利用这些值,从img1中选取与img2大小相同的区域作为覆盖区域roi

3.制作蒙版

# 制作蒙版
img2gray = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
ret, mask = cv2.threshold(img2gray, 10, 255, cv2.THRESH_BINARY)
mask_inv = cv2.bitwise_not(mask)

在将图像叠加时,需要将覆盖区域进行蒙版处理。这里通过将img2转换为灰度图,然后利用阈值将非黑色部分变成白色(255),制作一个蒙版mask。用bitwise_notmask中的白色和黑色进行反转,获得mask_inv

4.图像叠加操作

# 图像叠加操作
img1_bg = cv2.bitwise_and(roi, roi, mask=mask_inv)
img2_fg = cv2.bitwise_and(img2, img2, mask=mask)
dst = cv2.add(img1_bg, img2_fg)
img1[0:rows, 0:cols] = dst

在进行图像叠加操作时,分别对roiimg2进行若干次的位运算,最后将它们加在一起得到叠加图像dst。然后将dst放回到原图中的roi位置,就完成了图像叠加的操作。

下面给出一个完整的代码示例:对于两幅图片A和B,将B的左上角位置放在A的中央位置,并将B图切出来的长宽分别缩小一半后叠加在A图中。

import cv2

# 读取A和B图片
img_A = cv2.imread("image_A.png")
img_B = cv2.imread("image_B.png")

# 获取B图片的大小信息
rows, cols, channels = img_B.shape

# 计算出将B图显示在A图中央的坐标点
center_x = img_A.shape[1] // 2 - cols // 4
center_y = img_A.shape[0] // 2 - rows // 4

# 抠出B图需要覆盖的区域
roi = img_A[center_y:center_y + rows // 2, center_x:center_x + cols // 2]

# 制作蒙版mask和mask_inv
img_B_gray = cv2.cvtColor(img_B, cv2.COLOR_BGR2GRAY)
ret, mask = cv2.threshold(img_B_gray, 10, 255, cv2.THRESH_BINARY)
mask_inv = cv2.bitwise_not(mask)

# 图像叠加
img1_bg = cv2.bitwise_and(roi, roi, mask=mask_inv)
img2_fg = cv2.bitwise_and(img_B, img_B, mask=mask)
dst = cv2.add(img1_bg, img2_fg)

# 将叠加后的图像放回到A图
img_A[center_y:center_y + rows // 2, center_x:center_x + cols // 2] = dst

# 显示图片
cv2.imshow("result", img_A)
cv2.waitKey(0)
cv2.destroyAllWindows()

另一种示例,将两张图片按照一定的权值混合在一起。

import cv2

# 读取两张图片
img1 = cv2.imread("image1.png")
img2 = cv2.imread("image2.png")

# 设定混合比例
alpha = 0.7
beta = 1 - alpha

# 图像混合
result = cv2.addWeighted(img1, alpha, img2, beta, 0)

# 显示图片
cv2.imshow("result", result)
cv2.waitKey(0)
cv2.destroyAllWindows()

在上面的示例中,利用cv2.addWeighted()函数对两张图片进行按权重混合,最后得到一个新的混合后的图像result,其中alpha表示第一张图片的权重,beta表示第二张图片的权重,0表示亮度权重。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解在Python中把一个图像叠加在另一个图像上 - Python技术站

(1)
上一篇 2023年3月25日
下一篇 2023年3月25日

相关文章

  • python import 引用上上上级包的三种方法

    针对“python import 引用上上上级包的三种方法”的问题,下面是完整的攻略流程: 方法一:使用相对导入 相对导入是通过使用点来表示从当前文件所在目录的相对路径导入模块或包。比如,我们有如下的文件结构: project/ |– pkg/ | |– foo.py | |– bar.py | |– __init__.py | |– app/ |…

    python 2023年6月3日
    00
  • python文件选择对话框的操作方法

    当我们需要在Python中进行文件操作时,有时会需要手动选择文件路径和文件名。此时,可以使用Python文件选择对话框,在GUI界面中方便快捷地进行文件选择。以下是Python文件选择对话框的操作方法攻略: 1. 导入模块 使用Python进行文件操作时,需要导入tkinter.filedialog模块,代码如下: from tkinter import f…

    python 2023年6月13日
    00
  • python实现的重启关机程序实例

    下面我将为您详细讲解如何实现“python实现的重启关机程序实例”。 1. 实现重启功能 首先,我们可以使用os.system函数来实现机器重启功能。具体步骤如下: 导入os模块 import os 调用os.system函数,执行restart命令 os.system("shutdown -r") 上述代码将会执行机器的重启操作。可以将…

    python 2023年5月23日
    00
  • Python实现的拉格朗日插值法示例

    下面是详细讲解“Python实现的拉格朗日插值法示例”的完整攻略。 1. 什么是拉格朗日插值法 拉格朗日插值法是一种通过已知数据点来估计未知数据点的方法。它基于拉格朗日多项式,通过构造一个多项式函数来逼近原始数据,从而实现插值。 2. 拉格朗日插值法原理 假设有n数据点$(x_1,y_1),(x_2,y_2),…,(x_n,y_n)$,其中$x_i$互不…

    python 2023年5月14日
    00
  • python数据处理实战(必看篇)

    Python数据处理实战攻略 介绍 在数据分析和机器学习领域中,数据的处理和清洗是非常重要的一个环节。Python作为一门高效而易学的编程语言,具有广泛的应用范围。本文将带领读者全面了解Python数据处理的实战技巧,以及如何用Python对各种类型的数据进行处理和清洗。 数据导入 首先需要导入所需的软件库,如Pandas和Numpy。Pandas提供了一个…

    python 2023年5月13日
    00
  • python 通过可变参数计算n个数的乘积方法

    当传入的参数数量不确定时,可使用可变参数,例如计算 n 个数的乘积。在 Python 中,使用可变参数可以通过在形参前加 * 来实现,例如 *args 表示任意多个无名参数。 以下是计算 n 个数的乘积的 Python 函数代码: def product(*args): """ 计算 n 个数的乘积 :param args: 任…

    python 2023年6月5日
    00
  • Python随机生成手机号、数字的方法详解

    你好,关于Python随机生成手机号、数字的方法,可以使用Python的random库来实现。下面是具体的方法步骤: 生成随机手机号 使用Python的random库中的randint方法生成1-9的随机数,然后再用一个循环生成10位数字即可获得一个基本的随机手机号。 import random phone_num = ‘1’ + "".…

    python 2023年6月3日
    00
  • python实现两个文件合并功能

    那么下面就为你详细解释一下“python实现两个文件合并功能”的完整攻略。 一、思路分析 在实现两个文件合并功能时,我们的基本思路是读取两个文件的内容,然后将它们合并为一个文件并保存。具体来讲,可以使用以下步骤实现: 定义两个文件的文件路径 定义合并后文件的文件路径和名称 打开两个文件并读取它们的内容 将两个文件的内容合并为一个字符串 创建一个新的文件,并将…

    python 2023年6月5日
    00
合作推广
合作推广
分享本页
返回顶部