3

Android の OpenCV で画像の ROI を設定する方法を見つけようとしています。私は他のオペレーティングシステムでこれを行ったので、私がやっている方法は意味的に正しいと思いますが、どこかにエラーがあります.

これまでのところ、私はこれを試しました

Rect roi = new Rect(0, 0, inputFrame.cols(), inputFrame.rows());
Mat cropped = new Mat(inputFrame, roi);

ただし、次のような OpenCV クラスのどこかでエラーが発生します

Utils.matToBitmap() throws an exception:/home/reports/ci/slave/opencv/modules/java/generator/src/cpp/utils.cpp:107: 
error: (-215) src.dims == 2 && info.height == (uint32_t)src.rows && info.width ==
(uint32_t)src.cols in function void Java_org_opencv_android_Utils_nMatToBitmap2
(JNIEnv*, jclass, jlong, jobject, jboolean)

これは、opencv ラッパー クラスによって提供される onCameraFrame コールバックで呼び出しています。

これについてどうすればよいかわからないのですが、これを成功させた人はいますか?

4

2 に答える 2

8

Android 用の OpenCV (および新しい Java API) には、ROI を作成する独自の方法があります。

Mat オブジェクトの submat メソッドを呼び出すだけです。私が間違っていなければ、submat を呼び出してもその画像領域のコピーは作成されません。コピーが必要な場合は、その目的で submat で copyTo を使用できます。

Mat roi = inputFrame.submat(rowStart, rowEnd, colStart, colEnd);

submat は 3 つの異なる方法で呼び出すことができます。詳細については、リンクを確認してください。

  • submat(int rowStart, int rowEnd, int colStart, int colEnd)

サブマット 1

  • submat(Range rowRange, Range colRange)

サブマット 2

  • submat(Rect roi)

サブマット 3

于 2013-02-13T19:25:54.797 に答える
2

エラーは、画像と同じサイズの ROI を設定しようとしていることを示しているため、この場合 ROI は必要ありません。

これが問題であることを確認するには、次のようにします。

Rect roi = new Rect(0, 0, inputFrame.cols() - 1, inputFrame.rows() - 1);
Mat cropped = new Mat(inputFrame, roi);
于 2013-02-04T22:08:16.460 に答える