Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在OpenCV中将灰度图像转换为二值图像_Opencv - Fatal编程技术网

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

在OpenCV中将灰度图像转换为二值图像,opencv,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)

我想知道下面代码中的问题是什么,因为它只显示部分灰度图像作为二进制图像

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);
cv::Mat gry=cv::imread(“image_gray.jpg”);
cv::材料箱(gry.size(),gry.type());

对于(int i=0;i您的问题在于
cv::imread

该函数假定应将图像加载为彩色图像,如果要将其加载为garyscale图像,应按如下方式调用该函数:

cv::imread(fileName, CV_LOAD_IMAGE_GRAYSCALE)

顺便说一句,您只看到图像的一部分的原因是,对于每个像素,图像都比uchar大。(并且您最终只对其中的一部分进行了迭代)。

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

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

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

您是否考虑过简单地使用
Mat bin=gray>=100;
?可能更快更干净。可能的重复非常感谢您的回答lwillnotexist Idonotexist,但我是一名学生,我的导师希望一步一步地做:(Basilev感谢您,但这与我希望在他们的案例中使用内置函数来进行转换不同,但在我的案例中,我通过循环来进行转换非常感谢您的帮助。正如您所说,问题在于imread函数。我非常感谢您的帮助,我花了一天时间,不知道问题出在哪里。谢谢。