【发布时间】:2016-10-31 02:57:08
【问题描述】:
我尝试运行以下代码:
#include<opencv\cv.h>
#include<opencv\highgui.h>
using namespace cv;
int main() {
VideoCapture cap;
cap.open(0);
while (1) {
Mat src;
Mat threshold;
cap.read(src);
inRange(src, Scalar(0, 0, 0), Scalar(255, 0, 0), threshold);
imshow("thr", threshold);
imshow("hsv", src);
waitKey(33);
}
return 0;
}
但它似乎没有过滤,因为我运行代码时只出现一个空白窗口。
如何让该代码检测红色?
【问题讨论】:
-
你能正确看到你的源图像吗?还是黑窗?
-
谢谢回复,源图我看清楚了。
-
您忘记将
src图像转换为 hsv ;D 此外,在 OpenCV 中使用 BGR,而不是 RGB,因此您对蓝色通道进行了阈值处理。因此,在 BGR 中,您的阈值应类似于:inRange(src, Scalar(0, 0, 0), Scalar(50, 50, 255), threshold);更好地使用 HSV 颜色空间,请参阅副本 -
感谢您的回复,我尝试使用您提供的点赞中的建议,但是,它也过滤并显示了许多其他原本不是红色的捕获对象,有什么方法可以使过滤更多准确的?顺便说一句,为什么我不能使用:inRange(src, Scalar(0, 0, 0), Scalar(0, 0, 255), threshold);?
标签: c++ opencv color-detection