gpt4 book ai didi

python - 锐化图像以检测纸上标记为 "X"的对象中的边缘/线条

转载 作者:太空狗 更新时间:2023-10-30 02:43:21 27 4
gpt4 key购买 nike

我正在使用 python 和 opencv。我的目标是检测用树莓派相机拍摄的图像中的“X”形碎片。该项目是我们有预印的井字棋板,并且每次在板上放置新棋子(带有印章)时都必须对板进行成像。然后输出说明棋子的类型(如果有的话)位于井字棋盘的哪个部分。

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

如您所见,“X”形碎片似乎不容易检测到。一些邮票上只有一行被“看到”。

这是过滤后的边缘检测结果:

我检测“X”形 block 的方法是检查每个部分是否有任何具有非水平/垂直斜率的线。我的问题是“X”形邮票不是完美的线条;因此,我的代码几乎不会在线。

我试过应用反锐化滤镜、使用直方图均衡化以及仅将灰度用于边缘检测。这些都没有在任何“X”形 block 中检测到超过 1 条线。

大致我在做什么:

#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 个部分中的每一个部分,但这并不重要。

长篇大论:我怎样才能让我的形象让我的线条“清晰”和锐利?我想知道我可以用什么来使加盖印章的“X”看起来像几行。

最佳答案

您可以使用 Otsu's robust method for determining the dual threshold value 尝试 Canny 边缘检测器.

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)

然后就可以使用了

  • 轮廓的凸度缺陷

  • 填充轮廓的面积与轮廓边界框面积的比值

将十字标记与圆圈区分开来。

这是我将 Canny 应用于您的图像时得到的结果。

edges

关于python - 锐化图像以检测纸上标记为 "X"的对象中的边缘/线条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33642151/

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