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

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

时间:2022-12-17 20:01:05浏览次数:55  
标签:颜色 入门 UV YUV 图像处理 图像 格式


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

YUV图像空间简介

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


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

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


本教程主要针对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所需空间大小为w*h*3/2个字节,而RGB空间通常需要w*h*3个字节。对于视频流传输YUV只需占用极少的频宽,学会对YUV格式图像进行处理是非常有用的。

[图像处理]YUV图像处理入门1_第三方库


YUV播放器

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

​http://www.yuvplayer.com/​​。

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


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

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

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

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

[图像处理]YUV图像处理入门1_颜色空间_04

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

[图像处理]YUV图像处理入门1_第三方库_06


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(176*144)、CIF(352*288)、D1(704*576)三种。


标签:颜色,入门,UV,YUV,图像处理,图像,格式
From: https://blog.51cto.com/luohenyueji/5950126

相关文章

  • Vue项目入门
    1安装VueMac版本安装:https://zhuanlan.zhihu.com/p/435312919Window版本安装:https://blog.csdn.net/weixin_43896253/article/details/116143031开发软件安装:VisualSt......
  • 《小白WEB安全入门》02. 开发篇
    目录初识HTML潜在漏洞初识CSS潜在漏洞初识JS潜在漏洞初识后端潜在漏洞后端能做什么后端种类后端框架潜在漏洞本系列文章只叙述一些超级基础理论知识,极少有实践部分本文......
  • 内存和ssd速度差距(diy从入门到放弃固态能取代内存吗)
    原文地址:https://mpc.7buzou.com/article/5745.html虽然内存和SSD都是存储产品,但两者的待遇却完全不一样:8G内存可以轻松卖到200元的价格,而200元可以买到256GB的SSD,价格差......
  • 微信小程序入门记录
    0.基础认识本质上就是仅支持微信环境的网页,其使用的wxml即html,wxss即css和js即js。但也由于微信api的加持使得开发更为简单(注册登录和支付等api)。注意:小程序的逻辑层和......
  • 【图像处理笔记】小波变换
     【图像处理笔记】总目录0引言曾经有人问我有关haar的东西,我没答上来,耿耿于怀,所以我从傅里叶变换学到小波变换再到haar小波,蓦然回首,才发现他当时问的是haar特征。但是,......
  • STL入门
    目的:复用性提升,为了建立数据结构和算法的一套标准。STL简介:STL:标准模板库STL广义:容器,算法,迭代器容器和算法之间通过迭代器进行无缝衔接STL几乎所有代码都采用了模板类......
  • VSCode编辑器极简使用入门
    VSCode(VisualStudioCode)是一款开源、跨平台、轻量级的代码编辑器,具有非常丰富的插件生态。他本身就是JavaScript+Electron(/ɪˈlektrɒn/电子)代码开发的。官方下载......
  • 入门练习4-3
    #define_CRT_SECURE_NO_WARNINGS#include<stdio.h>intmain(){inta=0;printf("请输入一个正整数:");scanf("%d",&a);while(a>=0){printf("%d",a);a-......
  • 入门练习4-4
    #define_CRT_SECURE_NO_WARNINGS#include<stdio.h>intmain(){inta=0;printf("请输入一个正整数:");scanf("%d",&a);while(a>=1){printf("%d",a);......
  • ElasticSearch系列---【Es的快速入门文档】
    Es的快速入门文档1.对比数据库理解ElasticSearch是面向文档型数据库,一条数据在这里就是一个文档。 注意:从ElasticSearch6.X开始,一个Index下只能包含一个Type,因此,在Ela......