当前位置: 首页 > 知识库问答 >
问题:

增强OpenCV(Java)中的边缘,同时消除噪波

许俊晤
2023-03-14

我正试图用Java编写一个OpenCV程序,用手机拍摄一个标记的照片,并在标记上找到圆形轮廓。我已经让它在Android模拟器中工作(照片有完美的照明条件),但无法让它在手机上工作。这是我试图捕捉的标记:

在使用转换为灰度、高斯模糊和Canny边缘检测器的组合后,我得到以下输出:

如果我尝试在图像上查找轮廓,返回的轮廓数非常高(超过1000个),但它们没有闭合(因为边缘似乎太弱。在原始图像上绘制的轮廓:

这是我用于分段的代码:

Mat processed = new Mat(original.height(), original.width(), original.type());

Imgproc.cvtColor(original, processed, Imgproc.COLOR_RGB2GRAY);

Imgproc.GaussianBlur(processed, processed, new Size(7, 7), 0.1);

Imgproc.Canny(processed, processed,  50, 50*3, 3, false);

我尝试过调整不同的参数(阈值等),但感觉这不是理想的解决方案。我想一定有办法增强canny探测器返回的边缘,但我自己没有发现任何东西。

感谢您的帮助!

共有1个答案

暨嘉
2023-03-14

您可以查看opencv中的膨胀操作来增强边缘。

https://docs.opencv.org/4.x/db/df6/tutorial_erosion_dilatation.html

还可以使用Canny边缘检测、approxPolyDPminEnclosingCircle查看下面的示例。这很接近你的问题。

https://docs.opencv.org/4.x/da/d0c/tutorial_bounding_rects_circles.html

https://docs.opencv.org/4.x/d3/dc0/group__imgproc__shape.html#ga0012a5fdaea70b8a9970165d98722b4c

https://docs.opencv.org/4.x/d3/dc0/group__imgproc__shape.html#ga8ce13c24081bbc7151e9326f412190f1

 类似资料:
  • 我正在做一个应该作为地平线探测的项目。我使用精明的边缘和轮廓进行地平线检测。它工作得很好,但是我对边缘的小区域有问题 所以问题是,如何摆脱小面积的边缘/轮廓?或者我如何只显示一个最大的轮廓? 以下图片显示了它的外观: http://i.stack.imgur.com/f4USX.png 这张照片是用轮廓上的小区域拍摄的,我需要消除这些区域: http://i.stack.imgur.com/TQi

  • Canny边缘检测用于检测图像中的边缘。 它接受灰度图像作为输入,并使用多级算法。可以使用类的方法在图像上执行此操作,以下是此方法的语法。 该方法接受以下参数 - image - 表示此操作的源(输入图像)的对象。 edges - 表示此操作的目标(边缘)的对象。 threshold1 - 类型为的变量表示滞后过程的第一个阈值。 threshold2 - 类型为的变量表示滞后过程的第二个阈值。 示

  • 我想检测具有一定角度/方向的边缘。 根据SO中的帖子改编,我想出了使用OpenCV幅值、相位和Sobel函数来过滤不需要的边缘点。然后使用幅值图像(以相位图像为条件)输出边缘点。 然而,结果与Canny边缘函数不相似。最好是过滤掉带有不需要的角度的边缘,但检测到的边缘是点的斑点,而不是细线边缘 在使用findContour后,左边缘图像也会绘制出来,但这几乎没有帮助 1) 为了模仿精明的处理,还应

  • 我正试图从一张支票的图像中提取帐号。我的逻辑是,我试图找到包含帐号的矩形,对边框进行切片,然后将切片输入到OCR中,从中获取文本。 我面临的问题是,当矩形不是非常突出和浅色,我不能得到矩形的轮廓,因为边缘不是完全相连的。 如何克服这一点?我试过但不起作用的事情是 I不能增加侵蚀迭代,以侵蚀它更多,因为这样边缘与周围的黑色像素连接并形成不同的形状。 减小阈值偏移量可能会有所帮助,但似乎效率不高。因为

  • 问题内容: 我想在一个子图中绘制阻尼随机游走的时间序列,然后在第二个子图中放大它。我从matplotlib知道,效果很好。到目前为止,我的代码是: 这将创建如下图: 这几乎是我想要的,除了连接2个子图的线从第一个子图中的框的上边缘开始。是否有可能从第二个子图中的较低的两个边缘开始,而仍然在第二个子图中的较高的两个边缘处结束呢?我要怎么做才能做到这一点? 问题答案: 在有两个参数,并设置两个连接器的

  • 这是我的测试照片 我正在努力寻找卡片的边缘。但是,正如您所看到的,边缘有些模糊。 在这里找到一些建议:模糊边缘检测如何从python中的模糊图像中找到扭曲矩形的精确角点位置?,但没有一个能产生令人满意的边缘。 完整代码: