bitwise_and 输入参数的大小不匹配

Posted

技术标签:

【中文标题】bitwise_and 输入参数的大小不匹配【英文标题】:bitwise_and sizes of input arguments do not match 【发布时间】:2016-01-07 20:28:11 【问题描述】:

我正在尝试使用bitwise_and 以根据阈值排除图像的所有其余部分,但是当我尝试它时:

OpenCV 错误:输入参数的大小不匹配(操作既不是“array op array”(其中数组具有相同的大小和类型),也不是“array op scalar”,也不是“scalar op array”)在 binary_op ,文件/home/schirrel/Github/opencv/opencv-2.4.10/modules/core/src/arithm.cpp,第1021行 在抛出 'cv::Exception' 的实例后调用终止 what(): /home/schirrel/Github/opencv/opencv-2.4.10/modules/core/src/arithm.cpp:1021: error: (-209) 该操作既不是'array op array'(其中数组有相同的大小和类型),也不是函数 binary_op 中的“array op scalar”,也不是“scalar op array”

我的代码是

Mat src, src_gray, dst;

int main()

    src = imread("robosoccer.jpg", 1);
    cvtColor(src, src_gray, CV_BGR2GRAY);
    threshold(src_gray, dst, 150, 255, 1);
    Mat res;
    bitwise_and(src, dst, res);
    imshow("AND", res);
    ("hold", res);
    waitKey(0);
    return (0);

你能帮帮我吗?

【问题讨论】:

【参考方案1】:

你应该使用:

bitwise_and(src_gray, dst, res);

该错误表示srcdst 这两个图像的尺寸不相等,因为它们的通道数不同。

你也可以写:

Mat res = src_gray & dst;

或:

Mat res = src_gray.clone();
res.setTo(Scalar(0), ~dst);

如果你需要彩色图片,你可以像@sturkmen suggested一样做

bitwise_and( src, src, res, dst );

或:

Mat res = src.clone();
res.setTo( Scalar( 0, 0, 0 ), ~dst);

【讨论】:

@sturkmen 感谢您的错字更正。我写了Scalar(0) 是为了与灰度sn-p 保持一致并产生一个全0 的标量,但Scalar(0,0,0) 可能更清晰。 欢迎您@Miki。 src.copyTo( res, dst ) 可以丰富您的回答。【参考方案2】:

在语法看起来正确的情况下使用 openCV 时与 binary_op 相关的大多数错误可能是由于使用以下示例语法时使用的尺寸不一致造成的。

imgInv = cv2.cvtColor() 
img = cv2.bitwise_and()
img = cv2.bitwise_or()

您可以在摄像头捕获或视频/图像加载后使用以下语法调整图像大小||其中宽度和高度是您要使用的分辨率大小||例如高清(720, 480)

cap = cv2.VideoCapture(0)
cap.set(3, width)
cap.set(4, height)

while True:  
     success, img = cap.read()
     img = cv2.resize(img, (width, height))

【讨论】:

以上是关于bitwise_and 输入参数的大小不匹配的主要内容,如果未能解决你的问题,请参考以下文章

xCode 中的 OpenCV 错误:输入参数的大小不匹配

cvcalcopticalflowbm opencv 2.4.7 中输入参数的大小不匹配

opencv-python addWeighted() 错误 - 输入参数的大小不匹配

OpenCV - 输入参数的大小不匹配 - addWeighted

openCV Mat问题“输入参数的大小不匹配”

OpenCV错误:bitwise_and抛出掩码和图像大小不同的错误