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