日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

编写彩色空间转换程序:YUVtoRGB

發布時間:2024/6/1 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 编写彩色空间转换程序:YUVtoRGB 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Y=+0.299R+0.587G+0.114B
U0=0.564(B-Y)=?0.1684R?0.3316G+0.5B
V0=0.713(R-Y)=+0.5R?0.4187G?0.0813B

所以
B-Y=U0/0.564 B=Y+1.773U0
R-Y=V0/0.713 R=Y+1.403V0
G=(Y-(0.299R+0.114B))/0.587 G=Y-0.714V0-0.344U0

U=U0+128
V=V0+128

所以
B=Y+1.773U-226.944
R=Y+1.403V-179.584
G=Y-0.714V-0.344U+135.424

yuv2rgb.cpp:

#include "stdlib.h" #include "yuv2rgb.h" #include <stdio.h>static float R_V01403[256],B_U01773[256], G_U_0344[256],G_V_0714[256];int YUV2RGB(int x_dim, int y_dim, void* bmp, void* rgb_out) {static int init_done = 0;long i, j, size;unsigned char* y, * u, * v;unsigned char* r, * g, * b;size = x_dim * y_dim;if (init_done == 0){InitLookupTable();init_done = 1;}// allocate memoryy = (unsigned char*)bmp;b = (unsigned char*)rgb_out;// convert RGB to YUVfor (j = 0; j < y_dim; j++){for (i = 0; i < x_dim; i++) {g = b + 1;r = b + 2;u = y + x_dim * y_dim - (i + 1) / 2 - (j + 1)/2 * x_dim/2;v = y + x_dim * y_dim + x_dim / 2 * y_dim / 2 - (i + 1) / 2 - (j + 1)/2 * x_dim/2;int rr, gg, bb;rr= (int)(*y + R_V01403[*v]); //-179.584gg=(int)(*y + G_U_0344[*u] + G_V_0714[*v]);//+ 135.424bb=(int)(*y + B_U01773[*u]);//- 226.944*r = rr;//(unsigned char)(*y + R_V01403[*v] ); //-179.584*g = gg;// (unsigned char)(*y + G_U_0344[*u] + G_V_0714[*v]);//+ 135.424*b = bb;//(unsigned char)(*y + B_U01773[*u] );//- 226.944y++;b+=3;}}return 0; }void InitLookupTable() {int i;for (i = 0; i < 256; i++) R_V01403[i] = (float)1.403 * (i-128);for (i = 0; i < 256; i++) B_U01773[i] = (float)1.773 * (i-128);for (i = 0; i < 256; i++) G_U_0344[i] = (float)-0.344 * (i-128);for (i = 0; i < 256; i++) G_V_0714[i] = (float)-0.714 * (i-128); }

main.cpp:

#include <stdio.h> #include <stdlib.h> #include <malloc.h> #include "yuv2rgb.h" #pragma warning(disable:4996) #define u_int8_t unsigned __int8 #define u_int unsigned __int32 #define u_int32_t unsigned __int32 #define FALSE false #define TRUE trueint main(int argc, char** argv) {/* variables controlable from command line */u_int frameWidth = 352; /* --width=<uint> */u_int frameHeight = 240; /* --height=<uint> */bool flip = TRUE; /* --flip */unsigned int i;/* internal variables */char* rgbFileName = NULL;char* yuvFileName = NULL;FILE* rgbFile = NULL;FILE* yuvFile = NULL;u_int8_t* yuvBuf = NULL;u_int8_t* rgbBuf = NULL;u_int32_t videoFramesWritten = 0;/* begin process command line *//* point to the specified file names */yuvFileName = argv[1];rgbFileName = argv[2];frameWidth = atoi(argv[3]);frameHeight = atoi(argv[4]);/* open the RGB file */yuvFile = fopen(yuvFileName, "rb");if (yuvFile == NULL){printf("cannot find yuv file\n");exit(1);}else{printf("The input yuv file is %s\n", yuvFileName);}/* open the RAW file */rgbFile = fopen(rgbFileName, "wb");if (rgbFile == NULL){printf("cannot find rgb file\n");exit(1);}else{printf("The output rgb file is %s\n", rgbFileName);}/* get an input buffer for a frame */yuvBuf = (u_int8_t*)malloc(frameWidth * frameHeight * 1.5);/* get the output buffers for a frame */rgbBuf = (u_int8_t*)malloc(frameWidth * frameHeight*3);if (yuvBuf == NULL || rgbBuf == NULL){printf("no enough memory\n");exit(1);}while (fread(yuvBuf, 1, frameWidth * frameHeight * 1.5, yuvFile)){if (YUV2RGB(frameWidth, frameHeight, yuvBuf, rgbBuf)){printf("error");return 0;}for (i = 0; i < frameWidth * frameHeight*3; i++){if (rgbBuf[i] < 0) rgbBuf[i] = 0;if (rgbBuf[i] > 255) rgbBuf[i] = 255;} /*for (i = 0; i < frameWidth * frameHeight / 4; i++){if (uBuf[i] < 16) uBuf[i] = 16;if (uBuf[i] > 240) uBuf[i] = 240;if (vBuf[i] < 16) vBuf[i] = 16;if (vBuf[i] > 240) vBuf[i] = 240;}fwrite(bBuf, 1, frameWidth * frameHeight, yuvFile);fwrite(gBuf, 1, (frameWidth * frameHeight) / 4, yuvFile);fwrite(rBuf, 1, (frameWidth * frameHeight) / 4, yuvFile);*/fwrite(rgbBuf, 1, frameWidth*frameHeight*3, rgbFile);printf("\r...%d", ++videoFramesWritten);}printf("\n%u %ux%u video frames written\n",videoFramesWritten, frameWidth, frameHeight);/* cleanup */fclose(rgbFile);fclose(yuvFile);return(0); }

yuv2rgb.h

#pragma once int YUV2RGB(int x_dim, int y_dim, void* bmp, void* rgb_out);void InitLookupTable();

圖片出現以下錯誤:

觀察正確的yuv與rgb大小和獲得的yuv與rgb大小:

正確值:

獲得值:

?對比可知獲得的u、v值異常偏小,導致rgb圖像錯誤。
檢驗得偏移量錯誤。

改正偏移量部分:

for (j = 0; j < y_dim; j++){for (i = 0; i < x_dim; i++) {g = b + 1;r = b + 2;u = y + x_dim * y_dim - (i + 1) / 2 - j * 2 * x_dim / 2 + (j + 1) / 2 * x_dim / 2;v = y + x_dim * y_dim + x_dim / 2 * y_dim / 2 - (i + 1) / 2 - j * 2 * x_dim / 2 + (j + 1) / 2 * x_dim / 2;int rr, gg, bb;rr= (int)(*y + R_V01403[*v]); gg=(int)(*y + G_U_0344[*u] + G_V_0714[*v]);bb=(int)(*y + B_U01773[*u]);*r=rr;*g=gg;*b=bb;y++;b+=3;}}

改正后結果:

有部分像素值越界。

將值限定在0~255:

rr= (int)(*y + R_V01403[*v]); //-179.584gg=(int)(*y + G_U_0344[*u] + G_V_0714[*v]);//+ 135.424bb=(int)(*y + B_U01773[*u]);//- 226.944if (rr < 0) rr = 0;if (rr > 255) rr = 255;if (gg < 0) gg = 0;if (gg > 255) gg = 255;if (bb < 0) bb = 0;if (bb > 255) bb = 255;*r = rr;*g = gg;*b = bb;

改正后圖像:

變換前yuv圖像:

該yuv文件為4:2:0格式,u與v的數量為y的1/4,由總數1/4的u與v生成r、g、b會帶來一定誤差,同時進行轉換計算時由小數變為整數也會產生一定誤差,但只觀察圖像時難以辨別。

總結

以上是生活随笔為你收集整理的编写彩色空间转换程序:YUVtoRGB的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 成年人黄网站 | 成年视频在线观看 | 欧美首页| 色婷婷av一区二区三区软件 | 欧美精品在线视频 | 色批网站 | 中文字幕一区二区三区四区视频 | 性猛交╳xxx乱大交 偷偷操不一样的久久 | 欧美视频免费看欧美视频 | 精品黄色片| 久久综合干| 青娱网电信一区电信二区电信三区 | 久久久久久久色 | 激情av综合 | 亚洲 欧美 精品 | 美女被啪羞羞粉色视频 | аⅴ资源中文在线天堂 | 国产精品激情 | 永久中文字幕 | 日本特黄视频 | 黑人黄色大片 | 免费精品国产 | 伊人婷婷综合 | 精品欧美一区二区久久久 | 国产剧情自拍 | 男女爱爱动态图 | 久久久久久黄色 | 国产精品宾馆在线精品酒店 | 亚洲综合激情在线 | 日本免费黄色小视频 | 欧美日韩在线视频播放 | 越南黄色一级片 | 国产精品九九热 | 亚洲乱码中文字幕久久孕妇黑人 | 激情六月色| 日本一区久久 | 欧美大色一区 | 精品一区二区三区免费毛片爱 | 日本黄色网址大全 | 九月激情网 | 婷婷导航| 免费在线观看a视频 | 美女福利视频在线观看 | 制服丝袜国产精品 | 极品新婚夜少妇真紧 | 天天狠天天插 | 国产一区视频在线免费观看 | 西野翔夫の目の前で犯在线 | 国产精品伦理一区二区 | 亚洲美女一区 | 久久国产精品毛片 | 午夜视频福利网站 | 欧美激情一区二区三级高清视频 | 麻豆传媒观看 | 在线aa | 国产精品久久久久久久久免费桃花 | 91看片在线看 | 欧美专区在线播放 | 亚洲天堂2024| 成人网在线视频 | 国产综合在线观看视频 | 中文字幕最新 | 五月婷丁香 | 手机成人av | jizz黑人| 国产黄色三级 | 日本韩国欧美中文字幕 | 欧美日韩亚洲国产一区 | 五月婷婷六月丁香综合 | 99人妻碰碰碰久久久久禁片 | 日韩精品无码一区二区三区 | 国产精品伦一区二区三级视频 | 亚洲天堂网站在线 | 奇米在线 | 国产麻豆精品一区二区 | 亚洲久久天堂 | 成年人的免费视频 | 人妻 日韩精品 中文字幕 | 草草地址线路①屁屁影院成人 | 国产日韩欧美中文 | 日韩经典在线观看 | 97超碰在线播放 | 欧美卡一卡二 | av观看网| 欧美又粗又大xxxxbbbb疯狂 | 91吃瓜今日吃瓜入口 | 这里只有久久精品 | 日韩成人在线影院 | 少妇高潮一区二区三区99小说 | 中文字幕在线观看视频www | 97蜜桃网| 一区二区三区影院 | 国产乱论 | 国产黄色片免费在线观看 | av天堂一区二区 | 777久久| 色香蕉在线 | 国产人妻精品一区二区三区 | 欧美成人黄色小说 |