锐化图像以检测pap上带“X”标记的对象中的边/线

2024-05-27 11:17:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用python&;opencv。我的目标是在用覆盆子皮照相机拍摄的图像中检测出“X”形的碎片。该项目是,我们已经预先印刷了tic-tac-toe板,必须形象的董事会每一个新的一块是奠定了董事会(与墨水邮票)。然后输出说明什么类型的块,如果有的话,是在什么部分的tic tac趾板。

这里,我有我在图像中检测到的绿色线条:

如你所见,“X”形的碎片似乎不容易被发现。一些邮票上只有一行字被“看见”

下面是过滤后的边缘检测:

我检测“X”形工件的方法是在每个部分中检查是否有任何具有非水平/垂直坡度的线。我的问题是“X”形的图章不是完美的线条;因此,我的代码很难在这些线条上找到。

我试过应用一个不锐化的过滤器,使用直方图均衡化,只使用灰度到边缘检测。在任何“X”形工件中,没有一个检测到超过一条线。

大致上我在做什么:

#sharpen image using blur and unsharp method
gaussian_1 = cv2.GaussianBlur(image, (9,9), 10.0)
unsharp_image = cv2.addWeighted(image, 1.5, gaussian_1, -0.5, 0, image)
#apply filter to find stamp pieces, histogram equalization on greyscale
hist_eq = cv2.equalizeHist(unsharp_image)
#edge detection (input,threshold1,threshold2,size_for_sobel_operator)
edges = cv2.Canny(hist_eq,50,150,apertureSize = 3)
#find lines (edges,min_pixels,min_degrees,min_intersections,lineLength,LineGap)
lines = cv2.HoughLinesP(edges,1,np.pi/180,50,minLineLength,maxLineGap)

只有我把这个单独应用到董事会的9个部门中,但这并不重要。

TLDR编号: 我怎样才能使我的形象,使我的线条“脆”和尖锐?我想知道我可以用什么使一个印着“X”的看起来像几行。


Tags: 图像imageticmincv2边缘线条碎片
2条回答

你可以用Otsu's robust method for determining the dual threshold value试试精明的边缘检测器。

im = cv2.imread('9WJTNaZ.jpg', 0)
th, bw = cv2.threshold(im, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
edges = cv2.Canny(im, th/2, th)

那你就可以用

  • 等高线的凸性缺陷

或者

  • 填充轮廓到轮廓边框的区域

区分十字记号和圆。

这就是我把精明运用到你的形象上所得到的。

edges

因为您使用的是墨迹戳,所以先实现一种边缘检测方法,然后再实现某种字符识别方法(?)是一条艰难的路。

你试过使用简单的连接组件算法吗?即使在你的图像中看到了光照的变化,对一些标准的二值化技术稍加修改也会产生合理的结果。

http://docs.opencv.org/master/d3/dc0/group__imgproc__shape.html#gsc.tab=0

一旦你有了你的组件,你就会有关于力矩,周长,等等的数据,这会让你很快找到一个计算方法来区分这两种标记。

无论使用何种技术,请先考虑减小图像大小,以便处理的像素更少。您可能会注意到创建较小图像的一些其他好处。

如果可以的话,给你的相机增加一个小的漫射光。这将使您的编程任务更容易,检测更可靠。

相关问题 更多 >

    热门问题