设置ROI OpenCV Android时出错

时间:2013-02-04 20:51:53

标签: android image-processing opencv roi

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

不确定如何解决这个问题,是否有人成功完成此操作?

2 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:2)

错误表明您尝试使用相同尺寸的图片设置投资回报率,因此在这种情况下无需投资回报率。

为了确保这是问题所在,以下内容应该有效:

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