簡體   English   中英

如何在OpenCV中讀取像素值?

[英]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。

首先,您應該使用ucharunsigned char )類型而不是int類型訪問其像素。

當使用cout ,必須顯式轉換為其他類型,例如int才能正確打印它,因為當cout的值大於127時,當打印unsigned charcout會變得很奇怪。 否則,它將打印一些垃圾值 (或不打印任何內容),因為它只是一個不可打印的 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM