我正在尝试使用bitwise_and
来排除基于阈值的图像的所有其余部分,但是当我尝试它时会给出:
OpenCV错误:输入参数的大小不匹配(操作既不是'数组操作数组'(其中数组具有相同的大小和类型),也不是'array op scalar',也不是'标量操作数组')在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中的'标量操作数组'
我的代码是
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);
}
你能帮助我吗?
答案 0 :(得分:3)
您应该使用:
bitwise_and(src_gray, dst, res);
错误表示两个图片src
和dst
尺寸不相等,因为它们的频道数不同。
你也可以写:
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);
答案 1 :(得分:0)
在语法看起来正确的情况下使用 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))