gpt4 book ai didi

c++ - OpenCV inRange 改变 Mat 类型

转载 作者:太空宇宙 更新时间:2023-11-03 22:13:18 24 4
gpt4 key购买 nike

我无法摆脱 OpenCV 中的这个错误:

OpenCV Error: Sizes of input arguments do not match (The operation is neither 'array op array' (where arrays have the same size and type), nor 'array op scalar', nor 'scalar op array')

我发现 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

最佳答案

这是正常的,因为 inRange 返回 1 channel 掩码(每个像素的值),因此要执行按位运算,只需将掩码转换回 3 channel 图像即可:

cvtColor(img3,img3,CV_GRAY2BGR);
bitwise_and(img1, img3, img4);// now both images are CV_8UC3 (=16)

编辑:正如 Berak 所说,要更改 channel 数,您必须使用 cvtColor,而不是 Mat::convertTo。对此感到抱歉。

关于c++ - OpenCV inRange 改变 Mat 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28150724/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com