首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >发出KeyPoints与JSON之间的转换,然后使用FlannBasedMatcher

发出KeyPoints与JSON之间的转换,然后使用FlannBasedMatcher
EN

Stack Overflow用户
提问于 2019-05-23 08:38:51
回答 1查看 282关注 0票数 0

我正在将我的KeyPoints和描述符保存在一个JSON文件中。稍后,当我检索它们时,我尝试在FlannBasedMatcher中使用它们。但是,我认为在转换过程中出现了一些问题,因为我得到了以下错误。

代码语言:javascript
复制
cv2.error: OpenCV(4.1.0) /io/opencv/modules/flann/src/miniflann.cpp:315: error: (-210:Unsupported format or combination of formats) in function 'buildIndex_'
> type=4
> 

创建关键点和描述符

代码语言:javascript
复制
brisk = cv2.BRISK_create()
kp1, des1 = brisk.detectAndCompute(img, None)

转换为JSON

代码语言:javascript
复制
temp = [{'point0':k.pt[0],'point1':k.pt[1],'size':k.size,'angle': k.angle, 'response': k.response, "octave":k.octave,
        "id":k.class_id} for k in kp1]
json.dumps(temp) #JSON KeyPoints
json.dumps(des1.tolist()) #JSON Descriptors

转换回

代码语言:javascript
复制
rawKeys = json.loads(result[key]["KEYPOINTS"])
rawDes = json.loads(result[key]["DESCRIPTORS"])

kp2 = []

for kp in rawKeys:
    p = cv2.KeyPoint(x=kp["point0"],y=kp["point0"],_size=kp["size"], _angle=kp["angle"], _response=kp["response"], _octave=kp["octave"], _class_id=kp["id"])
    kp2.append(p)
des2 = np.array(rawDes)

Matcher

代码语言:javascript
复制
FLANN_INDEX_LSH = 6

index_params= dict(algorithm = FLANN_INDEX_LSH,
                   table_number = 6, # 12
                   key_size = 12,     # 20
                   multi_probe_level = 1) #2

search_params = dict(checks = 50)

flann = cv2.FlannBasedMatcher(index_params, search_params)

matches = flann.knnMatch(des1,des2,k=2) # ERROR HERE
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-26 03:01:09

解决办法似乎很简单。

代码语言:javascript
复制
des2 = np.array(rawDes,dtype=np.uint8)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56271253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档