libswscale图像格式转换与放大缩小
2016-09-30 18:03
211 查看
缩放,例如640x360拉伸为1280x720注意:没有裁剪!========================有2种使用方法:简单的初始化方法(1) sws_getContext():使用参数初始化SwsContext结构体。(2) sws_scale():转换一帧图像。(3) sws_freeContext():释放SwsContext结构体。其中sws_getContext()也可以用sws_getCachedContext()取代。更灵活的初始化方法,可以配置更多的参数:(1) sws_alloc_context():为SwsContext结构体分配内存。(2) av_opt_set_XXX():通过av_opt_set_int(),av_opt_set()…等一系列方法设置SwsContext结构体的值。在这里需要注意,SwsContext结构体的定义看不到,所以不能对其中的成员变量直接进行赋值,必须通过av_opt_set()这类的API才能对其进行赋值。(3) sws_init_context():初始化SwsContext结构体。这种复杂的方法可以配置一些sws_getContext()配置不了的参数。比如说设置图像的YUV像素的取值范围是JPEG标准(Y、U、V取值范围都是0-255)还是MPEG标准(Y取值范围是16-235,U、V的取值范围是16-240)。可以通过使用av_opt_set()设置“src_range”和“dst_range”来设置输入和输出的YUV的取值范围。如果“dst_range”字段设置为“1”的话,则代表输出的YUV的取值范围遵循“jpeg”标准;如果“dst_range”字段设置为“0”的话,则代表输出的YUV的取值范围遵循“mpeg”标准。img_convert_ctx =sws_alloc_context(); av_opt_set_int(img_convert_ctx,"sws_flags",SWS_BICUBIC|SWS_PRINT_INFO,0); av_opt_set_int(img_convert_ctx,"srcw",src_w,0); av_opt_set_int(img_convert_ctx,"srch",src_h,0); av_opt_set_int(img_convert_ctx,"src_format",src_pixfmt,0); av_opt_set_int(img_convert_ctx,"src_range",1,0); av_opt_set_int(img_convert_ctx,"dstw",dst_w,0); av_opt_set_int(img_convert_ctx,"dsth",dst_h,0); av_opt_set_int(img_convert_ctx,"dst_format",dst_pixfmt,0); av_opt_set_int(img_convert_ctx,"dst_range",1,0); sws_init_context(img_convert_ctx,NULL,NULL); ==============================算法性能测试:缩小:SWS_POINT 每秒钟可缩放约427次 效率之高,让我震撼,但效果却不差。SWS_FAST_BILINEAR 228次放大SWS_POINT 112次,边缘有明显锯齿SWS_FAST_BILINEAR 103次,效果不错建议,在不明确是放大还是缩小时,直接使用SWS_FAST_BILINEAR算法即可。如果明确是要缩小并显示,建议使用Point算法FFmpeg使用不同sws_scale()缩放算法的命令示例ffmpeg -s 480x272 -pix_fmt yuv420p -i src01_480x272.yuv -s 1280x720 -sws_flags bilinear -pix_fmt yuv420p src01_bilinear_1280x720.yuv
ffmpeg -s 480x272 -pix_fmt yuv420p -i src01_480x272.yuv -s 1280x720 -sws_flags bicubic -pix_fmt yuv420p src01_bicubic_1280x720.yuv
ffmpeg -s 480x272 -pix_fmt yuv420p -i src01_480x272.yuv -s 1280x720 -sws_flags neighbor -pix_fmt yuv420p src01_neighbor_1280x720.yuv
参考 http://blog.csdn.net/leixiaohua1020/article/details/42134965 有各种yuv的读取与写入方法http://blog.csdn.net/leixiaohua1020/article/details/14215391 有保存各种yuv和rgb的方法算法性能测试
ffmpeg -s 480x272 -pix_fmt yuv420p -i src01_480x272.yuv -s 1280x720 -sws_flags bicubic -pix_fmt yuv420p src01_bicubic_1280x720.yuv
ffmpeg -s 480x272 -pix_fmt yuv420p -i src01_480x272.yuv -s 1280x720 -sws_flags neighbor -pix_fmt yuv420p src01_neighbor_1280x720.yuv
参考 http://blog.csdn.net/leixiaohua1020/article/details/42134965 有各种yuv的读取与写入方法http://blog.csdn.net/leixiaohua1020/article/details/14215391 有保存各种yuv和rgb的方法算法性能测试
相关文章推荐
- libswscale图像格式转换与放大缩小
- Android中图片的处理(放大缩小,去色,转换格式,增加水印等)(转)
- 写了一个实用的图像放大缩小程序,但是动画GIF转换后不会显示了,只有第一帧
- 使用ffmpeg进行图像格式转换以及图像缩放/sws_scale/linux/c++/c/rgb-yuv420
- 使用ffmpeg进行图像格式转换以及图像缩放/sws_scale/linux/c++/c/rgb-yuv420
- 使用ffmpeg进行图像格式转换以及图像缩放/sws_scale/linux/c++/c/rgb-yuv420
- 图片放大缩小,去色,转换格式,增加水印等
- Android中图片的处理(放大缩小,去色,转换格式,增加水印等)
- 使用ffmpeg进行图像格式转换以及图像缩放/sws_scale/linux/c++/c/rgb-yuv420
- Android中图片的处理(放大缩小,去色,转换格式,增加水印等)函数
- drawdib对图像进行放大缩小不成功
- VB无所不能之二:利用GDI+处理图像格式转换 推荐
- 功能及需求:pictureBox里图像的缩放,要求不保存缩放后的图像,只对原图像进行查看式缩放,且图像缩小然后放大,处理图像失真的问题。
- 一个实用的图像放大缩小程序
- RGB与YUV图像视频格式的相互转换
- 将各种格式的图像转换为灰度图像
- 图像拉伸,放大缩小算法函数
- GDI+图像格式转换功能
- Delphi 2010 新增功能之: TWICImage 类[1] - 方便的图像格式转换
- RGB与YUV图像视频格式的相互转换