注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

_

_

 
 
 

日志

 
 

网站开发:ffmpeg中的sws_scale算法性能测试 - 一片云雾  

2013-05-07 21:59:47|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
网站开发:ffmpeg中的sws_scale算法性能测试 - 一片云雾
[ 来源:cnblogs | 作者:acloud | 时间:2011-10-29 | 去论坛]

-

-

经常用到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的32位RGBA,下面的帧率,是指每秒钟缩放并渲染的次数。(经过我的测试,渲染的时间可以忽略不计,主要时间还是耗费在缩放算法上。)

算法

帧率

图像主观感受

SWS_FAST_BILINEAR

140

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

SWS_BILINEAR

57

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

SWS_BICUBIC

45

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

SWS_X

58

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

SWS_POINT

232

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

SWS_AREA

68

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

SWS_BICUBLIN

51

同上。

SWS_GAUSS

48

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

SWS_SINC

15

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

SWS_LANCZOS

34

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

SWS_SPLINE

38

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

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

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

算法

帧率

图像主观感受

SWS_FAST_BILINEAR

47

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

SWS_BILINEAR

46

和上图看不出区别。

SWS_BICUBIC

21

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

SWS_X

46

与上上图无区别。

SWS_POINT

35

边缘有明显锯齿。

SWS_AREA

35

边缘有不明显锯齿。

SWS_BICUBLIN

46

与上上上图几乎无区别。

SWS_GAUSS

26

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

SWS_SINC

26

与上上图无区别。

SWS_LANCZOS

16

与上图无区别。

SWS_SPLINE

10

与上图无区别。

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

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

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

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

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

  评论这张
 
阅读(615)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017