数据压缩任务三

作业3:读入一个24bitRGB文件(以down.rgb为例,其分辨率为256*256),输出该数据文件中R、G、B三个分量(各8bit表示)的概率分布示意图(类似下图)和熵。

实现此次任务的代码

#include
#include
const int N = 65536;
using namespace std;
#pragma warning(disable : 4996)
//定义三个一维数组256*256=65536
unsigned char r[N];
unsigned char g[N];
unsigned char b[N];
//定义宽和高
int width = 256;
int height = 256;
//定义频率数组并且初始化
double freq_r[256] = { 0 };
double freq_g[256] = { 0 };
double freq_b[256] = { 0 };
//定义熵数组并且初始化
double entropy_r[256] = { 0 };
double entropy_g[256] = { 0 };
double entropy_b[256] = { 0 };

int main(void)
{
//打开rgb 文件
ifstream fp(“D:\数据压缩原理作业\down.rgb”, ios::binary);
//用buffer数组存放读出的所有rgb数据 2562563=1996609+判断能否打开
if (!fp.is_open()) { cout << “!”; return 0; }
unsigned char buffer[196608];
/fread函数的用法:fread(buffer, size,count,stream )
buffer 是读取的数据存放的内存的指针(可以是数组,也可以是新开辟的空间,buffer就是一个索引)
size 是每次读取的字节数
count 是读取次数
strean 是要读取的文件的指针
/
fp.read((char*)buffer, 196608);
//将所读出的rgb数值存入三个数组中
for (int i = 0, j = 0; i < width * height * 3; i = i + 3, j++)
{
r[j] = *(buffer + i);
g[j] = *(buffer + i + 1);
b[j] = *(buffer + i + 2);
}
//三个循环分别计算频率
for (int i = 0; i < 256; i++)
{
for (int j = 0; j < width * height; j++)
{
if (int(r[j]) == i) { freq_r[i]++; }
}
}
for (int i = 0; i < 256; i++)//0~255
{
for (int j = 0; j < width * height; j++)
{
if (int(g[j]) == i) { freq_g[i]++; }
}
}
for (int i = 0; i < 256; i++)//0~255
{
for (int j = 0; j < width * height; j++)
{
if (int(b[j]) == i) { freq_b[i]++; }
}
}
//计算RGB的频率和熵
for (int i = 0; i < 256; i++)
{
entropy_r[i] = freq_r[i] / double(width * height);
entropy_g[i] = freq_g[i] / double(width * height);
entropy_b[i] = freq_b[i] / double(width * height);
}
//打开三个txt文件
ofstream fp1(“D:\数据压缩原理作业\R_sat.txt”, ios::binary);
ofstream fp2(“D:\数据压缩原理作业\G_sat.txt”, ios::binary);
ofstream fp3(“D:\数据压缩原理作业\B_sat.txt”, ios::binary);
//symbol 空格 freq
fp1 << “Symbol\tFreq\n”;
for (int i = 0; i < 256; i++)
{
fp1 << i << “\t” << freq_r[i] << endl;
}
fp2 << “Symbol\tFreq\n”;
for (int i = 0; i < 256; i++)
{
fp2 << i << “\t” << freq_g[i] << endl;
}
fp3 << “Symbol\tFreq\n”;
for (int i = 0; i < 256; i++)
{
fp3 << i << “\t” << freq_b[i] << endl;
}
//关闭文件
fp1.close();
fp2.close();
fp3.close();
fp.close();
system(“pause”);
return 0;
}

生成的txt

在这里插入图片描述

利用Excel工具整理数据

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

最终所得概率统计图和熵值图

在这里插入图片描述
在这里插入图片描述

代码实现错误总结

一开始文件打开方式不对导致无法运行。后在同学帮助下将其改正,以下为错误代码图片
在这里插入图片描述改正后如下
在这里插入图片描述
在这里插入图片描述
但为什么这样改正原因不解,望老师解答

个人感受

由于代码基础不好,所以面对此次任务有畏难的心理,折折腾腾好久,算是完成任务,虽然代码不算漂亮。感谢被我麻烦的大佬同学,接下来我一定更认真对待学习,努力提高自己的代码能力,我可以把短板补上的!

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值