- 像素运算
- cv2.add
- cv2.subtract
- cv2.multiply
- cv2.divide
- cv2.bitwise_and
- cv2.bitwise_or
- cv2.bitwise_not
- cv2.bitwise_xor
- 掩膜
- cv2.addWeighted
- 示例
- 示例
- ==错误记录==
注意:
需要两张图片大小格式完全一样
两张图片相加
add(src1, src2[, dst[, mask[, dtype]]]) -> dst
注意:
大于255的使用255计数
两张图片相减
subtract(src1, src2[, dst[, mask[, dtype]]]) -> dstcv2.multiply
两张图片相乘(点乘)
multiply(src1, src2[, dst[, scale[, dtype]]]) -> dst
图1:
图2:
相乘结果:
注意:
因为Linux这张图是抗锯齿的,边缘经过光滑处理。黑白图像边缘并不完全是黑白的。
两张图片相除
divide(src1, src2[, dst[, scale[, dtype]]]) -> dstcv2.bitwise_and
对像素的二进制数据进行“与” *** 作
bitwise_and(src1, src2[, dst[, mask]]) -> dstcv2.bitwise_or
对像素的二进制数据进行“或” *** 作
bitwise_or(src1, src2[, dst[, mask]]) -> dstcv2.bitwise_not
对像素的二进制数据进行“非” *** 作
bitwise_not(src[, dst[, mask]]) -> dst
注意:
bitwise_not()只需要三个参数
对像素的二进制数据进行“异或” *** 作
bitwise_xor(src1, src2[, dst[, mask]]) -> dst掩膜
图像掩膜,是用选定的图像、图形或物体,对处理的图像(全部或局部)进行遮挡,来控制图像处理的区域或处理过程。
数字图像处理中,掩模为二维矩阵数组,有时也用多值图像,图像掩模主要用于:
- 提取感兴趣区,用预先制作的感兴趣区掩模与待处理图像相乘,得到感兴趣区图像,感兴趣区内图像值保持不变,而区外图像值都为0。
- 屏蔽作用,用掩模对图像上某些区域作屏蔽,使其不参加处理或不参加处理参数的计算,或仅对屏蔽区作处理或统计。
- 结构特征提取,用相似性变量或图像匹配方法检测和提取图像中与掩模相似的结构特征。
计算两个数组的加权和,将两个图片进行重叠 *** 作
addWeighted(src1, alpha, src2, beta, gamma[, dst[, dtype]]) -> dst
d s t = s r c 1 ∗ a l p h a + s r c 2 ∗ b e t a + g a m m a dst = src1*alpha + src2*beta + gamma dst=src1∗alpha+src2∗beta+gamma
示例修改图片对比度、亮度
def contrast_brightness(image, constract, brightness): """ 修改图片的对比度与亮度,参数分别为:第一张图,第一张图权重,第二张图,第二张图权重,增强的亮度 """ h, w, ch = image.shape mask = np.zeros([h, w, ch], image.dtype) # 图像混合,参数分别为:第一张图,第一张图权重,第二张图,第二张图权重,增强的亮度 dst = cv.addWeighted(image, constract, mask, 1 - constract, brightness) cv.imshow("contrast_brightness", dst)
结果:
示例从视频中提取指定颜色范围,彩色
def extract_object_color(): """从视频中提取指定颜色范围,彩色""" capture = cv.VideoCapture("car.mp4") while True: ret, frame = capture.read() if not ret: break hsv = cv.cvtColor(frame, cv.COLOR_RGB2HSV) lower_hsv = np.array([35, 43, 46]) # hsv的最小值 upper_hsv = np.array([77, 255, 255]) # hsv的最大值 # 用inRange函数提取指定颜色范围,这里是对hsv来处理 mask = cv.inRange(hsv, lowerb=lower_hsv, upperb=upper_hsv) dst = cv.bitwise_and(frame, frame, mask=mask) # cv.imshow("mask", mask) cv.imshow("dst", dst) keyboard = cv.waitKey(40) # 40ms一帧 if keyboard == 27: break
结果:
mask = cv.inRange(hsv, lowerb=lower_hsv, upperb=upper_hsv) dst = cv.bitwise_and(frame, frame, mask)
这样会出不来结果,原因是函数有四个参数,如果直接写mask,位置传参会错误,需要对mask进行说明。
如下:
mask = cv.inRange(hsv, lowerb=lower_hsv, upperb=upper_hsv) dst = cv.bitwise_and(frame, frame, mask=mask)
参考链接:
- OpenCV之bitwise_and、bitwise_not等图像基本运算及掩膜
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)