opencv学习笔记(九):图像的算术操作(Ⅱ)

opencv学习笔记(九):图像的算术操作( I I II II

图像的逻辑运算

这里要介绍掩膜(mask)的概念,按照字面意思来理解就是用来掩盖的薄膜。掩膜的作用有很多,这里进行简单的介绍。

用来提取要捕获的区与区域:用预先制作的感兴趣区域(ROI)掩膜与待处理图像相乘(即逻辑与运算),得到感兴趣区域图像,感兴趣区域内图像值保持不变,而感兴趣区域外图像值都为 0。

起屏蔽作用:用掩膜对图像上的某些区域进行屏蔽,使其不参加处理,用来减少计算量;也可仅对屏蔽区做处理或统计。

进行结构特征提取:用相似性变量或图像匹配方法检测和提取图像中与掩膜相似的结构特征。

特殊形状图像的制作:用一个想要的形状的掩膜进行图像的覆盖(类似橡皮泥的模具)。

在所有图像基本运算的操作函数中,凡是带有掩膜的处理函数,其掩膜都参与运算(输入图像在进行函数逻辑运算之后再与掩膜图像或矩阵进行相关的运算)。

此处通过为图片添加logo来体会各种逻辑运算以及掩膜的作用,逻辑思路如下:

import cv2
import numpy as np

img1 = cv2.imread('4.png')
img2 = cv2.imread('opencv_logo.jpg')

# 我想把logo放在左上角,所以我创建了ROI
rows,cols,channels = img2.shape
roi = img1[0:rows, 0:cols ]
# 现在创建logo的掩码,并同时创建其相反掩码
img2gray = cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)
ret, mask = cv2.threshold(img2gray, 180, 255, cv2.THRESH_BINARY)
mask_inv = cv2.bitwise_not(mask)
# 现在将ROI中logo的区域涂黑
img1_bg = cv2.bitwise_and(roi,roi,mask = mask)
# 仅从logo图像中提取logo区域
img2_fg = cv2.bitwise_and(img2,img2,mask = mask_inv)
# 将logo放入ROI并修改主图像
dst = cv2.add(img1_bg,img2_fg)
img1[0:rows, 0:cols ] = dst
cv2.imshow('res',mask)
cv2.waitKey(0)
cv2.destroyAllWindows() 

两张原图如下:
在这里插入图片描述
在这里插入图片描述

运行结果如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/zxt510001/article/details/126961350