首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何读取OpenCV中的像素值?

如何读取OpenCV中的像素值?
EN

Stack Overflow用户
提问于 2014-05-09 04:13:14
回答 3查看 1.6K关注 0票数 1

我正在尝试使用以下代码来计算二进制图像像素值:

代码语言:javascript
运行
复制
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。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-05-09 04:47:49

首先,您应该使用uchar (unsigned char)类型而不是int来访问它的像素。

cout时,您必须显式地转换为其他类型,如int,以便正确地打印它,因为当cout的值大于127时,在打印unsigned char时会很奇怪。否则,它将打印一些垃圾值(或任何垃圾值),因为它只是一个不可打印的 ASCII字符,它无论如何都要打印出来。看看Why "cout" works weird for "unsigned char"?

代码语言:javascript
运行
复制
cout << setw(10) << (int) img.at<uchar>(i,j);
                    ^^^^^        ^^^^^             
票数 2
EN

Stack Overflow用户

发布于 2014-05-09 04:27:28

尝试以CV_IMAGE_GRAYSCALE的形式加载它,并使用image.at< uchar>(y,x)访问像素值。

票数 0
EN

Stack Overflow用户

发布于 2014-05-09 04:35:33

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

代码语言:javascript
运行
复制
cout<<setw(10)<<img.at<uchar>(i,j);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23556489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档