[英]How can I read the pixel values in OpenCV?
我正在嘗試此代碼通過此代碼計算我的二進制圖像像素值:
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;
}
但是我得到3種類型的值:0,-1和一些大的不同數字,例如(24342234,1324244242等)
問題是什么? 我在繪制程序中畫了一條黑線並保存了圖像,或者從Internet下載了二進制圖像,但是得到了相同的結果!
我想當我使用二進制圖像時,白色像素必須為0,黑色像素必須為255。
首先,您應該使用uchar
( unsigned char
)類型而不是int
類型訪問其像素。
當使用cout
,必須顯式轉換為其他類型,例如int
才能正確打印它,因為當cout
的值大於127
時,當打印unsigned char
時cout
會變得很奇怪。 否則,它將打印一些垃圾值 (或不打印任何內容),因為它只是一個不可打印的 ASCII字符 ,無論如何都會被打印。 看看為什么“ cout”對於“ unsigned char”很奇怪? 。
cout << setw(10) << (int) img.at<uchar>(i,j);
^^^^^ ^^^^^
嘗試將其加載為CV_IMAGE_GRAYSCALE,並使用image.at< uchar>(y,x)
訪問像素值。
實際上,您的墊子是uchar時,您正在嘗試訪問整數值。 嘗試將內部循環線更改為:
cout<<setw(10)<<img.at<uchar>(i,j);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.