我想弄清楚如何在 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 1
submat 2
submat 3
关于android - 错误设置 ROI OpenCV Android,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14695428/