我正在尝试弄清楚如何在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回调中调用它不确定如何解决这个问题,是否有人成功完成此操作?
答案 0 :(得分:8)
OpenCV for Android(和新的Java API)有自己的方式来创建ROI。
您所要做的就是调用Mat对象的submat方法。 如果我没有弄错的话,调用submat不会创建该图像区域的副本,如果你想要一个副本,你可以在submat上使用copyTo来实现这个目的。
Mat roi = inputFrame.submat(rowStart, rowEnd, colStart, colEnd);
您可以通过3种不同方式调用submat,查看链接以获取更多详细信息:
答案 1 :(得分:2)
错误表明您尝试使用相同尺寸的图片设置投资回报率,因此在这种情况下无需投资回报率。
为了确保这是问题所在,以下内容应该有效:
Rect roi = new Rect(0, 0, inputFrame.cols() - 1, inputFrame.rows() - 1);
Mat cropped = new Mat(inputFrame, roi);