我是openCV的新手。我想读取二进制灰度图像。我在matlab中打印的像素值只有0和1但是当我在openCV中读取相同的图像时,像素的值介于两者之间0和255(而不仅仅是0和255)。我想以像素只有0或1(OR 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 :(得分:1)
请尝试以下方法:
Mat watermarkImage;
// make sure you have a single channel image (grayscale):
watermarkImage = imread("C:\\path\\to\\image\\logo.png",CV_LOAD_IMAGE_GRAYSCALE);
Mat wmrk = watermarkImage .clone();
resize(wmrk, wmrk , cv::Size(64,64));
// create a binary image where each value is either 0 or 255
Mat mask = wmrk > 0; // or take any other threshold to mask values > thres
Mat binaryOnes = mask/255;
cout << binaryOnes<< endl;
/*
for(int i=0 ; i<wmrk.rows; i++)
{
for(int j=0 ; j<wmrk.cols ; j++)
{
cout<< (int)(wmrk.at<uchar>(i,j))<<" ";
}
cout<<endl;
}
*/
获取二进制图像的一种方法是应用阈值。在OpenCV中,二进制图像通常为0和255而不是0和1,但如果需要,可以轻松创建二进制图像并将值除以255.