嗨,我正在尝试建立一个简单的颜色识别程序。我已经采取了一个图像(黄色和粉红色)和转换它在HSV颜色空间。然后利用阈值识别黄色区域。我得到输出(黑色图像)。我要黄色区域填充,而颜色和黑色休息。在
IplImage *imgRead= cvLoadImage("yellow.jpeg",CV_LOAD_IMAGE_COLOR);
if(!imgRead) {
fprintf(stderr, "Error in reading image\n");
exit(1);
}
IplImage *imgHsv = cvCreateImage(cvGetSize(imgRead),8, 3);
cvCvtColor(imgRead, imgHsv,CV_BGR2HSV);
IplImage *imgThreshold = cvCreateImage(cvGetSize(imgRead),8, 1);
cvInRangeS(imgHsv, cvScalar(25, 80, 80,80), cvScalar(34, 255, 255,255), imgThreshold);
cvShowImage("image",imgThreshold);
cvWaitKey(0);
在上面的代码中,我计算了黄色的HSV值为30。(在gimp中,黄色的hsv值为60)。在cvInRangeS
中,除了色调值之外,我不确定如何为cvScalar
指定其他值。在
我需要输入什么值?我有遗漏什么吗?在
我运行了你的代码,运行得很好。也许你形象中的黄色并不像你想象的那么黄。在
编辑:另一个潜在的区别是我使用的是opencv2.3。你用的是哪个版本?在
好的,再来一次编辑:你有没有试着看看你的黄色数值?这将给你一个明确的答案,你应该在cvInRangeS中使用什么值。在调用cvCvtColor后添加以下两行:
对于我的形象,我得到了:
^{pr2}$所以你的代码对我有用。在
我想你现在遇到的问题是由于HSV数据的缩放以适应8位。正常情况下,我确信您在使用GIMP时注意到HSV等级如下:
但是,OpenCV按如下方式重新映射这些值:
这就是为什么您计算的色调值是30而不是60。因此,要过滤掉除黄色以外的所有颜色,
cvInRangeS
调用如下所示:第四个通道不用于HSV。这个调用将给你10计数噪声在你的颜色检测器阈值为每个维度。在
如前所述,您的阈值应该可以工作,但是您可能需要扩展阈值边界来捕捉图像中的黄色。在
希望有帮助!在
相关问题 更多 >
编程相关推荐