Python中opencv2 ORB数据结构的深度拷贝



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

我似乎无法得到检测到的特征的深度拷贝来处理,然后传递回生成新的描述符。

  1. 使用原始未触碰的f1关键点生成im_y图像的描述符
  2. 运行检测器两次以确定副本显然确实有效,但有点黑客,我想对原始特征点做一些处理。
  3. 我正在运行Python 2.7.6, Opencv 2.4.8通过macports在OS X, 10.8.5
代码:

from matplotlib import pyplot as plt
import copy as cp
import cv2
im_x = cv2.imread('stinkbug1.png', 0)
im_y = cv2.imread('stinkbug2.png', 0)
orb = cv2.ORB()
# Keypoint detection in first image
f1 = orb.detect(im_x, None)
f1, d1 = orb.compute(im_x, f1)
# Make a copy of the orginal key points
f2 = cp.deepcopy(f1)
# Magic processing here
# Get descriptors from second y image using the detected points from the x image
f2, d2 = orb.compute(im_y, f2)
# f2 and d2 are now an empty list and a <NoneType>

显然,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)

我希望这对你有帮助;-)

克利斯朵夫

相关内容

  • 没有找到相关文章

最新更新