javacv の 2D 整数点のセットに楕円を当てはめようとしていますが、問題が発生し続けています。私の質問は、cvFitEllipse2 が期待するデータの種類は何ですか?
OpenCVのマニュアルから、私はそれを見つけました
CvBox2D cvFitEllipse2(const CvArr* points)
パラメータ points – 入力 2D ポイント セット。保存先:
- std::vector<> または Mat (C++ インターフェイス)
- CvSeq* または CvMat* (C インターフェイス)
- Nx2 numpy 配列 (Python インターフェイス)
次の方法で、CvSeqとCvMatの両方を試しました。
1 CvSeq
CvMemStorage mem = cvCreateMemStorage(0);
CvSeq seq = cvCreateSeq(0, Loader.sizeof(CvSeq.class), Loader.sizeof(CvPoint.class), mem);
CvPoint pts = new CvPoint(6);
pts.position(0).put(cvPoint(3, 0));
pts.position(1).put(cvPoint(1, 5));
pts.position(2).put(cvPoint(2, 9));
pts.position(3).put(cvPoint(1, 15));
pts.position(4).put(cvPoint(0, 9));
pts.position(5).put(cvPoint(1, 5));
for(int i=0; i<6; i++){
CvPoint v = new CvPoint(pts.position(i).x(), pts.position(i).y());
cvSeqPush(seq, v);
}
cvFitEllipse2(seq);
OpenCV エラー: cvFitEllipse2、ファイル /tmp/opencv-2.4.3+dfsg/modules/imgproc/src/shapeescr.cpp の不正な引数 (サポートされていないシーケンス タイプ)、スレッド「メイン」での 790 例外 java.lang.RuntimeException: / tmp/opencv-2.4.3+dfsg/modules/imgproc/src/shapeescr.cpp:790: エラー: (-5) 関数 cvFitEllipse2 でサポートされていないシーケンス タイプです
2 CvMat
CvMat mat = cvCreateMat(pts.capacity(), 2, CV_32S);
mat.getIntBuffer().put(pts.asByteBuffer().asIntBuffer());
cvFitEllipse2(mat);
エラー: OpenCV エラー: サポートされていない形式または形式の組み合わせ (要素の型が不適切なため、行列を点列に変換できません) が不明な関数、ファイル ......\src\opencv\modules\imgproc\src\utils .cpp、59 行目スレッド「メイン」での例外 java.lang.RuntimeException: ......\src\opencv\modules\imgproc\src\utils.cpp:59: エラー: (-210) 行列はできません不適切な要素タイプのため点列に変換されます
私も CvMat mat = cvCreateMat(1, pts.capacity()*2, CV_32S); をやってみました。同じ結果で。当然のことながら、CV_32S が間違っているようです。わからない。
私はこれをまったく理解できません。javacv の Google グループでこれを尋ねましたが、まだ入力がありません。