YUV422转YUV420的算法。。。 [问题点数:100分,结帖人spring_2011]

一键查看最优答案

确认一键查看最优答案?
本功能为VIP专享,开通VIP获取答案速率将提升10倍哦!
Bbs2
本版专家分:125
结帖率 91.67%
Bbs7
本版专家分:10880
Bbs2
本版专家分:125
Bbs6
本版专家分:7961
版主
Blank
签到新秀 累计签到获取,不积跬步,无以至千里,继续坚持!
Blank
铜牌 2011年6月 总版技术专家分月排行榜第三
Blank
红花 2011年11月 专题开发/技术/项目大版内专家分月排行榜第一
2011年10月 专题开发/技术/项目大版内专家分月排行榜第一
2011年9月 专题开发/技术/项目大版内专家分月排行榜第一
2011年8月 专题开发/技术/项目大版内专家分月排行榜第一
2011年7月 专题开发/技术/项目大版内专家分月排行榜第一
2011年6月 C/C++大版内专家分月排行榜第一
Blank
黄花 2011年7月 C/C++大版内专家分月排行榜第二
2011年5月 专题开发/技术/项目大版内专家分月排行榜第二
Bbs2
本版专家分:125
Bbs2
本版专家分:125
Bbs6
本版专家分:7961
版主
Blank
签到新秀 累计签到获取,不积跬步,无以至千里,继续坚持!
Blank
铜牌 2011年6月 总版技术专家分月排行榜第三
Blank
红花 2011年11月 专题开发/技术/项目大版内专家分月排行榜第一
2011年10月 专题开发/技术/项目大版内专家分月排行榜第一
2011年9月 专题开发/技术/项目大版内专家分月排行榜第一
2011年8月 专题开发/技术/项目大版内专家分月排行榜第一
2011年7月 专题开发/技术/项目大版内专家分月排行榜第一
2011年6月 C/C++大版内专家分月排行榜第一
Blank
黄花 2011年7月 C/C++大版内专家分月排行榜第二
2011年5月 专题开发/技术/项目大版内专家分月排行榜第二
Bbs2
本版专家分:125
Bbs1
本版专家分:3
Bbs2
本版专家分:303
Bbs2
本版专家分:303
Bbs2
本版专家分:125
Bbs2
本版专家分:125
Bbs2
本版专家分:125
Bbs2
本版专家分:303
Bbs2
本版专家分:125
Bbs6
本版专家分:5150
Bbs2
本版专家分:125
Bbs2
本版专家分:303
Bbs2
本版专家分:125
Bbs2
本版专家分:303
Bbs2
本版专家分:125
YUV422换为YUV420数据格式
本工程的代码实现: 通过v4l2采集摄像头JPEG数据,然后将数据从JPEG<em>转</em>换为<em>YUV</em>422,最后再将<em>YUV</em>4202<em>转</em>换为<em>YUV</em>420数据格式。详细见博客http://blog.csdn.net/l
求助:UYVY422格式为RGB
在网上下载过UYVY422<em>转</em>RGB的例子,不知道是不是对的,反正在我这边<em>转</em>出来是乱的。 我先描述一下情况: 是隔行扫描的,但是别人给了一个库,专门用于将两场合并为一场,并生成UYVY422格式, 由我
YUV420P、YUV420SP、NV12、NV21和RGB互相换并存储为JPEG以及PNG图片
<em>YUV</em>420和RGB<em>转</em>换存储为BMP和JPG以及PNG图片
FFmpeg视频解码中的YUV420P格式
参考文章 在做基于FFmpeg解码的视频播放时,需要涉及到帧数据存储的<em>YUV</em>与RGB格式,所以了解了一下,参考下述博文。 https://blog.csdn.net/lanxiaziyi/article/details/74139729#avframe-%E4%B8%8E-yuv420%E9%82%A3%E4%BA%9B%E4%BA%8B 发展史 视网膜存在三种视锥细胞,分别含有对红...
C语言图片格式换I420到UYVY
<em>YUV</em>颜色格式之<em>转</em>换\<em>YUV</em>颜色格式之<em>转</em>换:I420到UYVY
YUV420、YUV422、RGB24
//平面<em>YUV</em>422<em>转</em>平面RGB24 static void <em>YUV</em>422p_to_RGB24(unsigned char *yuv422[3], unsigned char *rgb24, int width, int height) {  int R,G,B,Y,U,V;  int x,y;  int nWidth = width>>1; //色度信号宽度  for (y=0;y
UYVY NV12和YV12
公司用TI 的3630方案,camera输出是uyvy,但是qq HD视频需要的却是420的NV12(非标准,V在U前面),网上没找到合适的<em>算法</em>,自己学了一个。
uyvy 422 420代码 simd mmx代码
uyvy 422 <em>转</em>420代码 simd mmx代码
几种常见的YUV格式--yuv422:yuv420【
<em>转</em>自:http://blog.csdn.net/u012288815/article/details/51799477 关于yuv 格式 <em>YUV</em> 格式通常有两大类:打包(packed)格式和平面(planar)格式。前者将 <em>YUV</em> 分量存放在同一个数组中, 通常是几个相邻的像素组成一个宏像素(macro-pixel);而后者使用三个数组分开存放 <em>YUV</em> 三个分量,就像 是一个三维平面一...
YUV422 to YUV420sp color invert
最近在做camera模块,出现了几个bug很有意思。   1. 颜色翻<em>转</em>,红色 变成了 蓝绿色。分析后是<em>YUV</em>422 to <em>YUV</em>420SP的时候,<em>算法</em>出现问题。后来把cb,cr互换了一下,颜色就对了。真的很奇怪。   2. <em>转</em>换video quality的时候,从high quality 切换到 low quality的时候,camera报错了。后来发现是分辨率不一样。
yuv420pyuv422
实现yuv之间的<em>转</em>换实现, 可以将yuv420p<em>转</em>换成yuv422, 可以将yuv422<em>转</em>换成uyvy, 可以将yuv420p<em>转</em>换成uyvy 。
rgb换到yuv420p nv12 yuv422p(cuda版本)
//超清公式 #define RGB2Y(R, G, B) ( 16 + 0.183f * (R) + 0.614f * (G) + 0.062f * (B) ) #define RGB2U(R, G, B) ( 128 - 0.101f * (R) - 0.339f * (G) + 0.439f * (B) ) #define RGB2V(R, G, B) ( 128 + 0.439f ...
RGB、YUVRAW数据格式
大家使用过RGB或<em>YUV</em>数据格式<em>转</em>化RAW格式吗?有没有什么相应的<em>转</em>化<em>算法</em>参考?希望能告知,谢谢!
【Codecs】图文详解YUV420/YUV422数据格式(很全面)
###Date:2018.5.24===============================================================<em>转</em>载自:http://www.360doc.com/content/18/0524/09/55952130_756582907.shtml#一.<em>YUV</em>格式与RGB格式的换算关于<em>YUV</em>与RGB<em>转</em>换可以参见  http://www.poynto...
YV12,I420,YUV420P的区别与格式
FFMPEG中的swscale提供了视频原始数据(<em>YUV</em>420,<em>YUV</em>422,<em>YUV</em>444,RGB24...)之间的<em>转</em>换,分辨率变换等操作,使用起来十分方便,在这里记录一下它的用法。 swscale主要用于在2个AVFrame之间进行<em>转</em>换。 下面来看一个视频解码的简单例子,这个程序完成了对"北京移动开发者大会茶歇视频2.flv"(其实就是优酷上的一个普通视频)的解码工作,并将解码后的数
yuv422420
#include #include #include #include #include #include #include #include //write u or v int32_t wr_u_or_v(int32_t fd, uint8_t *src, int32_t width, int32_t height) { int32_t r, i, j; f
yuv420p
做编解码过程中最常见的视频格式是yuv420p 下面对yuv420p做一些介绍 420p中的p代表planar,也就是扁平的意思。所以这里引出yuv有两种布局方式,分别是lanar和packed。 对于planar的<em>YUV</em>格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V。 对于packed的<em>YUV</em>格式,每个像素点的Y,U,V是连续交*存储的。 <em>YUV</em>,分为三个分量...
关于yuv420数据读取的问题
目前,y数据可以成功读取出来,就是uv数据出问题。出现的图片有些纵向压缩一半,不知道怎么回事,我调试代码,感觉没有错哈!代码如下: ``` pdata=ive_420_img->pu8VirAddr[1]; qdata=ive_444_img->pu8VirAddr[1]; for(HI_U16 i=0;iu16Height;i++) { for(HI_U16 j=0;ju16Stride[0];j++) { y_index=i*ive_420_img->u16Stride[0]+j; uv_index=(i>>1)*(ive_420_img->u16Stride[0]>>1)+(j>>1); qdata[y_index]=pdata[uv_index]; } } ``` 上面代码的意思是,将<em>YUV</em>420<em>转</em>化为<em>YUV</em>444,其中pdata直接指向的是420的U数据(源数据),qdata指向的是444的U数据(目的数据)。我用opencv显示U分量数据,结果见下: (对不起图像传不上去:纵向压缩:正确<em>转</em>化后的坐标为(x,y),但是目前却显示在了(x,y/2)的位置,图像的分辨率不变,其余部分是以灰色填充的。大家帮忙分析一下什么问题?
YUV420SP
1)SP(Semi-Planar)指的是<em>YUV</em>不是分成3个平面而是分成2个平面。Y数据一个平面,UV数据合用一个平面。UV平面的数据格式是UVUVUV...。 2)interlace指的是隔行扫描,是把一帧图像分成上下两场,上场(Top field)的数据是整个图像的奇数行(1,3,5,7...),下场(Bottom field)的数据是整个图像的偶数行(2,4,6,8...)。两场穿插组合起来
yuv420
以320*240分辨率图像为例 RGB24的排列方式: BGRBGRBGRBGRBGRBGRBGRBGRBGRBGRBGR…… ¦---------------320*240*3------- ¦ 每个像素点有三个字节组成分别表示R,G,B分量上的颜色值。在数据中的表示方式为一个像素一个像素表示。每一个字母表示一个字节,也就是该颜色分量的数值,相邻的三个BGR字节表示一个像
YUV422(YUYV)与YUV420相互
Example2.13.V4L2_PIX_FMT_YUYV4 × 4 pixelimage start+0: Y'00 Cb00 Y'01 Cr00 Y'02 Cb01 Y'03 Cr01 start+8: Y'10 Cb10 Y'11 ...
YUV420SP/YUV420P
<em>YUV</em>420SP: sp(semi-Planar二维平面)指的是<em>YUV</em>不是3个平面而是分成2个平面。Y数据一个平面,UV数据合用一个平面。UV平面的数据格式是UVUVUV... <em>YUV</em>420P: 420P是先把U存放完后,再存放V,也就是说UV他们是连续的。 ...
( YUV420(YV12)与YUY2(YUV422,YUYV)格式互
做美颜要进行格式<em>转</em>换,就做了两种格式的互<em>转</em>,( <em>YUV</em>420(YV12)与YUY2(<em>YUV</em>422,YUYV)格式互<em>转</em>
YUVRGB查表算法
因为浮点<em>算法</em>太耗时间,现在想用空间换时间。求一个<em>YUV</em><em>转</em>RGB的查表<em>算法</em>高效一点的,如果可以能多给几个不同的格式<em>转</em>RGB的或者思路也行。。。最好是源码。谢谢。有人愿意分享吗?
OPENCV读取YUV420格式
利用 opencv 读取<em>YUV</em>420格式视频
YUYVRGB888,RGB565
我想用ARM9的板子采集摄像头输出(YUYV格式)的视频,并在LCD(显示格式RGB565)上显示,我下了一个程序,能够实现RGB888显示,为了能在LCD上显示,我把RGB888<em>转</em>换为RGB565,
opencv 如何缩放 YUV420 数据
我从文件中读取 一帧 yuv420 的数据,保存到一个数组中, 请问 如何使用opencv 对yuv数据进行缩放? 或者不用opencv 使用其他的函数?
ffmpeg编码YUV图像成h264文件 关于时间戳pts的问题!
摄像头采集的每一帧<em>YUV</em>数据通过ffmpeg编码为h264文件 avcodec_encode_video2(video_stream->codec,&pkt,pFrame,&got _pkt)循环调用此函数编码每一帧图像 问题:编码时AVFrame的成员pts 该怎么赋值? 以及AVStream->time_base 与 AVStream->codec->time_base 表达的意思有差别吗? 这是雷博的代码: ![图片说明](https://img-ask.csdn.net/upload/201801/12/1515734452_61824.png) 讲解一下这个代码也可以,谢谢
YUV420 Planar 换为 YUV422 Packed
<em>YUV</em>格式通常有两大类:打包(packed)格式和平面(planar)格式。Packed 格式将<em>YUV</em>分量存放在同一个数组中,通常是几个相邻的像素组成一个宏像素(macro-pixel),比如相邻两个像素组成一个宏像素,UYVY Planar 格式使用三个数组分开存放<em>YUV</em>三个分量。在使用 FFMPEG avcodec_decode_video() 函数解码H.264码流后,...
通过pipe使用ffmpeg推流视频流处理出错
![图片说明](https://img-ask.csdn.net/upload/201903/30/1553946177_807326.jpg) ``` command = ['ffmpeg', '-use_wallclock_as_timestamps', '1', '-y', '-f', 'rawvideo', '-vcodec', 'rawvideo', '-pix_fmt', 'bgr24', '-s', '640*480', '-r', '9', '-i', '-', '-c:v', 'libx264', '-pix_fmt', 'yuv420p', '-preset', 'ultrafast', '-f', 'hls', '-hls_list_size', '9', '-hls_time','2', '/ts/pla.m3u8'] proc = sp.Popen(command, stdin=sp.PIPE) ··· ··· vid = cv2.VideoCapture(0) ··· return_value, frame = vid.read() ··· pipe_frame = frame[:, :, ::-1] proc.stdin.write(pipe_frame.tostring()) ```
RGB、YUY2、YUYV、YVYU、UYVY与AYUV
最近项目中用到了好多<em>YUV</em>格式相关的东西,在网上找了一些资料,整理如下:计算机彩色显示器显示色彩的原理与彩色电视机一样,都是采用R(Red)、G(Green)、B(Blue)相加混色的原理:通过发射出三种不同强度的电子束,使屏幕内侧覆盖的红、绿、蓝磷光材料发光而产生色彩。这种色彩的表示方法称为RGB色彩空间表示(它也是多媒体计算机技术中用得最多的一种色彩空间表示方法)。根据三基色原理,任意一种色光
(高分)YUV420换为YV12问题
我的解码库输出的图像是I420的图像(24位),客户要求用YV12输出(12位),<em>转</em>换函数我想用开源的代码,可是不知道这些参数如何传入?/*** <em>YUV</em> edged -> <em>YUV</em> conversion
(100分)yuv422(交错)为h264?
通过v4l2得到的yuv视频,用pyuv如下设置可以看: 但是我用命令:x264 -o test.264 640x480.yuv,图像应该是交错的,不清晰。 先后尝试了: x264 -o test.2
用libjpeg-turbo将jpeg图像YUV格式
新新手一枚,用libjpeg-turbo将jpeg图像<em>转</em>为<em>YUV</em>格式,运行jpeg_create_decompress时返回值为1并跳出,求问大佬们怎么解决
AV_PIX_FMT_YUV420P与AV_PIX_FMT_YUVJ420P
<em>YUV</em>420P <em>YUV</em>J420P
用xvid以UYVY的格式解码出来的视频,如何在framebuffer中直接写入?
不知道问在这里合适不. 在做arm的视频的东西,系统是基于linux的. 用xvid以UYVY解码出来后,想在fb/3上直接显示.应该怎么样直接写到framebuffer中呢. 以这种格式解码出来的的
yuv420p 与yuvj420p换为RGB565
问题请教: 在android中用接收h264 rtp流,并用ffmpeg解码。使用网上的库Display<em>YUV</em>_16把yuv420p的数据<em>转</em>换到RGB565后,在手机上显示。但是今天用一个新的数据源,
【video】YUV420与YUV422区别
Y:亮度分量 UV:色度分量 Y与RGB的演算关系为:Y = 0.2126 R + 0.7152 G + 0.0722 B <em>YUV</em>4:2:2或4:2:0都是指的Y分量和UV分量在一个像素点中占有的平均比例。 <em>YUV</em>422:水平方向上的UV分量减半了 <em>YUV</em>420:水平垂直方向都会减半 <em>YUV</em> 4:4:4采样,每一个Y对应一组UV分量。 <em>YUV</em> 4:2:2采样,每两个Y共用一组UV分量...
YUV420P图片裁剪出其中一块
我通过ffplay程序获得<em>YUV</em>420P图像,在图像显示之前,我需要进行裁剪处理,比如<em>YUV</em>420P图像如下: 比如需要裁剪出左上角的图像。裁剪后的图像仍然需要为<em>YUV</em>420P格式,因为我还需要通过S
yuv422与yuv420互
yuv422包括打包和分片两种格式 yuv422与yuv420互<em>转</em>
我在网上找了个bmpYUV的程序进行修改,但读不出数据,不知什么问题,有谁懂的请帮忙看下,谢谢了
#include #include #include "bmp2rgb.h" u_int8_t BMP2RGB(BITMAPFILEHEADER file_header,BITMAPINFOHEADER info_header, FILE* bmpFile, u_int8_t* rgbBuf);//24bit RGB u_int8_t RGB24To<em>YUV</em>420(int Width,int Height,u_int8_t* rgbBuf,u_int8_t*YuvBuffer); #define max(a,b) (((a)>(b))?(a):(b)) #define min(a,b) (((a) < (b)) ? (a) : (b)) int main(int argc, char** argv) { //设置命令行参数 argv[1]= "boot_logo.bmp"; argv[2]="boot_logo.yuv"; //相当于设置文件名 char* bmpFileName = argv[1]; char* yuvFileName = argv[2]; //打开文件 FILE* bmpFile = fopen(bmpFileName, "rb"); if (bmpFile == NULL) { printf(" Open the BMP file.\n"); exit(1); } else { printf("The BMP file is %s\n", bmpFileName); } FILE* yuvFile = fopen(yuvFileName, "wb"); if (yuvFile == NULL) { printf("Cannot open the <em>YUV</em> file.\n"); exit(1); } else { printf("The <em>YUV</em> file is %s\n", yuvFileName); } //读取BMP文件头,信息头,读取错误时的处理代码 BITMAPFILEHEADER file_header; BITMAPINFOHEADER info_header; if (fread(&file_header, sizeof(BITMAPFILEHEADER), 1, bmpFile) != 1) if (file_header.bfType != 0x4D42) { printf("Not BMP file.\n"); exit(1); } if (fread(&info_header, sizeof(BITMAPINFOHEADER), 1, bmpFile) != 1) { printf("read info header error!"); exit(1); }//结束读取BMP文件头 //读取图像尺寸 int width = info_header.biWidth; int height = info_header.biHeight; //开辟缓冲区 buf u_int8_t* yBuf = (u_int8_t*)malloc(height*width); u_int8_t* uBuf = (u_int8_t*)malloc(height*width / 4); u_int8_t* vBuf = (u_int8_t*)malloc(height*width / 4); u_int8_t* rgbBuf = (u_int8_t*)malloc(height*width * 3); u_int8_t*YuvBuffer =(u_int8_t*)malloc(height*width * 5); if (yBuf == NULL || uBuf == NULL || vBuf == NULL || rgbBuf == NULL || YuvBuffer==NULL) { printf("Not enough memory\n"); exit(1); } //BMP与RGB的<em>转</em>换,得到RGB数据 if (BMP2RGB(file_header, info_header, bmpFile, rgbBuf)) { printf("BMP2RGB error\n"); exit(1); } //RGB与<em>YUV</em>的<em>转</em>换,得到<em>YUV</em>数据 // int flip = 0; /*读取到的图像数据是倒序存放的,flip=0保证了RGB2<em>YUV</em>可以正确地对其<em>转</em>换*/ /* if (RGB2<em>YUV</em>(width, height, rgbBuf, yBuf, uBuf, vBuf, flip)) { printf("RGB2<em>YUV</em> error\n"); exit(1); } //将yuv按顺序写入yuvfile文件 fwrite(yBuf, 1, width * height, yuvFile); fwrite(uBuf, 1, (width * height) / 4, yuvFile); fwrite(vBuf, 1, (width * height) / 4, yuvFile);*/ if( RGB24To<em>YUV</em>420( width, height, rgbBuf,YuvBuffer)) { printf("RGB24To<em>YUV</em>420 error\n"); exit(1); } int len=0; len= fwrite(YuvBuffer, 1,sizeof(YuvBuffer), yuvFile); printf("len ==%d byte\n",len); //打印宽高,方便yuv观看程序打开 printf("width is %d", width); printf("\n"); printf("height is %d", height); printf("\n"); //清理内存 free(rgbBuf); free(YuvBuffer); free(yBuf); free(uBuf); free(vBuf); fclose(bmpFile); fclose(yuvFile); return 0; } u_int8_t BMP2RGB(BITMAPFILEHEADER file_header,BITMAPINFOHEADER info_header, FILE* bmpFile, u_int8_t* rgbBuf) { BITMAPFILEHEADER file_h=file_header; BITMAPINFOHEADER info_h=info_header; FILE* pFile =bmpFile; int w=0,h=0; //确定像素的实际点阵数 w = (info_h.biWidth*info_h.biBitCount + 31) / 32 * 4;//w为实际一行的字节数 h = info_h.biHeight;//h为列数 // printf("w==%d,h==%d\n",w,h); //开辟实际字节数量的缓冲区,读数据,一次读取一个字节 u_int8_t* dataBuf = (u_int8_t*)malloc(w*h); /*使用文件头的字节偏移属性bfOffBits 直接把文件指针定位到像素值数据的起始 */ fseek(pFile, file_h.bfOffBits, 0); fread(dataBuf, 1, w*h, pFile); unsigned char* data = dataBuf; u_int8_t* rgb = rgbBuf; //开始写入rgb int i, j; for (j = 0; j < h; j++)//j控制行循环 { for (i = 0; i < w; i += 3)//i控制列循环 { *rgb = data[i + w*j];//B *(rgb + 1) = data[i + w*j + 1];//G *(rgb + 2) = data[i + w*j + 2];//R rgb += 3; } } //释放内存 free(dataBuf); return 0; } /***************************************************************************************************************/ u_int8_t RGB24To<em>YUV</em>420(int Width,int Height,u_int8_t* rgbBuf,u_int8_t*YuvBuffer) { u_int8_t* yuvBuf=YuvBuffer;//<em>YUV</em>空间 int nWidth=Width; int nHeight=Height; /////////////////////下面<em>转</em>换<em>算法</em>是网上查到的 int i, j; u_int8_t*bufY = yuvBuf; u_int8_t*bufU = yuvBuf + nWidth * nHeight; u_int8_t*bufV = bufU + (nWidth* nHeight* 1/4); u_int8_t*Y=bufY; u_int8_t*U=bufU; u_int8_t*V=bufV; u_int8_t*bufRGB; unsigned char y, u, v, r, g, b; if (NULL==rgbBuf) { printf("NULL==rgbBuf\n"); return 1 ; } for (j = 0; j>8) + 16;//16 v = (unsigned char)((-38 * r - 74 * g + 112 * b + 128) >>8) +128 ; //128 u = (unsigned char)((112 * r - 94 * g - 18 * b + 128) >> 8) + 128 ; *(bufY++)=max(0,min(y, 255 )); if (j%2==0&&i%2 ==0) { if (u>255) { u=255; } if (u255) { v = 255; } if (v #include "sys/types.h" #include typedef unsigned long DWORD;//32bit typedef unsigned short WORD;//16bit typedef unsigned long LONG; //32bit typedef struct tagBITMAPFILEHEADER { //0x00~0x01,说明文件的类型 WORD bfType; //0x02~0x05,说明文件的大小,用字节B为单位 DWORD bfSize; //0x06~0x07,保留,设置为0 WORD bfReserved1; //0x08~0x09,保留,设置为0 WORD bfReserved2; //0x0a~0x0d,说明从BITMAP_FILE_HEADER结构开始到实际的图像数据之间的字节偏移量 DWORD bfOffBits; } BITMAPFILEHEADER; typedef struct tagBITMAPINFOHEADER { //0x0e~0x11,说明当前结构体所需字节数 DWORD biSize; //0x12~0x15,以像素为单位说明图像的宽度 LONG biWidth; //0x16~0x19,以像素为单位说明图像的高度 LONG biHeight; //0x1a~0x1b,说明位面数,必须为1 WORD biPlanes; //0x1c~0x1d,说明图像的位深度 WORD biBitCount; //0x1e~0x21,说明图像是否压缩及压缩类型 DWORD biCompression; //0x22~0x25,以字节为单位说明图像大小,必须是4的整数倍 DWORD biSizeImage; //0x26~0x29,目标设备的水平分辨率,像素/米 LONG biXPelsPerMeter; //0x2a~0x2d,目标设备的垂直分辨率,像素/米 LONG biYPelsPerMeter; //0x2e~0x31,说明图像实际用到的颜色数,如果为0,则颜色数为2的biBitCount次方 DWORD biClrUsed; //0x32~0x35,说明对图像显示有重要影响的颜色索引的数目,如果是0,表示都重要。 DWORD biClrImportant; } BITMAPINFOHEADER; ``` 运行环境linux,bmp图片24位 运行结果: The BMP file is boot_logo.bmp The <em>YUV</em> file is boot_logo.yuv len ==8 byte width is 185729024 height is 0
yuv数据格式介绍与rgb的换,图像文件的封装
通常我们用RGB表示一种彩色。计算机系统里的LCD显示的数据就是RGB来表示每个像素的颜色。 而在我们生活里,有黑白电视机与彩色电视机两种,拍摄节目源时不可以用两种不同的摄像机来存放两种图像数据。 所以为了兼容两种电视机,专家就引入<em>YUV</em>格式代替RGB,其中Y表示亮度, U和V表示色差。 黑白电视机只用Y信号, 而彩色电视机可由<em>YUV</em><em>转</em>换成RGB再显示颜色。通常我们所用的<em>YUV</em>格式是 ITU-R
这个bmp的RGBYUV,再用Y值输出灰度图为什么运行不出来?
# 谢谢诸位大佬,我觉得没什么毛病了啊…… ``` #include #include #include typedef unsigned char BYTE; typedef unsigned short WORD; typedef unsigned long DWORD; /* bmp文件头 */ #pragma pack(1) typedef struct BMPFILEHEADER { BYTE bfType; //文件类型,必须是0x424D,即字符“BM” DWORD bSize; // 文件的大小 WORD bReserved1; // 保留值,必须设置为0 WORD bReserved2; // 保留值,必须设置为0 DWORD bOffset; // 文件头的最后到图像数据位开始的偏移量 }BMPHeader; #pragma pack() /* 位图数据信息结构*/ #pragma pack(1) typedef struct BMP_INFO { DWORD bInfoSize; // 结构的大小 long bWidth; // 图像的宽度 long bHeight; // 图像的高度 WORD bPlanes; // 图像的平面数 WORD bBitCount; // 颜色/像素的位数 DWORD bCompression; // 压缩类型 DWORD bmpImageSize; // DIB数据区的大小,以字节为单位 long bXPelsPerMeter; // 水平分辨率 long bYPelsPerMeter; // 垂直分辨率 DWORD bClrUsed; // 使用的色彩数 DWORD bClrImportant; // 重要的颜色数 }BMPInfo; #pragma pack() /* 彩色表:调色板 */ #pragma pack(1) typedef struct RGB_QUAD { BYTE rgbBlue; // 蓝色强度 BYTE rgbGreen; // 绿色强度 BYTE rgbRed; // 红色强度 BYTE rgbReversed; // 保留值 }RGB; #pragma pack() int main() { FILE *fp,*fg; BMPHeader *fh; BMPInfo *fi; RGB *fq; BYTE data[2000][2000][3]; //存储RGB图像的像素点 BYTE yuv[2000][2000][3]; //yuv BYTE data_gray[2000]; //存储灰度图像的像素点 int i,j,k; printf("%d",0); fp=fopen("test.bmp","rb"); //打开bmp文件 if (fp==NULL){ printf("Can't open the file!\n"); return 0; } fh=(BMPHeader*)malloc(sizeof(BMPHeader)); fi=(BMPInfo*)malloc(sizeof(BMPInfo)); //读取位图头结构和信息头 fread(fh,sizeof(BMPHeader),1,fp); fread(fi,sizeof(BMPInfo),1,fp); //修改头信息 fi->bBitCount=8; fi->bmpImageSize=((fi->bWidth*3+3)/4)*4*fi->bHeight; //fi->biClrUsed=256; fh->bOffset=sizeof(BMPHeader)+sizeof(BMPInfo)+256*sizeof(RGB); fh->bSize=fh->bOffset+fi->bmpImageSize; printf("%d",123); for(i=0;ibHeight;i++) //读取RGB图像像素 { for(j=0;jbWidth+3)/4*4;j++) { for(k=0;kbHeight;i++) { for(j=0;jbWidth+3)/4*4;j++) { yuv[i][j][0]=0.299*data[i][j][2]+0.587*data[i][j][1]+0.114*data[i][j][0];//Y yuv[i][j][1]=0.493*(data[i][j][2]-yuv[i][j][0]);//U yuv[i][j][2]=0.877*(data[i][j][2]-yuv[i][j][0]);//V } } /*创建灰色图像*/ fg=fopen("gray.bmp","wb"); if(fg==NULL) printf("Wrong!(write a gray bmp)\n"); //创建调色板 fq=(RGB*)malloc(256*sizeof(RGB)); for(i=0;ibHeight;i++){ //读取yuv中的Y值并写入灰度图 for(j=0;jbWidth+3)/4*4;j++){ data_gray[j]=(int)yuv[i][j][0]; } fwrite(data_gray,j,1,fg); } free(fh); free(fi); free(fq); fclose(fp); fclose(fg); return 0; } ```
UYVY,YUY2,YVYU YV12
UYVY,YUY2,YVYU <em>转</em> YV12 已经通过验证<em>转</em>换正常,简单易用,直接运行;
YUYV(YUV422) to YUV420P
YUYV(<em>YUV</em>422) to <em>YUV</em>420P 前言 之前接触到一个YUYV的摄像头,需要将采集到的YUYV数据<em>转</em>换为<em>YUV</em>420P数据.在经历了一些弯路的同时,发现了网上流传的一些资料有误,遂写此博文. 基础 <em>YUV</em>,分为三个分量,“Y”表示明亮度(Luminance或Luma),也就是灰度值;而“U”和“V” 表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和...
YUV420RGB
一、<em>YUV</em>420数据存储   <em>YUV</em>格式有两大类:planar和packed。 对于planar的<em>YUV</em>格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V。 对于packed的<em>YUV</em>格式,每个像素点的Y,U,V是连续交*存储的。 以dm642的H263loopback例子程序为例, 发送线程中,视频捕获后我们得到<em>YUV</em>422 planar数据, 然后<em>转</em>化成Y...
YUV444YUV420出错,呈绿色
由rgb24提取的rgb分量生成的<em>YUV</em>444图像显示正确。 但由444的<em>YUV</em>分量所<em>转</em>成的420格式的图像却是绿色的。 这是咋回事? 部分代码如下: u = (utemp + utemp + ute
YUV422 YUV420 Planar Semi-Planar详解
前言<em>YUV</em> 格式通常有两大类:打包(packed)格式和平面(planar)格式。前者将 <em>YUV</em> 分量存放在同一个数组中, 通常是几个相邻的像素组成一个宏像素(macro-pixel);而后者使用三个数组分开存放 <em>YUV</em> 三个分量,就像 是一个三维平面一样。一、<em>YUV</em>420、<em>YUV</em>420P和<em>YUV</em>420SP区别 <em>YUV</em>420: 即打包格式的<em>YUV</em>420 <em>YUV</em>420P: 即<em>YUV</em>420 Plan
RGB565YUV420
下面是我写的RGB565<em>转</em><em>YUV</em>420的程序,但是<em>转</em>换后图片颜色有点偏绿(图片显示是对的). 请大侠帮我看看是不是哪里有问题.... void Color_RGB565to<em>YUV</em>420_Buf(U8
YUV图解 (YUV444, YUV422, YUV420, YV12, NV12, NV21)--
<em>YUV</em>图解 (<em>YUV</em>444, <em>YUV</em>422, <em>YUV</em>420, YV12, NV12, NV21)
解释YUV444,YUV422,YUV420
通常我们用RGB表示一种彩色。计算机系统里的LCD显示的数据就是RGB来表示每个像素的颜色。 而在我们生活里,有黑白电视机与彩色电视机两种,拍摄节目源时不可以用两种不同的摄像机来存放两种图像数据。 所以为了兼容两种电视机,专家就引入<em>YUV</em>格式代替RGB,其中Y表示亮度, U和V表示色差。 黑白电视机只用Y信号, 而彩色电视机可由<em>YUV</em><em>转</em>换成RGB再显示颜色。 通常我们所用的<em>YUV</em>格式是 ITU-...
图像原始格式(YUV444 YUV422 YUV420)一探究竟
前段时间搞x264编码测试,传参的时候需要告诉编码器我的原始数据格式是什么,其中在x264.h头文件中定义了如下一堆类型。 /* Colorspace type */ #define X264_CSP_MASK 0x00ff /* */ #define X264_CSP_NONE 0x0000 /* Invalid mode */...
YUV422420
各位大虾们,我刚接触视频解理,组长让我把422<em>转</em>成420,请问该怎么<em>转</em>啊?最好有代码,谢谢啦!
YUV422成rgb到底错在哪里
官方sdk里说是<em>YUV</em>422的于是我<em>转</em>了一个星期 也找不到问题在哪 // 把*lpdata从yuv422(4:2:2)格式<em>转</em>换为RGB格式; gm_RGBful=new unsigned char;
YUV420内容的一些理解
最近在做一个视频播放器,里面涉及到<em>转</em>码成<em>YUV</em>的内容,对这个<em>YUV</em>里面的内容非常不理解,百度又找不到自己需要的,所以特地做了下了解。 <em>YUV</em>是一种颜色编码方法,其中"Y"代表明亮度,,"U"和"V"代表其色度,最大的优点是只需要极少的频宽来进行视频信号传输。(摘自百度百科) <em>YUV</em>420是<em>YUV</em>里的一种,其格式的Y:U:V的比例为4:2:0,即每4个Y用一组UV(这个还不是很理
opencv cvcvtcolor函数 将RGBYUV
![<em>YUV</em>](https://img-ask.csdn.net/upload/201504/13/1428924331_530409.png) ![RGB](https://img-ask.csdn.net/upload/201504/13/1428924318_594405.png) <em>转</em>换后图片怎么变成这样了
YUV420编码格式
<em>YUV</em>420 简介 <em>YUV</em>是一种常见的媒体流颜色编码格式,其特点占用带宽低,Y、U、V分别代表三个通到,Y代表明亮度,基础灰度值,UV代表颜色和饱和度,420代表对原始数据的采样率,0不代表V上就没有采集,而是相邻行对UV的采集比例关系,比如第一行UV采集比例是2:0,第二行则为0:2,依次交替进行;每个像素点都是一个<em>YUV</em>数据 8bit的原始数据<em>转</em>换<em>YUV</em>420示例(2行2列) y0 u0 v0...
DM365/DM355/DM6467上使用的YUV颜色空间说明
比较DM365和DM6467两款芯片在处理<em>YUV</em>图像时的区别,这个对于要处理像TVP5158多通道图像输入或直接播放视频文件时有重要作用。 下图是DM6467的视频接口处理前端 由上图可以看出,模拟视频数据经过解码器处理后输出符合标准(BT656/BT1120)的YCbC
GRAY8、YUV420P、YUV422P、YUV444P、YUYV422、RGB24间任意两个互
GRAY8、<em>YUV</em>420P、<em>YUV</em>422P、<em>YUV</em>444P、YUYV422、RGB24间任意两个间互<em>转</em>,读取一个本地文件,文件像素格式为上述中任意一种,<em>转</em>换成另外一种格式
YUV420和YUV411对比
未采样前: 第一行四个像素为:[Y0 U0 V0] [Y1 U1 V1] [Y2 U2 V2] [Y3 U3 V3] 第二行四个像素为:[Y4 U4 V4] [Y5 U5 V5] [Y6 U6 V6] [Y7 U7 V7] 4:2:0 采样 它指得是对每行扫描线来说,只有一种色度分量以2:1的抽样率存储。 相邻的扫描行存储不同的色度分量, 也就是说,如果一行是4:2:0的话,下一...
【图像】数据格式介绍(yuv420sp、yuv420sp、yv12,nv12等)
<em>YUV</em>定义:分为三个分量,“Y”表示明亮度(Luminance或Luma),也就是灰度值;而“U”和“V” 表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。 <em>YUV</em>格式:有两大类:planar和packed。 <em>YUV</em>格式通常有两大类:打包(packed)格式和平面(planar)格式。 对于planar的<em>YUV</em>格式,先连续存...
nv12yuv420
实现从GPU的存储空间直接取NV12数据,并将其<em>转</em>换成<em>YUV</em>420,然后返回给内存。
YUV420/422 444 模式输出模块
<em>YUV</em>420/422<em>转</em> 444 模式输出模块,stream 输入输出模式
如何得到USB摄像头的数据格式是YUY2还是MJPG?
USB摄像头用DirectShow实现视频预览和按键拍照(CCapture类改的)。摄像头在不同的电脑上输出的数据格式不一样,有的是YUY2格式,有的是MJPG格式(通过调用DirectShow的数据
怎么将yuv为h264保存到本地
从服务端返回数据,不是一次性返回,是每隔几秒返回一次,要求实时<em>转</em>码保存
uyvy422到RGB888
在嵌入式系统中由于摄像头彩集出来的数据一般会采用<em>YUV</em>的格式,但是framebuffer一般只接收RGB的数据,因此需要<em>YUV</em>到RGB颜色空间的<em>转</em>换。 <em>YUV</em>到RGB的<em>转</em>换思路一般是提到Y,U,V分量按照标准的<em>转</em>换矩阵进行换算,以<em>YUV</em>422I(排列方式为uyvy...序列)为例: //输入<em>YUV</em>422I buffer数据,输出RGB buffer数据; static int UY
YUV420数据格式
1. <em>YUV</em>简介<em>YUV</em>定义:分为三个分量,“Y”表示明亮度(Luminance或Luma),也就是灰度值;而“U”和“V” 表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。<em>YUV</em>格式:有两大类:planar和packed。对于planar的<em>YUV</em>格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V。对于packed的...
将yuv420格式的数据在picturebox中显示出来 C#
将yuv420格式的数据图片在picturebox中显示出来。提示下思路,给出代码更好。我能将yuv420格式的数据<em>转</em>rgb在的过程。如果有好更好的代码将yuv420<em>转</em>rgb也行。 在线等
关于YUV420
关于<em>YUV</em>和RGB色彩模型一样,<em>YUV</em>也是被发明来描述色彩的模型。类似的还有CMYK等。RGB 是使用红绿蓝三原色来描述色彩的模型。 <em>YUV</em> 使用亮度和色度来描述色彩的模型。 CMYK 是使用青色Cyan、品红色Magenta、黄色Yellow 来描述色彩的模型。Y:表示的是亮度。UV是色差。<em>YUV</em>又称YCbCr,Cb代表蓝色差量(U),Cr代表红色分量(V),Y不仅有绿分量,还叠加了亮度信息。
请问如何用c语言从jpg图片读取出yuv420sp nv21格式的信息(jpgnv21)
请问如何用c语言从jpg图片读取出yuv420sp nv21格式的信息(jpg<em>转</em>nv21),尽量不依赖别的库,或者使用libjpeg库
视频流YUV422RGB24,用RGB24图像显示出来.图像偏绿色不知道怎么优化,求高手支招
视频流<em>YUV</em>422<em>转</em>RGB24,用RGB24图像显示出来.图像偏绿色不知道怎么优化,求高手支招! 下面是<em>YUV</em>422<em>转</em>RGB24的代码: int convert_yuv_to_rgb_pixel(in
YUV422(UYVY)YUV420P(NV21)是怎么丢弃一组UV的?
<em>YUV</em>422(UYVY)<em>转</em><em>YUV</em>420P(NV21)是怎么丢弃一组UV的?
有些UYVY摄像头,使用IAMStreamConfig::SetFormat设置分辨率时,成功不了
有些UYVY摄像头,使用IAMStreamConfig::SetFormat设置分辨率时,成功不了 主要代码如下: IAMStreamConfig * GetStreamConfig(void) {
YUV422 YUV420 Planar \ Semi-Planar \ Interleaved格式详解
很多人对<em>YUV</em>数据格式不清楚,以至于在做视频的时候出现了一些不可预知的错误(比如说图像带有点、颜色不对等)。今晚是周末放假,我就抽点时间来给大家介绍一下。        提示: 读下面的文字时,希望大家结合图片看,这样更易理解        在<em>YUV</em>420中,一个像素点对应一个Y,一个2X2的小方块对应一个U和V。对于所有<em>YUV</em>420图像,它们的Y值排列是完全相同的,因为只有Y的图像就是灰度图
yuv420 图片与视频
自己测试时用的yuv420格式的图片与视频,包含640x480图片与视频
YUV420及YUV422格式的采集存储方式
一、<em>YUV</em>420格式又被称作YV12格式,YV12的排列方式:(YV12和<em>YUV</em>420的区别在于U分量和V分量存放的位置互换)。以720*480大小的一桢图像为例。每个像素点采样一个Y值;横向两个加纵向两个,相邻四个像素点采样一次U,V值。所以Y数组的大小为720*576,U,V数组的大小相同,为720*480/4。如下图所示。<em>YUV</em>420的打包格式如上图所示,单行两个Y采一个U,双行两个Y采一个V。存储格式是:首先是所有Y,然后是所有V,最后是所有U。二、<em>YUV</em>422格式又称为YUY2格式。每个像素点采集
摄像头数据YUY2格式 应该怎么进行一些图像算法处理?
我查了资料,数据是 YUY2 格式的话,它的存储顺序好像是: Y0U0Y1V0 Y2U1Y3V1 ........ 每个宏像素都是四个字节,代表两个像素,第一第二个像素公用一对相同的色差信号:U和V
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
4种JS图片放大缩小效果下载
4种JS图片放大缩小效果,总有一种是你想要的。不论死的还是活的。请帮忙顶 相关下载链接:[url=//download.csdn.net/download/fanzijie112/4910217?utm_source=bbsseo]//download.csdn.net/download/fanzijie112/4910217?utm_source=bbsseo[/url]
百度地图API V2.1 离线版下载
下载后请查看 离线地图示例demo.html 里面的示例,默认级别是8级;离线地图不是万能的, 有些依赖在线的功能是无法使用的, 请自行扩展; 相关下载链接:[url=//download.csdn.net/download/elephanttohelloworld/10241614?utm_source=bbsseo]//download.csdn.net/download/elephanttohelloworld/10241614?utm_source=bbsseo[/url]
test ddc Read EDID下载
DOS下查看EDID.很方便的. 非原代碼 相关下载链接:[url=//download.csdn.net/download/sohigh0/2742253?utm_source=bbsseo]//download.csdn.net/download/sohigh0/2742253?utm_source=bbsseo[/url]
相关热词 c# 图片上传 c# gdi 占用内存 c#中遍历字典 c#控制台模拟dos c# 斜率 最小二乘法 c#进程延迟 c# mysql完整项目 c# grid 总行数 c# web浏览器插件 c# xml 生成xsd
我们是很有底线的