在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函数。我非常感谢您的帮助,我花了一天时间,不知道问题出在哪里。谢谢。