Python中opencv2 ORB数据结构的深度副本
我想使用图像中先前检测到的ORB特征位置来提取其他图像中的ORB描述符,使用先前确定的位置,从而绕过检测器 我似乎无法获得检测到的特性的深度副本来处理,然后再传回生成新的描述符Python中opencv2 ORB数据结构的深度副本,python,opencv,image-processing,orb,Python,Opencv,Image Processing,Orb,我想使用图像中先前检测到的ORB特征位置来提取其他图像中的ORB描述符,使用先前确定的位置,从而绕过检测器 我似乎无法获得检测到的特性的深度副本来处理,然后再传回生成新的描述符 使用原始未接触的f1关键点为im\u y图像生成描述符 运行两次检测器来确定重复的特征点显然是可行的,但是有点麻烦,我想对原始特征点进行一些处理 我正在通过OS X上的macports 10.8.5运行Python 2.7.6和Opencv 2.4.8 代码: 从matplotlib导入pyplot作为plt 作为cp导
f1
关键点为im\u y
图像生成描述符从matplotlib导入pyplot作为plt
作为cp导入副本
进口cv2
im_x=cv2.imread('bugg1.png',0)
im_y=cv2.imread('bung2.png',0)
orb=cv2.orb()
#第一幅图像中的关键点检测
f1=天体探测(im_x,无)
f1,d1=orb.compute(im_x,f1)
#复制原始关键点
f2=cp.deepcopy(f1)
#这里有魔法处理
#使用x图像中检测到的点从第二个y图像中获取描述符
f2,d2=orb.compute(im_y,f2)
#f2和d2现在是空列表和
显然,deepcopy在KeyPoint上不起作用。由于要素f1只是关键点列表,因此可以手动复制关键点列表:
def features_deepcopy (f):
return [cv2.KeyPoint(x = k.pt[0], y = k.pt[1],
_size = k.size, _angle = k.angle,
_response = k.response, _octave = k.octave,
_class_id = k.class_id) for k in f]
f2 = features_deepcopy(f1)
我希望这会有所帮助;-)
Christophe另一种方法(我认为更优雅的方法)是为cv2.KeyPoint()注册一个“pickling”函数,如在
def features_deepcopy (f):
return [cv2.KeyPoint(x = k.pt[0], y = k.pt[1],
_size = k.size, _angle = k.angle,
_response = k.response, _octave = k.octave,
_class_id = k.class_id) for k in f]
f2 = features_deepcopy(f1)