1、图像添加
import numpy as np
import cv2 as cv
你可以通过OpenCV的函数cv.add()或者简单的numpy操作res = img1+img2操作对两个图像进行相加。但是这两个图像应该有相同的深度、相同的类型或者第二个图像是一个标量。
OpenCV和Numpy的加操作是不同的。OpenCV添加是一个和操作,而Numpy添加是一个模操作。
x = np.uint8([250])
y = np.uint8([10])
print(cv.add(x, y)) # 250+10 = 260 => 255
print(x+y) # 250+10 = 260 % 256 = 4
[[255]]
[4]
2、图像混合
dst=α⋅img1+β⋅img2+γ
img1 = cv.imread('./images/wolf.jpg')
img2 = cv.imread('./images/logo.png')
res = cv.resize(img1, (82, 99)) #重新设置大小
dst = cv.addWeighted(res,0.7,img2,0.3,0)
cv.imshow('dst',dst)
cv.waitKey(0)
cv.destroyAllWindows()
3、按位操作
retval, dst = cv.threshold( src, thresh, maxval, type[, dst] )
该功能将固定级阈值应用于多通道阵列。 该函数通常用于从灰度图像(比较也可以用于此目的)中获取二值(二值)图像,或者用于消除噪声,即过滤掉值过小或过大的像素。 该函数支持多种阈值类型。 它们由类型参数确定。
src为输入数组(多通道);thresh为阈值;maxnal为使用THRESH_BINARY和THRESH_BINARY_INV阈值类型的最大值;type为阈值类型
输出结果为计算过得阈值
dst = cv.bitwise_not( src[, dst[, mask]] )
颠倒数组的每一位。
dst = cv.bitwise_and( src1, src2[, dst[, mask]] )
计算两个数组的按位连接(dst = src1&src2)计算两个数组或一个数组与标量的每元素按位连接。
mask:可选操作掩码,用于指定要更改的输出数组的元素。个人理解:下面的实例是将src图像和mask图像进行与操作,最后结果保存到mask图像上
# Load two images
img1 = cv.imread('./images/roi.jpg')
img2 = cv.imread('./images/logo.png')
# I want to put logo on top-left corner, So I create a ROI
rows,cols,channels = img2.shape
roi = img1[0:rows, 0:cols ]
# Now create a mask of logo and create its inverse mask also
img2gray = cv.cvtColor(img2,cv.COLOR_BGR2GRAY)
ret, mask = cv.threshold(img2gray, 10, 255, cv.THRESH_BINARY)
mask_inv = cv.bitwise_not(mask)
# Now black-out the area of logo in ROI
img1_bg = cv.bitwise_and(roi,roi,mask = mask_inv)
# Take only region of logo from logo image.
img2_fg = cv.bitwise_and(img2,img2,mask = mask)
# Put logo in ROI and modify the main image
dst = cv.add(img1_bg,img2_fg)
img1[0:rows, 0:cols ] = dst
cv.imshow('res',img1)
cv.waitKey(0)
cv.destroyAllWindows()