【发布时间】:2016-02-12 01:09:38
【问题描述】:
我正在使用 python 和 opencv。我的目标是检测用树莓派相机拍摄的图像中的“X”形碎片。该项目是我们已经预先打印了井字棋盘,并且每次将新棋子放在棋盘上时都必须对棋盘进行成像(带有墨水印章)。然后输出说明在井字棋棋盘的哪个部分有什么类型的棋子(如果有的话)。
在这里,我在图像中检测到的线条是绿色的:
如您所见,“X”形碎片似乎不容易被发现。有些邮票上只有一行被“看到”。
这是过滤器后边缘检测的样子:
我检测“X”形块的方法是在每个部分中检查任何具有非水平/垂直斜率的线。我的问题是“X”形印章不是完美的线条;因此,我的代码几乎不会出现在行上。
我尝试过应用非锐化过滤器,使用直方图均衡化,并且仅在边缘检测中使用灰度。这些都没有在任何“X”形块中检测到超过 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 个部分,但这并不重要。
TLDR: 我怎样才能使我的形象使我的线条“清晰”和锐利?我想知道我可以用什么来使标记的“X”看起来像几行。
【问题讨论】:
标签: python python-2.7 opencv numpy image-processing