- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我试图在 Android 上从 OpenCV 实现分水岭功能。但是我的程序总是在调用分水岭函数的地方崩溃。我可以完美地输出标记的结果。但是分水岭函数总是崩溃。这是我的代码:
Mat threeChannel = new Mat();
Imgproc.cvtColor(mRgba, threeChannel, Imgproc.COLOR_BGR2GRAY);
Imgproc.threshold(threeChannel, threeChannel, 100, 255, Imgproc.THRESH_BINARY);
Mat fg = new Mat(mRgba.size(),CvType.CV_8U);
Imgproc.erode(threeChannel,fg,new Mat(),new Point(-1,-1),2);
Mat bg = new Mat(mRgba.size(),CvType.CV_8U);
Imgproc.dilate(threeChannel,bg,new Mat(),new Point(-1,-1),3);
Imgproc.threshold(bg,bg,1, 128,Imgproc.THRESH_BINARY_INV);
Mat markers = new Mat(mRgba.size(),CvType.CV_8U, new Scalar(0));
Core.add(fg, bg, markers);
WatershedSegmenter segmenter = new WatershedSegmenter();
segmenter.setMarkers(markers);
Mat result = segmenter.process(mRgba);
return result;
WatershedSegmenter 类如下:
public class WatershedSegmenter{
public Mat markers;
public void setMarkers(Mat markerImage)
{
markerImage.convertTo(markers, CvType.CV_32S);
}
public Mat process(Mat image)
{
Imgproc.watershed(image, markers);
markers.convertTo(markers,CvType.CV_8U);
return markers;
}
}
以前有没有人设法让这个在 Android 上运行?在学习本教程之前,我设法让它在 C++ 中与 Qt 一起工作:link .然而,我目前在 Android 上还没有任何运气。
最佳答案
我现在找到崩溃的原因了。分水岭取的是8位3 channel 格式的数据,而RGBA是4 channel 数据。我只是将它从 RGBA 转换为 RGB,它解决了所有问题。
关于java - Opencv Android 中的分水岭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19273161/
我的问题是如何在 Android Watershed OpenCv 上计算图像中的对象数? 最佳答案 因为您没有告诉我们是哪一行导致了这些问题,但我强烈认为您误用了 erode() 和 dilate(
我正在使用精明的边缘检测和查找轮廓函数(均为 OpenCV)为分水岭变换创建标记。一切正常,但我对结果不是 100% 满意。原因是一些边丢失了,因此丢失了重要信息。更详细地说,我得到了一堆窗口(前 V
我正在尝试使用 OpenCV 分水岭算法 ( https://docs.opencv.org/3.1.0/d3/db4/tutorial_py_watershed.html ),但稍作改动。文档中有这
我正在为 OpenCV 中的分水岭编写代码。 但我希望分水岭边界是 4 点连接而不是 8 点连接。 目前是这个界面: void watershed(InputArray image, InputOut
我是一名优秀的程序员,十分优秀!