- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用下面的代码来查找图像的垫子轮廓。我发现轮廓是正确的。但是,当我尝试在轮廓处裁剪图像时,应用程序崩溃了。
List<MatOfPoint> contours = new ArrayList<MatOfPoint>();
Mat contour_mat = new Mat();
Imgproc.findContours(image, contours, contour_mat, Imgproc.RETR_LIST, Imgproc.CHAIN_APPROX_NONE);
Mat roi = null;
for (int idx = 0; idx < contours.size(); idx++) {
Mat contour = contours.get(idx);
double contourarea = Imgproc.contourArea(contour);
if(contourarea>10000){
Rect rect = Imgproc.boundingRect(contours.get(idx));
//to get my target contour
if (rect.height< 55){
Core.rectangle(hsv_image, new Point(rect.x,rect.y), new Point(rect.x+rect.width,rect.y+rect.height),new Scalar(0,0,255));
roi = hsv_image.submat(rect.y, rect.y + rect.height, rect.x, rect.x + rect.width);
}
}
}
Mat image = new Mat(roi.size(), CvType.CV_8UC1);
roi.copyTo(image);
Bitmap bm = Bitmap.createBitmap(image.rows(), image.cols(),
Bitmap.Config.ARGB_8888);
Utils.matToBitmap(image, bm);
这是错误日志:
05-08 20:07:56.851: E/AndroidRuntime(13331): CvException [org.opencv.core.CvException: /home/reports/ci/slave_desktop/50-SDK/opencv/modules/java/generator/src/cpp/utils.cpp:97: 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)
最佳答案
这里可能有一个问题:
Mat image = new Mat(bitmap.getWidth(), bitmap.getHeight(), CvType.CV_8UC1);
当你创建一个Mat
时,参数是rows
,cols
,所以你应该这样做:
Mat image = new Mat(bitmap.getHeight(), bitmap.getWidth(), CvType.CV_8UC1);
但是,该错误表明源图像和目标图像的尺寸不同。因此,请注意 roi.copyTo(image)
调用将调整 image
的大小以匹配感兴趣区域的大小,它可能与您的原始位图不匹配。
因此,要么您必须创建一个与 ROI 大小相同的位图,然后复制到该位图,要么您必须调整 ROI 的大小以匹配您接收的位图。
您可以这样做以确保您知道要使用的位图大小:
Mat image = new Mat(roi.size(), CvType.CV_8UC1);
// unsure of syntax for your platform here... but something like ...
Bitmap newBitmap = Bitmap.createBitmap(image.cols(), image.rows(),
Bitmap.Config.ARGB_8888);
// now copy the image
Utils.matToBitmap(image, newBitmap);
关于java - 显示来自 submat 的图像时出现 MattoBitmap 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23562831/
我正在尝试在 Android 上使用 OpenCV 和 Java(而不是 native )创建模板匹配功能。 我的问题是显示图像。 mattoBitmap 类(在 Java 中)有效,但是如果我想
我正在使用下面的代码来查找图像的垫子轮廓。我发现轮廓是正确的。但是,当我尝试在轮廓处裁剪图像时,应用程序崩溃了。 List contours = new ArrayList(); Mat contou
我想计算 OpticalFlow 然后显示它,但我得到了错误。我的代码: Bitmap resultBitmap = mResultBitmaps.poll(); Imgproc.cvtColor(i
我在 Eclipse 中使用更新的 willowgarage opencv 库。我想将 mat 变量转换为灰度,我已经尝试了我在网上找到的所有内容,但它们对我不起作用。 这是我的代码 package
我是一名优秀的程序员,十分优秀!