似乎我是唯一一個在Opencv 2.4.3中遇到過這個問題的人。無法從'cv :: Mat'轉換爲'void *'
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。請幫忙。
謝謝,這有幫助。但爲什麼C函數不接受任何演員? – Tiina
它可能使用reinterpret_cast(灰色)進行編譯。但麻煩在於,即使如此,這不是你想要的行爲。 C接口不是用來處理由OpenCV的C++接口生成的對象的。 'cv :: Mat'是處理圖像的C++方式 - 它是C++接口的一部分。處理圖像的C方式是'IplImage *'類型。這將直接轉換爲'void *'而不需要顯式強制轉換,但是您將使用OpenCV的C接口。堅持用C++! –
aardvarkk
謝謝,我想我應該查看更多關於鑄造的信息。如果我有15的聲望,我會大拇指。 :) – Tiina