在python中提取OpenCV的Canny边缘检测的有序xy坐标

时间:2016-08-26 08:01:56

标签: python opencv coordinates

我有一个像this这样的多边形,我想得到这个多边形边界的xy坐标。

因此,我尝试了OpenCV的Canny Edge Detection并提取了这样的坐标:

>>> edge = cv2.Canny(region, 100, 200)
>>> ans = []
>>> for y in range(0, edge.shape[0]):
>>>     for x in range(0, edge.shape[1]):
            if edge[y, x] != 0:
                ans = ans + [[x, y]]
>>> print ans

问题是,我想按顺序提取坐标,就像它们在this picture可能解释的边界中排列一样。

由于我的多边形很复杂,凸包不起作用,并且由于我得到cv2.edge()的边缘点的数量,我需要使用快速算法。

1 个答案:

答案 0 :(得分:0)

我不确定是否要进行变量分配(y分配给x轴,反之亦然),但是在这里我用来获取某些坐标:

import cv2
import numpy as np

img = cv2.imread('1.JPG')
edges = cv2.Canny(img,100,200)
ans = []
highestY = 0
highestX = 0
highestCoordinate = [0, 0]

for x in range(0, edges.shape[0]):
    for y in range(0, edges.shape[1]):
        if edges[x, y] != 0:            
            ans = ans + [[x, y]]
            if highestX < x:
                highestX = x
            if highestY < y:
                highestY = y
                highestCoordinate = [x, y]       

print(f"Highest y is {highestY}")
print(f"Highest x is {highestX}")
print(f"Highest coordinate is {highestCoordinate}")