2

Python、OpenCV、Numpy は初めてです。既知のマーカーに対するカメラの相対的な姿勢を決定する C++ コードの Python バージョンを実装しようとしています。コードは cv2.SolvePnP 関数を使用しています。私はウェブを検索しましたが、この機能について同様の混乱しか見つかりませんでした。どのような形式でデータを渡しても、関数は満足できないようです。私が使用しているテストケースは次のとおりです。

## target image points

tPoints = np.zeros((4,2),dtype=np.float64)
tPoints[0,0] = 384.3331
tPoints[0,1] = 162.23618
tPoints[1,0] = 385.27521
tPoints[1,1] = 135.21503
tPoints[2,0] = 409.36746
tPoints[2,1] = 165.64435

## actual marker point set

mPoints = np.zeros((4,3),dtype=np.float64)
mPoints[0,0] = -88.0
mPoints[0,1] = 88.0
mPoints[0,2] = 0
mPoints[1,0] = -88.0
mPoints[1,1] = -88.0
mPoints[1,2] = 0
mPoints[2,0] = 88.0
mPoints[2,1] = -88.0
mPoints[2,2] = 0
mPoints[3,0] = 88.0
mPoints[3,1] = 88.0
mPoints[3,2] = 0

camMatrix = np.zeros((3,3),dtype=np.float64 )
camMatrix[0][0] = 519.0
camMatrix[0][2] = 320.0
camMatrix[1][1] = 522.0
camMatrix[1][2] = 240.0
camMatrix[2][2] = 1.0

retval, rvec, tvec = cv2.solvePnP(objectPoints = tPoints, imagePoints = mPoints, cameraMatrix = camMatrix, distCoeffs = None)

返されるエラーは次のとおりです。

cv2.error: C:\slave\WinInstallerMegaPack\src\opencv\modules\calib3d\src\solvepnp.cpp:52: >error: (-215) npoints >= 0 && npoints == std::max(ipoints.checkVector (2, CV_32F), >ipoints.checkVector(2, CV_64F))

これを実行するのを手伝ってください。また、どこが間違っているかについての情報も大歓迎です。まだまだ学ぶことがたくさん!

4

2 に答える 2

3

指定した引数の形状がsolvePnP正しくありません。 objectPointsNx3 であるimagePoints必要があり、Nx2 である必要があります。tPointsあなたの例でこれらの引数にどのように割り当てられているかを切り替えてmPointsも、例外は発生しません。

于 2013-02-04T16:22:27.170 に答える