2016-04-27 22 views
0

私がしたいのは、リニア軸系(軸の座標)を写真の画像ピクセルに一致させることです。最初に、対応する2D軸座標(z = 0平面の3D座標)を使用して、円のグリッドを使用してカメラを較正します。これは一度行われ、カメラは安定しています。後で私は画像内の輪郭を見つけて、対応する軸の座標を取得したい。 Pythonでは、私は以下を使用しました:opencv - Simple 2D 2D変換

ret, corners = cv2.findCirclesGrid(gray, (16,8)) 
imgpoints.append(corners) 
ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, gray.shape[::-1],None,None) 

objpointsで私は対応する座標をputtedしました。例えば。

objp[:,:2] = np.mgrid[0:16,0:8].T.reshape(-1,2) 
objpoints.append(objp) 

コードは、より多くの、またはこのチュートリアルから小さい:http://opencv-python-tutroals.readthedocs.org/en/latest/py_tutorials/py_calib3d/py_calibration/py_calibration.html

Iは、画像ピクセルの座標軸上の点を取得するprojectPointsを使用することができるよりも、私は知っています。しかし、私は、opositeを行い、イメージピクセルから軸座標を取得したいと思います。私はこのトピックに関するstackoverflowの多くをここに読んでいますが、私は明確な答えは見つかりませんでした。私が理解したいのは、自分の写真を歪ませてsolvePnPを使ってカメラ座標を取得する必要があるということです。私はこれらのステップをどのように解釈するのか分かりません。どの画像に歪みがないか(校正用のサークルグリッドか、後で処理する画像)、そしてsolvePnPと組み合わせる方法はわかりません。あるいは、完全な画像を歪ませずに輪郭の点を歪ませることさえ可能ですか? solvePnPの結果から画像ピクセルとしての位置を取得する方法もわかりません。さらに、私はsolvePnPに少なくとも4ポイントを渡す必要がありますが、私が望むのは単一ポイントを変換することです。たぶん私は間違った何かを理解し、私は完全に別の何かをする必要があります。 私はあなたの助けをたくさんいただきたいと思います。

答えて

0

よろしくお願いします。問題が解決しました。私は全体の概念が間違っていると理解した。私はすでに校正ルーチンからカメラの姿勢を取り除いています。私はz = 0の平面に当たる線を計算し、正しい3D点を得ました。これを行う前に、私はundistortpointsも使用しました。完全に動作します。たぶん、これは同じ問題を抱えている人々にも役立つかもしれません。