opencv 输入参数的bitwise_and大小不匹配

tyg4sfes  于 2023-01-17  发布在  其他
关注(0)|答案(2)|浏览(244)

我尝试使用bitwise_and,以便根据阈值排除图像的所有其余部分,但当我尝试时,它给出:
OpenCV错误:binary_op文件/home/schirrel/Github/opencv/opencv-2.4.10/modules/core/src/arithm. cpp第1021行中的输入参数大小不匹配(该操作既不是“数组运算数组”(其中数组具有相同的大小和类型),也不是"数组运算标量“或”标量运算数组“),在抛出”cv::Exception“what()的示例后终止调用:/home/schirrel/Github/开放源码/开放源码-2.4.10/模块/内核/源代码/算法。cpp:1021:错误:(-209)该操作既不是“array op array”(其中数组具有相同的大小和类型),也不是“array op scalar”,也不是函数binary_op中的“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);
}

你能帮帮我吗?

v1uwarro

v1uwarro1#

您应该使用:

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);
avwztpqn

avwztpqn2#

使用openCV时,如果语法看起来正确,则与binary_op相关的一些错误可能是由于使用下面的示例语法时使用的维度不一致所致。

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

你可以在cam捕获或视频/图像加载后用下面的语法调整图像大小||其中,width和height是要使用的分辨率大小||例如HD(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))

相关问题