OpenCV 逻辑运算 mask参数

11 篇文章 1 订阅
7 篇文章 1 订阅

OpenCV中的四种逻辑运算:

与运算:

cv2.bitwise_and(src1, src2[, dst[, mask]]);

或运算:

cv2.bitwise_or(src1, src2[, dst[, mask]]);

非运算:

cv2.bitwise_not(src1, src2[, dst[, mask]]);

异或运算:

cv2.bitwise_xor(src1, src2[, dst[, mask]]);

Mask

@param mask optional operation mask, 8-bit single channel array, that . specifies elements of the output array to be changed.

mask掩码/掩模,处理图片时需创建一张与原图一致的黑白图,对图像感兴趣区域进行处理。 使用 src1 和 src2 执行了对应的逻辑运算之后,再与mask做与运算。

如果结果是True,取原图的值,如果是False,值就统一是0
在这里插入图片描述

import cv2 
import numpy as np

# introduce picture
img = cv2.imread("./xxx.jpeg")

# design logo
logo = np.zeros((200,200,3),np.uint8)
logo[20:120,20:120] = [255,192,18]
logo[80:180,80:180] = 255
# cv2.imshow("logo",logo)

# add mask 
# mask = np.zeros((200,200,3),np.uint8) #错误写法 不应该使用3通道
mask = np.zeros((200,200),np.uint8)

mask[20:120,20:120] = 255
mask[80:180,80:180] = 255
#cv2.imshow("mask",mask)

# setting logo locationg in img
roi = dog[:200,:200]
#cv2.imshow("roi",roi)

m = cv2.bitwise_not(mask)
tmp = cv2.bitwise_and(roi,roi,mask=m)
#cv2.imshow("tmp",tmp)

dst = cv2.add(tmp,logo)

cv2.imshow("img",img)
cv2.waitKey(0)
cv2.destroyAllWindows()
# add mask 
mask = np.zeros((200,200),np.uint8)

创建掩码时,这里不能写成np.zeros((200,200,3),np.uint8),否则会报以下错误。
原因是mask必须为单通道。

error Traceback (most recent cll last) <ipython-input-18-6785031a9767> in <module>() 28 m = cv2.bitwise_not(mask) 29 ---> 30 tmp = cv2.bitwise_and(roi,roi,mask=m) 31 cv2.imshow("tmp",tmp) 32 error: OpenCV(4.5.3) /private/var/folders/24/8k48jl6d249_n_qfxwsl6xvm0000gn/T/pip-req-build-ucsrqn3m/opencv/modules/core/src/arithm.cpp:230: error: (-215:Assertion failed) (mtype == CV_8U || mtype == CV_8S) && _mask.sameSize(*psrc1) in function 'binary_op'
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Cmy_CTO

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

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

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

打赏作者

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

抵扣说明:

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

余额充值