gpt4 book ai didi

python - 如何使用 Python 3 在 OpenCV 3 上正确加载 cv2.KeyPoint 和描述符?

转载 作者:太空宇宙 更新时间:2023-11-03 21:32:31 25 4
gpt4 key购买 nike

前几天,我不得不继续使用 OpenCV 3 和 Python 2.7 的旧项目。

在这段代码中,加载 cv2.KeyPoint 我是这样做的:

    import numpy as np
import cPickle
import cv2
keypoints_list = cPickle.loads(open(path).read())
kp = []
for point in keypoints_list:
temp = cv2.KeyPoint(x=point[0][0], y=point[0][1], _size=point[1], _angle=point[2], _response=point[3],
_octave=point[4], _class_id=point[5])
kp.append(temp)

对于我做的负载描述符:

    descriptors_list = cPickle.loads(open(path).read())
descriptors = []
for i in xrange(len(descriptors_list )):
temp = descriptors_list[i] * 1
descriptors.append(temp)
descriptors = np.asarray(descriptors)

它在 Python2.7 上没有问题,但是,我尝试将代码调整为 Python 3,如下所示:

    import numpy as np
import pickle #or import _pickle as pickle
import cv2

keypoints_list = pickle.loads(open(path).read())
kp = []
for point in keypoints_list:
temp = cv2.KeyPoint(x=point[0][0], y=point[0][1], _size=point[1], _angle=point[2], _response=point[3],
_octave=point[4], _class_id=point[5])
kp.append(temp)

返回:

index = pickle.loads(open(path).read()) TypeError: a bytes-like object is required, not 'str'

我想,好吧,我将把字符串添加为字节。我尝试了以下操作:

    keypoints_list = pickle.loads(open(path).read().encode())
kp = []
for point in keypoints_list :
temp = cv2.KeyPoint(x=point[0][0], y=point[0][1], _size=point[1], _angle=point[2], _response=point[3],
_octave=point[4], _class_id=point[5])
kp.append(temp)

和描述符...:

        descriptors_list = pickle.loads(open(path).read().encode())
descriptors = []
for i in range(len(descriptors_list)):
temp = descriptors_list[i] * 1
descriptors.append(temp)
descriptors = np.asarray(descriptors)

有了这个,关键点正确加载,但是,带有描述符的 pickle.loads 返回这个:

index = pickle.loads(open(path).read().encode()) UnicodeDecodeError: 'ascii' codec can't decode byte 0xfa in position 2: ordinal not in range(128)

我也试过:

    with open(path, 'r', encoding="utf-8") as f:
index = pickle.loads(f.read().encode())
descriptors = []
for i in range(len(index)):
temp = index[i] * 1
descriptors.append(temp)
descriptors = np.asarray(descriptors)

和其他派生...但总是返回相同的错误。

我看到描述符的类型是cnumpy.core.multiarray,但我不知道如何解决这个错误。

最佳答案

好的...我使用 np.fromfile(path) 解决了这个问题

代码:

        descriptors_list = np.fromfile(path)
descriptors = []
for i in range(len(descriptors_list)):
temp = descriptors_list[i] * 1
descriptors.append(temp)
descriptors = np.asarray(descriptors)

关于python - 如何使用 Python 3 在 OpenCV 3 上正确加载 cv2.KeyPoint 和描述符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48457690/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com