灰度图像直方图求取c语言
时间: 2023-07-13 18:18:34 浏览: 305
要求一张灰度图像的直方图,可以按照以下步骤编写 C 代码:
1.读取灰度图像,将像素值存储在一个二维数组中;
2.创建一个长度为256的数组,用于存储每个灰度级别的像素数量;
3.遍历图像像素,每遇到一个像素就在数组中相应的位置加1;
4.将数组中的数据归一化,以便于绘制直方图;
5.将结果输出或保存到文件。
以下是一个示例代码,可以作为参考:
```c
#include <stdio.h>
#include <stdlib.h>
#define WIDTH 512
#define HEIGHT 512
int main()
{
FILE *fp;
unsigned char image[HEIGHT][WIDTH];
int histogram[256] = {0};
int i, j, k;
int max_count = 0;
fp = fopen("lena.raw", "rb");
fread(image, sizeof(unsigned char), WIDTH * HEIGHT, fp);
fclose(fp);
for (i = 0; i < HEIGHT; i++) {
for (j = 0; j < WIDTH; j++) {
k = image[i][j];
histogram[k]++;
}
}
for (i = 0; i < 256; i++) {
if (histogram[i] > max_count) {
max_count = histogram[i];
}
}
for (i = 0; i < 256; i++) {
histogram[i] = (int)((double)histogram[i] / max_count * HEIGHT);
}
for (i = HEIGHT-1; i >= 0; i--) {
for (j = 0; j < 256; j++) {
if (histogram[j] > i) {
printf("*");
} else {
printf(" ");
}
}
printf("\n");
}
return 0;
}
```
其中,`lena.raw` 是一张灰度图像的文件名。代码输出的结果是一个 ASCII 码直方图,可以使用终端查看。
阅读全文