Извлеките хорошо упорядоченные координаты xy OpenCV Canny Edge Detection в python

У меня есть многоугольник типа этот, и я хочу получить xy-координаты границы этот многоугольник.

Поэтому я попробовал обнаружение Canny Edge OpenCV и извлек координаты следующим образом:

>>> 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

Проблема в том, что я хотел бы извлечь координаты в том порядке, в котором они расположены на границе, например эта картинка может объяснить.

Поскольку мои многоугольники сложны, выпуклая оболочка не работает, и из-за количества краевых точек, которые я получаю от cv2.edge(), мне нужно использовать быстрый алгоритм.


person feinheitsbrei    schedule 26.08.2016    source источник
comment
Вы должны использовать findContours вместо Canny   -  person Sunreef    schedule 26.08.2016
comment
@Sunreef Спасибо, сработало!   -  person feinheitsbrei    schedule 26.08.2016


Ответы (1)


Я не уверен, что назначение переменной предназначено (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}")
person Khairul Ikhwan    schedule 12.07.2018