如何使用Python 3在OpenCV 3上正确加载cv2.KeyPoint和描述符?
前几天,我不得不恢复一个与OpenCV 3和Python 2.7一起使用的旧项目 在此代码上,要加载cv2.KeyPoint,我需要执行以下操作:如何使用Python 3在OpenCV 3上正确加载cv2.KeyPoint和描述符?,python,opencv,computer-vision,Python,Opencv,Computer Vision,前几天,我不得不恢复一个与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.K
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上运行没有问题,但是,我尝试将代码改编为Python3,如下所示:
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.load(打开(路径).read())
TypeError:需要类似字节的对象,而不是“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.load和描述符将返回以下内容:
index=pickle.load(打开(路径).read().encode())UnicodeDecodeError:
“ascii”编解码器无法解码位置2中的字节0xfa:序号不在
射程(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,但我不知道如何解决此错误。好的。。。我使用 代码:
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)