OpenCV Pythonで構造化ライトを使用してプロジェクタとカメラからポイントを三角形分割しようとしています。このプロセスでは、カメラとプロジェクタの間に1対1で対応するタプルのリストがあります。私は()以下のようにcv2.undistortedPointsにこれを渡しています:camera_normalizedPoints = cv2.undistortPoints(camera_points, camera_K, camera_d)
cv2.undistortPoints()のエラーを理解する助けが必要です
しかし、Pythonは、次のエラーを投げていると私はエラーが何を意味するかを理解することができません。
camera_normalizedPoints = cv2.undistortPoints(camera_points, camera_K, camera_d) cv2.error: /home/base/opencv_build/opencv/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
すべてのヘルプは大歓迎です。
ありがとうございました。
あなたが渡しているもののようなものが正確に含まれている必要があります。PythonのOpenCVは、通常、* 2チャンネル*配列内のポイントを必要とし、それらを1チャンネル配列として渡していると思います。 '[[x1、y1]、[x2、y2]、...]'のようなリストのリストとしてのポイントの代わりに、それらは '[[[x1、y1]]、[[x2 、y2]]、...] 'である。また、ポイントが32ビットまたは64ビットの浮動小数点数であることを確認します。したがって、ポイント配列は 'np.array([[[x1、y1]]、[[x2、y2]]、...] 、dtype = np.float32) 'となります。それが解決すれば、私は答えとして書きます。 –
@AlexanderReynolds - はい、ポイントを '[[x1、y1]、[x2、y2]、...]'として渡しています。あなたが提案したように、私は今、 '[[[x1、y1]]、[[x2(x1、y1)]の代わりに' camera_points = np.array [camera_points]、dtype = np.float32 ' 、y2]]、...] '[[[x1、y1]、[x2、y2]、...]]'を取得しています。私が確認できるように、それを正しく行う方法を教えてもらえますか? – Shubs
軸を反転するだけで、これらのポイントを転置することができます。 'points = points.transpose(1,0,2)'はトリックを行うべきです(これは0と1の軸を反転させます)。 –