图像加法
可以通过opencv函数cv.add()或通过numpy操作res=img1+img2添加两个图像。两个图像应具有相同的深度和类型,或者第二个图像可以只是一个标量值。
注意:opencv加法和Numpy加法之间有区别。Opencv加法是饱和运算,而Numpy加法是模运算。
import numpy as np import cv2 as cv x=np.uint8([[10]]) y=np.uint8([[255]]) print(cv.add(x,y)) # [[255]] 相当于 10+255的值如果大于255,则结果为255,反之为相加的值 print(x+y) # [[9]] 相当于 (10+255)%256
图像融合
这也是图像加法,但是对图像赋予不同的权重,以使其具有融合或透明的感觉。
G(x)=(1-alpha)f_0(x)+alpha f_1(x)
import cv2 as cv img1=cv.imread('./images/apple.jpg') img2=cv.imread('./images/opencv.png') # img2.resize((256,256,3)) img1.resize((400,320,3)) img2.resize((400,320,3)) print(img1.shape) print(img2.shape) # 两张图像必须具有相同的深度 img=cv.addWeighted(img1,0.2,img2,0.8,0) cv.imshow('img',img) cv.waitKey(0) cv.destroyAllWindows()
按位运算
这包括按位AND、OR、NOT和XOR操作,分别对应cv.bitwise_and()、cv.bitwise_or()、cv.bitwise_not()和cv.bitwise_xor()方法。
import cv2 as cv # 加载两张图片 img1=cv.imread('./images/apple.jpg') img2=cv.imread('./images/lena.jpeg') print(img1.shape) print(img2.shape) rows,cols,chanel=img2.shape roi=img2[0:rows,0:cols] # 颜色空间转换 img2gray=cv.cvtColor(img2,cv.COLOR_BGR2GRAY) # 由于没有小于10的数据,所以mask为全白图片,数据为255 ret,mask=cv.threshold(img2gray,10,255,cv.THRESH_BINARY) cv.imshow('mask',mask) # not运算后,mask_inv为全黑图片,数据为0 mask_inv=cv.bitwise_not(mask) cv.imshow('mask_inv',mask_inv) # and运算后,数据全为0,全黑 img1_bg=cv.bitwise_and(roi,roi,mask=mask_inv) # and运算后,数据为图片数据,保持不变 img2_fg=cv.bitwise_and(img2,img2,mask=mask) print(img1_bg.shape) print(img2_fg.shape) cv.imshow('img1_bg',img1_bg) cv.imshow('img2_fg',img2_fg) # 饱和运算,dst还是原图数据 dst=cv.add(img1_bg,img2_fg) img1[0:rows,0:cols]=dst cv.imshow('res',img1) cv.waitKey(0) cv.destroyAllWindows()
按位运算符对图像进行掩码操作,通常用于提取或修改图像的特定区域。
- 与运算(cv.bitwise_and):用于提取两个图像的共同区域。
- 或运算(cv.bitwise_or):用于合并两个图像
- 非运算(cv.bitwise_not):用于对图像进行反转
- 异或运算(cv.bitwise_xor):用于图像的对称差值。
posted on
浙公网安备 33010602011771号