查找Canny Edge图像的坐标 - OpenCV&蟒蛇

时间:2018-05-10 13:27:29

标签: python opencv coordinates

我想在列表中保存openCV检测到的所有边缘的坐标,我成功地在屏幕上显示边缘(在订阅的照片上),并且我不知道如何保存坐标(所有白线)。 提前致谢。

enter image description here

2 个答案:

答案 0 :(得分:5)

您找到了边缘,现在需要找到 这些边缘所在的位置。

(我没有使用你提供的图片,我宁愿在桌面上使用示例图片: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)]

答案 1 :(得分:0)

使用openCV可以直接检测Canny边缘检测。 您只需要应用该函数并保存其结果:

import cv2 as cv

img = cv.imread('messi5.jpg',0)
edges = cv.Canny(img,100,200)

您有关于官方文档的教程: https://docs.opencv.org/3.4/da/d22/tutorial_py_canny.html

  

边缘

     

输出边缘图;单通道8位图像,与图像大小相同。

您可以在此图片上应用阈值以使其成为二进制。然后保存1的索引。