Assertion failed: _queryDescriptors.type() == trainDescType in func knnMatcImpl
class KeypointData(object):
def __init__(self, keypoints, descriptors):
self.keypoints = keypoints
self.descriptors = descriptors
def save(self, file_name):
data = []
for keypoint, descriptor in zip(self.keypoints, self.descriptors):
data.append([keypoint.pt
, keypoint.size
, keypoint.angle
, keypoint.response
, keypoint.octave
, keypoint.class_id
, descriptor])
pickle.dump(data, open(file_name, "wb" ))
@staticmethod
def load(file_name, flg):
data = pickle.load(open(file_name, "rb" ),encoding='bytes')
keypoints = []
descriptors = []
for entry in data:
point = entry[0]
size = entry[1]
angle = entry[2]
response = entry[3]
octave = entry[4]
class_id = entry[5]
keypoints.append(cv2.KeyPoint(x=point[0],y=point[1]
, _size=size
, _angle=angle
, _response=response
, _octave=octave
, _class_id=class_id))
descriptors.append(entry[6])
if flg:
return KeypointData(keypoints, np.array(descriptors, np.uint8))
else:
return KeypointData(keypoints, np.array(descriptors, np.float32))
문제 설명: 사진을 상술한 방법을 이용하여 SURF와 ORB 특징을 로컬에 저장한 다음load에서 로컬로 호출하면 상술한 오류가 발생할 수 있습니다.
해결 방안: 자세히 연구한 결과 ORB 추출 특징의 descriptors는 uint8 유형이고 SURF 추출 특징은float32이다. 그래서 뒤에 돌아올 때 함수를 추가했다. 하나는 unit8, 하나는 float32로 되돌아간다. 그러면 문제가 해결된다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.