【问题标题】:Open CV: Acces pixels of grayscale imageOpencv:访问灰度图像的像素
【发布时间】:2014-12-14 20:30:11
【问题描述】:

我知道这个问题可以为专家解答,但我想在 openCV 中访问灰度图像的像素。我正在使用以下代码:

cv::Mat img1 = cv::imread("bauckhage.jpg", CV_LOAD_IMAGE_GRAYSCALE);

现在,如果我想使用img1.at<float>(255,255) 打印任何像素(比如位置 255,255),我会得到0,这实际上不是黑色像素。我认为图像已被读取为 2d 矩阵。

其实我想对每个像素做一些计算,因为我需要明确地访问每个像素。

任何帮助或建议将不胜感激。

【问题讨论】:

    标签: c++ opencv


    【解决方案1】:

    你必须这样做

       int x = (int)(img.at<uchar>(j,i))
    

    这是因为图像的存储方式和img.at 的工作方式。灰度图像以 CV_8UC1 格式存储,因此它基本上是一个 uchar 类型的数组。所以返回值是一个uchar,您可以将其类型转换为int,以将其作为整数进行操作。

    另外,这与您的问题类似: accessing pixel value of gray scale image in OpenCV

    【讨论】:

    • 有效,我也可以这样设置值吗?我的意思是如果我想为像素 img.at(j,i) 设置一些值怎么办?
    • 分配它:img.at&lt;uchar&gt;(j,i) = 19;
    【解决方案2】:

    float 在这里是错误的类型。

    如果你读到这样的图片:

    cv::Mat img1 = cv::imread("bauckhage.jpg", CV_LOAD_IMAGE_GRAYSCALE);
    

    那么它的类型将是 CV_8U,(uchar,每像素一个灰度字节)。所以,要访问它:

    uchar &pixel = img1.at<uchar>(row,col); 
    

    【讨论】:

    • 我得到 N% ,我期望一个十进制值。
    • @berak:对不起,我不明白,你为什么用&amp;pixel?你为什么不只使用uchar pixel?我只想知道使用&amp;的好处。
    • 因此您可以稍后分配一个新值:uchar &amp;pixel = img1.at&lt;uchar&gt;(row,col); pixel = 23; 如果您只想“获取”该值,则不需要引用
    猜你喜欢
    • 2013-07-28
    • 1970-01-01
    • 1970-01-01
    • 2014-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多