Python中opencv2 ORB数据结构的深拷贝
Posted
技术标签:
【中文标题】Python中opencv2 ORB数据结构的深拷贝【英文标题】:Deep copy of an opencv2 ORB data structure in Python 【发布时间】:2014-06-26 23:51:51 【问题描述】:我想使用先前在图像中检测到的 ORB 特征locations 来提取其他图像中的 ORB 描述符,使用较早确定的位置,从而绕过检测器。
我似乎无法获得检测到的特征的深层副本以进行处理,然后再传回以生成新的描述符。
-
使用原始未触及的
f1
关键点为im_y
图像作品生成描述符
运行检测器两次以确定重复显然确实有效,但有点小技巧,我想对原始特征点进行一些处理。
我在 OS X 10.8.5 上通过 macports 运行 Python 2.7.6、Opencv 2.4.8
代码:
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>
【问题讨论】:
【参考方案1】:显然,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)
我希望这会有所帮助;-)
克里斯托夫
【讨论】:
另一种(我认为更优雅的方法)是通过为 cv2.KeyPoint() 注册一个“酸洗”函数,如***.com/a/48832618/8371207的答案中所述以上是关于Python中opencv2 ORB数据结构的深拷贝的主要内容,如果未能解决你的问题,请参考以下文章