图像加法

可以通过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()

 按位运算符对图像进行掩码操作,通常用于提取或修改图像的特定区域。

  1. 与运算(cv.bitwise_and):用于提取两个图像的共同区域。
  2. 或运算(cv.bitwise_or):用于合并两个图像
  3. 非运算(cv.bitwise_not):用于对图像进行反转
  4. 异或运算(cv.bitwise_xor):用于图像的对称差值。
 posted on 2024-05-02 10:23  会飞的金鱼  阅读(38)  评论(0)    收藏  举报