Я использую OpenCV для записи облаков точек от Kinect и других камер. Чтобы синхронизировать облака точек вместе, я хочу использовать калибровочную 3D-установку и cv :: valuAffine3D (). Тем не менее, OpenCV вызывает это странное исключение при попытке использовать эту функцию:
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)
Я не могу понять, что текст об исключении хочет сказать мне, и Google не дает соответствующих результатов, возможно, кто-то еще знает больше меня по этому вопросу. Спасибо!
РЕДАКТИРОВАТЬ: Это мой вызов функции:
cv::Mat affine;
std::vector<cv::Point> inliers;
cv::estimateAffine3D(camPoints,objPoints,affine,inliers,5.0,0.96);
где и camPoints, и objPoints std::vector<cv::Point3f>
types, camPoints — это углы, которые возвращает findChessboardCorners (перепроецированные в пространство трехмерной камеры), а 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)
Очевидно, функция, которая дала мне перепроектированные углы шахматной доски, была неисправна (но раньше работала нормально). Видимо, из этого исключения хочется сказать, что что-то не так с входными точками, в моем случае все camPoints были (0,0,0).
Других решений пока нет …