嗨我想建立简单的颜色识别程序。我拍了一张图片(黄色&粉色),并将其转换为HSV色彩空间。然后使用阈值来识别黄色区域。我得到输出(黑色图像)。我想让黄色区域充满色彩,用黑色休息。OpenCV颜色识别
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
的其他值。
我需要放什么样的价值?我错过了什么?
嗨,我使用OpenCV 2.1.0.3。即时通讯使用Ubuntu的1104,64位。在突触中它显示这是最新版本。我认为64位的存储库不会像32位那样定期更新。我插入了行,我得到了值** H:30,S:255,V:255 ** – Netro
我刚刚意识到你的标量中有第四个值。该第四个值的行为可能是未定义的,因为它是3通道图像。你应该将该行更改为'cvInRangeS(imgHsv,cvScalar(25,80,80),cvScalar(34,255,255),imgThreshold);' – SSteve
好吧,我刚刚将阈值的上限范围增加到255(256) 35,256,256,256),它工作。 ** cvInRangeS(imgHsv,cvScalar(25,245,245,0),cvScalar(35,256,256,256),imgThreshold); **。我应该注意到** cvInRangeS/* dst(idx)= lower <= src(idx)
Netro