Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opencv 裁剪关键点与裁剪图像和查找关键点_Opencv_Computer Vision - Fatal编程技术网

Opencv 裁剪关键点与裁剪图像和查找关键点

Opencv 裁剪关键点与裁剪图像和查找关键点,opencv,computer-vision,Opencv,Computer Vision,给定多个项目的图像,其所有边界框以像素坐标表示 我试图提取每个项目周围的区域(周围),使用AKAZE计算其描述符和特征,以便彼此进行比较 然而,我意识到这可能太慢了,因为它涉及: 1) 裁剪每个项目以生成许多图像 2) 对每幅图像进行检测和计算,生成关键点和描述符 或者,为了加快速度,我想: 1) 调整整个图像的大小,然后执行一次关键点的检测和计算 2) 然后,为了获得特定对象的关键点,我们只需检索与对象位置对应的一组预先计算的关键点 我的问题是这种方法在功能上是合理的,如果有任何后果呢 是的,

给定多个项目的图像,其所有边界框以像素坐标表示

我试图提取每个项目周围的区域(周围),使用AKAZE计算其描述符和特征,以便彼此进行比较

然而,我意识到这可能太慢了,因为它涉及:

1) 裁剪每个项目以生成许多图像

2) 对每幅图像进行检测和计算,生成关键点和描述符

或者,为了加快速度,我想:

1) 调整整个图像的大小,然后执行一次关键点的检测和计算

2) 然后,为了获得特定对象的关键点,我们只需检索与对象位置对应的一组预先计算的关键点


我的问题是这种方法在功能上是合理的,如果有任何后果呢

是的,这第二个策略是一个不错的选择。为了有效地实现这一点,您应该在调用OpenCV的
detectAndCompute
(或者
detect
,如果您正在使用它)时提供一个掩码参数。您的遮罩应该与图像大小相同。在遮罩的每个像素中,如果该像素不在至少一个检测区域内,则该像素的值为零,否则其值为正(对于uchar遮罩为255)

事实上,使用第一种策略,您可能会在检测区域的边界处遇到问题,在那里可能会丢失特征点。这是因为特征检测和描述符计算需要在每个像素周围处理一个像素小窗口(在边界处不可用)。要正确处理此问题,您需要在裁剪之前放大检测区域

关于效率,您应该知道第二种方法有一个开销,即在特征检测之前,完整图像将经过一些图像预处理。对于AKAZE,这是非线性扩散,而对于其他如SIFT和SURF,这是图像卷积。这些都是建立所谓的图像金字塔所需要的。在只有少量检测的情况下,第一种策略可能更有效(相对于图像预处理,图像裁剪的开销很小)