RGB文件与YUV文件相互转化
YUV与RGB彩色空间转换公式
Y = 0.299R + 0.587G + 0.114B;
U = -0.169R - 0.331G + 0.5B ;
V = 0.5R - 0.419G - 0.081B;
R = Y + 1.4075V;
G = Y - 0.3455U - 0.7169V;
B = Y + 1.779U;
基本算法
该程序算法分为下面几个模块:
1、预备阶段:rgb文件导入项目、打开rgb文件,创建要进行输出的yuv文件和新的rgb文件、开辟空间。
2、提取rgb文件中的r、g、b分量
3、计算yuv分量并实现uv下采样,按照yuv文件格式输出进文件
4、利用yuv分量计算rgb分量,按照rgb文件格式输出文件
5、空间释放
main函数
#include"iostream"
#include"math.h"
#include"stdio.h"
#include"malloc.h"
#include"rgb2yuv.h"
#include"yuv2rgb.h"
using namespace std;
int main(int argc, char* argv[]){char* imgaddr = argv[1];char* yuvaddr = argv[2];int W = atoi(argv[3]);int H = atoi(argv[4]);int imgsize = W*H*3;unsigned char* imgbuffer = new unsigned char[imgsize];unsigned char* Rbuffer = new unsigned char[imgsize/3];unsigned char* Gbuffer = new unsigned char[imgsize/3];unsigned char* Bbuffer = new unsigned char[imgsize/3];FILE* imgopen = fopen(imgaddr,"rb");if(imgopen == NULL){cout<<"打开rgb文件失败"<<endl;}FILE* yuvsave = fopen(yuvaddr,"w");if(yuvsave == NULL){cout<<"创建yuv空白文件失败"<<endl;}transf(Rbuffer, Gbuffer, Bbuffer, imgbuffer, imgopen, yuvsave, W, H);char* recoimgaddr = argv[5];FILE* saverec = fopen(recoimgaddr,"w");FILE* openyuv = fopen(yuvaddr,"rb");if(saverec == NULL){cout<<"创建恢复文件失败"<<endl;}int yuvFileSize;FILE* checkyuv = fopen(yuvaddr,"rb");fseek(checkyuv,
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
