【发布时间】:2014-05-14 12:54:17
【问题描述】:
OpenCV 的一个函数有一个非常奇怪(相当不可能)的问题 - 传递给 cvGetSize 的指针,在 cvGetSize 内部变为 NULL。我在CvGetSize 中检查了它们,它真的变成了NULL。没有取消引用,只是强制转换。
这怎么可能? (语言:C,编译器 MSVC 2012)
我的代码:
#include <opencv2/core/core_c.h>
#include <opencv2/highgui/highgui_c.h>
void Test(IplImage * img)
{
CvArr * arr = (CvArr*)(img);
printf("img in test = %p\n", (CvArr*)img);
cvGetSize(arr);
}
int main(int argc, char *argv[])
{
IplImage * img;
img = cvLoadImage("D:\\fusion.jpeg",CV_LOAD_IMAGE_COLOR);
Test(img);
return 0;
}
cvGetSize的签名:
CV_IMPL CvSize cvGetSize( const CvArr* arr )
我还添加了指向cvGetSize的指针输出。
输出:
img in test = 000000B2F5536F80
img in cvGetSize = 000007F9058A8670
更新: 如果我将此示例设为 CPP 文件,则一切正常。
【问题讨论】:
-
显示一个小sn-p这个函数是如何调用的,请编辑你的问题!
-
试试
cvGetSize(static_cast<CvArr*>(img));。CvArr*是void*的类型定义。 -
这是一个“C”,没有static_cast。我使用 "C" cast - (CvArr*) 但它是一样的。
-
c-api 已死。避免它。
-
只是指针!没有数学,没有其他东西,只是强制转换为 void*。