我正在尝试使用以下代码来计算二进制图像像素值:
int main()
{
Mat img;
img=imread("/home/2b.jpeg", CV_LOAD_IMAGE_UNCHANGED);
namedWindow("win", WINDOW_AUTOSIZE);
imshow("win", img);
for(int i=0; i< img.rows ;i++)
{
for(int j=0; j< img.cols ; j++)
{
cout<<setw(10)<<img.at<int>(i,j);
}
cout<<endl<<endl<<endl;
}
waitKey(0);
return 0;
}但是我得到了三种类型的值: 0,-1和一些大的不同的数字,如(24342234,1324244242,等等)
有什么问题吗?我画了一条黑线在油漆程序和保存图像,或下载二值图像从互联网,但我得到相同的结果!
我想,当我使用二进制图像时,白色像素必须是0,黑色像素必须是255。
发布于 2014-05-09 04:47:49
首先,您应该使用uchar (unsigned char)类型而不是int来访问它的像素。
当cout时,您必须显式地转换为其他类型,如int,以便正确地打印它,因为当cout的值大于127时,在打印unsigned char时会很奇怪。否则,它将打印一些垃圾值(或任何垃圾值),因为它只是一个不可打印的 ASCII字符,它无论如何都要打印出来。看看Why "cout" works weird for "unsigned char"?。
cout << setw(10) << (int) img.at<uchar>(i,j);
^^^^^ ^^^^^ 发布于 2014-05-09 04:27:28
尝试以CV_IMAGE_GRAYSCALE的形式加载它,并使用image.at< uchar>(y,x)访问像素值。
发布于 2014-05-09 04:35:33
您正在尝试访问整数值,而实际上您的垫子是uchar。尝试将内部循环行更改为:
cout<<setw(10)<<img.at<uchar>(i,j);https://stackoverflow.com/questions/23556489
复制相似问题