目前数字图像处理技术已经应用生活各个方面,但是大部分教程都是利用第三方库(如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

[图像处理] YUV图像处理入门1的更多相关文章

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

    1 分离YUV420中YUV分量 本程序中的函数主要是将YUV420P视频数据流的第一帧图像中的Y.U.V三个分量分离开并保存成三个文件.函数的代码如下所示: /** * @file 1 yuv_sp ...

  2. [图像处理] YUV图像处理入门4

    9 yuv420图像截取 本程序中的函数主要是对YUV420P视频数据流的第一帧图像进行截取.类似opencv中的rect函数,函数的代码如下所示: /** * @file 9 yuv_clip.cp ...

  3. [图像处理] YUV图像处理入门5

    12 yuv420转换为rgb(opencv mat) yuv格式具有亮度信息和色彩信息分离的特点,但大多数图像处理操作都是基于RGB格式,而且自己造轮子工作量太大.因此通常都会将yuv转换为rgb, ...

  4. [图像处理] YUV图像处理入门3

    5 yuv420格式的灰阶测试图 本程序中的函数主要是为YUV420P视频数据流的第一帧图像添加边框.函数的代码如下所示: /** * @file 5 yuv_graybar.cpp * @autho ...

  5. Python图像处理库Pillow入门

    http://python.jobbole.com/84956/ Pillow是Python里的图像处理库(PIL:Python Image Library),提供了了广泛的文件格式支持,强大的图像处 ...

  6. MATLAB图像处理_Bayer图像处理 & RGB Bayer Color分析

    Bayer图像处理   Bayer是相机内部的原始图片, 一般后缀名为.raw. 很多软件都可以查看, 比如PS. 我们相机拍照下来存储在存储卡上的.jpeg或其它格式的图片, 都是从.raw格式转化 ...

  7. 打基础丨Python图像处理入门知识详解

    摘要:本文讲解图像处理基础知识和OpenCV入门函数. 本文分享自华为云社区<[Python图像处理] 一.图像处理基础知识及OpenCV入门函数>,作者: eastmount. 一.图像 ...

  8. Atitit 图像处理知识点  知识体系 知识图谱v2

    Atitit 图像处理知识点  知识体系 知识图谱v2 霍夫变换(Hough Transform) 霍夫变换是图像处理中从图像中识别几何形状的基本方法之一,应用很广泛,也有很多改进算法.主要用来从图像 ...

  9. Atitit 图像处理知识点  知识体系 知识图谱

    Atitit 图像处理知识点  知识体系 知识图谱 图像处理知识点 图像处理知识点体系 v2 qb24.xlsx 基本知识图像金字塔op膨胀叠加混合变暗识别与检测分类肤色检测other验证码生成 基本 ...

随机推荐

  1. Docker | 使用dockerfile生成镜像,清理docker空间

    用dockerfile生成镜像并挂载数据卷 编写dockerfile文件 创建dockerfile01 文件 # 基础镜像 FROM centos VOLUME ["volume01&quo ...

  2. 驱动开发:内核枚举进程与线程ObCall回调

    在笔者上一篇文章<驱动开发:内核枚举Registry注册表回调>中我们通过特征码定位实现了对注册表回调的枚举,本篇文章LyShark将教大家如何枚举系统中的ProcessObCall进程回 ...

  3. 前端无法渲染CSS文件

    问题描述: 启动前端后,发现前端的页面渲染不符合预期,看情况应该是css文件没有生效. 排查步骤: 查看有无报错信息. 查看后台输出,没有可用的提示信息,如图: 确认 css 的路径没错. 前端打包后 ...

  4. Linux--多线程(二)

    线程的同步和互斥 基本概念 概述:现在操作系统基本都是多任务的操作系统,同时有大量可以调度的实体在运行.在多任务操作系统当中,同时运行的多个任务可能: 都需要访问/使用同一种资源 多个任务之间有依赖关 ...

  5. 我的 React 最佳实践

    There are a thousand Hamlets in a thousand people's eyes. ----- 威廉·莎士比亚 免责声明:以下充满个人观点,辩证学习 React 目前开 ...

  6. 论文笔记 - Calibrate Before Use: Improving Few-Shot Performance of Language Models

    Motivation 无需参数更新的 In-Context Learning 允许使用者在无参数的更新的情况下完成新的下游任务,交互界面是纯粹的自然语言,无 NLP 技术基础的用户也可以创建 NLP ...

  7. CodeTON Round 3 (C.差分维护,D.容斥原理)

    C. Complementary XOR 题目大意: 给你两个01串ab,问你是否可以通过一下两种操作在不超过n+5次的前提下将两个串都变为0,同时需要输出可以的操作方案 选择一个区间[l,r] 将串 ...

  8. 上下文管理器 context managet

    定义:实现了上下文管理协议的对象,主要用于保存和恢复各种全局状态,关闭文件等,它本身就是一种装饰器. with语句 with语句就是为支持上下文管理器而存在的

  9. 「浙江理工大学ACM入队200题系列」问题 K: 零基础学C/C++84——奇偶ASCII值判断

    本题是浙江理工大学ACM入队200题第八套中的K题 我们先来看一下这题的题面. 题面 题目描述 任意输入一个字符,判断其ASCII是否是奇数,若是,输出YES,否则,输出NO; 例如,字符A的ASCI ...

  10. 高性能MySQL(第4版) 第一章 MySQL架构 读书笔记

    这本书去年11月出的,今年中文版也出了,并且直接上了微信读书,之后有空就读一读,分享下读书笔记~ 原文内容比较充实,建议有时间可以读一下原文. 第一章主要是个概览. MySQL的逻辑架构 默认情况下, ...