Найти координаты изображения Canny Edge - OpenCV & python - PullRequest
0 голосов
/ 10 мая 2018

Я хочу сохранить в списке координаты всех ребер, которые обнаруживает openCV, мне удается показать ребра на экране (на подписанной фотографии), и я не знаю, как сохранить координаты (все белые линии). Заранее спасибо.

enter image description here

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Вы нашли края, теперь вам нужно найти , где эти края расположены.

(я не использовал предоставленное вами изображение, я скорее использовал образец изображения на рабочем столе: 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)]
0 голосов
/ 10 мая 2018

Обнаружение краев Canny просто с openCV. Вам просто нужно применить функцию и сохранить ее результат:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...