使用OpenCV和Python查找Canny边缘图像的坐标

13
我想将openCV检测到的所有边缘的坐标保存在列表中,我已经成功在屏幕上显示了边缘(在订阅照片上),但是我不知道如何保存这些坐标(所有白线)。 谢谢提前帮助。

输入图像描述

1个回答

20

你已经找到了边缘,现在你需要找到这些边缘的位置

(我没有使用你提供的图片,而是使用了桌面上的示例图片:D)

以下行将给出这些坐标:

import cv2
import numpy as np

img = cv2.imread('Messi.jpg', 0)
edges = cv2.Canny(img, 100, 255)     #--- image containing edges ---

现在你需要找到数值大于0的坐标。

indices = np.where(edges != [0])
coordinates = zip(indices[0], indices[1])
  • 我使用了numpy.where()方法,以检索由两个数组组成的元组indices,第一个数组包含白点的x坐标,第二个数组包含白色像素的y坐标。

indices返回:

(array([  1,   1,   2, ..., 637, 638, 638], dtype=int64),
 array([292, 298, 292, ...,  52,  49,  52], dtype=int64))
  • 然后我使用zip()方法获取包含点的元组列表。

打印coordinates会给我一个带有边缘的坐标列表:

[(1, 292), (1, 298), (2, 292), .....(8, 289), (8, 295), (9, 289), (9, 295), (10, 288), (10, 289), (10, 294)]

6
这个解决方案唯一的问题是它只返回一个从上到下顺序排列的点列表:如果你想要多个连续点的列表,以便可以使用cv2.drawContours,该怎么办? - TechnoRazor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接