基于Python的OpenCV图像线检测

2024-04-19 00:38:54 发布

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

[更新了结尾的问题] 我试图在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数组。到目前为止没有问题。在

如您所见,新生成的图像在黑色前景上有一条白线。我要找到这条线的ρ,θ,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.浮动32考虑灰度)显示白色的图像是我在

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

缩放视图:

Zoomed View of 32x32 np.float32 Image

你可以看到白色像素组成一条直线。可能是检测到一些不需要的。我需要消除不必要的孤立像素和重建一条连续的直线。这可以通过膨胀然后腐蚀图像来实现。我需要找到这条线的x0,y0,x1,y1,rho,theta。在

它们可能不止一行。在这种情况下,我需要找到关于长度的前两行。在


Tags: 图像numpynp矩阵像素数组cv2灰度