如何读取OpenCV中的像素值?

时间:2014-05-09 04:13:15

标签: c++ opencv image-processing pixel

我正在尝试使用此代码计算我的二进制图像像素值:

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等)

有什么问题?我在绘画程序中画了一条黑线并保存图像,或者从网上下载二进制图像但我得到的结果相同!

我想当我使用二进制图像时,白色像素必须为0,黑色像素为255。

3 个答案:

答案 0 :(得分:2)

首先,您应该使用ucharunsigned char)而不是int来访问其像素。

cout时,您必须明确转换为其他类型,例如int才能正确打印,因为cout在打印unsigned char时它的值很奇怪大于127。否则,它将打印一些垃圾值(或没有),因为它只是一个 不可打印的 ASCII字符,无论如何都要打印。查看Why "cout" works weird for "unsigned char"?

cout << setw(10) << (int) img.at<uchar>(i,j);
                    ^^^^^        ^^^^^             

答案 1 :(得分:0)

尝试将其加载为CV_IMAGE_GRAYSCALE,并使用image.at< uchar>(y,x)访问像素值。

答案 2 :(得分:0)

您正在尝试访问整数值,而实际上您的mat是uchar。尝试将内部循环线更改为:

cout<<setw(10)<<img.at<uchar>(i,j);