s3c2410连接sdram

s3c2410连接sdram
s3c2410连接sdram

我想,很多的朋友包括一些刚入门,或者是刚从事嵌入式开发的工程师,都会对内存这一块不知所措吧,先抛开信号完整性不说,单从内存的原理以及与主芯片的连接,就已经大伤脑筋了,而很多朋友虽然已经开发出了可以使用的硬件电路板,但大多数的人都是因为有了开发板的参考而所以成功。那如果现在没有了开发板,或者设计要求与你开发板的内存容易配置不一样,那你应该如何下手呢?今天我将把自己根据2410的芯片手册以及内存的芯片手册而完成器件的原理与分析方法,分享给大家,希望如果有不对的地方可以提出,本例中将以S3C2410为主芯片,8Mbyte内存为设计方案,(注:本设计我已认证)

S3C2410,其“存储控制器”提供了访问外围设备所需的信号,它有如下特性:

●支持小字节、大字节序(通过软件选择);

●每个bank的地址空间为128MB,总共1GB(8banks);

●可编程控制的总线位宽(8/16/32-bit),不过bank0只能选择两种位宽(16/32-bit);

●总共8个bank,bank0~bank5可以支持外接ROM、SRAM等,bank6~bank7除可以支持ROM、SRAM外还支持SDRAM等;

●bank0~bank6共7个bank的起始地址是固定的;

●bank7的起始地址可编程选择;

●bank6、bank7的地址空间大小是可编程控制的;

●每个bank的访问周期均可编程控制;

●可以通过外部的“wait”信号延长总线的访问周期;

●在外接SDRAM时,支持自刷新和省电模式;

对于本系统而言,无论出于成本或是RAM占用的面积而言使用SRAM都是不划算的。SRAM一般用于小系统中,SRAM常用于快速存储的较低容量的RAM需求,比如Cache(缓存)。另外本系统需只要带动linux内核,和一些数据库的存取,需要占用内存不是很大,如果用SRAM的话不仅面积占用很大,将近4倍于SDRAM。而且价格将近于SDRAM的8倍左右,显然是不合理的。SDRAM具有高速、大容量等优点,是一种具有同步接口的高速动态随机存储器。它的同步接口和内部流水线结构允许存储外部高速数据,数据传输速度可以和ARM的时钟频率同步,在ARM系统中主要用作程序的运行空间、数据及堆栈区。从成本上考虑,它SRAM 便宜很多,根据设计的性价比,可采用SDRAM作为高速缓存,实现高速数据传输。

本系统中用SDRAM时有一个重要的因素需要仔细考虑,然后选择SDRAM的大小。一般来说,移植到开发板上的linux内核是一个镜像文件,本系统的镜像文件不超过1.5M,在运行内核的时候将此镜像文件复制到内存并解压,解压后大小后超过2M,假如把数据段等都考虑进去,那么运行内核需要占用内存3M多,这里保守估计到4M,而一般的代码都在100K以加,加上数据库的内容,不会超过10M,所以选用16M内存比较划算。

根据上面CPU的特性说明,得知在bank6和bank7上可以连接SDRAM,每个bank最大可以连接128M,另外可以连接16M或更小。对于16M来说,可以满足系统内存占用的要求,32M 以上虽然性能会更好,但是由于内存有大量的存储空间不被使用,所以从成本上考虑,会不划算。

在设计的时候还需要考虑位宽的问题,对于本系统使用的CPU核为ARM9,总线位宽最大为32bit,这里选择最大的总线位宽来保证总线每次数据传输率最大。SDRAM的最高位宽为16bit,因此如果要达到总线位宽32bit的话,可以用两片16bit位宽的SDRAM并联得到。那么此时每片SDRAM的大小可以为4banks*1M*16bit。

根据上面的分析,这里选用SDRAM芯片型号为HY57V641620ESTP-H。该系列的SDRAM 是67,108,864位CMOS同步DRAM,适用于大存储和高带宽的存储器的选择。该芯片的内部存储结构是4banks×1M×16bits,HY57V641620ESTP-H系列是完全同步操作提供参照的时钟上升沿。所有输入和输出是同步的时钟输入的上升沿。数据路径内部管线,实现非常高的带宽。所有输入和输出电压电平兼容LVTTL接口。其特征是:

●3.3 ± 0.3V单电源;

●所有器件引脚兼容LVTTL接口;

●所有的输入和输出参照系统时钟的上升沿;

●自动刷新和自刷新,每64ms自刷新一遍;

●可编程CAS延迟,2,3个时钟

该SDRAM系列根据不同的最高频率,提供了几种型号选择,本系统选用最高频率为133MHZ的HY57V641620ESTP-H型号。SDRAM的频率由锁相环MPLL经过分频所得到的HCLK 总线频率提供SDRAM的时钟频率,这里选择100MHZ主要为了分频方便而选择。

该芯片具有54个引脚,封装为TSOP,其引脚描述如下:

CLK:时钟引脚,用于系统时钟的输入,所有的输入在系统时钟的上升沿向SDRAM注册。CKE:时钟使能引脚,控制内部的时钟信号。

/CS:片选引脚,使能或禁止所有除CLK、CKE、UDQM、LDQM的输入。

BA0、BA1:bank地址引脚。

A0~A12:地址线引脚,行地址:RA0 RA12,列地址:CA0 CA8。

/RAS、/CAS、/WE:行地址选通,列地址选通,写使能引脚。

UDQM、LDQM:数据输入输出屏蔽引脚。

DQ0~DQ15:数据输入输出引脚。

VDD/VSS:电源/接地引脚,为内部电路和输入缓冲供电。

VDDQ/VSSQ:数据输出电源/地引脚,为输出缓冲供电。

NC:未连接。

电气性能如表1表示:

表1:DC下的电气性能

从规格书中可以看到其输入的电源电压典型值为3.3V,和CPU输出电压一致。输入的高电平电压最小为2.0V,符合CMOS中高电平输出电压最小为3.3-0.05V。输入的低电平电压最大为0.8V,符合CMOS中低电平输出电压最大为0.05V。

本系统通过8根片选信号的配置将SDRAM连接在BANK6上,根据S3C2440手册描述该BANK6的起始地址为0x30000000,本系统配置的SDRAM访问空间为16M大小,那么结束地址为

0x30ffffff。BANK6连接SDRAM比较复杂,CPU提供了一组用于SDRAM的信号:

说明如下:

●SDRAM时钟有效信号SCKE;

●SDRAM时钟信号SCLK0/SCLK1;

●数据掩码信号DQM0/DQM1/DQM2/DQM3;

●SDRAM片选信号nSCS0(它与nGCS6是同一引脚的两个功能);

●SDRAM行地址选通脉冲信号nSRAS;

●SDRAM列脉冲信号nSCAS;

●写允许信号nWE(它不是专用于SDRAM的)。

地址线和数据线的连接:

地址线的连接相对来说比较复杂,需要对SDRAM芯片的规格书仔细和S3C2440手册对存储控制器的描述很好的理解。这里首先对本系统中所用的SDRAM芯片的内部结构进行阐述。SDRAM芯片选用的是HY57V641620ESTP-H型号,内部具有4个bank,每个bank是1M,每个存储单元为16位数据。其内部结构如图1-2-1所示:

从其内部结构我们也可以看出,该芯片对外提供了14根地址总线。其中BA0和BA1用于选择片选4个bank。每个bank的1M大小的存储空间则由A0~A11控制。每个bank的内部是一个存储阵列,阵列就如同表格一样,将数据“填”进去。和表格的检索原理一样,先指定一个行(row),再指定一个列(column),就可以准确地找到所需要的单元格,这也是SDRAM

的寻址原理。对于该bank,其内部的每个存储单元,如同上面所说的分别由行和列地址总线来控制。在该芯片的规格书的引脚说明中,如表1-2-2所示,行使用RA0~RA11共12根地址线,列使用RA0~RA7共8根数据线。而这样的行列方式组成了一个BANK的1M寻址空间(2^12*2^8=2^20,为1M空间)。而每一个空间中存的数据长度为16bit。

图1:HY57V641620ESTP-H内部结构

表1-2-2:内存引脚功能表

对于具体的地址线和数据线的连接需要根据手册来正确连接。根据S3C2410手册,可得到双SDRAM的连接方法,具体如表3和表4所示:

表3:不同数据位宽度地址线连接方法

表4:16MB内存连接方法

本系统选择的bank大小配置为16M,总线带宽为32bit,芯片的bank数量为4块,对应表中存储配置的(1M*16*4BANKS)*2ea,根据表中的bank address是连接到A23、A22。该bank address是用了两个地址总线来选择4个bank,对应芯片引脚中的BA0和BA1。因此,根据上面所说,A22连接两片芯片的BA0引脚,A23连接两片芯片的BA1引脚。

其余信号引脚的连接:

nSCS为SDRAM芯片的片选信号,而在S3C2440该CPU中提供了片选信号nSCS0,该引脚和nGCS6是同一个引脚的两个功能。当该信号有效时,选中SDRAM芯片。

SCKE、SCLK0、SCLK1 3个引脚分别是两片RAM芯片的时钟有效信号和两个时钟信号。在CPU端,也相应提供对应的3个引脚,依次相连即可。SCLK0代表的是低16位芯片的时钟引脚,SCLK1代表的是高16位芯片的时钟引脚。

nWE芯片引脚为写使能信号,在CPU端引脚提供了一个不是专用于SDRAM的写允许信号引脚nWE,将此引脚分别用于芯片的写使能,同时控制两片芯片的写使能与否。LDQM、UDQM 两个SDRAM芯片引脚分别为写使能和数据掩码信号引脚,用于在读模式下控制输出缓冲,在写模式下屏蔽输入数据。前面所讲的CPU所提供给SDRAM信号中有4个数据掩码信号DQM0/ DQM1/ DQM2/ DQM3,将低16位芯片的LDQM、UDQM引脚和DQM0、DQM1相连,将高16位芯片的LDQM、UDQM引脚和DQM2、DQM3相连。

芯片手册上关于电源部分描述如下

根据上表,VDD和VDDQ电源信号需要连接3.3V,引脚说明中VSS和VSSQ信号需要接地。

根据上面所述,电路图连接如图2所示:

图2:sdram 连接方法

SC32410的SDRAM 接口时序图如图3所示:

图3:S3C2410 SDRAM时序图

影响SDRAM性能的主要时序参数有3个,分别是tRCD、CL和tRP。以内存最主要的操作——读取为例。tRCD决定了行寻址(有效)至列寻址(读/写命令)之间的间隔,CL决定了列寻址到数据进行真正被读取所花费的时间,tRP则决定了相同L-Bank中不同工作行转换的速度。相关参数的值我们可以从SDRAM的规格书中得到:

HY57V641620ESTP-H的结构为1M*4Bank*16bit,如图4所示:

图4:HY57V641620ESTP-H中1个BANK的结构

至此,s3c2410对内存的操作,时序的产生,以及最后对应到具体操作的哪个内容空间,比较系统的了解了。

中断异常处理流程

计算机体系结构中,异常或者中断是处理系统中突发事件的一种机制,几乎所有的处理器都提供这种机制。异常主要是从处理器被动接受的角度出发的一种描述,指意外操作引起的异常。而中断则带有向处理器主动申请的意味。但这两种情况具有一定的共性,都是请求处理器打断正常的程序执行流程,进入特定程序的一种机制。若无特别说明,对“异常”和“中断”都不作严格的区分。本文结合经过实际验证的代码对ARM9中断处理流程进行分析,并设计出基于S3C2410芯片的外部中断处理程序。 1.异常中断响应和返回 系统运行时,异常可能会随时发生。当一个异常出现以后,ARM微处理器会执行以下几步操作: 1) 将下一条指令的地址存入相应连接寄存器LR,以便程序在处理异常返回时能从正确的位置重新开始执行。 2)将CPSR复制到相应的SPSR中。 3)根据异常类型,强制设置CPSR的运行模式位。 4) 强制PC从相关的异常向量地址取下一条指令执行,从而跳转到相应的异常处理程序处。 这些工作是由ARM内核完成的,不需要用户程序参与。异常处理完毕之后,ARM微处理器会执行以下几步操作从异常返回: 1)将连接寄存器LR的值减去相应的偏移量后送到PC中。 2)将SPSR复制回CPSR中。 3) 若在进入异常处理时设置了中断禁止位,要在此清除。 这些工作必须由用户在中断处理函数中实现。为保证在ARM处理器发生异常时不至于处于未知状态,在应用程序的设计中,首先要进行异常处理。采用的方式是在异常向量表中的特定位置放置一条跳转指令,跳转到异常处理程序。当ARM处理器发生异常时,程序计数器PC会被强制设置为对应的异常向量,从而跳转到异常处理程序。当异常处理完成以后,返回到主程序继续执行。可以认为应用程序总是从复位异常处理程序开始执行的,因此复位异常处理程序不需要返回。 2.异常处理程序设计 2.1 异常响应流程

OpenCV主要函数介绍

4.1 OpenCV主要函数介绍 1) cvLoadImage 从文件中读取图像 IplImage* cvLoadImage(const char* filename,int flags=CV_LOAD_IMAGE_COLOR ); 函数cvLoadImage从指定文件读入图像,返回读入图像的指针。其中filename是要被读入的文件的文件名;flags指定读入图像的颜色和深度。 2)cvSaveImage 保存图像到文件 int cvSaveImage( const char* filename, const CvArr* image ); 函数cvSaveImage保存图像到指定文件。其中filename保存文件名。image 要保存的图像。图像格式的的选择依赖于filename的扩展名,只有8位单通道或者3通道(通道顺序为'BGR' )可以使用这个函数保存。 3)cvQueryFrame从摄像头或者文件中抓取并返回一帧 IplImage* cvQueryFrame( CvCapture* capture ); 函数cvQueryFrame从摄像头或者文件中抓取一帧,然后解压并返回这一帧。这个函数仅仅是函数cvGrabFrame和函数cvRetrieveFrame在一起调用的组合。返回的图像不可以被用户释放或者修改。其中capture视频获取结构。。 4)cvCaptureFromCAM 初始化摄像头 CvCapture* cvCaptureFromCAM( int index ); 函数cvCaptureFromCAM给从摄像头的视频流分配和初始化CvCapture结构。 其中index要使用的摄像头索引。如果只有一个摄像头或者用哪个摄像头也无所谓,那使用参数-1应该便可以。 5)cvHaarDetectObjects 用来检测图像中的人脸区域 CV API(CvSeq*) cvHaarDetectObjects( const CvArr* image, CvHaarClassifierCascade* cascade, CvMemStorage* storage, double scale_factor CV_DEFAULT(1.1), int min_neighbors CV_DEFAULT(3), int flags CV_DEFAULT(0), CvSize min_size CV_DEFAULT(cvSize(0,0)), CvSize max_size CV_DEFAULT(cvSize(0,0))); 用于快速检测人脸区域,便于提取得到人脸数据。其中image 为被检图像,cascade为 haar分类器级联的内部标识形式,storage 为用来存储检测到的一

S3C2410触摸屏驱动程序原理图

S3C2410触摸屏驱动程序原理图 本文介绍了基于三星S3C2410X微处理器,采用SPI接口与ADS7843触摸屏控制器芯片完成触摸屏模块的设计。具体包括在嵌入式Linux操作系统中的软件驱动开发,采用内核定时器的下半部机制进行了触摸屏硬件中断程序设计,采用16个时钟周期的坐标转换时序,实现触摸点数据采集的方法,给出了坐标采集的流程。设计完成的触摸屏驱动程序在博创公司教学实验设备UP-NETARM2410-S平台上运行效果良好。 引言 随着信息家电和通讯设备的普及,作为与用户交互的终端媒介,触摸屏在生活中得到广泛的应用。如何在系统中集成触摸屏模块以及在嵌入式操作系统中实现其驱动程序,都成为嵌入式系统设计者需要考虑的问题。本文主要介绍在三星S3C2410X微处理器的硬件平台上进行基于嵌入式Linux的触摸屏驱动程序设计。 硬件实现方案 SPI接口是Motorola推出的一种同步串行接口,采用全双工、四线通信系统,S3C2410X是三星推出的自带触摸屏接口的ARM920T内核芯片,ADS7843为Burr-Brown生产的一款性能优异的触摸屏控制器。本文采用SPI接口的触摸屏控制器ADS7843外接四线电阻式触摸屏,这种方式最显著的特点是响应速度更快、灵敏度更高,微处理器与触摸屏控制器间的通讯时间大大减少,提高了微处理器的效率。ADS7843与S3C2410的硬件连接如图1所示,鉴于ADS7843差分工作模式的优点,在硬件电路中将其配置为差分模式。 图1触摸屏输入系统示意图 嵌入式Linux系统下的驱动程序 设备驱动程序是Linux内核的重要组成部分,控制了操作系统和硬件设备之间的交互。Linux 的设备管理是和文件系统紧密结合的,各种设备都以文件的形式存放在/dev目录下,成为设备文件。应用程序可以打开、关闭、读写这些设备文件,对设备的操作就像操作普通的数据文

ARM异常中断机制.

ARM9(以S3C2410为例)中断机制 一、ARM异常机制介绍 ARM9处理器有7种工作模式。分别是(除了用户模式其他都是异常模式 用户模式(usr:ARM处理器正常的程序执行状态。 快速中断模式(fiq:用于高速数据传输或通道处理。 外部中断模式(irq:用于通用的中断处理。 管理模式(svc:操作系统使用的保护模式。 数据访问终止模式(abt:当数据或指令预取终止时进入该模式。 系统模式(sys:运行具有特权的操作系统任务。 未定义指令中止模式(und:当未定义的指令执行时进入该模式。 每种模式通过5位二进制编码进行标示: 用户模式10000 快速中断模式10001 外部中断模式10010 管理模式10011 数据访问终止模式10111 未定义指令中止模式11011 系统模式11111 模式编码存放在CPSR(程序当前状态寄存器,记录当前工作模式的编码的值)中的[4:0]。

快速中断模式、外部中断模式、数据访问终止模式、未定义指令中止模式、管理模式称为异常模式。 异常类型具体含义 复位当处理器的复位电平有效时,产生复位异常,程序跳转到复位异常处理程序处执行。 未定义指令遇到不能处理的指令时,产生未定义指令异常。 软件中断该异常由执行SWI指令产生,可用于用户模式下的程序调用特权操作指令。可使用该异常机制实现系统功能调用。 指令预取中止若处理器预取指令的地址不存在,或该地址不允许当前指令访问,存储器会向处理器发出中止信号,但当预取的指令被执行时,才会产生指令预取中止异常。 数据中止若处理器数据访问指令的地址不存在,或该地址不允许当前指令访问时,产生数据中止异常。 IRQ(外部中断请求)当处理器的外部中断请求引脚有效,且CPSR中的I 位为0时,产生IRQ异常。系统的外设可通过该异常请求中断服务。 FIQ(快速中断请求)当处理器的快速中断请求引脚有效,且CPSR中的F 位为0时,产生FIQ异常。 当多个异常发生时,处理器根据优先级进行处理。优先级

S3C2410中文手册第7章_时钟和功率管理

第七章时钟和功率管理 概述 时钟和功率管理模块由三部分组成:时钟控制,USB控制和功率控制。 S3C2410A的时钟控制逻辑能够产生系统所需要的时钟,包括CPU的FCLK,AHB总线接口的HCLK,和APB总线接口的PCLK。S3C2410A有两个PLL,一个用于FCLK,HCLK,PCLK,另一个用于USB模块(48MHZ)。时钟控制逻辑能够由软件控制不将PLL连接到各接口模块以降低处理器时钟频率,从而降低功耗。 S3C2410A有各种针对不同任务提供的最佳功率管理策略,功率管理模块能够使系统工作在如下4种模式:正常模式,低速模式,空闲模式和掉电模式。 正常模式:功率管理模块向CPU和所有外设提供时钟。这种模式下,当所有外设都开启时,系统功耗将达到最大。用户可以通过软件控制各种外设的开关。例如,如果不需要定时器,用户可以将定时器时钟断开以降低功耗。 低速模式:没有PLL的模式。与正常模式不同,低速模式直接使用外部时钟(XTIpll或者EXTCLK)作为FCLK,这种模式下,功耗仅由外部时钟决定。 空闲模式:功率管理模块仅关掉FCLK,而继续提供时钟给其他外设。空闲模式可以减少由于CPU核心产生的功耗。任何中断请求都可以将CPU从中断模式唤醒。 掉电模式:功率管理模块断开内部电源。因此CPU和除唤醒逻辑单元以外的外设都不会产生功耗。要执行掉电模式需要有两个独立的电源,其中一个给唤醒逻辑单元供电,另一个给包括CPU在内的其他模块供电。在掉电模式下,第二个电源将被关掉。掉电模式可以由外部中断EINT[15:0]或RTC唤醒。 功能描述 时钟结构 图7-1描述了时钟架构的方块图。主时钟源由一个外部晶振或者外部时钟产生。时钟发生器包括连接到一个外部晶振的振荡器和两个PLL(MPLL和UPLL)用于产生系统所需的高频时钟。 时钟源选择 表7-1描述了模式控制引脚(OM3和OM2)和选择时钟源之间的对应关系。OM[3:2]的状态由OM3和OM2引脚的状态在nRESET的上升沿锁存得到。 注意:1、尽管MPLL在系统复位的时候就开始产生,但是只有有效的设置号

S3C2410中断分析

S3C2410中断分析 具体详细解释 这段来自: https://www.360docs.net/doc/d215756908.html,/ghy0504/blog/item/db90649a0f554bbfc8eaf47a.html https://www.360docs.net/doc/d215756908.html,/renpine/archive/2009/10/04/4631854.aspx 具体写的很详细,后面画个图对流程进行详细解释,方便自己查阅,并结合wince里面底层中断的代码分析下。 S3C2410有24个外部中断引脚:EINT0~EINT23,但是对于EINT0~EINT3这4个外部中断而言,使用比较简单;对于其它20个而言,使用稍稍复杂一些。 首先,来看S3C2410的中断控制器,有6个中断裁决器分为2级,第1级5个,第2级1个。第1级的5个裁决器管理32个中断源,在这32个中断源中有2个是保留的,24个是给内部中断源的,而外部中断只给了6个中断:EINT0、EINT1、EINT2、EINT3、EINT4~7、EINT8~23。EINT4~EINT7、EINT8~EINT23都是共享一个中断。 中断控制器中主要的相关寄存器有:INTMSK、SRCPND、PRIORITY、INTPND,还有一个INTMOD。但是对于外部中断还有几个寄存器:EXTINTn、EINTMSK、EINTPEND等。 对于外部中断EINT0~EINT3由于没有共享,因此外部寄存器中只有EXTINT0和它们有关,进行中断触发电平信号的设置。 但是对于其他的20个外部中断而言,所有上面提到的寄存器都有关系。实际上对于 EINT4~EINT23,实际上可以看作有3级屏蔽,第1级屏蔽是CPSR中的I-Bit和F-Bit,第2级屏蔽是EINTMASK([4:23]每一位对应一个相应的外部中断),第3级屏蔽是INTMSK(Bit4、Bit5);对于EINT0~EINT3而言,只是INTMSK中的Bit0~Bit3,因此在变成初始化时应该要特别注意。 在外部中断有中断请求时,由于EINT4~7、EINT8~23分别共享中断,因此在SRCPND 中分别对应Bit4、Bit5,最终导致INTPND中的相应位置1(在任何时刻只能有一个位置1),但是如何分辨这些共享的中断?可以通过查询EINTPEND来进行(Bit4~Bit23分别对应1个外部中断)。由于在相应中断后在服务例程中应将挂起寄存器中相应的位清0来清除未处理状态,因此对于EINT4~7、EINT8~23这20个外部中断的清除挂起寄存器的顺序是: 1. EINTPEND(可能多位同事为1),方法:向要清0的位写1,其它位写0,但要注意由于第4位保留,因此不要试图向第4位写1,可能会导致不可预料的结果。 2.SRCPND(可能多位同时为1),方法:向要清0的位写1,其它位写0。 3.INTPND,方法:向其写本身的数据(即INTPND=INTPND)。

OpenCV最基础的图像处理的例子

?什么是OpenCV ?开源C/C++计算机视觉库. ?面向实时应用进行优化. ?跨操作系统/硬件/窗口管理器. ?通用图像/视频载入、存储和获取. ?由中、高层API构成. ?为Intel?公司的Integrated Performance Primitives (IPP) 提供了透明接口. ?特性: ?图像数据操作(分配,释放, 复制, 设定, 转换). ?图像与视频I/O (基于文件/摄像头输入, 图像/视频文件输出). ?矩阵与向量操作与线性代数计算(相乘, 求解, 特征值, 奇异值分解SVD). ?各种动态数据结构(列表, 队列, 集, 树, 图). ?基本图像处理(滤波, 边缘检测, 角点检测, 采样与插值, 色彩转换, 形态操作, 直方图, 图像金字塔). ?结构分析(连接成分, 轮廓处理, 距离转换, 模板匹配, Hough转换, 多边形近似, 线性拟合, 椭圆拟合, Delaunay三角化). ?摄像头标定 (寻找并跟踪标定模板, 标定, 基础矩阵估计, homography估计, 立体匹配). ?动作分析(光流, 动作分割, 跟踪). ?对象辨识 (特征方法, 隐马可夫链模型HMM). ?基本GUI(显示图像/视频, 键盘鼠标操作, 滚动条). ?图像标识 (直线, 圆锥, 多边形, 文本绘图) ?OpenCV 模块: ?cv - OpenCV 主要函数. ?cvaux - 辅助(实验性) OpenCV 函数. ?cxcore - 数据结构与线性代数算法. ?highgui - GUI函数. 资料链接 ?参考手册: ?/docs/index.htm ?网络资源: ?官方网页: https://www.360docs.net/doc/d215756908.html,/technology/computing/opencv/?软件下载: https://www.360docs.net/doc/d215756908.html,/projects/opencvlibrary/ ?书籍: ?Open Source Computer Vision Library by Gary R. Bradski, Vadim Pisarevsky, and Jean-Yves Bouguet, Springer, 1st ed. (June, 2006). ?视频处理例程(位于/samples/c/目录中): ?色彩跟踪: camshiftdemo ?点跟踪: lkdemo

驱动-异常处理结构、中断处理结构

一,Linux 异常处理体系结构框架: 1,按键按下时。 强制的跳到异常向量处执行(中断是异常的一种)。 2,CPU 发生中断。 3,“入口函数”是一条跳转指令。跳到某个函数:(作用) 将2440 作为单片机使用时:裸机程序时 ②,执行中断处理函数。 ③,恢复被中断的现场。 ①,保存被中断处的现场(各种寄存器的值)。 LINUX 中处理中断的过程: 1,写程序时先设置异常入口: 发生“中断”时,就跳到0x18 地址处,跳转到“HandleIRQ”是执行下面的指令: 中断处理完后,要返回去继续执行之前被中断的那个程序。 保存寄存器就是保存中断前那个程序的所用到的寄存器。 然后是处理中断,最后是恢复。 linux 中: 异常向量在哪里: LINUX 异常处理结构、中断处理结构: 2012年2月23日 11:03

①,LINUX的异常向量在哪里: ARM架构的CPU的异常向量基址可以是 0x0000 0000,也可以是 0xffff0000,LINUX内核 使用后者,只需要在某个寄存器里设置下,就可以将异常基址定位到这里来。这个地址并不代表实际的内存,是虚拟地址。当建立了虚拟地址与物理地址间的映射后,得将那些异常向量,即相当于把那些跳转指令(如:HandleSWI 等)复制拷贝到这个 0xffff0000这个地址处去。(“那些跳转指令”是指head.S中那些跳转)。 这个过程是在trap_init这个函数里做。 trap_init函数将异常向量复制到0xffff0000处,部分代码如下: 如上: 将 __vectors_start, __vectors_end -__vectors_start 这段代码拷贝到 vectors来。

opencv 3.1 例程介绍

1.calib3d:相机标定以及三维重建。 2.core:核心模块,包括OpenCV 基本的数据结构,离散傅里叶变换,XML 和YAML 文 件的写入与读取,扫描图像,opencv的互操作,英特尔IPP 异步转换。 3.features2D:AKAZE特征检测与跟踪。 4.gpu:gpu基本操作 5.HighGUI:包括GDAL支持,视频PSNR,SSIM质量指标,视频存储,设置滚动条,更改图 像对比度和亮度。 6.Histograms_Matching:包括直方图,直方图反向投影,直方图比较,直方图均衡,直方 图匹配。 7.ImgProc:包括图像叠加,线性变换,形态学处理,图像金字塔,图像滤波,二值化。 8.ImgTrans:包括Canny,Sobel边缘检测,图像边界扩展,使用filter2D构造线性滤波器, 图像几何变换,霍夫变换,拉普拉斯变换,图像分割,图像重映射。 9.Introduction:图像显示。 10.Ml:机器学习,包括主成分分析(PCA),支持向量机(SVM),非线性SVM。 11.objectDetection:目标检测。 12.photo:计算摄影学,包括去色,HDR成像,非真实性渲染,泊松克隆。 13.ShapeDescriptors:包括查找轮廓,计算多边形的矩,测试点是否在多边形中。 14.TrackingMotion:包括角点检测,Harris角点检测,Shi-Tomasi角点检测,亚像素级角点 检测。 15.Video:背景提取。 16.Viz:基于VTK库实现三维可视化。 17.xfeatures2D:背景提取。 1.3calibration.cpp,calibration.cpp:相机定标。 2.autofocus.cpp:自动聚焦。 3.bgfg_segm.cpp:背景分割。 4.camshiftdemo.cpp:min-shift跟踪。 5.cloning_demo.cpp,cloning_gui.cpp:泊松克隆。 6.connected_components.cpp:显示连通分量。 7.contours2.cpp:查找,绘制填充轮廓。 8.convexhull.cpp:获取轮廓凸包。 9.cout_mat.cpp:矩阵输出。 10.create_mask.cpp:生成掩码。 11.dbt_face_detection.cpp:人脸识别(仅用于UNIX,ANDROID)。 12.delaunay2.cpp:对随机点进行delaunay三角剖分。 13.demhist.cpp:直方图均衡化,调节图像的亮度与对比度。 14.detect_blob.cpp:使用BLOB(二进制大对象)进行区域检测和滤波。 15.detect_mser.cpp:使用MSER进行斑点区域检测。 16.dft.cpp:离散傅里叶变换。 17.ffilldemo.cpp:漫水填充。 18.filestorage.cpp:Mat矩阵存储,读写XML/YML文件。 19.fitellipse.cpp:椭圆拟合。 20.grabcut.cpp:grabcut图像分割。

S3C2410中文手册第7章_时钟及电源管理模块

第七章时钟及电源管理模块 时钟电源管理模块包含了3部分:Clock控制、USB控制、POWER控制. 时钟控制逻辑单元能够产生s3c2440需要的时钟信号,包括CPU使用的主频FCLK,AHB总线设备使用的HCLK,以及APB总线设备使用的PCLK.2440内部有2个PLL(锁相环):一个对应FCLK、HCLK、PCLK,另外一个对应的是USB使用(48MHz)。时钟控制逻辑单元可以在不使用PLL情况下降低时钟CLOCK的频率,并且可以通过软件来驱使时钟和各个模块的连接/断开,以减少电源消耗。 对于电源控制逻辑单元,2440有许多钟电源管理方案来针对所给的任务保持最优的电源消耗。S3c2440中的电源管理模块对应4种模式:NORMAL模式、SLOW模式,IDLE模式,SLEEP 模式。 NORMAL模式:这个模块给CPU时钟以及2440相应的外围设备提供时钟。这个模式下,当所有的外围设备都被打开,电源消耗被最大化。它允许用户通过软件来控制外部设备的操作。例如,如果一个定时器不需要时,那么用户可以通过CLKCON寄存器来关闭时钟和定时器的连接,来降低电源消耗。 SLOW模式:NON-PLL模式,不同于Normal模式,这个模式使用的一个外部时钟(XTlpll 或EXTCLK)来直接作为2440的主频FCLK,而没有使用PLL。在这个模式下,电源的消耗仅依赖于外部时钟频率,电源同PLL有关的消耗可以被排除。 IDLE模式:这个模式下CPU的时钟FCLK被断开,而还继续提供其他外围设备的时钟。因此空闲模式导致减少了CPU核相应的电源消耗。任何中断请求都能够将CPU唤醒。 Sleep模式:这个模式断开了内部电源。因此在这个模式下CPU&内部的逻辑单元都没有电源消耗,除了一个wake-up逻辑单元。激活sleep模式需要2个独立的电源。一个给wake-up逻辑模块提供电源,另外一个给内部逻辑包括CPU提供电源,并且其是对于power on/off可控的。在Sleep模式,提供给内部逻辑&CPU的电源模块将被关闭,而从Sleep 模式唤醒可以通过EINT[15:0]&RTC中断来引发。 7.1功能描述 7.1.1时钟结构 如图7-1所示时钟结构模块图。主时钟源来自外部晶振(XTIPLL)或者是外部时钟(EXTCLK).时钟生成器包含了一个振荡器(振荡放大器),其连接外部晶振,并且还有2个PLL,可以产生满足s3c2440所需的高频时钟。

opencv自学笔记

OPENCV 一、Opencv 基本架构分析 多模块组合起来的一个软件开发工具包(SDK) 1、【calib3d】 2、【cntrib】 3、【core】:核心功能模块。 4、【imgproc】:图像处理模块。 5、【features2d】 6、【flann】 7、【gpu】 8、【highgui】:高层GUI图形用户界面,包含媒体的输 入输出、视频捕捉、图像视频的编码和解码、图形交互界面的接口内容等。 9、【legacy】 … 二、HighGui图形用户界面初步 1、opencv的命名空间:opencv的C++类和函数都是定 义在命名空间cv之内的,访问方法:(1)、在代码 开头的适当位置加上using namespace cv (2)、在 使用opencv的每个内和函数时,都加入cv::命名 空间。 2、图像的载入:imread()函数

Mat imread(const string& filename, int flags=1); (1)、const string&类型的filename,填我们需要载 入的图片路径名称。 (2)、int类型的flags,为载入标志,它指一个加载 图像的颜色类型。 3、图像的显示:imshow()函数 Void imshow(const string& winname, InputArray mat); (1)、const string&类型的winname,填需要显示的窗口标识名称。 (2)、InputArray类型的mat,填需要显示的图像。 4、创建窗口:namedWindow()函数 void namedWindow(const string& winname, int flags=WINDOW_AUTOSIZE); (1)、const string&类型的name,填写被作用窗口的标识符的窗口名称。 (2)、int类型的flags,窗口的标识,可填写WINDOW_AUTOSIZE、WINDOW_NORMAL或WINDOW_OPENGL 5、输出到文件:imwrite()函数 bool imwrite(const string& finename, InputArray img , const vector& params=vector() );

基于S3C2410的流水灯控制系统

电气与信息工程学院《嵌入式系统工程训练》说明书 题目:基于S3C2410的流水灯控制系统 作者: 专业班级: 指导教师:陈佳泉 职称:讲师 2017年1月13日

摘要 随着社会的发展,嵌入式在未来的应用会越来越广泛。随着物联网的时代到来,电器将会与互联网,移动电话成为一体。本实训项目是以嵌入式系统为目标的一次平台操作。所谓嵌入式系统就是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,实用于应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。ARM嵌入式芯片是一种高性能、低功耗的RISC芯片,世界上几乎所有的主要半导体生产商都生产基于ARM体系机构的通用芯片,且基于ARM内核的嵌入式处理器已经成为市场主流。而且Linux是免费发行的、快速高效的操作系统,在过去的几年中,基于开源组织的Linux嵌入式操作系统得到了长远的发展。嵌入式Linux是按照嵌入式操作系统的要求设计的一种小型操作系统。由一个内核以及一些根据需要进行定制的系统模块组成。其内核很小,一般只有几百KB,即使加上其他必要的模块和应用程序,所需的存储空间也很小。非常适合于移植到嵌入式系统中去,同时它还具有多任务多进程的系统特征。 本次设计以基于嵌入式的简单的流水灯的设计。我们综合应用ARM嵌入式系统设计的相关专知识,搭建了一个基于S3C2410的硬件平台,在平台上编写出一个完整的流水灯控制功能的软件。通过这次的课程设计,使我们基本了解了嵌入式的方法以及培养我们对嵌入式编程的兴趣,与此同时,我们还可以回顾一下C 的编程和汇编编程的基础。并通过这个典型的嵌入式系统项目的设计与开发学习嵌入式系统的设计与开发流程。为将来在嵌入式的学习和工作中做好准备。 关键词:流水灯,嵌入式,C 编程 Water lamp,Embedded,C programming

常熟理工嵌入式期末考试复习选择题部分

1.以下()不是ARM的7种运行模式之一。 A. 中断模式 B. 挂起模式 C. 无定义模式 D. 快中断模式 2 μCOS-II 操作系统中,需要()个任务就绪状态列表。 A. 64 B. 1 C. 63 D. 8 3 在指令系统的各种寻址方式中,获取操作数最快的方式是()。 A. 直接寻址 B. 寄存器寻址 C. 立即寻址 D. 间接寻址 4 RS-232C串行通信总线的电气特性要求总线信号采用()。 A. 负逻辑 B. 低电平 C. 正逻辑 D. 高电平 5 下面哪点不是嵌入式操作系统的特点。() A. 高实时性 B. 功能强大 C. 内核精简 D. 专用性强 6 ARM 处理器中,()异常可以用来响应中断。 A. SVC B. SWI C. FIQ D. RESET 7 Linux是UNIX类操作系统的一种,它对UNIX有很好的兼容性,下面不是它特点的是()。 A. 多硬件平台支持,多处理器支持。 B. 交互操作性强 C. 实时性强 D. 内存保护模式,共享库支持,TCP/IP、SLIP和PPP支持。 8 ARM工作状态下,每取出一条指令后程序计数器PC的值应该()。 A. 自动加4 B. 自动加1 C. 自动置1 D. 自动清0 9 在ARM处理器中,()寄存器包括全局的中断禁止位,控制中断禁止位就可以打开或者关闭中断。 A. SPSR B. CPSR C. PC D. LR 10 ARM处理器比较无符号数大小时是根据()标志位来判断的。 A. C和V B. C和Z C. Z和V D. C和N 11 下面()特性不符合嵌入式操作系统特点。 A. 实时性 B. 易移植 C. 微型化 D. 不可定制 12 用来描述一个任务,使得任务得以独立运行的数据结构是()。 A. 以上皆不是 B. TLB C. BSP D. TCB 13 在嵌入式ARM 处理器中,下面哪种异常优先级最高。() A. Reset B. FIQ C. 数据中止 D. IRQ 14 下面哪种嵌入式操作系统很少用于手机终端设备上。() A. Linux B. μCOS C. Symbian D. WinCE 15 嵌入式的软件分为()和应用软件两个主要部分。 A. 操作系统 B. 嵌入式GUI C. 嵌入式数据库 D. 驱动程序 16 实时操作系统可分为()。 A. 以上都不对 B. 硬实时操作系统和软实时操作系统

OpenCV常用函数说明

OpenCV基础篇中的常用函数说明: (1)函数名: cvActionTargetMod(...) Action = 核心功能(core functionality) (e.g. set, create) Target = 目标图像区域(target image area) (e.g. contour, polygon) Mod = (可选的)调整语(optional modifiers) (e.g. argument type) (2)矩阵数据类型: CV_(S|U|F)C S = 符号整型 U = 无符号整型 F = 浮点型 E.g.: CV_8UC1 是指一个8位无符号整型单通道矩阵, CV_32FC2是指一个32位浮点型双通道矩阵. (3)图像数据类型: IPL_DEPTH_(S|U|F) E.g.: IPL_DEPTH_8U 图像像素数据是8位无符号整型. IPL_DEPTH_32F图像像素数据是32位浮点型. (4)头文件: #include #include #include #include #include // 一般不需要,cv.h 内已包含该头文件 4、编译建议 (1)Linux: g++ hello-world.cpp -o hello-world / -I /usr/local/include/opencv -L /usr/local/lib / -lm -lcv -lhighgui -lcvaux (2)Windows: 在Visual Studio的‘选项’和‘项目’中设置好OpenCV相关文件的路径。 5、C例程

s3c2410中断异常处理总结(重要)(精)

s3c2410中断异常处理 在进入正题之前,我想先把ARM920T的异常向量表(Exception Vectors)做一个简短的介绍。:] ARM920T的异常向量表有两种存放方式,一种是低端存放(从0x00000000处开始存放),另一种是高端存放(从0xfff000000处开始存放)。关于为什么要分两种方式进行存放这点我将在介绍MMU的文章中进行说明,本文采用低端模式。ARM920T能处理有8个异常,他们分别是: Reset,Undefined instruction,Software Interrupt,Abort (prefetch,Abort (data,Reserved,IRQ, FIQ 下面是某个采用低端模式的系统源码片段: _start: b Handle_Reset b HandleUndef b HandleSWI b HandlePrefetchAbort b HandleDataAbort b HandleNotUsed b HandleIRQ b HandleFIQ ….. … .. other codes … 上面这部分片段一般出现在一个名叫“head.s”的汇编文件里,“b Handle_Reset”这条语句就是系统上电之后运行的第一条语句。也就是说这部分代码的二进制码必须位于内存的最开始部分(这正是低端存放模式),因为上电后CPU会从SDRAM的0x00000000处取第一条指令并执行。

Address Instruct 0x00000000: b Handle_Reset 0x00000004: b HandleUndef 0x00000008: b HandleSWI 0x0000000C: b HandlePrefetchAbort 0x00000010: b HandleDataAbort 0x00000014: b HandleNotUsed 0x00000018: b HandleIRQ 0x0000001C: b HandleFIQ 上面是该程序段在系统上电后加载到内存后的分布情况,我们可以看到每条指令占用了4个字节。 上电后,PC指针会跳转到Handle_Reset处开始运行。以后系统每当有异常出现,则CPU会根据异常号,从内存的0x00000000处开始查表做相应的处理,比如系统触发了一个IRQ异常,IRQ为第6号异常,则CPU将把PC指向0x00000018地址(4*6=24=0x00000018)处运行,该地址的指令是跳转到“中断异常服务例程”(HandleIRQ)处运行。以上就是我对异常向量表的一个简单介绍。现在可以进入我们文章的主题“中断异常处理”,s3c2410的中断分快中断(FIQ和普通中断(IRQ),我们讨论的重点是普通中断(IRQ)。 s3c2410的中断异常处理模块总共由以下寄存器构成 SRCPND(SOURCE PENDING REGISTER INTMOD(INTERRUPT MODE REGISTER INTMSK(INTERRUPT MASK REGISTER PRIORITY( PRIORITY REGISTER INTPND(INTERRUPT PENDING REGISTER INTOFFSET(INTERRUPT OFFSET REGISTER SUBSRCPND (INTERRUPT SUB SOURCE PENDING INTSUBMSK (INTERRUPT SUB MASK REGISTER)

opencv应用函数

目录 1 一、简介 1.1 1、OpenCV的特点 1.1.1 (1)总体描述 1.1.2 (2)功能 1.1.3 (3)OpenCV模块 1.2 2、有用的学习资源 1.2.1 (1)参考手册: 1.2.2 (2)网络资源: 1.2.3 (3)书籍: 1.2.4 (4)视频处理例程(在/samples/c/): 1.2.5 (5)图像处理例程(在/samples/c/): 1.3 3、OpenCV 命名规则 1.3.1 (1)函数名: 1.3.2 (2)矩阵数据类型: 1.3.3 (3)图像数据类型: 1.3.4 (4)头文件: 1.4 4、编译建议 1.4.1 (1)Linux: 1.4.2 (2)Windows: 1.5 5、C例程 2 二、GUI 指令 2.1 1、窗口管理 2.1.1 (1)创建和定位一个新窗口: 2.1.2 (2)载入图像: 2.1.3 (3)显示图像: 2.1.4 (4)关闭窗口: 2.1.5 (5)改变窗口大小: 2.2 2、输入处理 2.2.1 (1)处理鼠标事件: 2.2.2 (2)处理键盘事件: 2.2.3 (3)处理滑动条事件: 3 三、OpenCV的基本数据结构 3.1 1、图像数据结构 3.1.1 (1)IPL 图像: 3.2 2、矩阵与向量 3.2.1 (1)矩阵: 3.2.2 (2)一般矩阵: 3.2.3 (3)标量: 3.3 3、其它结构类型 3.3.1 (1)点:

3.3.2 (2)矩形框大小(以像素为精度): 3.3.3 (3)矩形框的偏置和大小: 4 四、图像处理 4.1 1、图像的内存分配与释放 4.1.1 (1)分配内存给一幅新图像: 4.1.2 (2)释放图像: 4.1.3 (3)复制图像: 4.1.4 (4)设置/获取感兴趣区域ROI: 4.1.5 (5)设置/获取感兴趣通道COI: 4.2 2、图像读写 4.2.1 (1)从文件中读入图像: 4.2.2 (2)保存图像: 4.3 3、访问图像像素 4.3.1 (1)假设你要访问第k通道、第i行、第j列的像素。 4.3.2 (2)间接访问: (通用,但效率低,可访问任意格式的图像) 4.3.3 (3)直接访问: (效率高,但容易出错) 4.3.4 (4)基于指针的直接访问: (简单高效) 4.3.5 (5)基于c++ wrapper 的直接访问: (更简单高效) 4.4 4、图像转换 4.4.1 (1)字节型图像的灰度-彩色转换: 4.4.2 (2)彩色图像->灰度图像: 4.4.3 (3)不同彩色空间之间的转换: 4.5 5、绘图指令 4.5.1 (1)绘制矩形: 4.5.2 (2)绘制圆形: 4.5.3 (3)绘制线段: 4.5.4 (4)绘制一组线段: 4.5.5 (5)绘制一组填充颜色的多边形: 4.5.6 (6)文本标注: 5 五、矩阵处理 5.1 1、矩阵的内存分配与释放 5.1.1 (1)总体上: 5.1.2 (2)为新矩阵分配内存: 5.1.3 (3)释放矩阵内存: 5.1.4 (4)复制矩阵: 5.1.5 (5)初始化矩阵: 5.1.6 (6)初始化矩阵为单位矩阵: 5.2 2、访问矩阵元素 5.2.1 (1)假设需要访问一个2D浮点型矩阵的第(i, j)个单元. 5.2.2 (2)间接访问: 5.2.3 (3)直接访问(假设矩阵数据按4字节行对齐): 5.2.4 (4)直接访问(当数据的行对齐可能存在间隙时possible alignment gaps):

S3C2410X中文手册

S3C2410X 32位RISC微处理器 用户手册 Revision 1 修订版1 第一章产品概述

第一章产品概述 (3) 简介 (3) 特性 (4) 方框图 (8) 引脚分配 (9)

第一章产品概述 简介 这个手册描述了SAMSUNG公司的S3C2410X16/32位RISC微处理器。这个产品计划用于低成本、低功耗和高性能手持设备和一般应用的单片微处理器解决方案。为了降低系统成本,S3C2410X包含了如下部件:独立的16KB指令和16KB数据缓存,用于虚拟内存管理的MMU 单元,LCD控制器(STN & TFT),非线性(NAND)Flash引导单元,系统管理器(包括片选逻辑和SDRAM控制器),3通道的异步串行口(UART),4个通道的DMA,4个通道的带脉宽调制器(PWM)的定时器,输入输出端口,实时时钟单元(RTC),带有触摸屏接口的8通道10位AD 转换器,IIC总线接口,IIS总线接口,USB的主机(Host)单元,USB的设备(Device)接口,SD卡和MMC(Multi-Media Card)卡接口,2通道SPI接口和锁相环(PLL)时钟发生器。 S3C2410X微处理器是使用ARM920T核、采用0.18um 工艺CMOS标准宏单元和存储编译器开发的。 它的低功耗精简和出色的全静态设计特别适用于对成本和功耗敏感的应用。 应用中,它采用了一种新的总线结构,即高级微控制器总线结构(AMBA)。 S3C2410X的杰出特性是它的CPU核,采用了由ARM公司设计的16/32位ARM920T RISC 处理器。ARM920T实现了MMU、AMBA总线和独立的16KB指令和16KB数据哈佛结构的缓存,每个缓存均为8个字长度的流水线。 S3C2410X通过提供全面的、通用的片上外设,使系统的全部成本降到最低,并且不需要配置额外的部件。这个文档将包含以下完整的在片功能的介绍。 1.8V ARM920T内核,1.8V/ 2.5V/ 3.3V存储系统,带有3.3V16KB指令和16KB数据缓存及MMU 单元的外部O接口的微处理器 外部存储器控制(SDRAM控制和芯片选择逻辑) LCD控制器(支持4K颜色的STN或256K色TFT的LCD),带有1个通道的LCD专用DMA控制器 4通道DMA,具有外部请求引脚 3通道UART(支持IrDA1.0,16字节发送FIFO及16字节接收FIFO)/2通道SPI接口 1个通道多主IIC总线控制器/1通道IIS总线控制器 1.0版本SD主机接口及 2.11版本兼容的MMC卡协议 2个主机接口的USB口/1个设备USB口(1.1版本) 4通道PWM定时器/1通道内部计时器 看门狗定时器 117位通用目的I/O口/24通道外部中断源 电源控制:正常、慢速、空闲及电源关闭模式 带触摸屏接口的8通道10位ADC 带日历功能的实时时钟控制器 具有PLL的片上时钟发生器

Opencv的基本操作

实验六 OPENCV的基本操作 张慧彬 2013-8-24 机器人研究中心

目录 一.OPENCV的基本算法及一般应用 (2) 1.从磁盘加载并在屏幕上显示图象 (2) 2.播放AVI视频 (3) 3.视频播放控制 (4) 4.载入一幅图象并进行平滑处理 (6) 二.调试OPTICAL_FLOW_DEMO.CPP程序 (7) 三.OENCV的应用之CANNY边缘检测 (8) 1. C ANNY边缘检测基本原理 (8) 2.C ANNY边缘检测流程 (8) 四.试验总结及心得 (12)

一. Opencv的基本算法及一般应用 1.从磁盘加载并在屏幕上显示图象 #include”highgui.h” int main(int argc,char** argv); { IplImage *img=cvLoadImage(agrv[1]); //将图像文件加载至内存,cvLoadImage()函数是一个高层调用接口,它通过文件名确定被加载文件的格式,。IplImage结构体将是我们在使用OpenCV时会最常用到的数据结构 cvNamedWindow(”Example 1”,CV_WINDOW_AUTOSIZE); // cvNamedWindow()函数用于在屏幕上创建一个窗口,将被显示的图像包含于该窗口中。函数的第一个参数指定了该窗口的窗口标题,cvNamedWindow()函数的第二个参数定义了窗口的属性。该参数可被设置为0(默认值)或CV_WINDOW_AUTOSIZE,设置为0时,窗口的大小不会因图像的大小而改变,图像只能在窗口中根据窗口的大小进行拉伸或缩放;而设置为 CV_WINDOW_AUTOSIZE时,窗口则会根据图像的实际大小自动进行拉伸或缩放,以容纳图像 cvShowImage(”Example 1”,img);// 只要有一个与某个图像文件相对应的IplImage*类型的指针,我们就可以在一个已创建好的窗口(使用cvNamedWindow()函数创建)中使用cvShowImage()函数显示该图像。cvShowImage()函数通过设置其第一个参数确定在哪个已存在的窗口中显示图像。cvShowImage()函数被调用时,该窗口将被重新绘制,并且图像也会显示在窗口中。如果该窗口在创建时被指定CV_WINDOW_AUTOSIZE标志作为cvNamedWindow()函数的第二个参数,该窗口将根据图像的大小自动调整为与图像一致。 cvWaitKey(0);// 使程序暂停,等待用户触发一个按键操作。但如果将该函数参数设为一个正数,则程序将暂停一段时间,时间长为该整数值个毫秒单位,然后继续执行程序,即使用户没有按下任何键。当设置该函数参数为0或负数时,程序将一直等待用户触发按键操作。

相关文档
最新文档