首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将KeyPoint保存为字符串并转换回KeyPoint

将KeyPoint保存为字符串并转换回KeyPoint
EN

Stack Overflow用户
提问于 2019-05-23 03:23:29
回答 1查看 875关注 0票数 1

我想在JSON文件中缓存KeyPoint,然后检索它们,以便在FlannBasedMatcher中使用。有没有一种方法可以将KeyPoint转换为类似于字符串或浮动的数组,这些字符串或浮动可以被存储,然后从JSON文件中撤回?我认为这对于描述符来说应该是可以的,因为它们看起来就像一个ints数组。

计算

代码语言:javascript
复制
kp2, des2 = brisk.detectAndCompute(img2, None)

MATCHER

代码语言:javascript
复制
matches = flann.knnMatch(des1,des2,k=2)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-23 06:53:04

您可以直接以字符串类型将KeyPoint保存到JSON文件:

代码语言:javascript
复制
import json
def save_2_jason(arr):
        data = {}  
        cnt = 0
        for i in arr:
            data['KeyPoint_%d'%cnt] = []  
            data['KeyPoint_%d'%cnt].append({'x': i.pt[0]})
            data['KeyPoint_%d'%cnt].append({'y': i.pt[1]})
            data['KeyPoint_%d'%cnt].append({'size': i.size})
            cnt+=1
        with open('data.txt', 'w') as outfile:  
            json.dump(data, outfile)

用json格式保存到data.txt:

代码语言:javascript
复制
(kpt, desc) = brisk.detectAndCompute(img, None)
save_2_jason(kpt)

从JSON文件转换回KeyPoint需要将其更改为cv2.KeyPoint类:

代码语言:javascript
复制
import json
def read_from_jason():
        result = []    
        with open('data.txt') as json_file:  
            data = json.load(json_file)
            cnt = 0
            while(data.__contains__('KeyPoint_%d'%cnt)):
                pt = cv2.KeyPoint(x=data['KeyPoint_%d'%cnt][0]['x'],y=data['KeyPoint_%d'%cnt][1]['y'], _size=data['KeyPoint_%d'%cnt][2]['size'])
                result.append(pt)
                cnt+=1
        return result

阅读您保存的data.txt:

代码语言:javascript
复制
kpt_read_from_jason = read_from_jason()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56267675

复制
相关文章

相似问题

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