c语言如何输出一张图像的直方图,编写一个程序,打印输入中单词长度的直方图...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

#include

#define inside 1

#define outside 0

/*编写一个程序,统计并打印输入单词不同长度的个数,并打印输入中单词长度的直方图*/

main ()

{

int test,c,i,j,k;

int tj[10];

test=outside;

for (i=0;i<10;++i)

tj[i]=0;

j=0;

k=0;

while ((c=getchar())!=EOF)

{

if (c<65||c>122)

{

if (test==inside)

++tj[j-1];

test=outside;

j=0;

}

else

{

++j;

test=inside;

}

}

for (i=1;i<11;++i)

{

k=k+tj[i-1];

printf("%d个字母长度的单词有%d个\n",i,tj[i-1]);

}

printf("所有单词总共有%d个\n",k);

/*上面是统计单词数并输出的,下面的代码是打印直方图的*/

/*这里先打印横向直方图*/

printf("\n字母长度\t单词个数");

for (i=1;i<11;++i)

{

printf("\n%2d个字母:",i);

if(tj[i-1]>=1)

{

for (j=1;j<=tj[i-1];j++)

putchar(1);

}

}

/*下面打印竖向直方图*/

int tem;

tem=0;

for (i=1;i<11;++i)

if (tem

tem=tj[i-1]; /*这里是找出数组tj[i]的最大值那个并赋值给tem,用来确定纵坐标的最大值*/

printf("\n\n单词个数(个)\n");

printf(" ");putchar(24); /*此处打印纵坐标开始位置,下面每行扫描打印整个图表*/

for (i=tem;i>0;i--)

{

printf("\n%3d",i);putchar(124);putchar(45); /*这里打印每行图表左边部分,下面开始打每行的柱状图*/

for (j=0;j<10;j++)

{

if (tj[j]>=i)

{

printf(" ");

putchar(1);

}

else

printf(" ");

}

} /*下面开始打印横坐标*/

printf("\n 0");putchar(124);

for (i=1;i<33;++i)

putchar(45);

putchar(26);

printf("单词长度(n个字母/单词)\n");

printf(" ");

for (i=1;i<=10;i++)

printf("%3d",i);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个使用C语言实现灰度图像输出直方图图像的示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <stdint.h> #define IMAGE_WIDTH 256 #define IMAGE_HEIGHT 200 #define HIST_HEIGHT 100 // 计算灰度图像直方图 void calc_histogram(uint8_t* image_data, uint32_t image_size, uint32_t* histogram) { for (uint32_t i = 0; i < image_size; i++) { histogram[image_data[i]]++; } } // 归一化直方图 void normalize_histogram(uint32_t* histogram, uint32_t size) { uint32_t max_val = 0; for (uint32_t i = 0; i < size; i++) { if (histogram[i] > max_val) { max_val = histogram[i]; } } for (uint32_t i = 0; i < size; i++) { histogram[i] = histogram[i] * HIST_HEIGHT / max_val; } } // 绘制直方图 void draw_histogram(uint32_t* histogram, uint8_t* hist_image_data) { for (uint32_t y = 0; y < HIST_HEIGHT; y++) { for (uint32_t x = 0; x < IMAGE_WIDTH; x++) { if (y >= HIST_HEIGHT - histogram[x]) { hist_image_data[y * IMAGE_WIDTH + x] = 255; } else { hist_image_data[y * IMAGE_WIDTH + x] = 0; } } } } int main(int argc, char* argv[]) { FILE* fp; uint8_t* image_data; uint32_t image_size; uint32_t histogram[256] = { 0 }; uint8_t hist_image_data[HIST_HEIGHT * IMAGE_WIDTH] = { 0 }; // 读取灰度图像文件 if ((fp = fopen("gray_image.raw", "rb")) == NULL) { printf("Cannot open file.\n"); return -1; } fseek(fp, 0, SEEK_END); image_size = ftell(fp); image_data = (uint8_t*)malloc(image_size); fseek(fp, 0, SEEK_SET); fread(image_data, 1, image_size, fp); fclose(fp); // 计算直方图 calc_histogram(image_data, image_size, histogram); // 归一化直方图 normalize_histogram(histogram, 256); // 绘制直方图 draw_histogram(histogram, hist_image_data); // 写入直方图图像文件 if ((fp = fopen("hist_image.raw", "wb")) == NULL) { printf("Cannot open file.\n"); return -1; } fwrite(hist_image_data, 1, HIST_HEIGHT * IMAGE_WIDTH, fp); fclose(fp); free(image_data); return 0; } ``` 在这个示例代码,我们首先定义了一些常量,包括图像的宽度、高度和直方图的高度。然后,我们定义了三个函数,分别用于计算直方图、归一化直方图和绘制直方图。在主函数,我们首先读取灰度图像文件,并计算对应的直方图。然后,我们归一化直方图并绘制直方图。最后,我们将直方图图像数据写入文件。注意,此示例代码仅适用于8位灰度图像。如果您的图像不是8位灰度图像,请相应地修改代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值