彩色空间转换 实验报告

本次实验旨在深入理解彩色空间转换,包括RGB转YUV和YUV转RGB的计算过程。实验者通过编写程序实现转换,并通过公式验证转换的正确性。在RGB到YUV的转换中,使用了特定的色彩权重;而YUV转回RGB时,由于4:2:0色度格式,导致无法完全还原原始图像。
摘要由CSDN通过智能技术生成

实验目的

1.学会从计算和程序的角度分析问题通过完成本实验,理解计算思维,即从问题出发,通过逐步分析和分解,把原问题转化为可用程序方式解决的问题。在此过程中设计出一个解决方案。
2.进一步理解彩色空间的概念并掌握不同彩色空间转换的基本方程。
3.通过逐步设计程序,掌握编程细节:如查找表的设计,内存分配,对 U 和 V 信号进行下采样,文件读写过程等。掌握程序调试的基本方法

实验步骤

1.编写RGB转化为YUV程序,部分查找表的初始化和调用,缓冲区分配。将得到的RGB文件转换为YUV文件,用YUV Viewer播放器观看,验证是否正确。
rgb转化为yuv所采用的公式如下:
Y=0.299R+0.587G+0.114B
U=−0.1684R−0.3316G+0.5B+128
V=0.5R−0.4187G−0.0831B+128
2.编写将YUV转换为RGB的程序。将给定的实验数据用该程序转换为RGB文件。并与原RGB文件进行比较,如果有误差,分析误差来自何处。
yuv转化为rgb所采用的公式如下:
R=Y+1.402∗(V−128)
G=Y−0.34414∗(U−128)−0.71414∗(V−128)
B=Y+1.772(U−128)
实现的代码
rgb2yuv:

#include<stdio.h>
#include<stdlib.h>
const int width = 256;
const int height = 256;

int main(int argc,char *argv[])
{
   
    unsigned char* buffer_rgb = new unsigned char[ 3 * width * height];
    unsigned char* buffer_y = new unsigned char[width * height];
    unsigned char* buffer_u = new unsigned char[width * height / 4];
    unsigned char* buffer_v = new unsigned char[width * height / 4];
    FILE* rgb=NULL;
    FILE* yuv=NULL;
    fopen_s(&rgb,argv[1], "rb");
    if (rgb == NULL)
        printf("cannot find rgb file\n");
    fread(buffer_rgb, sizeof(unsigned char), 3 * width * height,rgb);
    fopen_s(&yuv,argv[2], "wb+");
    if (yuv == NULL)
        printf("cannot find yuv file\n");
    for (int i = 0; i < width * height; i++)
    {
   
        buffer_y[i] = 0.299 * buffer_rgb[3 * i + 2] + 0.587 * buffer_rgb[3 * i + 1] + 0.114 * buffer_rgb[3 * i];
        if (buffer_y[i] > 235)
            buffer_y[i] = 235;
        else if (buffer_y[i] < 16)
            buffer_y[i] = 16;
    }//y

    int u = 0 , v = 0;
    for (int i = 0; i < height ; i++)
        for (int j = 0; j < width; j++)
        {
   
            if (i % 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值