Python 将关键点保存为字符串并转换回关键点

Python 将关键点保存为字符串并转换回关键点,python,opencv,keypoint,brisk,Python,Opencv,Keypoint,Brisk,我想在JSON文件中缓存KeyPoint,然后在FlannBasedMatcher中检索它们。有没有一种方法可以将关键点转换为类似字符串或浮点数的数组,这些字符串或浮点数可以存储,然后从JSON文件中检索?我认为这对于描述符来说应该是可以的,因为它们看起来就像一个int数组 计算关键点 kp2, des2 = brisk.detectAndCompute(img2, None) 匹配器 matches = flann.knnMatch(des1,des2,k=2) 您可以将关键点直接以字符串

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

计算关键点

kp2, des2 = brisk.detectAndCompute(img2, None)
匹配器

matches = flann.knnMatch(des1,des2,k=2)

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

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:

(kpt, desc) = brisk.detectAndCompute(img, None)
save_2_jason(kpt)
从JSON文件转换回KeyPoint需要将其更改为cv2.KeyPoint类:

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读取:

kpt_read_from_jason = read_from_jason()

谢谢你的回答,但是我得到了
TypeError:'cv2.KeyPoint'对象不适合
on
for j in I:
我已经编辑了我的帖子并更改为保存/加载KeyPoint~谢谢,我从你以前的代码中发现了类似的东西。现在有一个新的问题:(