繁体   English   中英

OpenCV(4.0.0)Python错误:( - 15:断言失败)(mtype == CV_8U || mtype == CV_8S)&& _mask.sameSize(* psrc1)函数'cv :: binary_op'

[英]OpenCV(4.0.0) Python Error: (-215:Assertion failed) (mtype == CV_8U || mtype == CV_8S) && _mask.sameSize(*psrc1) in function 'cv::binary_op'

我试图使用opencv bitwise-not在图像上应用蒙版。 如果我在灰度模式下读取原始图像和蒙版图像,我就能够实现这个结果,但它不适用于3通道图像。

在函数cv :: binary_op中读过这个帖子OpenCV Python错误:错误:(-215)(mtype == CV_8U || mtype == CV_8S)&& _mask.sameSize(* psrc1)但我的问题不是数组的形状或掩码不是uint8格式。

import cv2
import numpy as np 

img = cv2.imread("Original.png") # original image, shape 544,480,3, dtype uint8
label = cv2.imread("Mask.png") # black and white mask,shape 544,480,3, dtype uint 8
shape = img.shape # 544,480,3
black_background = np.zeros(shape=shape, dtype=np.uint8)
result = cv2.bitwise_not(img,black_background,mask=label) # this is where error occurs
cv2.imwrite("masked.png",result)

我希望输出是用标签掩盖的原始图像,我得到错误核心

OpenCV(4.0.0) C:\projects\opencv-python\opencv\modules\core\src\arithm.cpp:245: error: (-215:Assertion failed) (mtype == CV_8U || mtype == CV_8S) && _mask.sameSize(*psrc1) in function 'cv::binary_op'

如错误提示,问题实际上是掩码形状。 来自文档

mask - 可选操作掩码,8位单通道数组,指定要更改的输出数组的元素。

您的label是3通道图像,不兼容; 这就是为什么灰度工作的原因,但是因为你的Mask.png实际上是一个黑白图像你应该毫无后顾之忧:

label = cv2.imread("Mask.png", cv2.IMREAD_GREYSCALE)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM