ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:931.02KB ,
资源ID:6644699      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-6644699.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(opencv文档格式.docx)为本站会员(b****4)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

opencv文档格式.docx

1、OpenCV在物体检测上使用的是haar特征的级联表,这个级联表中包含的是boost的分类器。首先,人们采用样本的haar特征进行分类器的训练,从而得到一个级联的boost分类器。训练的方式包含两方面:1. 正例样本,即待检测目标样本2. 反例样本,其他任意的图片首先将这些图片统一成相同的尺寸,这个过程被称为归一化,然后进行统计。一旦分类器建立完成,就可以用来检测输入图片中的感兴趣区域的检测了,一般来说,输入的图片会大于样本,那样,需要移动搜索窗口,为了检索出不同大小的目标,分类器可以按比例的改变自己的尺寸,这样可能要对输入图片进行多次的扫描。什么是级联的分类器呢?级联分类器是由若干个简单分类

2、器级联成的一个大的分类器,被检测的窗口依次通过每一个分类器,可以通过所有分类器的窗口即可判定为目标区域。同时,为了考虑效率问题,可以将最严格的分类器放在整个级联分类器的最顶端,那样可以减少匹配次数。基础分类器以haar特征为输入,以0/1为输出,0表示未匹配,1表示匹配。Haar特征 边界特征,包含四种 线性特征,包含8种 中心围绕特征,包含两种 在扫描待检测图片的时候,以边界特征中的(a)为例,正如前面提到的那样,计算机中的图片是一个数字组成的矩阵,程序先计算整个窗口中的灰度值x,然后计算矩形框中的黑色灰度值y,然后计算(x-2y)的值,得到的数值与x做比较,如果这个比值在某一个范围内,则表

3、示待检测图片的当前扫描区域符合边界特征(a),然后继续扫描。关于这个算法的更详细描述已经超出了本文的范围,可以在参考资源中获得更多的信息。非固定大小目标检测因为是基于视频流的目标检测,我们事先不太可能知道要检测的目标的大小,这就要求我们的级联表中的分类器具有按比例增大(或者缩小)的能力,这样,当小的窗口移动完整个待检测图片没有发现目标时,我们可以调整分类器的大小,然后继续检测,直到检测到目标或者窗口与待检测图片的大小相当为止。步骤一:图片预处理在从摄像头中获得一个帧(一张图片)后,我们需要先对这张图片进行一些预处理:1. 将图片从RGB模式转为灰度图将灰度图 2. 进行灰度图直方图均衡化操作

4、这两个步骤在OpenCV中是非常简单的:Python代码 1. image_size=cv.cvGetSize(image)#获取原始图像尺寸 2. 3. grayscalecv.cvCreateImage(image_size,8,1)#建立一个空的灰度图 4. cv.cvCvtColor(image,grayscale,cv.CV_BGR2GRAY)#转换 5. 6. storagecv.cvCreateMemStorage(0)#新建一块存储区,以备后用 7. cv.cvClearMemStorage(storage) 8. 9. cv.cvEqualizeHist(grayscale,

5、grayscale)#灰度图直方图均衡化image_size = cv.cvGetSize(image)#获取原始图像尺寸grayscale = cv.cvCreateImage(image_size, 8, 1)# 建立一个空的灰度图cv.cvCvtColor(image, grayscale, cv.CV_BGR2GRAY)#转换storage = cv.cvCreateMemStorage(0)#新建一块存储区,以备后用cv.cvClearMemStorage(storage)cv.cvEqualizeHist(grayscale, grayscale)# 灰度图直方图均衡化步骤二:检测

6、并标记目标OpenCV中,对于人脸检测的模型已经建立为一个XML文件,其中包含了上面提到的harr特征的分类器的训练结果,我们可以通过加载这个文件而省略掉自己建立级联表的过程。有了级联表,我们只需要将待检测图片和级联表一同传递给OpenCV的目标检测算法即可得到一个检测到的人脸的集合。1. #detectobjects 2. cascadecv.cvLoadHaarClassifierCascade(haarcascade_frontalface_alt.xml, 3. cv.cvSize(1,1) 4. facescv.cvHaarDetectObjects(grayscale,cascad

7、e,storage,1.2,2, cv.CV_HAAR_DO_CANNY_PRUNING, 6. cv.cvSize(50,50)#设置最小的人脸为50*50像素 7. 8. iffaces: 9. printfacedetectedhere,cv.cvGetSize(grayscale) 10. foriin11. cv.cvRectangle(image,cv.cvPoint(int(i.x),int(i.y), 12. cv.cvPoint(int(i.x+i.width),int(i.yi.height), 13. cv.CV_RGB(0,255,0),1,0)#画一个绿色的矩形框 #

8、 detect objects cascade = cv.cvLoadHaarClassifierCascade(, cv.cvSize(1,1) faces = cv.cvHaarDetectObjects(grayscale, cascade, storage, 1.2, 2, cv.CV_HAAR_DO_CANNY_PRUNING, cv.cvSize(50, 50)#设置最小的人脸为50*50像素 if faces: print face detected here, cv.cvGetSize(grayscale) for i in faces: cv.cvRectangle(imag

9、e, cv.cvPoint( int(i.x), int(i.y), cv.cvPoint(int(i.x + i.width), int(i.y + i.height), cv.CV_RGB(0, 255, 0), 1, 8, 0)#画一个绿色的矩形框步骤三:用highgui画出视频窗口1. highgui.cvNamedWindow(camerahighgui.CV_WINDOW_AUTOSIZE) 2. highgui.cvMoveWindow50,50) 4. highgui.cvShowImage(detimg) highgui.cvNamedWindow (, highgui.CV

10、_WINDOW_AUTOSIZE) highgui.cvMoveWindow (, 50, 50) highgui.cvShowImage(, detimg)可以看到,OpenCV的API相当清晰,使用Python的包装,可以使得代码非常小。好了,我们可以看看程序的运行结果:由于视频流是动态的,所以我们可以在程序的入口中使用一个无限循环,在循环中,每次从视频中读入一个帧,将这个帧传输给人脸检测模块,检测模块在这个帧上进行标记(如果有人脸的话),然后返回这个帧,主程序拿到这个帧后,更新显示窗口。opencv的其他特性拉普拉斯边缘检测1. deflaplaceTransform(image):la

11、placeNonecolorlaplace4. planesNone,None,None image_sizecv.cvGetSize(image) ifnotlaplace:range(len(planes):planesi1) cv.IPL_DEPTH_16S,3) cv.cvSplit(image,planes0,planes1,planes2,None) 14. 15. planeplanes:16. cv.cvLaplace(plane,laplace,17. cv.cvConvertScaleAbs(laplace,plane,0) 18. 19. cv.cvMerge(plane

12、s0,colorlaplace) 20. colorlaplace.originimage.origin 21. 22. returndef laplaceTransform(image): laplace = None colorlaplace = None planes = None, None, None image_size = cv.cvGetSize(image) if not laplace: for i in range(len(planes): planesi = cv.cvCreateImage(image_size, 8, 1) laplace = cv.cvCreate

13、Image(image_size, cv.IPL_DEPTH_16S, 1) colorlaplace = cv.cvCreateImage(image_size, 8, 3) cv.cvSplit(image, planes0, planes1, planes2, None) for plane in planes: cv.cvLaplace(plane, laplace, 3) cv.cvConvertScaleAbs(laplace, plane, 1, 0) cv.cvMerge(planes0, planes1, planes2, None, colorlaplace) colorl

14、aplace.origin = image.origin return colorlaplace效果图:CVtypes中自带了一个关于图像色彩空间的直方图的例子:结束语OpenCV的功能十分强大,而且提供了大量的算法实现,文中涉及到的内容只是计算机视觉中很小的一部分。读者可以考虑将采集到的人脸进行标识,从而实现特定人的人脸识别。或者考虑将人脸检测移植到网络上,从而实现远程监控。试想一下,原来没有生命的机器,我们可以通过自己的思想,动作来使得它们看起来像是有思想一样,这件事本身就非常的有趣。三种强大的物体识别算法SIFT/SURF、haar特征、广义hough变换的特性对比分析 收藏识别算法概述

15、:SIFT/SURF基于灰度图:一、首先建立图像金字塔,形成三维的图像空间,通过Hessian矩阵获取每一层的局部极大值,然后进行在极值点周围26个点进行NMS,从而得到粗略的特征点,再使用二次插值法得到精确特征点所在的层(尺度),即完成了尺度不变。二、在特征点选取一个与尺度相应的邻域,求出主方向,其中SIFT采用在一个正方形邻域内统计所有点的梯度方向,找到占80%以上的方向作为主方向;而SURF则选择圆形邻域,并且使用活动扇形的方法求出特征点主方向,以主方向对齐即完成旋转不变。三、以主方向为轴可以在每个特征点建立坐标,SIFT在特征点选择一块大小与尺度相应的方形区域,分成16块,统计每一块沿

16、着八个方向占的比例,于是特征点形成了128维特征向量,对图像进行归一化则完成强度不变;而SURF分成64块,统计每一块的dx,dy,|dx|,|dy|的累积和,同样形成128维向量,再进行归一化则完成了对比度不变与强度不变。haar特征也是基于灰度图:首先通过大量的具有比较明显的haar特征(矩形)的物体图像用模式识别的方法训练出分类器,分类器是个级联的,每级都以大概相同的识别率保留进入下一级的具有物体特征的候选物体,而每一级的子分类器则由许多haar特征构成(由积分图像计算得到,并保存下位置),有水平的、竖直的、倾斜的,并且每个特征带一个阈值和两个分支值,每级子分类器带一个总的阈值。识别物体

17、的时候,同样计算积分图像为后面计算haar特征做准备,然后采用与训练的时候有物体的窗口同样大小的窗口遍历整幅图像,以后逐渐放大窗口,同样做遍历搜索物体;每当窗口移动到一个位置,即计算该窗口内的haar特征,加权后与分类器中haar特征的阈值比较从而选择左或者右分支值,累加一个级的分支值与相应级的阈值比较,大于该阈值才可以通过进入下一轮筛选。当通过分类器所以级的时候说明这个物体以大概率被识别。广义hough变换同样基于灰度图:使用轮廓作为特征,融合了梯度信息,以投票的方式识别物体,在本blog的另一篇文章中有详细讨论,这里不再赘述。特点异同对比及其适用场合:三种算法都只是基于强度(灰度)信息,都

18、是特征方法,但SIFT/SURF的特征是一种具有强烈方向性及亮度性的特征,这使得它适用于刚性形变,稍有透视形变的场合;haar特征识别方法带有一点人工智能的意味,对于像人脸这种有明显的、稳定结构的haar特征的物体最适用,只要结构相对固定即使发生扭曲等非线性形变依然可识别;广义hough变换完全是精确的匹配,可得到物体的位置方向等参数信息。前两种方法基本都是通过先获取局部特征然后再逐个匹配,只是局部特征的计算方法不同,SIFT/SURF比较复杂也相对稳定,haar方法比较简单,偏向一种统计的方法形成特征,这也使其具有一定的模糊弹性;广义hough变换则是一种全局的特征轮廓梯度,但也可以看做整个

19、轮廓的每一个点的位置和梯度都是特征,每个点都对识别有贡献,用直观的投票,看票数多少去确定是否识别出物体。本文来自CSDN博客,转载请标明出处:串口通信Winbase.h描述用于串口通信的函数和结构在Winbase.h头文件中定义。函数 描述 CreateFile 打开串行口 GetCommState 用指定通信设备的当前控制设置填充设备控制块(DCB结构) SetCommState 按照DCB结构的说明配置通信设备。这个函数重新初始化所有硬件 和控制设备,但不清空I/O队列 GetCommTimeouts 获得指定通信设备上所有读/写操作的超时参数 SetCommTimeouts 设置指定通信

20、设备上所有读/写操作的超时参数 WriteFile 向串行口写数据,这样将把数据传送给串行连接另一端的设备 ReadFile 从串行口读数据,这样将从串行连接另一端的设备接收数据 SetCommMask 指定为通信设备监视的一组事件 GetCommMask 获得指定通信设备的事件掩码值 WaitCommEvent 等待指定通信设备的事件的发生。WaitCommEvent函数监视的事件 包含在与设备句柄相关联的事件掩码中 EscapeCommFunction 指导指定通信设备执行扩展功能。通常用于将串行口设置为IR模式 ClearCommBreak 恢复指定通信设备的字符传输,并设置传输线路为不

21、可中断状态 ClearCommError 获得通信错误数据,并报告指定通信设备的当前状态 打开端口 CreateFile函数用于打开串行口,因为硬件供应商和设备驱动程序开发者可以随意命名端口,所以应用程序应该列出所有可用端口,从而使用户能够指定要打开的端口。如果端口不存在,则CreateFile函数返回ERROR_FILE_NOT_FOUND,而且应该通知用户端口不可用。打开串行口 1 在第一个参数lpzPortName指向的通信口后插入一个冒号。例如,指定“COM1:”为通信端口。2 指定dwShareMode参数为0。通信端口不能像文件一样被共享。3 在dwCreationDisposit

22、ion参数中指定OPEN_EXISTING。这个标志是必须的。4 指定dwFlagsAndAttributes参数为0。Windows CE只支持非重叠I/0. 下面的代码段说明了如何打开串行通信端口。hPort=CreateFile(lpszPortName, /指出通信端口 GENERIC_READ|GENERIC_WRITE, /读写模式 0, /共享模式 NULL, /安全属性 OPEN_EXISTING, /如何打开服务端口 0, /端口属性 NULL); /端口属性句柄的拷贝 配置串行口 打开串行口后,一般情况下,应用程序需要改变缺省设置。用GetCommState函数可以获得缺省

23、设置,用SetCommState函数可以设置新的端口设置。另外,端口配置还包括用COMMTIMEOUTS结构设置读/写操作的超时值。当发生超时时,ReadFile或WriteFile函数返回成功传输的具体字符数。DCB PortDCB;PortDCB.DCBlength=sizeof(DCB);GetCommState(hPort,&PortDCB);PortDCB.BaudRate=9600; /波特率 PortDCB.fBinary=TRUE; /只支持二进制串行传输模式 PortDCB.fParity=TRUE; /启用奇偶校验 PortDCB.fOutxCtsFlow=FALSE; /

24、TRUE是由CTS线来控制端口的输出 PortDCB.fOutxDsrFlow=FALSE; /TRUE是由DSR线来控制端口的输出 PortDCB.fDtrControl=DTR_CONTROL_ENABLE; /DTR_CONTROL_DISABLE:禁用DTR(Data Terminal Ready)线并保持此状态;DTR_CONTROL_ENABLE;启用DTR(Data Terminal Ready)线 DTR_CONTROL_HANDSHAKE 根据接收缓冲区数据的数量告诉串行驱动程序切换DTR线状态 PortDCB.fDsrSensitivity=FALSE; /TRUE为端口将忽略任何输入的字节,除非端口DSR线被启用 PortDCB.fTXContinueOnXoff=TRUE; /TRUE为如接收缓冲区已满且驱动程序已传送XOFF字符, 将使驱动程序停止传输字符

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2