使用cvGet2D OpenCV函数

Eri*_*sta 4 opencv

我正在尝试使用OpenCV中的函数cvGet2D从图像中获取信息.

我创建了一个包含10个IplImage指针的数组:

IplImage *imageArray[10];  
Run Code Online (Sandbox Code Playgroud)

我正在从我的网络摄像头保存10张图像:

imageArray[numPicture] = cvQueryFrame(capture);  
Run Code Online (Sandbox Code Playgroud)

当我调用函数时:

info = cvGet2D(imageArray[0], 250, 100);  
Run Code Online (Sandbox Code Playgroud)

其中info:

CvScalar info;  
Run Code Online (Sandbox Code Playgroud)

我收到了错误:

OpenCV错误:cvPtr2D中的错误参数(无法识别或不支持的数组类型),文件/build/buildd/opencv-2.1.0/src/cxcore/cxarray.cpp,第1824行
终止在抛出'cv :: Exception'的实例后被调用
what():/ build/buildd/opencv-2.10/src/cxcore/cxarray.cpp:1824:错误:( - 5)函数cvPtr2D中无法识别或不支持的数组类型

如果我使用该函数cvLoadImage初始化IplImage指针然后我将它传递给cvGet2D函数,代码正常工作:

IplImage* imagen = cvLoadImage("test0.jpg");
info = cvGet2D(imagen, 250, 100);  
Run Code Online (Sandbox Code Playgroud)

但是,我想使用已经存储在我的数组中的信息.

你知道我怎么解决它?

小智 12

即使它是一个非常晚的响应,但我想有人可能仍在寻找解决方案CvGet2D.这里是.

因为CvGet2D,我们需要先按顺序传递参数Y然后再传递参数X.

例:

CvScalar s = cvGet2D(img, Y, X);
Run Code Online (Sandbox Code Playgroud)

它没有在文档中的任何地方提到,但你只在core.h/ 里面找到它core_c.h.尝试去声明CvGet2D(),在函数原型之上,很少有注释可以解释这一点.

  • 该死的,OpenCV文档真的很糟糕.感谢您指出了这一点. (2认同)

Jor*_*hez 9

是的,消息是正确的.

如果要存储像素值,则需要执行此类操作.

int value = 0;
value = ((uchar *)(img->imageData + i*img->widthStep))[j*img->nChannels +0];
cout << "pixel value for Blue Channel and (i,j) coordinates: " << value << endl;
Run Code Online (Sandbox Code Playgroud)

总结一下,要绘制或存储数据,您必须创建一个整数值(像素值在0到255之间变化).但是,如果你只是想(在想如果关闭或类似的东西)来测试像素值可以直接访问到的像素值,而无需使用一个整数值.

我认为你开始时有点奇怪,但是当你使用它2到3次时你会毫无困难地工作.