“KeyPoint”类型的对象不是JSON可序列化打开的

2024-09-30 10:40:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图发送一个带有图像关键点和描述符的服务器请求作为一个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'})

但它给了我以下错误。。。。。。。。。。。在

^{pr2}$

有人能给出解决办法吗?在


Tags: 图像importjsonimgrequestscv2描述符关键点
1条回答
网友
1楼 · 发布于 2024-09-30 10:40:16

如果您看到您的kp变量,它是一个关键点实例的列表。 i、 e:kp看起来像[<KeyPoint 0x109f6da50>, <KeyPoint 0x109f6dd50>, <KeyPoint 0x10a1b2060>, <KeyPoint 0x10a1b2090>, <KeyPoint 0x10a1b20c0>, <KeyPoint 0x10a1b2030>, <KeyPoint 0x10a1a0a80>, <KeyPoint 0x10a1a0660>,...]

当您尝试转储imgDetail时,由于KeyPoint实例无法序列化,因此keypoints(即:kp)将出错。在

您需要遍历kp列表并将实例更改为dict

imgDetail['keypoints'] = [{'angle': k.angle, 'response': k.response} for k in kp]

KeyPoint类没有tolist()dict\uu()方法。因此,您可能需要创建自己的dict并传递给json.dumps文件(). 在

相关问题 更多 >

    热门问题