摘要:实现图像的叠加,需要综合运用图像阈值处理图像掩模位操作和图像加法的操作。使用位操作生成前景背景图像时,遮罩区域以外与进行自与操作,如果用自或操作参见程序注释语句的效果也是相同的。该方法通过固定阈值处理图像,将像素点的灰度值设为或。
两张图像直接进行加法运算后图像的颜色会改变,通过加权加法实现图像混合后图像的透明度会改变,都不能实现图像的叠加。
实现图像的叠加,需要综合运用图像阈值处理、图像掩模、位操作和图像加法的操作。
我们以 Lena 图像叠加 CVlogo 为例,讨论图像叠加的思路和步骤:
# 1.30 图像的叠加 img1 = cv2.imread("../images/imgLena.tif") # 读取彩色图像(BGR) img2 = cv2.imread("../images/logoCV.png") # 读取 CV Logo x, y = (0, 10) # 图像叠加位置 W1, H1 = img1.shape[1::-1] W2, H2 = img2.shape[1::-1] if (x + W2) > W1: x = W1 - W2 if (y + H2) > H1: y = H1 - H2 print(W1,H1,W2,H2,x,y) imgROI = img1[y:y+W2, x:x+H2] # 从背景图像裁剪出叠加区域图像 img2Gray = cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY) # img2: 转换为灰度图像 ret, mask = cv2.threshold(img2Gray, 175, 255, cv2.THRESH_BINARY) # 转换为二值图像,生成遮罩,LOGO 区域黑色遮盖 maskInv = cv2.bitwise_not(mask) # 按位非(黑白转置),生成逆遮罩,LOGO 区域白色开窗,LOGO 以外区域黑色 # mask 黑色遮盖区域输出为黑色,mask 白色开窗区域与运算(原图像素不变) img1Bg = cv2.bitwise_and(imgROI, imgROI, mask=mask) # 生成背景,imgROI 的遮罩区域输出黑色 img2Fg = cv2.bitwise_and(img2, img2, mask=maskInv) # 生成前景,LOGO 的逆遮罩区域输出黑色 # img1Bg = cv2.bitwise_or(imgROI, imgROI, mask=mask) # 生成背景,与 cv2.bitwise_and 效果相同 # img2Fg = cv2.bitwise_or(img2, img2, mask=maskInv) # 生成前景,与 cv2.bitwise_and 效果相同 # img1Bg = cv2.add(imgROI, np.zeros(np.shape(img2), dtype=np.uint8), mask=mask) # 生成背景,与 cv2.bitwise 效果相同 # img2Fg = cv2.add(img2, np.zeros(np.shape(img2), dtype=np.uint8), mask=maskInv) # 生成背景,与 cv2.bitwise 效果相同 imgROIAdd = cv2.add(img1Bg, img2Fg) # 前景与背景合成,得到裁剪部分的叠加图像 imgAdd = img1.copy() imgAdd[y:y+W2, x:x+H2] = imgROIAdd # 用叠加图像替换背景图像中的叠加位置,得到叠加 Logo 合成图像 plt.figure(figsize=(9,6)) titleList = ["1. imgGray", "2. imgMask", "3. MaskInv", "4. img2FG", "5. img1BG", "6. imgROIAdd"] imageList = [img2Gray, mask, maskInv, img2Fg, img1Bg, imgROIAdd] for i in range(6): plt.subplot(2,3,i+1), plt.title(titleList[i]), plt.axis("off") if (imageList[i].ndim==3): # 彩色图像 ndim=3 plt.imshow(cv2.cvtColor(imageList[i], cv2.COLOR_BGR2RGB)) # 彩色图像需要转换为 RGB 格式 else: # 灰度图像 ndim=2 plt.imshow(imageList[i], "gray") plt.show() cv2.imshow("imgAdd", imgAdd) # 显示叠加图像 imgAdd key = cv2.waitKey(0) # 等待按键命令
例程说明 1.30:
欢迎关注『Python 小白从零开始 OpenCV 学习课 @ youcans』 系列,持续更新中
Python 大白从零开始 OpenCV 学习课-1.安装与环境配置
Python 大白从零开始 OpenCV 学习课-2.图像读取与显示
Python 大白从零开始 OpenCV 学习课-3.图像的创建与修改
Python 大白从零开始 OpenCV 学习课-4.图像的叠加与混合
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/123166.html
摘要:完整例程图像的投影变换投影变换也称透视变换是建立两平面场之间的对应关系,将图片投影到一个新的视平面。提供了函数实现投影变换的操作。 【OpenCV 完整例程】34....
摘要:完整例程图像的缩放缩放只是调整图像的大小。也可以通过构造缩放变换矩阵,由函数计算变换后的缩放平移图像。缩放变换矩阵由以下公式描述由偏移量按上式构造平移变换矩阵,由函数可以计算变换后的平移图像。 ...
摘要:完整例程图像增强直方图匹配欢迎关注完整例程篇系列,持续更新中欢迎关注小白的学习课系列,持续更新中图像直方图是反映图像像素分布的统计表。直方图匹配又称为直方图规定化,是指将图像的直方图调整为规定的形状。 ...
摘要:完整例程图像灰度的线性变换欢迎关注完整例程篇系列,持续更新中欢迎关注小白的学习课系列,持续更新中线性灰度变换将原始图像灰度值的动态范围按线性关系扩展到指定范围或整个动态范围。 ...
摘要:从零开始学习课图像的几何变换本系列面向小白,从零开始实战解说项目实战。仿射变换仿射变换的特点是原始图像中的平行关系和线段长度比例关系保持不变。函数说明函数通过变换矩阵对图像进行仿射变换。 ...
阅读 2120·2021-11-12 10:35
阅读 3550·2021-11-12 10:34
阅读 2596·2021-09-22 15:14
阅读 623·2019-08-30 15:53
阅读 3052·2019-08-30 12:53
阅读 1158·2019-08-29 18:32
阅读 2622·2019-08-29 16:41
阅读 955·2019-08-26 13:40