我想通过缩小图像来优化我的人脸检测算法。什么是最好的方法?我应该使用 cvPyrDown (正如我在一个示例中看到的并且到目前为止产生的结果不佳)、cvResize 还是其他函数?
3 回答
如果您只想缩放图像,请cvResize
按照 Adrian Popovici 的建议使用。
cvPyrDown
将应用高斯模糊来平滑图像,然后默认情况下,它会通过拒绝偶数列和行来对图像进行 2 倍的下采样。这种平滑可能会降低您的性能(我不确定它如何影响检测算法)。性能不佳的另一种可能性可能是仅删除偶数行和列所造成的不连续性;然而,平滑插值(假设您使用最近邻以外的东西进行插值)cvResize
允许人脸检测更好地工作。这是有关cvPyrDown
所使用的确切内核的更多信息的文档。
对于缩小图像,我会使用:
void cvResize(const CvArr* src, CvArr* dst, int interpolation=CV_INTER_LINEAR )
要缩小图像,通常使用 CV_INTER_AREA 插值效果最好,而要放大图像,通常使用 CV_INTER_CUBIC(慢)或 CV_INTER_LINEAR(更快但看起来还可以)效果最好。
但到目前为止我还没有使用过 cvPyrDown 所以我不知道它的性能......
如果您的人脸检测算法使用 haar 特征,那么您根本不需要任何重新缩放,只需使用积分图像通过缩放检测器来访问您想要的任何比例。另外: cvResize 在新版本上似乎OpenCV (2.X)
比在OpenCV 1.X