我正在尝试使用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()
,在函数原型之上,很少有注释可以解释这一点.
是的,消息是正确的.
如果要存储像素值,则需要执行此类操作.
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次时你会毫无困难地工作.
归档时间: |
|
查看次数: |
17961 次 |
最近记录: |