Я использую следующий код, чтобы попытаться обнаружить углы полилиний, чтобы «измерить» линии. Код основан на фрагменте кода я нашел где-то on SO и на основе cv2.cornerHarris():Определение и локализация угла в Harris в OpenCV с помощью Python
cornerimg = cv2.cornerHarris(gray, # src
2, # blockSize
3, # ksize/aperture
0.04 # k
# dst
# borderType
)
# ?
cornerimg = cv2.normalize( cornerimg, # src
None, # dst
0, # alpha
255, # beta
cv2.NORM_MINMAX, # norm type
cv2.CV_32FC1, # dtype
None # mask
)
# ?
cornerimg = cv2.convertScaleAbs(cornerimg)
cornershow = cornerimg.copy()
# iterate over pixels to get corner positions
w, h = gray.shape
for y in range(0, h):
for x in range (0, w):
#harris = cv2.cv.Get2D(cv2.cv.fromarray(cornerimg), y, x)
#if harris[0] > 10e-06:
if cornerimg[x,y] > 64:
print("corner at ", x, y)
cv2.circle(cornershow, # dest
(x,y), # pos
4, # radius
(115,0,25) # color
)
cv2.imshow('harris cornerimg', cornershow)
Исходный код результатов в белых пятен на углу места и уровень, как представляется, является показателем «corneryness». Фрагмент (обновленный для использования cv2) итерации по результирующему изображению и по какой-то причине сканирует значения lager than 10e-06, я заменил это на сравнение того, что, по моему мнению, должно быть яркостью изображения.
Однако круги, нарисованные в этих местах, нигде не находятся вблизи фактических горячих точек, обнаруженных в нормализованном выходе из Харриса.
Что я делаю неправильно?
В качестве альтернативы, cv2.goodFeaturesToTrack() может быть настроен на использование Харрис (useHarrisDetector = True), но моя попытка использовать его не приводит в том, что появляется cornerHarris обнаружить правильно:
cv2.goodFeaturesToTrack( blurred, # img
500, # maxCorners
0.03, # qualityLevel
10, # minDistance
None, # corners,
None, # mask,
2, # blockSize,
useHarrisDetector=True, # useHarrisDetector,
k=0.04 # k
)
Что бы вызов эквивалентен функция cv2.cornerHarris()?
пожалуйста, попробуйте добавить свой результат изображения и объяснить, что это неправильно. –