智能交通系统02A-监控与识别-C语言图像处理_第1页
智能交通系统02A-监控与识别-C语言图像处理_第2页
智能交通系统02A-监控与识别-C语言图像处理_第3页
智能交通系统02A-监控与识别-C语言图像处理_第4页
智能交通系统02A-监控与识别-C语言图像处理_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

*1图像处理程序设计

C语言有关问题

图像显示预备知识

图像处理程序设计*2C语言有关问题C语言磁盘文件操作

FILE*__stream 定义文件变量指针

fopen(constchar*__path,constchar*__mode);

fopen 打开文件

constchar*__path 文件名 如”test.txt”

constchar*__mode 文件属性 如

”r” 只读文本文件

”w” 只写文本文件

”rb” 只读二进制文件

”wb” 只写二进制文件

”r+” 可读写文本文件

”w+” 创建可读写文本文件

”rb+” 可读写二进制文件

”wb+” 创建可读写二进制文件

fclose(FILE*__stream);

fclose 关闭文件

FILE*__stream 文件变量指针

*3C语言有关问题C语言磁盘文件操作

fgetc(FILE*__stream);

fgetc 从文件变量指针当前位置取字符

FILE*__stream 文件变量指针

fgets(char*__s,int__n,FILE*__stream);

fgets 从文件变量指针当前位置取字符串

char*__s 串存入指针

int__n 串的字符数

FILE*__stream 文件变量指针

fputc(int__c,FILE*__stream);

fputc 在文件变量指针当前位置写字符

int__c 写入的字符值

FILE*__stream 文件变量指针

fputs(constchar*__s,FILE*__stream);

fputs 在文件变量指针当前位置写字符串

constchar*__s 写入字符串指针

FILE*__stream 文件变量指针*4C语言有关问题C语言磁盘文件操作

fread(void*__ptr,size_t__size,size_t__n,FILE*__stream);

fread 从文件变量指针当前位置成块读入

void*__ptr 读入缓冲区指针

size_t__size 字段长度

size_t__n 字段数

FILE*__stream 文件变量指针

fwrite(void*__ptr,size_t__size,size_t__n,FILE*__stream);

fwrite 在文件变量指针当前位置成块写

void*__ptr 被写块缓冲区指针

size_t__size 字段长度

size_t__n 字段数

FILE*_stream 文件变量指针

fseek(FILE*__stream,long__offset,int__whence);

fseek 随机访问的文件指针

FILE*__stream 文件变量指针

long__offset 偏移量

int__whence 起始位置

SEEK_SET 文件头

SEEK_CUR 当前位置

SEEK_END 文件尾*5C语言有关问题CPU寄存器结构

字型寄存器结构定义

structWORDREGS{

unsignedintax,bx,cx,dx,si,di,cflag,flags;

};

字节型寄存器结构定义

structBYTEREGS{

unsignedcharal,ah,bl,bh,cl,ch,dl,dh;

};

寄存器联合定义

unionREGS{

structWORDREGSx;

structBYTEREGSh;

};

段寄存器结构定义

structSREGS{

unsignedintes;

unsignedintcs;

unsignedintss;

unsignedintds;

};*6C语言有关问题 内存访问

poke(unsigned__segment,unsigned__offset,int__value);

poke 向指定内存写入一个字

unsigned__segment 指定内存的段地址

unsigned__offset 指定内存在段内的偏移量

int__value 写入的字

pokeb(unsigned__segment,unsigned__offset,char__value);

pokeb 向指定内存写入一个字节

unsigned__segment 指定内存的段地址

unsigned__offset 指定内存在段内的偏移量

char__value 写入的字节*7C语言有关问题 端口访问

outport(int__portid,int__value);

outport 将一个字输出到指定端口

int__portid 端口号

int__value 输出的值

outportb(int__portid,unsignedchar__value);

outportb 将一个字节输出到指定端口

int__portid 端口号

unsignedchar__value 输出的值

*8BIOS中断调用

int86(intint_num,unionRIGS*in_rigs,unionREGSout_regs)

int86 intel86系列BIOS中断调用

intint_num 中断调用号

unionRIGS*in_rigs 输入寄存器

unionREGSout_regs) 输出寄存器*9BIOS中断调用

中断调用号 功能

05H 屏幕拷贝

10H 显示器控制

11H 确定设备

12H 确定内存容量

13H 磁盘IO

14H RS232接口IO

15H 磁带IO、AT机扩充服务

16H 键盘IO

17H 打印机IO

18H ROMBASIC

19H 引导装入程序BOOTRESTART

1AH 实时时钟

1BH 键盘终止地址

1CH 定时器信号

1EH 软盘参数表

1FH 图形字符扩展表

41H 硬盘参数表

46H 硬盘参数表

*10BIOS中断调用

中断10H

AH寄存器值 功能

00H 设置方式

01H 设置光标类型

02H 设置光标位置

03H 读出光标位置

04H 读出光笔位置

05H 设置当前显示页

06H 当前显示页上滚

07H 当前显示页下滚

08H 读出字符和属性

09H 写入字符和属性

0AH 写入字符

0BH 设置彩色调色板

0CH 写入点

0DH 读出点

0EH 以电传方式写入字符

0FH 读出当前显示方式

10H 彩色寄存器控制

13H 写入字符串*11BIOS中断调用

中断调用:INT10H,功能号:AH=0H,显示器显示模式设定

子功能号: 功能

(AL=显示模式号) 类型 彩色数目 分辨率

00H、01H 文字 16 40×25字符,320×200

02H、03H 文字 16 80×25字符,640×200

04H、05H 图形 4 40×25字符,320×200

06H 图形 2 80×25字符,640×200

07H 文字 2 80×25字符,720×350

0DH 图形 16 40×25字符,320×200

0EH 图形 16 80×25字符,640×200

0FH 图形 2 80×25字符,640×350

10H 图形 16 80×25字符,640×350

11H 图形 2 80×30字符,640×480

12H 图形 16 80×30字符,640×480

13H 图形 256 40×25字符,320×200

5BH 图形 16 100×75字符,800×600

5CH 图形 256 80×25字符,640×480

5DH 图形 256 80×30字符,640×480

5EH 图形 256 100×75字符,800×600

5FH 图形 16 128×48字符,1024×768

60H 图形 4 128×48字符,1024×768

61H 图形 16 96×64字符,1024×768

62H 图形 256 128×48字符,1024×768

输入参数:AH=0H;AL=模式号;返回值:无;*12BIOS中断调用

中断调用:INT10H,功能号:AH=0CH,画点

输入参数:AH=0CH,AL=象素值,BH=页面号,CX=象素列号(横坐标),DX=象素行号(纵坐

标);

返回值:无;

中断调用:INT10H,功能号:AH=10H,彩色寄存器-调色板设置

子功能号AL= 功能

00H 设置单个调色寄存器

01H 设置屏幕显示区边框彩色

02H 设置全部调色寄存器

03H 闪烁/加亮属性选择

07H 读单个调色寄存器

08H 读边框彩色寄存器

09H 读全部调色寄存器

10H 设置单个彩色寄存器

12H 设置一组彩色寄存器

13H 选择彩色页面

15H 读单个彩色寄存器

17H 读一组彩色寄存器

1AH 读彩色表现行页面号

1BH 彩色转换为灰度

中断调用:INT10H,功能号:AH=0FH,读取当前显示模式

输入参数:无;

返回值: AL=当前显示模式;AH=每行字符数;BH=当前屏幕上的页面数;*13BIOS中断调用

unsignedcharset_SVGA_mode(intvmode)

{unionREGSr;

r.h.ah=0;

r.h.al=vmode;

int86(0x10,&r,&r);

return(0);

}

unsignedintget_SVGA_mode()

{unionREGSr;

r.h.ah=0x0f;

int86(0x10,&r,&r);

return(r.h.al);

}*14图像显示预备知识

标准图形模式

模式号 显示卡 分辨率 颜色

0x04 CGA/CGE400/GWCH 320×200 4

0x05 EGA 4/64k

MCGA/VGA 4/256k

CEGA 4/64

CNGA 4灰度

0x06 CGA/CGE400/GWCH/MCGA 640×200 2

EGA 2/64k

MCGA/VGA 2/256k

CEGA 2/64

0x0d EGA、CEGA 320×200 16/64

VGA 16/256k

0x0e EGA、CEGA 640×200 16/64

VGA 16/256k

0x0f EGA、CEGA、VGA 640×350 单色

0x10 EGA、CEGA 640×350 16/64

VGA 16/256k

0x11 MCGA、VGA 640×480 2/256k

CEGA 2/64

0x12 VGA 640×480 16/256k

CEGA 16/64*15图像显示预备知识

标准图形模式

模式号 分辨率 显示卡 颜色

0x42 640×400CGE400 16

- 640×400HGC 2

0x13 320×200VGA 256

- 720×348VGA 256

- 640×400VGA 256

- 640×480VGA 16

- 800×600VGA 256

- 1024×768VGA 16

- 1024×768VGA 4

- 1024×768VGA 256

模式号空缺是因为该模式号随VGA的制造厂商不同而不同。*16图像显示预备知识 bmp文件处理

位图文件头BITMAPFILEHEADER

位图信息头BITMAPINFOHEADER

调色板Palette

实际的位图数据ImageDate

位图文件信息头

TypedefstructtagBITMAPFILEHEADER{

WORDbfType; //文件类型,必须是0x424D,串“BM”

DWORDbfSize; //文件大小

WORDbfReserved1; //保留字

WORDbfReserved2; //保留字

DWORDbfOffBits; //为从文件头到位图数据的偏移字节数

}BITMAPFILEHEADER;

长度为14个字节

WORD为无符号16位整数,DWORD为无符号32位整数*17图像显示预备知识 bmp文件处理

位图信息头BITMAPINFOHEADER

TypedefstructtagBITMAPINFOHEADER{

DWORDbiSize; //指定这个结构的长度,为40

LONGbiWidth;//图像的宽度,单位是像素

LONGbiHeight;//指定图像的高度,单位是像素

WORDbiPlanes;//必须是1

WORDbiBitCount;//表示颜色时要用到的位数,8(256色图)

DWORDbiConpression;//位图是否压缩

DWORDbiSizeImage;//位图数据占用的字节数

LONGbiXPelsPerMeter;//水平分辨率,每米的像素个数

LONGbiYPelsPerMeter;//垂直分辨率,每米的像素个数

DWORDbiClrUsed;//图像实际用到的颜色数

DWORDbiClrImportant;//重要的颜色数

}BITMAPINFOHEADER;

这个结构的长度是固定的,为40个字节

LONG为32位整数*18图像显示预备知识 bmp文件处理

调色板Palette

typedefstructtagRGBQUAD{

BYTErgbBlue; //该颜色的蓝色分量

BYTErgbGreen; //该颜色的绿色分量

BYTErgbRed; //该颜色的红色分量

BYTErgbReserved;//保留值

}RGBQUAD;

图像数据

该象素颜色在调色板中的索引值。

对于256色位图,一个字节表示1个象素。

对于真彩色图,图像数据就是实际的R、G、B值。

注意:

(1) 每一行的字节数必须是4的整倍数,否则需补齐。

(2) .BMP文件的数据是从下到上,从左到右显示的。

从文件中最先读到的是图像最下面一行的左边第一个象素。

*19图像显示预备知识 bmp文件处理

256色BMP文件

位置

0~ 位图文件头BITMAPFILEHEADER

14个字节

14~ 位图信息头BITMAPINFOHEADER

40个字节

54~ 调色板Palette

256×4=1024个字节

1078~ 实际的位图数据ImageDateWidth×Height*20*21图像显示预备知识

bmp文件处理

实际的调色板在显卡内,调色板可以通过BIOS调用操作,也可以直接操作。

直接操作访问的端口号为0x3c8、0x3c9。

0x3c8调色板指针

0x3c9调色板数据寄存器

i文件中调色板位置

outportb(0x3c8,i);

outportb(0x3c9,r>>2);

outportb(0x3c9,g>>2);

outportb(0x3c9,b>>2);

r,g,b各6位,64×64×64=262144色*22图像显示

#include"dos.h"

#include"stdio.h"

unsignedcharset_SVGA_mode(intvmode)

{unionREGSr;

r.h.ah=0;

r.h.al=vmode;

int86(0x10,&r,&r);

return(0);

}

unsignedintget_SVGA_mode()

{unionREGSr;

r.h.ah=0x0f;

int86(0x10,&r,&r);

return(r.h.al);

}*23图像显示

main()

{charbuffer[640];

inti,j,k,n,r,g,b,savemode;

longposition,width,length;

FILE*fp;

charhead[2000];

puts("Open256bitmap!");

puts("Inputfilename:");

gets(buffer);

if((fp=fopen(buffer,"rb"))==NULL)

{printf("Can'topenfile:%s",buffer);

return(0);

}

fseek(fp,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论