我想使用先前确定的位置,使用图像中先前检测到的ORB特征位置提取另一幅图像中的ORB描述符,从而绕过检测器。
我似乎无法获得检测到的功能的深层处理,然后再传递回以生成新的描述符。
f1
关键点为im_y
图像生成描述符码:
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只是KeyPoint的列表,因此您可以手动复制Keypoint的列表:
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)
我希望这个能帮上忙 ;-)
克里斯多夫