opencv - 裁剪关键点与裁剪图像和寻找关键点

标签 opencv computer-vision

给定许多项目的图像,其所有边界框都以像素坐标已知。

我试图在每个项目周围提取一个区域(周围),使用 AKAZE 计算其描述符和特征,以便相互比较。

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

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

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

或者,为了加快速度,我在考虑:

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

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

我的问题是这种方法在功能上是合理的,这是否会产生任何后果?

最佳答案

是的,第二种策略是一个很好的方法。要有效地执行此操作,您应该在调用 OpenCV 的 detectAndCompute(或 detect,如果您正在使用它)时提供一个掩码参数。你的面具应该和你的形象一样大。在掩码的每个像素中,如果像素不位于至少一个检测区域内,则该像素将为零,否则其值为正(uchar 掩码为 255)。

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

关于效率,您应该意识到第二种方法存在开销,即完整图像将在特征检测之前进行一些图像预处理。对于 AKAZE,这是非线性扩散,而对于 SIFT 和 SURF 等其他算法,这是图像卷积。这些是构建所谓的图像金字塔所必需的。在只有少量检测的情况下,第一种策略可能更有效(图像裁剪的开销相对于图像预处理来说很小)。

关于opencv - 裁剪关键点与裁剪图像和寻找关键点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48180264/

相关文章:

opencv - 使用可口可乐标志作为相机的校准图案

image - 我如何使用 Flann 匹配之间的关系来确定合理的单应性?

python - 如何使用 OpenCV 从图像中删除特定标签/贴纸/对象?

python - 使用 Pytesseract/OpenCV 绘制边界框

c++ - 无法更改 OpenCV 视频捕获分辨率

image-processing - 如何用openCV检测圆圈组?

c++ - 计算平均值 : different result for masked image vs ROI

matlab - 为什么旋转 3D 点云后顶点法线会翻转?

python - 如何使用opencv python(hough Circles)找到给定图像中的圆?

opencv - 模板匹配噪声图像的最佳方法是什么?