私はsolvePnPを次の引数で呼び出そうとしています。solvePnP object_points/image_pointsシェイプ?
apriltag_object_points = np.array([(-1, -1, 0), (-1, 1, 0), (1, 1, 0), (1, -1, 0)], dtype=np.float)
camera_matrix_left = np.eye(3)
dist_left = np.zeros((5, 1))
image_points = np.array(detection.position, dtype=np.float)
cv2.solvePnPRansac(apriltag_object_points, image_points, camera_matrix_left, dist_left)
しかし、私は次のエラー取得しています:
OpenCV Error: Assertion failed (CV_IS_MAT(_src) && CV_IS_MAT(_dst) && (_src->rows == 1 || _src->cols == 1) && (_dst->rows == 1 || _dst->cols == 1) && _src->cols + _src->rows - 1 == _dst->rows + _dst->cols - 1 && (CV_MAT_TYPE(_src->type) == CV_32FC2 || CV_MAT_TYPE(_src->type) == CV_64FC2) && (CV_MAT_TYPE(_dst->type) == CV_32FC2 || CV_MAT_TYPE(_dst->type) == CV_64FC2)) in cvUndistortPoints, file /Users/travis/miniconda3/conda-bld/opencv_1506476120161/work/opencv-3.3.0/modules/imgproc/src/undistort.cpp, line 312
Traceback (most recent call last):
File "/Users/me/Documents/Code/project/file.py", line 139, in <module>
ret = cv2.solvePnPRansac(apriltag_object_points, image_points, camera_matrix_left, dist_left)
cv2.error: /Users/travis/miniconda3/conda-bld/opencv_1506476120161/work/opencv-3.3.0/modules/imgproc/src/undistort.cpp:312: error: (-215) CV_IS_MAT(_src) && CV_IS_MAT(_dst) && (_src->rows == 1 || _src->cols == 1) && (_dst->rows == 1 || _dst->cols == 1) && _src->cols + _src->rows - 1 == _dst->rows + _dst->cols - 1 && (CV_MAT_TYPE(_src->type) == CV_32FC2 || CV_MAT_TYPE(_src->type) == CV_64FC2) && (CV_MAT_TYPE(_dst->type) == CV_32FC2 || CV_MAT_TYPE(_dst->type) == CV_64FC2) in function cvUndistortPoints
を私の引数の形状に問題があるように見えますが、彼らは罰金のように見える...
apriltag_object_points.shape == (4, 3)
image_points.shape == (4, 2)
画像の点は均質でなければならないのですか? hstack
の列ベクトル1
からimage_points
までを持っていればいいですか?
"イメージポイントは均質でなければならないのですか?"ドキュメントには 'Nx2'や' 2xN'や2チャンネル(つまり 'Nx1x2')と書かれているので、問題が解決しないようです。誰でもこのプログラムを実行してエラーを再現できるように、ハードコードされた値で 'image_points'を作成できますか? –