相信大家应该经常会用到OpenCV中的函数resize(),当我们想放大或者缩小图像的时候,会用到这个函数进行图像缩放,其中最核心的便是对图像的像素进行插值处理。
这里的插值interpolation,共有五种方式: 1)INTER_NEAREST - 最近邻插值法 2)INTER_LINEAR - 双线性插值法(默认) 3)INTER_AREA - 基于局部像素的重采样(resampling using pixel area relation)。对于图像抽取(image decimation)来说,这可能是一个更好的方法。但如果是放大图像时,它和最近邻法的效果类似。 4)INTER_CUBIC - 基于4x4像素邻域的3次插值法 5)INTER_LANCZOS4 - 基于8x8像素邻域的Lanczos插值
今天重点和大家聊一聊默认的双线性插值方式的函数源码,OpenCV是如何实现加速计算的?(源码我已经抠出,并打包在zip文件中,大家编译即可成功运行demo)
对于双线性插值,之前的一个帖子中,我也总结过,可参考:https://t.zsxq.com/2VFYvVn
这里,重点给大家分享一个加速方法——化float为整数计算
我们看到resize的源码中,有段代码: for (k = 0; k < ksize; k++) ialpha[dxcnksize + k] = saturate_cast(cbuf[k] * INTER_RESIZE_COEF_S