我无法在OpenCV中摆脱这个错误:
OpenCV错误:输入参数的大小不匹配(操作是 既不是'array op array'(其中数组具有相同的大小和类型), 也不是'array op scalar',也不是'标量运算数组')
我发现Mat.type();
我的所有Mat(img)
都有类型16,但在函数inRange
之后我的img3
将类型更改为0.然后我无法使用函数bitwise_and
因为它的类型不同。
如何将其转换为相同类型?
Mat img1 = imread(argv[1], 1);
Mat img2, img3, img4;
cvtColor(img1, img2, CV_BGR2HSV);
GaussianBlur(img2, img2, Size(15,15), 0);
inRange(img2, Scalar(h_min_min,s_min_min,v_min_min), Scalar(h_max_min,s_max_min,v_max_min), img3); // now img3 changed type to 0
bitwise_and(img1, img3, img4); // img1.type()=16, img3.type()=0 ERROR
答案 0 :(得分:3)
这是正常的,因为inRange
返回1通道掩码(每个像素的值),因此要执行按位操作,只需将掩码转换回3通道图像:
cvtColor(img3,img3,CV_GRAY2BGR);
bitwise_and(img1, img3, img4);// now both images are CV_8UC3 (=16)
编辑:正如Berak所说,要更改必须使用的频道数cvtColor
,而不是Mat::convertTo
。对不起。