数字图像处理实验一(位图文件信息的提取和二值化处理)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

相关文档
最新文档