ffmpeg中的sws_scale算法性能测试

摘要:
ffmpeg中的SWS通常用于_ Scale来执行图像缩放和格式转换。此函数可以使用各种算法来处理图像。懒得测试和确定应该使用哪种算法,sws_scale算法有以下选择。图像效果比上图稍差,缩小的效果似乎不错。你几乎看不到缩放的效果。算法帧速率图像主观感知SWS_FAST_ BILINEAR103图像无明显失真,Point算法有明显锯齿,Area算法无明显锯齿。

经常用到ffmpeg中的sws_scale来进行图像缩放和格式转换,该函数可以使用各种不同算法来对图像进行处理。以前一直很懒,懒得测试和甄 别应该使用哪种算法,最近的工作时间,很多时候需要等待别人。忙里偷闲,对ffmpeg的这一组函数进行了一下封装,顺便测试了一下各种算法。

简单说一下测试环境,我使用的是Dell的品牌机,i5的CPU。ffmpeg是2010年8月左右的当时最新版本编译而成,我使用的是其静态库版本。

sws_scale的算法有如下这些选择。

#define SWS_FAST_BILINEAR     1
#define SWS_BILINEAR          2
#define SWS_BICUBIC           4
#define SWS_X                 8
#define SWS_POINT          0x10
#define SWS_AREA           0x20
#define SWS_BICUBLIN       0x40
#define SWS_GAUSS          0x80
#define SWS_SINC          0x100
#define SWS_LANCZOS       0x200
#define SWS_SPLINE        0x400

 首先,将一幅1920*1080的风景图像,缩放为400*300的24位RGB,下面的帧率,是指每秒钟缩放并渲染的次数。(经过我的测试,渲染的时间可以忽略不计,主要时间还是耗费在缩放算法上。)

算法

帧率

图像主观感受

SWS_FAST_BILINEAR

228

图像无明显失真,感觉效果很不错。

SWS_BILINEAR

95

感觉也很不错,比上一个算法边缘平滑一些。

SWS_BICUBIC

80

感觉差不多,比上上算法边缘要平滑,比上一算法要锐利。

SWS_X

91

与上一图像,我看不出区别。

SWS_POINT

427

细节比较锐利,图像效果比上图略差一点点。

SWS_AREA

116

与上上算法,我看不出区别。

SWS_BICUBLIN

87

同上。

SWS_GAUSS

80

相对于上一算法,要平滑(也可以说是模糊)一些。

SWS_SINC

30

相对于上一算法,细节要清晰一些。

SWS_LANCZOS

70

相对于上一算法,要平滑(也可以说是模糊)一点点,几乎无区别。

SWS_SPLINE

47

和上一个算法,我看不出区别。

总评,以上各种算法,图片缩小之后的效果似乎都不错。如果不是对比着看,几乎看不出缩放效果的好坏。上面所说的清晰(锐利)与平滑(模糊),是一种 客观感受,并非清晰就比平滑好,也非平滑比清晰好。其中的Point算法,效率之高,让我震撼,但效果却不差。此外,我对比过使用CImage的绘制时缩 放,其帧率可到190,但效果惨不忍睹,颜色严重失真。

第二个试验,将一幅1024*768的风景图像,放大到1920*1080,并进行渲染(此时的渲染时间,虽然不是忽略不计,但不超过5ms的渲染时间,不影响下面结论的相对准确性)。

算法

帧率

图像主观感受

SWS_FAST_BILINEAR

103

图像无明显失真,感觉效果很不错。

SWS_BILINEAR

100

和上图看不出区别。

SWS_BICUBIC

78

相对上图,感觉细节清晰一点点。

SWS_X

106

与上上图无区别。

SWS_POINT

112

边缘有明显锯齿。

SWS_AREA

114

边缘有不明显锯齿。

SWS_BICUBLIN

95

与上上上图几乎无区别。

SWS_GAUSS

86

比上图边缘略微清楚一点。

SWS_SINC

20

与上上图无区别。

SWS_LANCZOS

64

与上图无区别。

SWS_SPLINE

40

与上图无区别。

总评,Point算法有明显锯齿,Area算法锯齿要不明显一点,其余各种算法,肉眼看来无明显差异。此外,使用CImage进行渲染时缩放,帧率可达105,效果与Point相似。

个人建议,如果对图像的缩放,要追求高效,比如说是视频图像的处理,在不明确是放大还是缩小时,直接使用SWS_FAST_BILINEAR算法即可。如果明确是要缩小并显示,建议使用Point算法,如果是明确要放大并显示,其实使用CImage的Strech更高效。

当然,如果不计速度追求画面质量。在上面的算法中,选择帧率最低的那个即可,画面效果一般是最好的。

不过总的来说,ffmpeg的scale算法,速度还是非常快的,毕竟我选择的素材可是高清的图片。

(本想顺便上传一下图片,但各组图片差异其实非常小,恐怕上传的时候格式转换所造成的图像细节丢失,已经超过了各图片本身的细节差异,因此此处不上传图片了。)

注:试验了一下OpenCV的Resize效率,和上面相同的情况下,OpenCV在上面的放大试验中,每秒可以进行52次,缩小试验中,每秒可以进行458次。

免责声明:文章转载自《ffmpeg中的sws_scale算法性能测试》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇xshell 安全加密android dialog使用自定义布局 设置窗体大小位置下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

机器学习算法与Python实践之(七)逻辑回归(Logistic Regression)

http://blog.csdn.net/zouxy09/article/details/20319673 机器学习算法与Python实践之(七)逻辑回归(Logistic Regression) zouxy09@qq.com http://blog.csdn.net/zouxy09 机器学习算法与Python实践这个系列主要是参考《机器学习实战》这本书...

Boost库简介

Boost库由C++标准委员会库工作组成员发起,其中有些内容有望成为下一代C++标准库内容。在C++社区中影响甚大,是不折不扣的“准”标准库。 字符串和文本处理库 Conversion库:对C++类型转换的增强,提供更强的类型安全转换、更高效的类型安全保护、进行范围检查的数值转换和词法转换。 Format库:实现类似printf的格式化对象,可以把参数格式化...

新东方人工智能中台实践和AI部门管理经验分享

文章作者:张建鑫 前言 新东方人工智能开放平台 ( https://ai.xdf.cn/ ) 致力于教育+AI创新,以行业最低价格,提供智能语音、文字识别、人脸人体、自然语言理解等优质AI开放能力,助力中小公司快速低成本创新,全面赋能教育事业。欢迎访问网站,并留下宝贵意见。 与AI同行相比,新东方以少得多的人力和低得多的研发投入,从2020年8月,仅用一年...

机器视觉算法与应用读书笔记(算法)

1.数据结构 2.图像增强 1. 灰度值变换 2. 辐射标定 3. 图像平滑 1. 时域去噪法 2. 空间域去噪法 均值滤波器 递归线性滤波器:将上次计算得到的值带入到下次的值中 缺点:噪声并不能被全部消除 高斯滤波器高斯滤波器 4. 傅里叶变换 将函数h(x)从空间域转变到频率域 是一种可逆变换 3. 几何变换 1. 仿射变换 二维to二维之间的变...

深度学习之卷积和池化

转载:http://www.cnblogs.com/zf-blog/p/6075286.html 卷积神经网络(CNN)由输入层、卷积层、激活函数、池化层、全连接层组成,即INPUT-CONV-RELU-POOL-FC (1)卷积层:用它来进行特征提取,如下: 输入图像是32*32*3,3是它的深度(即R、G、B),卷积层是一个5*5*3的filter(...

数据挖掘系列 (1) 关联规则挖掘基本概念与 Aprior 算法

转自:http://www.cnblogs.com/fengfenggirl/p/associate_apriori.html 数据挖掘系列 (1) 关联规则挖掘基本概念与 Aprior 算法我计划整理数据挖掘的基本概念和算法,包括关联规则挖掘、分类、聚类的常用算法,敬请期待。今天讲的是关联规则挖掘的最基本的知识。 关联规则挖掘在电商、零售、大气物理、生物...