我正在创建一个项目,我必须从图像中删除背景并检测对象。
我使用巧妙的边缘检测检测边缘,然后找到轮廓,然后在蒙屏图像上绘制轮廓,但是经过巧妙的边缘检测,我得到破碎的边缘,如何修复。
对于Canny边缘检测,对于阈值参数,我尝试使用阈值与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或其他算法提取的图像。许多边缘连接算法可用,如霍夫变换,蚁群算法等