Я работаю над алгоритмом, который должен распознавать объект из изображения в видеофайле. Сейчас я хочу использовать ORB (я знаю, что SURF и SIFT лучше в этой работе, но я хочу сделать это подтверждение на основе моих результатов). Теперь у меня есть одна проблема: когда я запускаю свою программу, в одном из изображений ключевые точки обнаруживаются в другой области, чем в другом изображении, и она почти не находит совпадений. Теперь в OpenCV 2.4 появился GridAdaptedFeatureDetector, класс, который позволяет разбивать исходное изображение на сетку и обнаруживать точки в каждой ячейке. Но я использую OpenCV 3.1 (Visual Studio 2015), и он, кажется, исчез? Пожалуйста, помогите мне найти решение.
В OpenCV 3.1 было удалено множество различных функций адаптера детектора / экстрактора.
Один из способов вернуть их — скопировать их в ваш проект из OpenCV 2.4. У меня это работало с OpponentSiftDescriptor. Вам нужно будет исправить интерфейсы, потому что они перешли от интерфейсов DescriptorExtractor и FeatureDetector к Features2D. Вы можете скопировать его код отсюда: https://github.com/kipr/opencv/blob/master/modules/features2d/src/detectors.cpp
Он написан на python, поэтому он может быть полезен (я нашел этот вопрос, когда искал решение на python, так что, надеюсь, кто-то другой тоже сделает это …), но это то, что я использовал для перебора подблоков изображения:
def blocks(img, rows, cols):
h, w = img.shape[:2]
xs = np.uint32(np.rint(np.linspace(0, w, num=cols+1)))
ys = np.uint32(np.rint(np.linspace(0, h, num=rows+1)))
ystarts, yends = ys[:-1], ys[1:]
xstarts, xends = xs[:-1], xs[1:]
for y1, y2 in zip(ystarts, yends):
for x1, x2 in zip(xstarts, xends):
yield img[y1:y2, x1:x2]