首页 > 其他分享 >[图像处理] YUV图像处理入门1

[图像处理] YUV图像处理入门1

时间:2022-12-18 23:11:09浏览次数:65  
标签:入门 UV YUV 图像处理 https 图像 格式

目前数字图像处理技术已经应用生活各个方面,但是大部分教程都是利用第三方库(如opencv)对RGB图像格式进行处理。对于YUV图像格式的图像处理教程较少。于是博主搬运总结了多个大牛的文章,总结出来这个YUV图像像素处理入门教程。

这些大牛有:

雷霄骅(祝愿雷神在天堂安好)

https://blog.csdn.net/leixiaohua1020/article/details/50534150

其他两位朋友:

https://www.jianshu.com/p/8d60ad489bf4

https://github.com/kayawari/YUVProcessing/tree/master/sources

YUV图像空间简介

人们为了描述颜色,提出了多种颜色空间。常用的RGB颜色空间、YUV颜色空间、HSV颜色空间。被描述的颜色本身是客观独立的,不同的颜色空间只是从不同的角度去描述同一种对象。具体了解不同颜色空间可以看看这两篇文章:

https://www.cnblogs.com/xujianqing/p/5876875.html

https://www.cnblogs.com/justkong/p/6570914.html

总而言之,YUV颜色空间主要从亮度Y,色度U、浓度Y来描述颜色,其实亮度Y也可以理解成RGB图像中的灰度值。YUV颜色空间主要在多媒体流中使用较多。YUV空间最大的特点就是图像的亮度Y和色度UV是分离的。通常人对色度UV的敏感性要小于对亮度Y的敏感性。所以通常都会对UV进行压缩,甚至没有UV分量一样可以显示完整的图像。当只有Y分量的时候,图像表示为灰度图。

根据对UV压缩的程度不同和YUV的排列方式,人们提出了多种不同的YUV格式描述。要分析YUV图像,必须搞清楚到底所使用的YUV格式类似和图像大小。YUV格式具体可以参考这篇文章:

https://blog.csdn.net/asahinokawa/article/details/80596655

本教程主要针对yuv420P(又称I420)格式进行图像处理,其他YUV格式图像处理操作类似。yuv420P是较为常用的一种YUV图像格式。其内存结构图见下图。yuv420p它是先存完Y,再存U,最后存放V。YUV数量的比例为4:1:1。可以这样理解yuv420P,Y对应宽为w,高为h的图像,U和V对应宽为w/2,高为h/2的图像。因此描述一张高为h,宽的h图像,yuv420P所需空间大小为wh3/2个字节,而RGB空间通常需要wh3个字节。对于视频流传输YUV只需占用极少的频宽,学会对YUV格式图像进行处理是非常有用的。

YUV播放器

需要专用的YUV播放器展示YUV图像,最常用的YUV播放器是YUV Player Deluxe,下载地址为:

http://www.yuvplayer.com/

YUV Player Deluxe是一个免费的YUV文件播放器,但是需要实现注册。注册方法见该文章:

https://blog.csdn.net/lesen14/article/details/53178487

YUV图像以视频流的形式表示,由于在YUV格式的视频流中没有相关文件结构的信息,需要实现设置YUV的格式、帧宽、帧高以及帧率。展示视频akiyo,宽高为352,288,格式为yuv420P如下图所示:

在YUV Player
Deluxe可以单独查看YUV各个分量的图像,当Y分量宽高为352,288;UV分量宽高为176,144。U、V分量在YUV播放器中也是当成Y分量进行播放的。

YUV图像处理所需知识

对YUV图像处理通常都是基于C/C++语言,也有人通过java,python实现。一般不需要使用任何第三方库,在本教程最后会介绍libyuv,ffmpeg等第三方库的使用。本教程主要是在vs2017下基于C语言进行YUV图像处理进行处理,会涉及C++少量知识,但是尽量不用C++,C++坑太多。

主要用到的C/C++标准库函数有:

fopen(文件打开函数);fread(读数据流函数);fwrite(写数据流函数);malloc(动态内存分配函数),malloc函数需要与free函数连用;fseek(重定义指针位置函数);还有new,delete函数,类似malloc,free函数。

所用视频样本为akiyo视频,涉及的图像分辨率主要有Qcif(176144)、CIF(352288)、D1(704*576)三种。

文章结构及代码

本文主要介绍了12种yuv基本图像处理操作,在接下来四篇文章进行讲述,主要涉及yuv图像的通道分离,图像截取,转换为rgb图等知识。链接如下:

YUV图像处理入门2

YUV图像处理入门3

YUV图像处理入门4

YUV图像处理入门5

文章所用到的代码、视频以及运行结果见:

https://download.csdn.net/download/luohenyj/10843907

https://github.com/luohenyueji/yuv420p-image-processing

标签:入门,UV,YUV,图像处理,https,图像,格式
From: https://www.cnblogs.com/luohenyueji/p/16991197.html

相关文章

  • [图像处理] YUV图像处理入门5
    12yuv420转换为rgb(opencvmat)yuv格式具有亮度信息和色彩信息分离的特点,但大多数图像处理操作都是基于RGB格式,而且自己造轮子工作量太大。因此通常都会将yuv转换为rgb,再......
  • [图像处理] YUV图像处理入门4
    9yuv420图像截取本程序中的函数主要是对YUV420P视频数据流的第一帧图像进行截取。类似opencv中的rect函数,函数的代码如下所示:/***@file9yuv_clip.cpp*@authorl......
  • Redis入门
    Redis是一个基于内存的Key-value结构数据库基于内存存储,读写性能搞适合存储热点数据(热点商品,资讯、新闻)企业应用广泛Redis简介Redis是用C语言开发的一个开源的高性......
  • 入门练习4-11
    #define_CRT_SECURE_NO_WARNINGS#include<stdio.h>intmain(){intno;do{printf("请输入一个正整数");scanf("%d",&no);if(no<=0)printf("请......
  • 入门练习4-12
    #define_CRT_SECURE_NO_WARNINGS#include<stdio.h>intmain(){intno;intnum=0;do{printf("请输入一个正整数:");scanf("%d",&no);if(no<=0)......
  • MongoDB从入门到实战之MongoDB简介
    前言相信很多同学对MongoDB这个非关系型数据库都应该挺熟悉的,在一些高性能、动态扩缩容、高可用、海量数据存储、数据价值较低、高扩展的业务场景下MongoDB可能是我们......
  • 深度学习入门笔记
    深度学习入门笔记编程语言和库Python3.xNumPyMatplotlib常用运算Numpyimportnumpyasnpx=np.array([1.0,2.0])y=np.arange(0,6,0.1)#以0.1为单......
  • Git入门教程(转载)
    考虑到CVS的一些局限性,最近和同事在公司推行Git。   其实,如果推行SVN的化,可能推行的难度会降低很多。不过lark说既然推行一个新的版本管理工具,总要花费一定的时间进......
  • Git应用开发详解之Git入门指引
    Git简史官方网站:https://git-scm.com/​​Linux内核一开始使用BitKeeper来管理和维护代码。2005年,BitKeeper不再免费使用,Linux开源社区需要一套自己的版本控......
  • Git应用开发详解之Git入门指引
    Git简史官方网站:https://git-scm.com/​​Linux内核一开始使用BitKeeper来管理和维护代码。2005年,BitKeeper不再免费使用,Linux开源社区需要一套自己的版本控......