为什么我的过滤图像(应该是二进制)仍然包含彩色部分?(OpenCV in C ++)

时间:2015-06-24 05:52:06

标签: c++ opencv

我在两个图像之间做了区别,并将结果与​​“标准”图像进行比较。通过使用命令阈值,值小于0的像素应为黑色,而具有正值的像素应为白色。但是,在此过程之后,图像仍然包含彩色像素,如红色,黄色等。

threshold(Initial, Final, 0, 255, THRESH_BINARY);

我未能弄清楚彩色像素的来源,谁都有一些想法?非常感谢。

2 个答案:

答案 0 :(得分:2)

您是否先对图像进行灰度图像处理?如果没有,您将在二值化后在图像中看到各种R G B颜色。

// C
IplImage *im_rgb  = cvLoadImage("image.jpg");
IplImage *im_gray = cvCreateImage(cvGetSize(im_rgb),IPL_DEPTH_8U,1);
cvCvtColor(im_rgb,im_gray,CV_RGB2GRAY);

// C++
Mat im_rgb  = imread("image.jpg");
Mat im_gray;
cvtColor(im_rgb,im_gray,CV_RGB2GRAY);

据我所知,您必须将其转换为灰度以将其二值化以获得黑白像素。

答案 1 :(得分:1)

根据http://docs.opencv.org/modules/imgproc/doc/miscellaneous_transformations.html?highlight=threshold#threshold

  

该函数将固定级阈值应用于单通道数组

因此您需要先将图像转换为灰度以获得准确的转换