Угловой детектор Ши-Томаси в OpenCV
В предыдущем блоге был представлен угловой детектор Харриса., в этом блоге будет представлен еще один угловой детектор: угловой детектор Ши-Томаси.
-
Угловой детектор Ши-Томаси - это оптимизация углового детектора Харриса, и эффект лучше;
-
cv2.goodFeaturesToTrack(), найти N самых сильных углов на изображении с помощью метода Ши-Томаси (или обнаружения углов Харриса). И он хорошо работает в отслеживании объектов.
1. Рендеринг
Эффект детектора углов исходного изображения VS Harris выглядит следующим образом: Исходное изображение VS Shi-Tomasi с обнаружением углов выглядит следующим образом:Видно, что Ши-Томаси действительно лучше, и все углы детектируются успешно;
2. Исходный код
# Shi-Tomasi角点检测是Harris角点检测的优化,更准确,会检测出N个最强角点;
import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('images/polygon.jpg')
plt.subplot(1, 2, 1)
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.xticks([])
plt.yticks([])
plt.title("origin")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
corners = cv2.goodFeaturesToTrack(gray, 25, 0.01, 10)
corners = np.int0(corners)
for i in corners:
x, y = i.ravel()
cv2.circle(img, (x, y), 3, 255, -1)
plt.subplot(1,2,2)
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
plt.xticks([])
plt.yticks([])
plt.title("Shi-Tomasi res")
plt.show()