学习一些算术运算对图像像加、减、位操作等
你可以通过opencv的函数cv2.add()或者简单的NumPy操作,res=img1+img2来叠加两张图片
这两个图像应该是相同的深度和类型,或第二个图像可以只是一个scalar标量值
这两种叠加方式是有区别的,cv2.add()是饱和/渗透运算,而Numpy是取模运算
多说无益,思考一下下面的例子:
>>> x = np.uint8([250])
>>> y = np.uint8([10])
>>> print cv2.add(x,y) # 250+10 = 260 => 255
[[255]]
>>> print x+y # 250+10 = 260 % 256 = 4
[4]
当你添加两个图像时,它会更明显。opencv函数将提供更好的结果。所以总是更好的坚持opencv函数
这也是一种图像叠加,但给上不同的权重会给人一种混合或透明的感觉,根据下面的公式添加图像
dst = a * img1 + b * img2 + y
a,b是权重,y一般给0
示例:
img1=cv2.imread('1.jpg')
img2=cv2.imread('2.jpg')
img=cv2.addWeighted(img1,0.7,img2,0.3,0)
关于图像的位操作,目的是为了将一个logo覆盖到另一个图片上
这包括按位 AND(与)、OR(或)、NOT(非)和XOR(异)运算。他们将非常有用,同时提取图像的任何部分,定义和工作与非矩形ROI等
二值化是取一个阀值,低于或高于这个阀值的就取黑色或白色,二值化后的图像只有黑色0和白色255两种颜色,二值化需要在灰度图像下操作。二值化非常有用。
示例:
img1=cv2.imread('143.jpg')
img2=cv2.imread('2.jpg')
rows,cols,channels=img2.shape
#获取感兴趣区域
roi=img1[0:rows,0:cols]
#灰度化
img2gray=cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)
#二值化
ret,mask=cv2.threshold(img2gray,10,255,cv2.THRESH_BINARY)
#图像颜色反转,非常好玩
mask_inv=cv2.bitwise_not(img1)
#像素融合,相当于sql中的and
#就是 2个数据都要先和mask按位和 然后再按位和
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
这一节还不甚了解,要加深学习再回来补充笔记