2013-08-05 24 views
2

我正在使用OpenCV記錄來自Kinect和其他相機的點雲。要同步點雲,我想使用3D校準裝備和cv :: estimateAffine3D()。然而,OpenCV的我拋出這個陌生的異常,當我嘗試使用功能:OpenCV:估計Affine3D引發難以辨認的異常

OpenCV Exception: C:\Tools\opencv\modules\core\src\matrix.cpp:1466: 
error: (-215) mtype == type0 || (CV_MAT_CN(mtype) == CV_MAT_CN(type0) && 
((1 << type0) & fixedDepthMask) != 0) 

我想不通的異常文本想告訴我什麼,谷歌沒有給出相關結果,也許別人知道比我多就此而言。謝謝!

編輯:這是我的調用函數:

cv::Mat affine; 

std::vector<cv::Point> inliers; 

cv::estimateAffine3D(camPoints,objPoints,affine,inliers,5.0,0.96); 

其中兩個camPoints和objPoints是std::vector<cv::Point3f>類型,camPoints在於findChessboardCorners返回角(重投影到3D照相機空間)和objPoints簡單的向量表示物體空間中的相同角落,在這種情況下,其內容如下所示: (0,0,0),(40,0,0),(80,0,0),...,(0,40, 0),(40,40,0),(80,40,0)...(0,200,0),(40,200,0),(80,200,0)

+0

這表明提供的參數有問題,最有可能是OutputArrays之一。你能否顯示你的代碼(調用cv :: estimateAffine3D包括所有使用的變量)。 – Niko

+0

是的,我用這些信息編輯了問題。 – QuantumFlux

+0

我認爲「inliers」不是作爲點報告的,而是作爲它們各自的索引,所以你應該嘗試'std :: vector inlier;'而不是。 – Niko

回答

0

顯然,函數給了我重新投影的棋盤角落是錯誤的(但是之前工作得很好)。顯然,這個例外要說的是,輸入點不太合適,在我的例子中,所有的camPoints都是(0,0,0)。