“数据压缩实验之 BMP 序列转 YUV 文件”实验报告_201810413045_陈诚

这篇实验报告详细介绍了如何使用C++将BMP序列转换为YUV文件,涉及图像文件结构、内存分配、位图数据读取以及图像旋转。实验目标是理解图像文件组成,掌握结构体用法和编程细节。通过实验,作者认识到C++处理图像格式的重要性,并在旋转图像时遇到指针移动精度问题。
摘要由CSDN通过智能技术生成

1.实验名称

BMP 序列转 YUV 文件

2.实验软件

Visual Studio 2019、YUVviewerPlus

3.实验目的

1.理解图像文件的基本组成。
2.掌握结构体作为复杂数据对象的用法。进一步熟悉由问题到程序的解决方案,并掌握编程细节:如内存分配、倒序读写、字节序、文件读写过程等。

4.实验任务

将以下五个BMP文件转化为一个YUV文件,要求可在命令行中设置每个画面出现的帧数,最后形成的YUV文件应至少包含200帧。
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

5.实验原理(思路)

BMP 图像文件由四部分组成:
(1)位图头文件数据结构,它包含 BMP 图像文件的类型、显示内容等信息;
(2)位图信息数据结构,它包含有 BMP 图像的宽、高、压缩方法,以及定义颜色等信
息;
(3)调色板,本次实验使用的是真彩色图(24位的 BMP)就不需要调色板;
(4)位图数据
在C++的“windows.h"里已经包含以下两部分说明BMP头文件的结构体,其中需要使用的有图像的宽度——biWidth,图像的高度——biHeight,从 BITMAPFILEHEADER 结构开始到实际的图像数据之间的字节偏移量——bfOffBits.
在这里插入图片描述
在这里插入图片描述
根据bfOffBits,从BMP文件的实际图像部分开始读取B,G,R分量,然后利用上次封装好的RGB2YUV函数将RGB数据转化为为ybuffer,ubuffer,vbuffer,但是在实验结果中发现此时的yuv图像是倒置的,所以再编写函数将yuv图像旋转180°,最后在写入时,提前将每张转化后的BMP文件将要显示的帧数在命令行中设置好:
在这里插入图片描述

利用循环写入yuvFile。

6.实验代码(RGB转YUV函数上次已经使用过,此处不再贴出)

6.1头文件及声明部分

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<windows.h>
static float RGBYUV02990[256], RGBYUV05870[256], RGBYUV01140[256];
static float RGBYUV01684[256], RGBYUV03316[256];
static float RGBYUV04187[256], RGBYUV00813[256];
void InitLookupTable();
int RGB2YUV(int x_dim, int y_dim, void* bmp, void* y_out, void* u_out, void* v_out, int flip);
int YUV_convert(
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值