版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 嵌入式图像处理软件设计课程设计(论文)任务书 学院 专业 班 一、课程设计(论文)题目嵌入式图像处理软件设计 二、课程设计(论文)工作自 2015 年 06 月 22 日起至 2015 年 06 月 26 日止。三、课程设计(论文) 地点: 嵌入式系统实验室 四、课程设计(论文)内容要求:1本课程设计的目的(1)使学生掌握嵌入式开发板(实验箱)各功能模块的基本工作原理; (2)培养嵌入式系统的应用能力及嵌入式软件的开发能力; (3)使学生较熟练地应用嵌入式操作系统及其API开发嵌入式应用软件;(4)培养学生分析、解决问题的能力;(5)提高学生的科技论文写作能力。 2课程设计的任务及要求1)基
2、本要求:(1)分析所设计嵌入式软件系统中各功能模块的实现机制;(2)选用合适嵌入式操作系统及其API;(3)编码实现最终的嵌入式软件系统; (4)在实验箱上调试、测试并获得最终结果。2)创新要求: 在基本要求达到后,可进行创新设计,如改善嵌入式软件实时性能;扩展嵌入式软件功能及改善其图形用户界面。3)课程设计论文编写要求(1)要按照书稿的规格打印誊写课程设计论文。(2)论文包括目录、正文、小结、参考文献、谢辞、附录等(以上可作微调)。(3)课程设计论文装订按学校的统一要求完成。4) 课程设计评分标准: (1)学习态度:20分;(2)回答问题及系统演示:30分(3)课程设计报告书论文质量:50分
3、。成绩评定实行优秀、良好、中等、及格和不及格五个等级。不及格者需重做。5)参考文献:(1)罗蕾.嵌入式实时操作系统及应用开发北京航空航天大学出版社 (2)Jean J.Labrosse. 嵌入式实时操作系统uC/OS-II北京航空航天大学出版社(3)王田苗.嵌入式设计与开发实例.北京航空航天大学出版社(4)北京博创科技公司. 嵌入式系统实验指导书6) 课程设计进度安排(1)准备阶段(4学时):选择设计题目、了解设计目的要求、查阅相关资料。(2)嵌入式软件设计分析阶段(4学时):程序总体设计、详细设计。(3)嵌入式软件代码编写调试阶段(8学时):程序模块代码编写、调试、测试。(4)撰写论文阶段(
4、4学时):总结课程设计任务和设计内容,撰写课程设计论文。7) 课程设计题目具体要求:本题的具体任务是设计多任务的嵌入式软件嵌入式图像处理软件设计,通过分析、设计、编程、调试、测试等步骤,形成一个基于ucos可稳定运行的嵌入式多任务软件系统。学生签名: 2015 年 6 月22 日课程设计(论文)评审意见(1)考勤(10分): 优()、良()、中()、一般()、差(); (2)系统设计(20分):优( )、良()、中()、一般()、差(); (3)编程调试(10分):优()、良()、中()、一般()、差();(4)回答问题(15分):优()、良()、中()、一般()、差();(5)论文撰写(35
5、分):优()、良()、中()、一般()、差(); (6)创新思想(10分):优()、良()、中()、一般()、差();综合评定等级:评阅人: 职称: 2015 年6 月 26日目 录1 引言41.1 课程设计的意义41.2 课程设计的目的42 系统设计原理52.1图像处理技术原理和成像原理52.2 BMP文件格式简介52.3 图像显示原理63 开发环境简介及搭建83.1 硬件平台83.2 系统软件平台构建83.3 LCD显示模块84 系统设计的与具体实现104.1 BMP文件的读入104.2 图像增强算法设计104.3 图像分割算法设计114.4 图像平滑114.5 图像缩放(平移以及转置)1
6、35 程序主要源代码分析155.1 图像数据存储的主程序如下:155.3 图像平移主要代码185.4 图像缩放主要代码215.5 转置图像主要代码246 运行测试结果266.1图像平移效果266.2图像转置效果276.3图像的缩放效果277 总结28参考文献293第 3 页 共 29 页嵌入式图像处理软件课程设计1 引言1.1 课程设计的意义图像处理技术在工业自动化、仪表检测安全、以及安全、消费电子、医学中被越来越广泛的应用。在现代战争中,利用图像进行精确制导、火控、无人飞机的电视导航等,在国防中也受到了高度的重视。图像处理算法中常有大量的运算,特别是在实时图像处理方面,因此通常采用DSP1或
7、FPGA3来实现。随着计算机技术的不断发展,数字图像处理技术也取得了新的进展,但是计算机图像处理系统具体有体积大,应用单一,不能充分发挥计算机的功能,同时也不能满足日益增长的室外简单图像检测应用的需求。作为嵌入式图像处理技术,其主要技术包括两个方面,一个是图像处理技术,另一个则是嵌入式系统4应用技术。本文主要研究图像处理技术在嵌入式系统中的应用。1.2 课程设计的目的图像数据是一种重要的信息资源,随着以计算机和计算机技术为核心的信息科学的发展,图像处理在通讯、管理、医学、地震、气象、航空航天以及教育等领域,发挥着愈来愈重要的作用。但传统的图像处理技术主要依赖于大批量的电子计算设备,它们带来巨大
8、的保养、增加行业成本。嵌入式平台拥有小巧、价格低廉、功耗小及维护成本低等优点。因此基于嵌入式平台构建图像处理系统可以降低其生产维护成本,提高其可靠性和可控件,具有较高的市场价值。本文主要针对采集到的图像(bmp格式)实现平移、转置、缩放、平滑等处理。2 系统设计原理2.1图像处理技术原理和成像原理图像处理技术又称“机器视觉”5,乃是将被测对象的图像作为信息的载体,从中提取有用的信息来达到测量的目的,具有非接触、高速、获得信息丰富等优点。系统一般通过摄像头采集对象的图像信息,然后通过处理系统对采集到的图像进行数字化的处理和分析,根据检测要求可得到对象的特征信息,随后进一步对此进行判断并输出结果。
9、如图2.1 所示,连杆的表面缺陷通过一个方形LED漫反射光源均匀照亮待检测的破口区域,光线照射到对象表面后,通过光学镜头成像在摄像头内的光电耦合CCD 元件3上并转化成相应的数字图像信号,CCD 元件可理解为一个由感光像素组成的点阵,每一个像素都一一对应了被测对象的二维图像特征。数字图像信号经过图像处理系统对图像特征信息的提取和计算得到所需的测量值,随后通过RS232 通讯接口把数据传输给PLC 进行逻辑判断,判断的结果直接通过设备前面板上的指示灯输出。 CCD 透镜 LED 光源 对象 CCD 摄像机图2.1 摄像头采集对象的图像信息2.2 BMP文件格式简介一个BMP文件包括以下四部分:文
10、件头,信息头,调色板数据和图像数据。文件头长度为14个字节。分别为:bffype:指定文件结构,必须是Ox424D,即字符串“BM " bfSize:指定文件大小,包括这14个字节;bfReservedl,bfReserved2:分别为2个字节,为保留字,不用考虑:bfOffBits:从文件头到实际的图像数据的偏移字节数。信息 头 长 度为40个字节,分别为:biSize:指定这个结构的长度,为40,单位字节:biWidth, biHeight:指定图像的宽度和高度,单位为像素;biPlanes:必须为1; biBitCount:指定表示颜色时要用到的位数;biCompression
11、:指定是否压缩:biSizelmage:指定实际图像数据占用的字节数,注意,计算时图像宽度取大于等于biWidth的最小的4的整数倍数;biXPelsPerMeter, biYPelsPerMeter:指定目标设备的水平和垂直分辨率;biClrUsed:指定本图像实际用到的颜色数,如果该值为零,则用到的颜色数为2的biBitCount次方:biCIrImportant:指定本图像中重要的颜色数,如果该值为零,则所有的颜色都是重要的。第三部分为调色板,当然,这是对那些需要调色板的文件而言的。在这里,所采集的图像数据是真彩色624位)的,故不需要调色板。调色 板 实 际上是一个数组,共有biClr
12、Used个元素。数组中每个元素占用4个字节,依次是一字节的蓝色分量,一字节的绿色分量,一字节的红色分量,以及一字节的保留值。第四部分就是实际的图像数据了。对于用到调色板的文件,图像数据是该像素值在调色板中的索引值。这里需要注意的是:每一行的字节数必须是4的整倍数,如果不是,则需要补齐,这在biSizelmage中有介绍。一般来说 ,BMP文件的数据是从下到上,从左到右。也就是说,从文件中最先读到的是图像最下面一行的左边第一个像素,然后是左边第二个像素一接下来是倒数第二行左边第一个像素,以此类推,最后得到的是最上面一行的最右一个像素,这与采集出的图像数据顺序是不同的。每像素的顺序为BGR6.2.
13、3 图像显示原理本课程设计设计采用的是一个240X320分辨率的16位液晶屏幕,可以通过操作S3C2410内部的相关寄存器来直接控制显示,由于采用了ARMLinux作为操作系统,可以直接操作“nux下的Framebuffer设备来完成图像的显示,帧缓冲(Framebuffer)是Linux为显示设备提供的一个接口,把显存抽象后的一种设备,他允许上层应用程序在图形模式下直接对显示缓冲区进行读写操作。这种操作是抽象的、统一的。用户不必关心物理显存的位置、换页机制等等具体细节。这些都是由Framebuffer设备驱动来完成的。在应用程序中首先要打开Framebuffer设备,在Linux系统中Fra
14、mebuffer设备一般映射为/dev/fb,可以有多个设备。然后调用ioctl提供的借口获取设备信息,主要是获得当Framebuffer设备的分辨率、色深、每一行数据占的字节数。关键的一步是将屏幕缓冲区映射到用户空间,Framebuffer设备可以看成是显存的映像,但是Linux所有的设备驱动均在内核态工作,所以无法在当前进程空间中直接访问,通过映射机制可以直接把显存的起始地址映射到当前进程的地址空间,从而可以快速方便的实现显存,建立映射的方法如下:Pfd=mmap(0,FBDraw_finfo,smem_len,PROT_READ|PROT_WRFTE,MAP_SHARED,df,0);/
15、以read、write和share方式映射屏幕上左边为(x,y)的点在显存中的位置是:Pfd+x*(fb_vinfo.bits_pixel)>>3)+y*fb_finfo.line_length,对这个位置赋相应的颜色值就可以再屏幕上显示出来。需要注意的是当色深(fb_vinfo.bits_per_pixel)不同时,颜色值的格式也不一样。把经过图像处理后的图像数据或者采集到的原始图像数据转化成Framebuffer设备的颜色数据格式(RGB565、RGB888等)后,将数据复制到从地址pfb开始的内存中,就可以事先图像的显示。3 开发环境简介及搭建3.1 硬件平台数字图像处理系统
16、是执行处理图像、分析理解图像信息任务的计算机系统.尽管图像处理技术应用广泛,图像处理系统种类很多,但他们的基本组成是相近的口它们主要含有:图像输入设备、执行处理分析与控制的计算机图像处理机、输出设备、存储系统中的图像数据库、图像处理程序库与模型库。其中,负责执行图像处理与分析的图像处理机是整个系统的核心部分,它关系着图像的处理效果,及系统的整体性能。本系统选用的是韩国三星电子公司推出的一款基于ARM920T内核的S3C2410嵌入式微处理器。S3C2410把外部复位信号作为一个中断处理,在系统复位时,程序指针(PC)被设置为0,程序跳转到0x00000000开始运行。此空间对应BankO,系统
17、的2MB的NORFIash和处理器的Bank0相连接。在NORFlash中存储的是BootLoader,它负责配置处理器的结构、工作模式以及自动检测系统的各个硬件是否工作正常。系统经过初始化和自检后,BootLoader负责把16MBNANDFlash的zlmage(即软件系统的镜像文件)复制到0xc0008000地址(此地址是系统64MB SDRAM的首地址)。然后,引导程序把PC指向0xc0008000地址,系统开始运行。3.2 系统软件平台构建结合S3C2410处理器的特点基于该芯片构建嵌入式图像处理系统,设计者必须考虑其通用性、响应速度及对于硬件的可操控性。正是基于这样的考虑,分三层构
18、建嵌入式图像处理系统的软件体系:ARM Linux的建立;图形用户界面(MiniGui)的移植;图像处理软件的设计编码。其中ARM Linux的建立是构建嵌入式Linux系统的通用步骤 3.3 LCD显示模块从S3C24 10的LCD控制器出来的信号线包括24根数据线和若干根控制线。这些信号线是经过74HC245隔离后接到LCD模块的,对于256色LCD只需要其中低8位数据线即可(如图所示)。LCD模块除了需要控制信号和数据信号外,还需要一个22V左右的工作电压和上千伏的背光电压。前者MAX629升压后得到,后者由一个逆变器模块提供。图3.3 S3C24 104 系统设计的与具体实现基于上文的
19、阐述,本软件系统的具体实现工作主要包括:图像文件的读入、图像处理的具体实现等。下文将具体介绍实现工作。4.1 BMP文件的读入在嵌入式平台上,并没有现成的BMP文件的库函数可以使用。因此,如何把一个BMP文件读人到内存中进行图像处理算法移植的根本前提。本系统中,主要处理的图像有两大块:真彩图和256色的图像(包括256级厌度图),因此对应设计了两个BMP文件的读入函数,并将这两个函数放在Graphich和Graphicc中,以备后续的开发使用。两个函数为:GetTruePixel(char bmpnameIl,U32 color24011320J,int*mapwidthint*mapheig
20、ht);Get256Pixel(char bmpname。U8 cdorbutl240113201,U32 pale256int 4mapwidth,int*mapheight)。函数l用于将一个名称为bmpnameH的真彩图像数据读入color矩阵,同时获得图像的宽和高;函数2用于将一个名称为bmpname的256色图像数据读人colorbuf矩阵,同时,对应的调色板数据读入pale矩阵中并获得图像的宽和高。4.2 图像增强算法设计在图像处理中,当光学系统成像时出现背景与目标灰度范围相对比较窄,即低对比度的情况,一般会采用对图像进行灰度的拉伸变换5,从而加大特征目标与背景的灰度差,实现图像增
21、强,以利于提取出特征目标来灰度变换可分为线性灰度变换、分段线性变换、非线性变换本研究采用线性灰度变换,该方法用于克服当图像由于成像时曝光不足或过度所产生的对比度不足的弊病假设原图像八茗,y)的灰度范围为a,b,希望变换后图像g(x,y)的灰度范围扩展到c,d,其数学表达式为:g(x,y)=c (0f(x,y)a)g(x,y)=(d-c)/(b-a)+c (af(x,y) b)g(x,y)=d (bf(x,y) Mf)式中:Mf表示(x,y)的最大值4.3 图像分割算法设计经过图像增强后,要将一幅图像分解为若干互不交叠的、有意义的、具有相同性质的区域,并从中提取出所感兴趣的目标,即图像分割图像分
22、割有边缘检测和阈值分割,这里采用阈值分割方法阈值分割是基于灰度阈值的分割方法,它通过设置阈值,把像素点按灰度级分若干类,从而实现图像分割把一幅灰度图像转换成二值图像是阈值分割的最简单形式,设原始图像为f(x,y),首先就是按一定准则在f(x,y)中找出一个灰度值t作为阈值,将图像分割为两部分,即把大于等于该阈值的像素点的值置成1,小于阈值的像素点置为0阈值运算后的图像为二值图像g(x,Y)g(x,y)=1 (f(x,y) t)g(x,y)=0 (f(x,y)>t)上式中全局阈值t的选择直接影响到分割效果通常可以通过分析灰度直方图来确定它的值,最常见的方法是利用灰度直方图来确定它的值,利用
23、灰度直方图求双峰,选择两峰之间谷底处的灰度值作为阈值4.4 图像平滑图像在生成和传输过程中常受到各种嗓声的干扰和影响,使图像质量下降。为了抑制噪声改善图像质量,必须对图像进行平滑处理。通常,将数字图像的平滑技术4划分为两类。一类是全局处理,即对噪声图像的整体或大的块进行校正得到平滑图像。但这类方法需要知道信号和噪声的统计模型,且运算量较大。另一类平滑技术是对噪声图像使用局部算子。当对某一像素进行平滑处理时,仅对它的局部小邻域的一些像素加以运算,其优点是计算效率高,而且可以多个像素并行处理,因此可以实现实时或者准实时处理。(1)平滑线性滤波器(均值滤波)一般来说,假设MXN的图像(x,y)为给定
24、的含有噪声的图像,用m*n大小的滤波器掩模进行线性滤波结果为g(x,y),在数学上可以表现为:其中,a=(m-1)/12, b=(n-1)/12, w(s,t)为滤波器系数。为了得到一副完整的经过滤波处理的图像,必须对x=0,1,2,.M-1和y =0,工,2,.,N-1依次应用公式。这样,就保证了对图像中的所有像素进行了处理。一般可选取以下几种模板: 模版1 模版2 模版3比较常用 的是模板3,它又被称为高斯(Gauss)模板,它为了突出模板中心像素本身的重要性,对所有的模板系数,不是一视同仁,而是引入了加权系数,可以看出,离原点距离越近的点,加权系数越大。空间均值处理的一个结果是,较大物体
25、变得像“斑点”而易于检测,但那些较小物体的强度与背景混合在了一起。为此,在滤波后可增加阀值处理,即将滤波后的图像与选定的阀值相比较,根据比较结果决定最后的灰度值。该方法对抑制椒盐噪声比较有效,对保护仅有微小灰度差的细节和纹理也有效。(2)平滑非线性滤波器(统计排序滤波器)统计排序 滤波器是一种非线性的空间滤波器,它的响应基于图像滤波器包围的图像区域中像素的排序,然后由统计排序结果决定的值代替中心像素的值。统计排序滤波器中最常见的例子就是中值滤波器,正如其名,它是将像素邻域内灰度的中值代替该像素的值。中值滤波器的主要功能是使拥有不同灰度的点看起来更接近于它的临近值。中值滤波器使用非常普遍,这是因
26、为对于一定类型的随机噪声,它提供了一种优秀的去噪能力,比小尺寸的线性平滑滤波器的模糊程度明显要低。中值滤波器对处理脉冲噪声(椒盐噪声)非常有效,因为这种噪声是以黑白点叠加在图像上的。尽管在图像处理中,中值滤波器是用得最广泛的统计滤波器,但这并不是说它是唯一的。所谓中值就是一系列像素值的第50%个值,当我们取100%个值,此时就是最大滤波器,相反,当取0%的值时就变成了最小滤波器。4.5 图像缩放(平移以及转置)一般采用插值法,有如下几种插值算法:最邻近插值(近邻取样法):最临近插值的的思想很简单。对于通过反向变换得到的的一个浮点坐标,对其进行简单的取整,得到一个整数型坐标,这个整数型坐标对应的
27、像素值就是目的像素的像素值,也就是说,取浮点坐标最邻近的左上角点(对于DIB是右上角,因为它的扫描行是逆序存储的)对应的像素值。可见,最邻近插值简单且直观,但得到的图像质量不高。双线性内插值:对于一个目的像素,设置坐标通过反向变换得到的浮点坐标为(i+u,j+v),其中i、j均为非负整数,u、v为0,1)区间的浮点数,则这个像素得值 f(i+u,j+v) 可由原图像中坐标为 (i,j)、(i+1,j)、(i,j+1)、(i+1,j+1)所对应的周围四个像素的值决定,即:f(i+u,j+v) = (1-u)(1-v)f(i,j) + (1-u)vf(i,j+1) + u(1-v)f(i+1,j)
28、 + uvf(i+1,j+1)其中f(i,j)表示源图像(i,j)处的的像素值,以此类推.这就是双线性内插值法。双线性内插值法计算量大,但缩放后图像质量高,不会出现像素值不连续的的情况。由于双线性插值具有低通滤波器的性质,使高频分量受损,所以可能会使图像轮廓在一定程度上变得模糊。三次卷积法能够克服以上两种算法的不足,计算精度高,但计算量大,他考虑一个浮点坐标(i+u,j+v)周围的16个邻点,目的像素值f(i+u,j+v)可由如下插值公式得到:f(i+u,j+v) = A * B * CA= S(u + 1) S(u + 0) S(u - 1) S(u - 2) f(i-1, j-1) f(i
29、-1, j+0) f(i-1, j+1) f(i-1, j+2) B= f(i+0, j-1) f(i+0, j+0) f(i+0, j+1) f(i+0, j+2) f(i+1, j-1) f(i+1, j+0) f(i+1, j+1) f(i+1, j+2) f(i+2, j-1) f(i+2, j+0) f(i+2, j+1) f(i+2, j+2) S(v + 1) C= S(v + 0) S(v - 1) S(v - 2) 1-2*Abs(x)2+Abs(x)3 , 0<=Abs(x)<1S(x)= 4-8*Abs(x)+5*Abs(x)2-Abs(x)3 , 1<
30、=Abs(x)<2 0 , Abs(x)>=2S(x)是对 Sin(x*Pi)/x 的逼近(Pi是圆周率)最邻近插值(近邻取样法)、双线性内插值、三次卷积法 等插值算法对于旋转变换、错切变换、一般线性变换 和 非线性变换 都适用。5 程序主要源代码分析5.1 图像数据存储的主程序如下:FILE*file=fopen("O.bmp","wb");writebmpfileheader(file);/*写文件头函数*/writebmpinfoheader(file);/* 写信息头函数*/writeimagedata(file);/* 写图像数据函
31、数*/fclose(fi le);写文件头和写信息头函数比较简单,这里bfSize为230454;b iWidth,biHeight为320,240;bi Sizelmage为230400;biXPelsPerMeter,bi YPelsPerMeter,biClrUsed,biCIrImportant均为Oa以下给出 writeimagedata(file)II 数的原型:voidwriteimagedata(FILE* file)Int datapointer;Int mydata ;for (int i= 0; i< = 239; i+)/*共240行*/datapointer -
32、data+(239-i )*3 20 ;/*data为采集映射时图像数据首地址,计算每一要写入的行在内存中的首地址*/for(int j= 0;j < = 31 9;j + + )/* 共 320列*/mydata=*( datapointer+j);fwrite(&mydata,1, 1, fil e); /*写入一行数据*/ 5.2 图像平滑模块Typedef structunsigned short bfType;Unsigned bfSize;Unsigned short bfReserved 1;Unsigned short bfReserved 2;Unsigned
33、bfOffBits;BMPHEADER;BMPHEADER header;Typedef structunsigned biSize;unsigned biWidth;unsigned biHeight;unsigned short biplanes;unsigned short biBitCount;unsigned biCompression;unsigned biSizelmage;unsigned biXpelsPerMeter;unsigned biYpelsPerMeter;unsigned biClrUsed;unsigned biClrUsed;unsigned biClrIm
34、portant; BMPINFOHEADER;BMPINFOHEADER infobeader;在进行处理之前,先读取文件信息,假设我们将采集到的数据存放成0.bmp文件;FILE*fp;Fp=fopen(“0.bmp”,“rb”);fread(&(header.bfType),2,1,fp);fread(&(header.bfSize),4,1,fp);fread(&(header.bfReserved),2,1,fp);fread(&(header.bfOffBits),4,1,fp);fread(&(header.bfzeof(BMPINFOHEA
35、DER),1,fp);接下来,将图像数据存入我们的内存中,并将图像数据灰度化:Unsigned char*prodata;Unsigned char*middledata;Int size=infoheader.bitSizeImage;Prodata=malloc(size);Fread(prodata,1,size,fp);Fclose(fp);For(z=0,z<infoheader.biSizeImage;z+)middledataz=(unsigned char)(*prodata+z+2)*3 +(unsigned char )(*(prodata+z+1)*0.6 + (u
36、nsigned char)(*prodata +z)*0.1);Z+;Middledataz=middledataz-1;Z+;Middledataz=middledataz-1; Memcpy(prodata,middledata,infoheader.biSizeImge);以下是高斯平滑的主程序:Double Template9;/*运算模版*/Double Coef=(double)(1.0/16.0);/*模版均值*/*模版个稀疏声明*/Template0=1.0;Template1=2.0;Template2=1.0; Template3=2.0;Template4=4.0; Te
37、mplate5=2.0;Template6=1.0; Template7=2.0;Template8=1.0;For(x=1;x<XSaveDim-1;x+)for(y=1;y<YSaveDim-1;y+)/*XsaveDim,YsaveDim为图像存储尺寸,x,y从1开始并且以XsaveDim-1,YsaveDim-1结束,是为了去除边界*/for(j=1;j<3;j+)for(k=0;k<3;k+)/*j,k为模版内部循环变量*/Result+=(*(prodata+GetPixelOffset(x=j-1,y+k-1)*Template3*j+k;/*GetPix
38、elOffset为我们自己定义的函数,返回对应x,y坐标的像素在数据空间中的存储位置,返回值为(XSaveDim*y+x)*(infoheader.biBitCount/8)*/Result*=Coed;If(Result>255)Result=255;Z=GetPixelOffset(x,y);Middledataz=(unsigned char)(Result+0.5);Z+;Middledataz=middledataz-1;Z+;Middledataz=middledataz-2;5.3 图像平移主要代码int Main(int argc, char *argv)ARMTarge
39、tInit(); OSInit(); uHALr_ResetMMU();LCD_Init(); LCD_printf("LCD initialization is OKn");LCD_printf("320 x 240 Text Moden");initOSGUI();LoadFont();LoadConfigSys();LCD_printf("Create task on uCOS-II.n");OSTaskCreate(Main_Task, (void *)0, (OS_STK *)&Main_StackSTACKSIZE
40、*8-1, Main_Task_Prio); shuoF();OSTaskCreate(Main_Task2, (void *)0, (OS_STK *)&Main_Stack2STACKSIZE*8-1, Main_Task_Prio);/ 创建系统任务OSAddTask_Init();LCD_printf("Starting uCOS-II.n");LCD_printf("Entering graph mode.n");LCD_ChangeMode(DspGraMode);InitRtc();Nand_Rw_Sem=OSSemCreate(1
41、); OSStart();return 0;void Main_Task(void *Id) int x=0,y=0; char xz="x:" char yz="y:" U16 x1100,y1100,textcontext120,*text1context,*text2context,textinit120;/ char textcontext="" char textinit="0" char bmpname12='1','2','7','_',
42、'1','3',' ',' ','B','M','P',0; strChar2Unicode(x1,xz); strChar2Unicode(y1,yz); strChar2Unicode(textcontext1,textcontext); strChar2Unicode(textinit1,textinit); pposition1=&position1; poutrect=&outrect; poutrect1=&outrect1; outrect.le
43、ft=240; outrect.top=20; outrect.right=300; outrect.bottom=40; outrect1.left=240; outrect1.top=50; outrect1.right=300; outrect1.bottom=70; outrect2.left=0; outrect2.top=0; outrect2.right=200; outrect2.bottom=240; text1=CreateTextCtrl(100,poutrect,1,3,NULL,NULL); text2=CreateTextCtrl(101,poutrect1,1,3
44、,NULL,NULL); SetTextCtrlText(text1,textinit1,TRUE); SetTextCtrlText(text2,textinit1,TRUE); LCD_ChangeMode(DspGraMode); pdc=CreateDC(); ClearScreen(); TextOut(pdc,220,30,x1,TRUE,1); TextOut(pdc,220,60,y1,TRUE,1); DrawTextCtrl(text1); DrawTextCtrl(text2); DrawRectFrame(pdc,0,0,200,240); while(1) Clear
45、Screen(); ShowBmp(pdc,bmpname,50,pos); itoa(50,strx); itoa(pos,stry); pos+=10; if(pos>=150) pos=0; for(t=0;t<5;t+) textinit1t=strxt; SetTextCtrlText(text1,textinit1,TRUE); for(t=0;t<5;t+) textinit1t=stryt; SetTextCtrlText(text2,textinit1,TRUE); DrawTextCtrl(text1); DrawTextCtrl(text2); OSTi
46、meDly(500); DestoryDC(pdc);5.4 图像缩放主要代码void Main_Task(void *Id) /Main_Test_Taskchar bmpname12='1','2','7','_','3','2',' ',' ','B','M','P',0;int i=0,status=0,j=0;PDC pdc;char n2="ecjtu"U16 namme200;U16 c
47、h0='1'char str2='1','2','7','_','3','2',' ',' ','B','M','P',0;U16 str1='1','2','7','_','3','2',' ',' ','B','M','P',0
48、;U16 str317;strChar2Unicode(namme,n2);/POSMSG pMsg;/消息定义LCD_ChangeMode(DspGraMode);/转换LCD显示模式为文本显示模式/LCD_Cls();/文本模式下清屏命令/ClearScreen();pdc=CreateDC();ClearScreen();for(;) int i,j,k,nbyte;U32 cx,cy,wold,hold,wnew,hnew,x0,y0,x1,y1,oldx,oldy;U32 color; U32 colorbuf320240;FILE* pfile;U8 *pbmp,*bmpstart
49、;static U8 bmp4096; float zoomRatio=2,num1;INT8U err;BITMAPFILEHEADER bmpfileheader;BITMAPINFOHEADER bmpinfoheader;if(pfile=OpenOSFile(bmpname, FILEMODE_READ)=NULL)return;ReadOSFile(pfile, (U8*)bmp, 2);/if(bmp0&0xffff)!='MB' )/不是bmp文件if(bmp0!='B' |bmp1 !='M')return; num1=
50、(float)(1.0/zoomRatio); ReadOSFile(pfile, (U8*)&bmpfileheader, sizeof(BITMAPFILEHEADER);ReadOSFile(pfile, (U8*)&bmpinfoheader, sizeof(BITMAPINFOHEADER); wold=bmpinfoheader.biWidth;hold=bmpinfoheader.biHeight;nbyte=bmpinfoheader.biBitCount/8;/第x行,第y列 x0=0; y0=hold-1;/缩放的关键问题是:在对一副图片进行缩放时,可能用到
51、上一次读入的行象素值,然而,readosfile()函数/每读一次就向前推进,故必须标记读入时机使用oldx oldy oldx=x0; oldy=y0; num1=1; bmpstart=bmp; pbmp=bmp;for(i=hold-1;i>=0;i-)pbmp=bmp;if(!ReadOSFile(pfile, bmp,wold*nbyte+(wold*nbyte)%2)break;for(j=0;j<wold;j+) color=*pbmp; for(k=0;k<nbyte-1;k+)color<<=8;pbmp+;color|=*pbmp; pbmp+
52、;colorbufij=color; num1=(float)(1.0/zoomRatio);wnew = (U32)(wold*zoomRatio+0.5); hnew = (U32)(hold*zoomRatio+0.5); for(y1=0;y1<hnew;y1+)for(x1=0;x1<wnew;x1+)x0= (U32)(x1*num1);y0= (U32)(y1*num1);SetPixel(pdc,y1,x1,colorbufx0y0);/CloseOSFile(pfile); OSTimeDly(200);/主任务挂起200毫秒5.5 转置图像主要代码void Ma
53、in_Task(void *Id) /Main_Test_Taskchar bmpname12='1','2','7','_','3','2',' ',' ','B','M','P',0;int i=0,status=0,j=0;PDC pdc;char n2="ecjtu"U16 namme200;U16 ch0='1'char str2='1','2'
54、;,'7','_','3','2',' ',' ','B','M','P',0;U16 str1='1','2','7','_','3','2',' ',' ','B','M','P',0;U16 str317;strChar2Unicode(namme,n2);LCD_ChangeMode(DspGraMode);/转换LCD显示模式为文本显
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二四年度新型铝材特种定制购销合同范本3篇
- 二零二五年度车辆抵押借款合同(含车辆保险理赔)4篇
- 二零二五版城市景观照明工程设计施工合同范本4篇
- 专项服务协议知识产权维护说明一
- 二零二五年度家电租赁服务合同与2025年度维修维护保障合同4篇
- 2024年企业主要负责人安全培训考试题(培优A卷)
- 二零二五年度环保型变压器研发、生产及安装合作合同3篇
- 23年-24年项目管理人员安全培训考试题【完整版】
- 2023年-2024年项目安全培训考试题附完整答案【历年真题】
- 二零二五版房地产租赁合同担保及售后服务保障范本4篇
- 初级中学语文教师资格考试学科知识与教学能力试题及解答参考(2024年)
- 《带一本书去读研:研究生关键学术技能快速入门》笔记
- 人教版八年级数学下册举一反三专题17.6勾股定理章末八大题型总结(培优篇)(学生版+解析)
- 2024届上海高考语文课内古诗文背诵默写篇目(精校版)
- DL-T5024-2020电力工程地基处理技术规程
- 2024年度-美团新骑手入门培训
- 初中数学要背诵记忆知识点(概念+公式)
- 驾照体检表完整版本
- 农产品农药残留检测及风险评估
- 农村高中思想政治课时政教育研究的中期报告
- 20100927-宣化上人《愣严咒句偈疏解》(简体全)
评论
0/150
提交评论