导出图像的RGB概率分布示意图和熵

本文档介绍了一个C或C++编程作业,要求读取24bit RGB图像文件,计算并输出R、G、B每个分量的概率分布图和熵。在实现过程中,遇到并解决了文件读取和数据统计的问题,通过输出txt文件并在Excel中生成统计图表。反思了编程过程中的错误检查和调试经验。
摘要由CSDN通过智能技术生成

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

提示:(用C或C++实现时),程序的流程为:开辟3个width*height的unsigned char型数组;打开要读出的RGB文件(以“rb”方式打开),打开3个要输出的数据统计文件(以“w”方式打开,可命名为R_sat.txt等);将RGB数据从RGB文件中读出,并分别保存到3个数组中,期间计算数据的概率分布和熵,并将这些数据写入3个数据统计txt文件中。Txt文件的写入方式为每行的两个数据用tab分开。在Excel里将这3个txt文件打开即可生成统计图。
在这里插入图片描述
反思:
这次编程反复折腾了很久,一直在出各种错误。之前没写检验是否打开了rgb文件的程序,也没把rgb文件放在和创建的txt一个文件夹里,导致输出熵为0还一直找不到原因。感觉自己的检纠错能力很糟糕。这种情况查看一下txt内容就可以发现数据并没有导入成功,从而意识到根本没有打开图像。希望以后多注意。

代码

#include<stdio.h>
#include<iostream>
#include<math.h>
#include<malloc.h>
using namespace std;

const int width = 256;
const int height = 256;
int main()
{
   
	//开辟3个数组
	unsigned char R[width * height] = {
    0 };
	unsigned char G[width * height] = {
    0 };
	unsigned char B[width * height] = {
    0 };

	//定义指针
	FILE* r1;
	FILE* g1;
	FILE* b1;
	
	//打开rgb图像并创建txt文件
	fopen_s(&r1, "R_sat.txt", "w");
	fopen_s(&g1, "G_sat.txt", "w");
	fopen_s(&b1, "B_sat.txt", "w");

	FILE* pic=NULL;
	fopen_s(&pic,"down.rgb" ,"rb");
	if (pic == NULL)
	{
   
		printf("打不开\n");
		exit(1);
	}
	//申请动态内存
	unsigned char* buffer = NULL;
	buffer = (unsigned char
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值