使用OpenCV和Python检测图像中的线条

时间:2017-12-08 08:03:58

标签: python numpy opencv pattern-recognition houghlines

[最后更新了问题] 我试图在640x480图像中检测简单几何形状的设计模式。我将图像分成32x32块并检查每个形状的中心位于哪个块中。

基于这个计算,我创建了一个(160x120)零(float32)的numpy矩阵 col=640/4 row=480/4 每次找到形状时,都会计算中心并检查它找到的块。相应的项目及其160x120 numpy数组中的8个邻居设置为 1 。最后,160x120 numpy阵列表示为灰度图像,黑色背景和白色像素表示检测到的形状块。

如下图所示。 The image in top left corner represents the 160x120 numpy array.

左上角的图像代表160x120 numpy数组。到目前为止没有问题。

如您所见,新生成的图像在黑色前景上有一条白线。我想找到这条线的rho,theta,x0,y0,x1,y1。所以我决定使用HoughLines转换。

对于如下:

edges = cv2.Canny(np.uint8(g_quadrants), 50, 150, apertureSize=3)
lines = cv2.HoughLines(edges, 1, np.pi / 180, 200)
print lines

此处g_quadrants是表示灰度图像的160x120矩阵,但cv2.HoughLines的输出除了None之外不包含任何内容。

请帮助我。

更新

The real scenario

黑色和白色(np.float32考虑GrayScale)图像显示白色的小窗口是我实际上得到的

  • 将32x32块中的640x480分割
  • 在图像中找到三角形
  • 创建一个32x32矩阵以映射每个块的结果
  • 如果在块中找到三角形,则 1 更新相应的矩阵元素

放大视图

Zoomed View of 32x32 np.float32 Image

你可以看到有白色像素形成一条直线。可能是一些不需要的检测到的。我需要消除不需要的孤立像素并重建连续的直线。这可以通过扩张然后侵蚀图像来实现。我需要找到这一行的x0,y0,x1,y1,rho,theta。

他们可能不止一行。在这种情况下,我需要找到与长度相关的前2行。

0 个答案:

没有答案