在OpenCV中将灰度图像转换为二进制图像

时间:2014-09-06 17:16:03

标签: opencv

我想知道下面的代码有什么问题,因为它只显示灰色图像的一部分为二进制图像!

cv::Mat gry = cv::imread("image_gray.jpg");

cv::Mat bin(gry.size(), gry.type());

for (int i=0; i<gry.rows ;i++)

  {

   for (int j=0; j<gry.cols ;j++) 

   {
      if (gry.at<uchar>(i,j)>=100)

           bin.at<uchar>(i,j)=255;
      else 
          bin.at<uchar>(i,j)=0;

   }

  }

cv::namedWindow("After", cv::WINDOW_AUTOSIZE);

cv::imshow("After",bin);

waitKey(0);

cvDestroyWindow( "After" );

imwrite("binary_image.bmp", bin);

2 个答案:

答案 0 :(得分:2)

您的问题出在cv::imread 该函数假定它应该将图像加载为彩色图像,如果要将其作为garyscale图像加载,则应按如下方式调用该函数:

cv::imread(fileName, CV_LOAD_IMAGE_GRAYSCALE)

顺便说一下,你只看到部分图像的原因是因为图像比每个像素的uchar大。 (并且你最终只迭代它的一部分)。

答案 1 :(得分:0)

如果使用OpenCV函数会更容易:

cv::threshold(image_src, image_dst, 200, 255, cv::THRESH_BINARY);

这段代码设置为黑色值(255)所有具有原始值200的像素。

相关问题