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, 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值