【转】YUV值对应的颜色
版权声明:本文为博主原创文章,未经博主允许不得转载。欢迎大家积极评论,博主会一一答复!
最近有人在网上问我,YUV的值对应的颜色是如何的
下面给出YUV值对应的颜色关系
256张图512x512,每张对应的Y为0~255 每4x4对应的是同一颜色区域 横坐标 U 纵坐标V
yuv下载地址
http://download.csdn.net/detail/cabbage2008/9314683
这里截取了Y=0,10,20,60,128,250,255几张
Y=0
Y=10
Y=20
Y=60
Y=128
Y=250
Y=255
生成代码:
- #include <stdlib.h>
- #include <stdio.h>
- #include <string.h>
- typedef void Void;
- typedef bool Bool;
- typedef int Int;
- typedef unsigned char UChar;
- typedef UChar Pel; ///< 16-bit pixel type
- class TComPicYuv
- {
- private:
- // ------------------------------------------------------------------------------------------------
- // YUV buffer
- // ------------------------------------------------------------------------------------------------
- Pel* m_apiPicBufY; ///< Buffer (including margin)
- Pel* m_apiPicBufU;
- Pel* m_apiPicBufV;
- // ------------------------------------------------------------------------------------------------
- // Parameter for general YUV buffer usage
- // ------------------------------------------------------------------------------------------------
- Int m_iPicWidth; ///< Width of picture
- Int m_iPicHeight; ///< Height of picture
- public:
- TComPicYuv ();
- virtual ~TComPicYuv();
- // ------------------------------------------------------------------------------------------------
- // Memory management
- // ------------------------------------------------------------------------------------------------
- Bool create ( Int iPicWidth, Int iPicHeight );
- Void destroy ();
- Void setYuv (Pel pixelY,Pel pixelU,Pel pixelV);
- Void setPixel (int posX, int posY, int width, Pel pixelY,Pel pixelU,Pel pixelV);
- // ------------------------------------------------------------------------------------------------
- // Get information of picture
- // ------------------------------------------------------------------------------------------------
- Pel* getPicBufY () { return m_apiPicBufY ; }
- Pel* getPicBufU () { return m_apiPicBufU ; }
- Pel* getPicBufV () { return m_apiPicBufV ; }
- Int getWidth () { return m_iPicWidth; }
- Int getHeight () { return m_iPicHeight; }
- Int getStride () { return m_iPicWidth ; }
- Int getCStride () { return (m_iPicWidth >> 1); }
- };// END CLASS DEFINITION TComPicYuv
- TComPicYuv::TComPicYuv()
- {
- m_apiPicBufY = NULL; // Buffer (including margin)
- m_apiPicBufU = NULL;
- m_apiPicBufV = NULL;
- }
- TComPicYuv::~TComPicYuv()
- {
- }
- Bool TComPicYuv::create( Int iPicWidth, Int iPicHeight )
- {
- m_iPicWidth = iPicWidth;
- m_iPicHeight = iPicHeight;
- m_apiPicBufY = (Pel*)malloc(m_iPicWidth * m_iPicHeight * sizeof(Pel));
- m_apiPicBufU = (Pel*)malloc((m_iPicWidth >>1) * (m_iPicHeight>>1) * sizeof(Pel));
- m_apiPicBufV = (Pel*)malloc((m_iPicWidth >>1) * (m_iPicHeight>>1) * sizeof(Pel));
- return true;
- }
- Void TComPicYuv::destroy()
- {
- if( m_apiPicBufY ){ free( m_apiPicBufY ); m_apiPicBufY = NULL; }
- if( m_apiPicBufU ){ free( m_apiPicBufU ); m_apiPicBufU = NULL; }
- if( m_apiPicBufV ){ free( m_apiPicBufV ); m_apiPicBufV = NULL; }
- }
- Void TComPicYuv::setYuv(Pel pixelY,Pel pixelU,Pel pixelV)
- {
- if( m_apiPicBufY ){ memset(m_apiPicBufY, pixelY,m_iPicWidth * m_iPicHeight * sizeof(Pel)) ; }
- if( m_apiPicBufU ){ memset(m_apiPicBufU, pixelU,(m_iPicWidth >>1) * (m_iPicHeight>>1) * sizeof(Pel)) ; }
- if( m_apiPicBufV ){ memset(m_apiPicBufV, pixelV,(m_iPicWidth >>1) * (m_iPicHeight>>1) * sizeof(Pel)) ; }
- }
- Void TComPicYuv::setPixel(int posX, int posY, int width, Pel pixelY,Pel pixelU,Pel pixelV)
- {
- Pel *Y = m_apiPicBufY + posY*m_iPicWidth+posX;
- for(int h = 0; h<width; h++)
- {
- for(int w = 0; w<width;w++)
- {
- Y[h*m_iPicWidth + w] = pixelY;
- }
- }
- Pel *U = m_apiPicBufU + (posY>>1)*(m_iPicWidth>>1)+(posX>>1);
- Pel *V = m_apiPicBufV + (posY>>1)*(m_iPicWidth>>1)+(posX>>1);
- for(int h = 0; h<(width>>1); h++)
- {
- for(int w = 0; w<(width>>1);w++)
- {
- U[h*(m_iPicWidth>>1) + w] = pixelU;
- V[h*(m_iPicWidth>>1) + w] = pixelV;
- }
- }
- }
- int main()
- {
- TComPicYuv *frame = new TComPicYuv;
- TComPicYuv *clourMap = new TComPicYuv;
- frame->create(8,8);
- clourMap->create(512,512);
- FILE *FrameFile = fopen("D:\\clourFrame_8x8.yuv","wb");
- FILE *clourFile = fopen("D:\\clourMap_512x512.yuv","wb");
- for(int Y = 0; Y<256; Y++)
- {
- for(int U = 0; U<256; U++)
- {
- for(int V = 0; V<256; V++)
- {
- frame->setYuv((Pel)Y,(Pel)U,(Pel)V);
- fwrite(frame->getPicBufY(),1,frame->getWidth()*frame->getHeight(),FrameFile);
- fwrite(frame->getPicBufU(),1,(frame->getWidth()*frame->getHeight())>>2,FrameFile);
- fwrite(frame->getPicBufV(),1,(frame->getWidth()*frame->getHeight())>>2,FrameFile);
- int count = Y*256*256 + U*256 + V;
- if(count%1000000==0)
- {
- printf("=");
- }
- }
- }
- }
- for(int Y = 0; Y<256; Y++)
- {
- for(int U = 0; U<256; U++)
- {
- for(int V = 0; V<256; V++)
- {
- clourMap->setPixel(U*2,V*2,2,Y,U,V);
- }
- }
- fwrite(clourMap->getPicBufY(),1,clourMap->getWidth()*clourMap->getHeight(),clourFile);
- fwrite(clourMap->getPicBufU(),1,(clourMap->getWidth()*clourMap->getHeight())>>2,clourFile);
- fwrite(clourMap->getPicBufV(),1,(clourMap->getWidth()*clourMap->getHeight())>>2,clourFile);
- printf("*");
- }
- fclose(clourFile);
- fclose(FrameFile);
- frame->destroy();
- clourMap->destroy();
- }
转载:http://blog.csdn.net/cabbage2008/article/details/50117671
【转】YUV值对应的颜色的更多相关文章
- 常用icon以及color颜色RGB值和对应颜色效果图
Android谷歌官方扁平化设计常用icon集合 Android谷歌官方扁平化设计color颜色RGB值和对应颜色效果图.
- html根据下拉框选中的值修改背景颜色
错误的写法 <!doctype html><html><head><meta charset="utf-8"><title&g ...
- .NET C#生成随机颜色,可以控制亮度,生成暗色或者亮色 基于YUV模式判断颜色明亮度
.NET C#生成随机颜色,可以控制亮度,生成暗色或者亮色 基于YUV模式判断颜色明亮度 随机颜色在日常开发中很常用到,有时候要控制颜色明亮度,比如在白色背景网页上的随机颜色,一般要求颜色稍微暗一 ...
- 颜色的RGB值表示法
颜色的RGB值表示法 从物理光学试验中得出:红.绿.蓝三种色光是其他色光所混合不出来的.而这三种色光以不同比例的混合几乎可以得出自然界所有的颜色. 如红光与不同比例的绿光混合可以得出橙.黄.黄绿等色: ...
- YUV格式介绍
原文链接:http://www.cnblogs.com/azraelly/archive/2013/01/01/2841269.html YUV格式有两大类:planar和packed.对于plana ...
- 关于yuv格式
首先,内存分布 1:YUV420 (1):I420: YYYYYYYY UU VV =>YUV420P (2): ...
- 多媒体编程基础之RGB和YUV
一.概念 1.什么是RGB? 对一种颜色进行编码的方法统称为“颜色空间”或“色域”.用最简单的话说,世界上任何一种颜色的“颜色空间”都可定义成一个固定的数字或变量.RGB(红.绿.蓝)只是众多颜色空间 ...
- iOS面向编码|iOSVideoToolbox:读写解码回调函数CVImageBufferRef的YUV图像
iOS面向编码|iOSVideoToolbox:读写解码回调函数CVImageBufferRef的YUV图像 本文档基于H.264的解码,介绍读写Video Toolbox解码回调函数参数CVImag ...
- Video Toolbox:读写解码回调函数CVImageBufferRef的YUV图像
本文档基于H.264的解码,介绍读写Video Toolbox解码回调函数参数CVImageBufferRef中的YUV或RGB数据的方法,并给出CVImageBufferRef生成灰度图代码.方便调 ...
随机推荐
- 表达式求值 (栈) 用C++实现
#include <cstdio> #include <cstdlib> #include <cmath> #include <stack> #incl ...
- 解决从源码编译ncurses6.0编译lib_gen.c报错的问题
直接从官网的源码编译时,会提示报错: gcc -DHAVE_CONFIG_H -I. -I../include -D_GNU_SOURCE -DNDEBUG -O2 --param max-inlin ...
- Apache调优
1.调整文件描述符大小,默认Linux系统的文件描述符是1024,对于squid等一些服务来说 在高负载的情况下这些文件描述符是远远不够的,所以在部署该类服务器时修改文件 ...
- 母函数&&排列(模板)
#include <iostream> #include <algorithm> using namespace std; int main() { int n,i; int ...
- Myeclipse笔记
1. 自动提示:窗口->首选项->Java->编辑器->内容辅助->自动激活,在下面的“Java的自动激活触发器里面填上“.abcdefghijklmnopqrstuv ...
- 执行CMD命令
可以执行多条命令,用“\r\n”分割 using System; using System.Diagnostics; namespace Tool { public class CMDHelper { ...
- nginx环境下搭建nagios 3.5.0,及配置pnp4nagios画图
本文基于<LNMP最新源码安装脚本>,Nagios依赖PHP环境和perl环境,由于Nginx不支持Perl的CGI,需先来搭建Perl环境,Nagios原理介绍略.一.下载最新稳定源码包 ...
- c++模板类被继承时他的成员不能被子类看到
c++模板类被继承时他的成员不能被子类看到,必须用限定的符号 this->foo 或者 baseclass::foo,或者using bassclass::foo. msvc不提示错误,gcc ...
- Div在BOdy中居中
<h1 style="position: absolute; width: 500px; height:200px; left:%; top:%; margin-left:-250px ...
- php stripslashes() addslashes() 解析
stripslashes() 函数删除由 addslashes() 函数添加的反斜杠. 实例: <?php $str = "Is your name O\'reilly?"; ...