найти количество углов в изображении, используя Харрис - PullRequest
0 голосов
/ 10 ноября 2019

Я хочу узнать количество углов на изображении, используя детектор Харриса.

Детектор Харриса может найти углы, но не может сосчитать числа.

import cv2
import numpy as np

filename = 'chessboard.jpg'
img = cv2.imread(filename)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

gray = np.float32(gray)
dst = cv2.cornerHarris(gray,2,3,0.04)

#result is dilated for marking the corners, not important
dst = cv2.dilate(dst,None)

# Threshold for an optimal value, it may vary depending on the image.
img[dst>0.01*dst.max()]=[0,0,255]

cv2.imshow('dst',img)
if cv2.waitKey(0) & 0xff == 27:
    cv2.destroyAllWindows()

1 Ответ

0 голосов
/ 11 ноября 2019

Бит расширения на самом деле очень важен, хотя вы не правильно реализовали всю историю. В частности:

  • Фильтр Харриса-Стивенса не находит сами углы, он просто вычисляет изображение с высокими значениями, в которых угол может присутствовать на исходном изображении, и с низкими значениями в других местах.
  • Хорошие предположения о том, где фактические местоположения углов являются местоположением локальных максимумов выходного изображения Харриса.
  • Простой способ найти локальные максимумы любого изображения (включая Харрисвыход фильтра), чтобы сравнить его с расширенной версией самого себя. Максимумы в пикселях, которые остаются неизменными. Это связано с тем, что по определению дилатация заменяет интенсивность каждого пикселя максимальной интенсивностью в окрестности пикселей вокруг него, и поэтому, если пиксель уже находится на локальном максимуме, он не изменится.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...