Я использую дескрипторы SURF для сопоставления изображений. Я планирую сопоставить данный образ с базой данных изображений.Матч BFMatcher в ошибке бросания OpenCV
import cv2
import numpy as np
surf = cv2.xfeatures2d.SURF_create(400)
img1 = cv2.imread('box.png',0)
img2 = cv2.imread('box_in_scene.png',0)
kp1,des1 = surf.detectAndCompute(img1,None)
kp2,des2 = surf.detectAndCompute(img2,None)
bf = cv2.BFMatcher(cv2.NORM_L1,crossCheck=True)
#I am planning to add more descriptors
bf.add(des1)
bf.train()
#This is my test descriptor
bf.match(des2)
Проблема заключается в том, что bf.match
я получаю следующее сообщение об ошибке:
OpenCV Error: Assertion failed (type == src2.type() && src1.cols == src2.cols && (type == CV_32F || type == CV_8U)) in batchDistance, file /build/opencv/src/opencv-3.1.0/modules/core/src/stat.cpp, line 3749
Traceback (most recent call last):
File "image_match4.py", line 16, in <module>
bf.match(des2)
cv2.error: /build/opencv/src/opencv-3.1.0/modules/core/src/stat.cpp:3749: error: (-215) type == src2.type() && src1.cols == src2.cols && (type == CV_32F || type == CV_8U) in function batchDistance
ошибка похожа на this пост. Данное объяснение является неполным и неадекватным. Я хочу знать, как решить эту проблему. Я использовал дескрипторы ORB, а также с BFMatcher, имеющим расстояние NORM_HAMMING
. Ошибка возникает. Любая помощь будет оценена по достоинству.
двух изображений, которые я использовал для этого:
box.png
box_in_scene.png
Я использую Python 3.5.2 и OpenCV 3.1.x в Linux.
Всегда загружать полную информацию, без него воспроизведение вопроса будет сложнее. Изображения box.png и box_in_scene.png отсутствуют. – saurabheights
Прости, я ложился спать. Я отредактировал вопрос. – motiur
Итак, '.detectAndCompute' появляется из OpenCV 3x и выше? Я использую 2.4, и он говорит: «Объект модуля не найден» ... – alisa