安卓边缘检测opencv

标签 android opencv image-processing

我正在创建一个项目,我必须从图像中删除背景并检测对象。

我正在使用 canny 边缘检测来检测边缘,而不是查找轮廓,而不是在蒙版图像上绘制轮廓,但是在 canny 边缘检测之后,我得到了破损的边缘,如何解决这个问题。

对于 Canny 边缘检测,对于 Threshold 参数,我尝试使用 otsu 的方法进行阈值处理以获得更高和更低的阈值,但它似乎没有给出适当的结果。此外,我尝试找到像素值的平均值,并找到

double high_threshold = 1.33 * d;
double low_threshold = 0.66 * d;

它也没有给出准确的结果。我还能做什么

Mat rgba = new Mat();
Utils.bitmapToMat(bitmap, rgba);
Mat edges = new Mat(rgba.size(), CvType.CV_8UC1);Imgproc.cvtColor(rgba, edges, Imgproc.COLOR_RGB2GRAY, 4);
Imgproc.GaussianBlur(edges, edges, new Size(3,3), 2); Mat thresh=new Mat();
double upper_threshold = Imgproc.threshold(edges,thresh,0,255, Imgproc.ADAPTIVE_THRESH_GAUSSIAN_C| Imgproc.THRESH_OTSU);
double lower_threshold = 0.1*upper_threshold;Imgproc.Canny(edges,edges,upper_threshold,lower_threshold,3,false);Mat mDilatedMat = new Mat();

Mat Meroded = new Mat();
double erosion_size=5;
double dilation_size=4;
Mat e=  Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new  Size(2*erosion_size + 1, 2*erosion_size+1));
Mat f=  Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new  Size(2*dilation_size + 1, 2*dilation_size+1));
Imgproc.dilate(edges, mDilatedMat,e);
Imgproc.erode(mDilatedMat, Meroded,f);

最佳答案

您可以通过应用边缘链接算法来改进由 sobel 、 canny 或其他算法提取的图像。 许多边缘链接算法都可以使用,例如霍夫变换, 蚁群算法等

关于安卓边缘检测opencv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39161571/

相关文章:

java - 为什么 Activity 管理器显示启动 Intent 消息?

android - 如何正确地将库模块依赖项添加到 Flutter Plugin 的 Android 文件夹中?

c++ - OpenCV卡尔曼滤波器错误

node.js - haarcascade_eye 和 haarcascade_eye_tree_eyeglasses xml 之间的区别

java - 寻找圆圈图像处理

android - 如何在android/eclipse中使按钮的颜色像玻璃的颜色

java - 如何在android的列表模型中设置列表数据?

python - 如何卸载所有 python 软件包?

javascript - React Native - 使用覆盖贴纸保存图像

python-3.x - 减少/增强图像中的已知特征