OpenCV-像素运算

OpenCV-像素运算,第1张

OpenCV-像素运算

文章目录
  • 像素运算
    • cv2.add
    • cv2.subtract
    • cv2.multiply
    • cv2.divide
    • cv2.bitwise_and
    • cv2.bitwise_or
    • cv2.bitwise_not
    • cv2.bitwise_xor
    • 掩膜
    • cv2.addWeighted
    • 示例
    • 示例
    • ==错误记录==

像素运算

注意:
需要两张图片大小格式完全一样

cv2.add

两张图片相加

add(src1, src2[, dst[, mask[, dtype]]]) -> dst

注意:
大于255的使用255计数

cv2.subtract

两张图片相减

subtract(src1, src2[, dst[, mask[, dtype]]]) -> dst
cv2.multiply

两张图片相乘(点乘)

multiply(src1, src2[, dst[, scale[, dtype]]]) -> dst

图1:

图2:

相乘结果:

注意:
因为Linux这张图是抗锯齿的,边缘经过光滑处理。黑白图像边缘并不完全是黑白的。

cv2.divide

两张图片相除

divide(src1, src2[, dst[, scale[, dtype]]]) -> dst
cv2.bitwise_and

对像素的二进制数据进行“与” *** 作

bitwise_and(src1, src2[, dst[, mask]]) -> dst
cv2.bitwise_or

对像素的二进制数据进行“或” *** 作

bitwise_or(src1, src2[, dst[, mask]]) -> dst
cv2.bitwise_not

对像素的二进制数据进行“非” *** 作

bitwise_not(src[, dst[, mask]]) -> dst

注意:
bitwise_not()只需要三个参数

cv2.bitwise_xor

对像素的二进制数据进行“异或” *** 作

bitwise_xor(src1, src2[, dst[, mask]]) -> dst
掩膜

图像掩膜,是用选定的图像、图形或物体,对处理的图像(全部或局部)进行遮挡,来控制图像处理的区域或处理过程。

数字图像处理中,掩模为二维矩阵数组,有时也用多值图像,图像掩模主要用于:

  1. 提取感兴趣区,用预先制作的感兴趣区掩模与待处理图像相乘,得到感兴趣区图像,感兴趣区内图像值保持不变,而区外图像值都为0。
  2. 屏蔽作用,用掩模对图像上某些区域作屏蔽,使其不参加处理或不参加处理参数的计算,或仅对屏蔽区作处理或统计。
  3. 结构特征提取,用相似性变量或图像匹配方法检测和提取图像中与掩模相似的结构特征。
cv2.addWeighted

计算两个数组的加权和,将两个图片进行重叠 *** 作

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等图像基本运算及掩膜

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4655233.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-06
下一篇 2022-11-06

发表评论

登录后才能评论

评论列表(0条)

保存