2012年4月26日星期四

抽出した特徴点の座標を取得したいです。

抽出した特徴点の座標を取得したいです。

私が質問させていただきたいことはhttp://oshiete.goo.ne.jp/qa/3655111.htmlに書いてある質問と全く同じです。以下がその内容です。



----------------------------------------------------------

抽出した特徴点の座標を取得したいのですが…

OpenCVの特徴点を抽出するサンプルプログラム

http://opencv.jp/sample/gradient_edge_corner.htm …を使用して,

特徴点の座標をx,y座標として取得したいと思っているのですが,

関数cvFindCornerSubPix()の2番目の引数cornersに,

「コーナーの初期座標が入力され,高精度化された座標が出力される」

とあったので,出力してみたところ,5~6桁の数字がズラーッと表示されました.

この数字が高精度化された座標なのでしょうが,

特徴点座標をx,y座標として取得する方法はないのでしょうか?

ご存知の方がいらっしゃれば,ご教授いただけると幸いです.

よろしくお願いいたします.

-----------------------------------------------------------



回答者の方が「引数cornersのx,y座標を取得するにはcvPoint(corners.x,corners.y)とします.」とおっしゃっていたので試してみましたが、上手くいきませんでした。

どのようにしたらx,y座標を取得できるでしょうか?教えていただけると嬉しいです。宜しくお願い致します。







単にリンク先から、要所を検索で調べただけですが、

リンク先のソースでは、cornersは、CvPoint2D32fへのポインタで、“cvAlloc(corner_count/*以下略*/”で配列を確保してます。

なので、corners[i].xで、float型のx座標が得られる筈です。



整数型の座標が必要なら、

CvPoint pt(corners[i]);

で、コンストラクタを使用した変換を用いるのが正規の手順で、リンク先の回答者の返答は、何か勘違いしていると思われます。

(バージョンによってはそんなコンストラクタがあるのかも知れませんが)



上記手順で新変数ptを取得したら、pt.xで整数値のx座標が取得出来ます。

ローカル変数で定義すれば自動で破棄されます。

値を更新したい場合は、“pt = corners[j];”で自動変換される筈です。

(実際には試してないので、実動作は不明ですが)

没有评论:

发表评论