我想弄清楚如何在 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 回调中调用它

不知道如何解决这个问题,有没有人成功地做到了这一点?

最佳答案

OpenCV for Android(和新的 Java API)有自己的方式来创建 ROI。

你所要做的就是调用你的 Mat 对象的 submat 方法。
如果我没记错的话,调用 submat 不会创建该图像区域的副本,如果你想要一个副本,你可以在 submat 上使用 copyTo 为此目的。

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

您可以通过 3 种不同的方式调用 submat,查看链接以获取更多详细信息:
  • submat(int rowStart, int rowEnd, int colStart, int colEnd)

  • submat 1
  • submat(Range rowRange, Range colRange)

  • submat 2
  • submat(Rect roi)

  • submat 3

    关于android - 错误设置 ROI OpenCV Android,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14695428/

    10-09 04:19