显示Opencv矩阵值

Rob*_*off 7 opencv matrix

这是问题:我用OpenCV v.2.4.2加载灰度图像.现在我想知道例如位置(0,0)处的像素值.我试过了:

Mat image=imread("00001.jpg",1);
cvtColor(image,image,CV_RGB2GRAY);
int a=image.at<unsigned>(0,1);
printf("%d ",a);
Run Code Online (Sandbox Code Playgroud)

这实际上不起作用.如何获取任何数据类型的像素值(CV_8U,CV_32S ......)?

谢谢!!!

mas*_*sad 4

你在这里犯了两个错误。

读取图像时,您指定 1 作为输入参数。正如对imread的解释,该函数可以读取三种不同格式的图像。

CV_LOAD_IMAGE_UNCHANGED (<0) 按原样加载图像(包括 alpha 通道,如果存在) CV_LOAD_IMAGE_GRAYSCALE (0) 以强度 1 加载图像
CV_LOAD_IMAGE_COLOR (>0) 以 RGB 格式加载图像

对于你的情况,你必须使用CV_LOAD_IMAGE_GRAYSCALE作为第二个参数

在下一步中您将使用:image.at<unsigned>(0,1);与任何内容都不对应。你使用<unsigned>但编译器说“无符号?无符号什么???”

我相信更好的方法是使用正确的标签,例如CV_LOAD_IMAGE_COLORCV_LOAD_IMAGE_GRAYSCALE。在下面的示例中,我将图像读入一个通道 ( CV_LOAD_IMAGE_GRAYSCALE),该通道会自动将其转换为灰度。

#include <cv.h>
#include <highgui.h>

#include <iostream>

using namespace std;
using namespace cv;

int main()
{
    Mat gImg = imread("img.png", CV_LOAD_IMAGE_GRAYSCALE);

    uchar val;
    val = gImg.at<uchar>(0,0);

    cout << (int)val << endl;

    imshow("showImg",gImg);
    cvWaitKey(0);

    return 1;
}
Run Code Online (Sandbox Code Playgroud)