Python中opencv2 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导

我想使用图像中先前检测到的ORB特征位置来提取其他图像中的ORB描述符,使用先前确定的位置,从而绕过检测器

我似乎无法获得检测到的特性的深度副本来处理,然后再传回生成新的描述符

  • 使用原始未接触的
    f1
    关键点为
    im\u y
    图像生成描述符
  • 运行两次检测器来确定重复的特征点显然是可行的,但是有点麻烦,我想对原始特征点进行一些处理
  • 我正在通过OS X上的macports 10.8.5运行Python 2.7.6和Opencv 2.4.8
  • 代码:

    从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)