OpenCV-像素运算

像素运算

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

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=src1alpha+src2beta+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)

参考链接:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咬着棒棒糖闯天下

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值