'KeyPoint' 类型的对象不是 JSON 可序列化的 opencv
Object of type 'KeyPoint' is not JSON serializable opencv
我正在尝试将图像关键点和描述符作为 json 对象发送服务器请求...这是我的代码..
import cv2
import requests
import json
imgDetail = {'keypoints': '', 'descriptor': ''}
sift = cv2.xfeatures2d.SIFT_create()
img = cv2.imread('images/query.jpg', 0)
kp, des = sift.detectAndCompute(img, None)
des = des.tolist()
imgDetail['keypoints'] = kp
imgDetail['descriptor'] = des
jsonDump = json.dumps(imgDetail)
resp = requests.post("http://localhost:5000", json=jsonDump, headers={'content-type': 'application/json'})
但它给我以下错误......
Traceback (most recent call last):
File "E:/python projects/mawa/image.py", line 23, in <module>
jsonDump = json.dumps(imgDetail)
File "E:\Programs\Python\Python36\lib\json\__init__.py", line 231, in dumps
return _default_encoder.encode(obj)
File "E:\Programs\Python\Python36\lib\json\encoder.py", line 199, in encode
chunks = self.iterencode(o, _one_shot=True)
File "E:\Programs\Python\Python36\lib\json\encoder.py", line 257, in iterencode return _iterencode(o, 0)
File "E:\Programs\Python\Python36\lib\json\encoder.py", line 180, in default o.__class__.__name__)
TypeError: Object of type 'KeyPoint' is not JSON serializable
谁能给出解决方案?
如果您看到 kp 变量,它是 KeyPoint 实例的列表。
即:kp 看起来像 [<KeyPoint 0x109f6da50>, <KeyPoint 0x109f6dd50>, <KeyPoint 0x10a1b2060>, <KeyPoint 0x10a1b2090>, <KeyPoint 0x10a1b20c0>, <KeyPoint 0x10a1b2030>, <KeyPoint 0x10a1a0a80>, <KeyPoint 0x10a1a0660>,...]
当您尝试转储 imgDetail 时,关键点(即:kp)给出错误,因为关键点实例无法序列化。
您需要遍历kp 列表并将instances 更改为dict。
imgDetail['keypoints'] = [{'angle': k.angle, 'response': k.response} for k in kp]
KeyPoint class 没有 tolist() 或 __dict__() 方法。所以你可能需要创建自己的字典并传递给 json.dumps().
我正在尝试将图像关键点和描述符作为 json 对象发送服务器请求...这是我的代码..
import cv2
import requests
import json
imgDetail = {'keypoints': '', 'descriptor': ''}
sift = cv2.xfeatures2d.SIFT_create()
img = cv2.imread('images/query.jpg', 0)
kp, des = sift.detectAndCompute(img, None)
des = des.tolist()
imgDetail['keypoints'] = kp
imgDetail['descriptor'] = des
jsonDump = json.dumps(imgDetail)
resp = requests.post("http://localhost:5000", json=jsonDump, headers={'content-type': 'application/json'})
但它给我以下错误......
Traceback (most recent call last):
File "E:/python projects/mawa/image.py", line 23, in <module>
jsonDump = json.dumps(imgDetail)
File "E:\Programs\Python\Python36\lib\json\__init__.py", line 231, in dumps
return _default_encoder.encode(obj)
File "E:\Programs\Python\Python36\lib\json\encoder.py", line 199, in encode
chunks = self.iterencode(o, _one_shot=True)
File "E:\Programs\Python\Python36\lib\json\encoder.py", line 257, in iterencode return _iterencode(o, 0)
File "E:\Programs\Python\Python36\lib\json\encoder.py", line 180, in default o.__class__.__name__)
TypeError: Object of type 'KeyPoint' is not JSON serializable
谁能给出解决方案?
如果您看到 kp 变量,它是 KeyPoint 实例的列表。
即:kp 看起来像 [<KeyPoint 0x109f6da50>, <KeyPoint 0x109f6dd50>, <KeyPoint 0x10a1b2060>, <KeyPoint 0x10a1b2090>, <KeyPoint 0x10a1b20c0>, <KeyPoint 0x10a1b2030>, <KeyPoint 0x10a1a0a80>, <KeyPoint 0x10a1a0660>,...]
当您尝试转储 imgDetail 时,关键点(即:kp)给出错误,因为关键点实例无法序列化。
您需要遍历kp 列表并将instances 更改为dict。
imgDetail['keypoints'] = [{'angle': k.angle, 'response': k.response} for k in kp]
KeyPoint class 没有 tolist() 或 __dict__() 方法。所以你可能需要创建自己的字典并传递给 json.dumps().