无法从'cv :: Mat'转换为'void *'

时间:2013-04-15 21:19:07

标签: visual-studio-2010 opencv

似乎我是唯一一个在Opencv 2.4.3中遇到此问题的人。

http://docs.opencv.org/modules/calib3d/doc/camera_calibration_and_3d_reconstruction.html 以下代码在该官方网站上公布:

Size patternsize(8,6); //interior number of corners
Mat gray = ....; //source image
vector<Point2f> corners; //this will be filled by the detected corners

//CALIB_CB_FAST_CHECK saves a lot of time on images
//that do not contain any chessboard corners
bool patternfound = findChessboardCorners(gray, patternsize, corners,
        CALIB_CB_ADAPTIVE_THRESH + CALIB_CB_NORMALIZE_IMAGE
        + CALIB_CB_FAST_CHECK);

if(patternfound)
  cornerSubPix(gray, corners, Size(11, 11), Size(-1, -1),
    TermCriteria(CV_TERMCRIT_EPS + CV_TERMCRIT_ITER, 30, 0.1));

drawChessboardCorners(img, patternsize, Mat(corners), patternfound);

grayMat,直接用作void*

但是在我的visual studio 2010上,它一直在说错误

Error   1   error C2664: 'cvFindChessboardCorners' : cannot convert parameter 1 from 'cv::Mat' to 'const void *'    22

并且,我尝试了以下内容,但仍然是同样的错误。

static_cast<void*>(gray)
Error   1   error C2440: 'static_cast' : cannot convert from 'cv::Mat' to 'void *'  21


(void*)gray
Error   1   error C2440: 'type cast' : cannot convert from 'cv::Mat' to 'void *'    21

我正在使用OpenCV 2.4.3。请帮忙。

1 个答案:

答案 0 :(得分:1)

OpenCV文档中的示例代码使用C ++接口(findChessboardCorners)。你正在调用C接口(cvFindChessboardCorners)。如果您可以使用C ++接口,我强烈推荐它。我认为你应该可以使用C ++接口,因为如果你的代码编译为C,我认为它不会抱怨转换为void指针(尽管我可能错了!)。

注意:根据名称空间的不同,您可能需要调用以下函数:

cv::findChessboardCorners

您应该可以直接传递gray对象而无需任何转换。