gpt4 book ai didi

java - OpenCV - Canny 边缘检测无法正常工作

转载 作者:太空宇宙 更新时间:2023-11-03 20:56:21 29 4
gpt4 key购买 nike

我是 Android 版 OpenCV 的新手。我目前正在开发文档检测演示应用程序。到目前为止我所做的如下:

原图 -> 灰度图 -> GaussianBlur -> Canny边缘检测 -> 寻找轮廓 -> 绘制轮廓

我能够完美地检测到纸张,如下图所示。

enter image description here

但是它没有检测到一些文件。下面是其中之一

enter image description here

我对此进行了很多研究,发现问题出在精明的边缘检测上,下面是精明的图像:

enter image description here

如您所见,边缘检测并没有完美连接,并且在某些点上没有连接边缘。这就是原因所在。

我在 How to select the best set of parameters in Canny Edge detection algorithm implemented in OpenCV? 遇到过类似的问题我已经遵循了解决方案,但它对我没有用。

我的精明检测代码如下:

double otsu_thresold = Imgproc.threshold(mGray,edged,0,255, Imgproc.THRESH_OTSU);
Imgproc.Canny(mRgba, edged, otsu_thresold*0.5,otsu_thresold);

我不知道我哪里错了!我应该怎么做才能完美检测文档?

最佳答案

首先,执行Canny 边缘检测 的方法必须改变。您正在 cv2.Canny()手动 中设置较低和较高的阈值。您可以自动执行此操作。我用了THIS LINK作为引用。

使用以下代码段:

v = np.median(gray_image)

#---- apply automatic Canny edge detection using the computed median----
lower = int(max(0, (1.0 - sigma) * v))
upper = int(min(255, (1.0 + sigma) * v))
edged = cv2.Canny(gray_image, lower, upper)
cv2.imshow('Edges',edged)

那我在这里做什么?

我取的是灰度图像的中值值。选择 0.33 的 sigma 值来设置 lowerupper 阈值。 0.33 值通常被统计学家用于数据科学。所以这里也考虑了。

这是我得到的:

enter image description here

为了增强此边缘信息,我使用 cv2.MORPH_CROSS 内核执行了形态膨胀:

enter image description here

现在只需执行通常的 cv2.findContours() 操作并绘制最大轮廓。

:)

关于java - OpenCV - Canny 边缘检测无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41893029/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com