这是问题:我用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 ......)?
谢谢!!!
你在这里犯了两个错误。
读取图像时,您指定 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_COLOR或CV_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)