数字图像处理实验一(位图文件信息的提取和二值化处理)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数字图像处理实验一
(位图文件信息的提取和二值化处理)
实验平台:MinGW(Mini Gnu for Windows),里面包含gcc for windows的编译器,将其拷贝值某目录,然后设置环境变量(这里我设为c:\MinGW,通过一个批处理命令setc.bat实现)设置完成后,即可通过gcc(g++)命令进行编译。
(附:使用VC++ 6.0 也可)
相关实验文件下载地址:ftp://218.193.154.238 /课件/数字图像处理/
实验步骤:
拷贝MinGW文件夹至C: (路径为C:\MinGW)
编辑setc.bat文件,然后运行此批处理以设置路径。
编辑hdr.h 和hdr.c文件
编辑bmphdr.c文件,然后在当前文件路径下,使用DOS命令:gcc -c hdr.c //编译,生成hdr.o目标文件
gcc -c bmphdr.c //编译,生成bmphdr.o目标文件
gcc -o bmphdr.exe hdr.o bmphdr.o //链接,生成bmphdr.exe执行文件使用bmphdr.exe来提取某一个bmp文件的头信息,例如:
bmphdr test.bmp
编辑ez.c文件(用于图像的二值化处理),然后
gcc -c ez.c //编译,生成ez.o目标文件
gcc -o ez.exe hdr.o ez.o //链接,生成ez.exe执行文件使用ez.exe文件来对某一个bmp文件进行二值化处理。
例如:ez test.bmp result.bmp 108 (对test.bmp文件进行二值化处理,阈值为108,处理的结果为result.bmp文件)
setc.bat内容:
@echo off
set msdir=C:\MinGW
set PATH="%msdir%\bin";"%PATH%"
set INCLUDE=%msdir%\Include;%msdir%\MFC\Include;%INCLUDE%
set LIB=%msdir%\Lib;%LIB%
补充:如果以上批处理命令无效的话,可以:
我的电脑->属性->高级->环境变量编辑变量path 增加C:\ MinGW\bin hdr.h文件内容:
#ifndef __HDR_H__
#define __HDR_H__
struct bmphdr {
char signature[2];
int size;
short reserved[2];
int offset;
int hdr_size;
int width;
int height;
short nr_planes;
short bits_per_pixel;
int compress_type;
int data_size;
int resol_hori;
int resol_vert;
int nr_colors;
int important_color;
char info[1024];
};
struct bmphdr *get_header(char filename[]);
#endif
hdr.c文件内容:
#include
#include
#include "hdr.h"
struct bmphdr *get_header(char filename[])
{
FILE *fp;
struct bmphdr *hdr;
fp = fopen(filename, "rb");
if (!fp) {
printf("File open error or such file does not exist!\n");
return NULL;
}
hdr = (struct bmphdr *)malloc(sizeof(struct bmphdr));
fread(hdr->signature, 2, 1, fp);
if (hdr->signature[0] != 'B' || hdr->signature[1] != 'M') { printf("Not a bmp file!\n");
return NULL;
}
fread(&hdr->size, 4, 1, fp);
fread(hdr->reserved, 4, 1, fp);
fread(&hdr->offset, 4, 1, fp);
fread(&hdr->hdr_size, 4, 1, fp);
fread(&hdr->width, 4, 1, fp);
fread(&hdr->height, 4, 1, fp);
fread(&hdr->nr_planes, 2, 1, fp);
fread(&hdr->bits_per_pixel, 2, 1, fp);
fread(&hdr->compress_type, 4, 1, fp);
fread(&hdr->data_size, 4, 1, fp);
fread(&hdr->resol_hori, 4, 1, fp);
fread(&hdr->resol_vert, 4, 1, fp);
fread(&hdr->nr_colors, 4, 1, fp);
fread(&hdr->important_color, 4, 1, fp);
if (hdr->offset > 54)
fread(&hdr->info, 1024, 1, fp);
fclose(fp);
return hdr;