似乎我是唯一一个在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);
gray
为Mat
,直接用作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。请帮忙。
答案 0 :(得分:1)
OpenCV文档中的示例代码使用C ++接口(findChessboardCorners
)。你正在调用C接口(cvFindChessboardCorners
)。如果您可以使用C ++接口,我强烈推荐它。我认为你应该可以使用C ++接口,因为如果你的代码编译为C,我认为它不会抱怨转换为void指针(尽管我可能错了!)。
注意:根据名称空间的不同,您可能需要调用以下函数:
cv::findChessboardCorners
您应该可以直接传递gray
对象而无需任何转换。