【发布时间】:2015-09-01 02:45:36
【问题描述】:
我是 openCV 的新手。我想读取二进制灰度图像。我在 matlab 中打印了像素值,它只有 0 和 1,但是当我在 openCV 中读取相同的图像时,像素值介于 0 和255(而不仅仅是 0 和 255)。我想以像素仅为 0 或 1(或 0 和 255)的方式读取图像。 这就是我读取图像并打印像素值的方式:
Mat watermarkImage;
watermarkImage = imread("C:\\path\\to\\image\\logo.png");
Mat wmrk = watermarkImage.clone();
Mat tmp2(64, 64, CV_32FC1);
resize(wmrk, wmrk , tmp2.size());
//wmrk.convertTo(wmrk,CV_32FC1, 1.0/255.0);
for(int i=0 ; i<64; i++)
{
for(int j=0 ; j<64 ; j++)
{
cout<<int(wmrk.at<uchar>(i,j))<<" ";
}
cout<<endl;
}
【问题讨论】:
-
如果你想将 0-255 的垫子转换为 0/1 垫子(1 = 不是零的所有东西?)你可以加载为 uchar 灰度,然后 tmp = image > 0(然后一切都是0 或 255)。然后除以 255
-
resize() 将进行(线性)插值。你将不得不再次阈值()它
-
@berak 除非你使用
INTER_NEAREST。 -
@beaker,-对。不幸的是,LINEAR 是 default - 所以让我们来吧:要么使用 INTER_NEAREST ,要么再次使用阈值。