2011年11月4日金曜日

Point と Mat の相互変換

cv::Vec を使う
Vec は, Matx の特別なケースと言えます. Matx は行列を表現しますが, Vec はベクトルを1行の行列として表現します.
Vec<T,2> と Point_ は相互に変換可能で, Vec<T,3> と Point3_ も同様です.また, Vec<T,4> は CvScalar やScalar に変換することができます. Vec の要素にアクセスするには, operator[] を利用します.
OpenCV2.1からOpenCV2.2の変更点(ChangeLog)
固定型,固定サイズの行列に対する cv::Matx 型が追加されました.現在の Vec は,Matx から派生します.このクラスは,cv::Mat を使うとオーバヘッドが大きすぎるような,極小さい行列に対して利用されます.Matx と Mat は相互変換が可能です. 

Point → Mat
Vec<T, int cn> :  public Matx<T, cn, 1> であるから、Point_<T, cn> は Matx<T, cn, 1> に変換できる。
Mat(Matx) で Mat に変換する。

Mat → Point
今のところ Mat_<T>::(r, c) を使って、 Point(Mat_<T>(0,0), Mat_<T>(1,0)) しかわからない。