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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

在MFC中使用OpenCV的方法Word文件下载.docx

1、二值图像显示为灰阶图像256色彩色图像显示为真彩色图像位图坐标原点底-左origin (0 顶-左,1 底-左)像素分量存放方式交叉存取 (按像素为单位存放)0 交叉存取,1 位平面方式对齐方式 (行像素数据凑整)4字节对齐4字节对齐或8字节对齐每行字节数(biWidth*biBitCount+31)/32*4widthStep像素字节数(biWidth*biBitCount+31)/32*4)* biHeightimageSize像素存放地址BYTE* pBitschar* imageData感兴趣区域roi表中正体字母部分表示相同的参数,粗体字母表示参数部分相同时的交集,斜体加下划线表示结

2、构特有的参数。位图的宽度、高度、像素存放首地址、每行字节数、像素总字节数等5个参数在两种结构中相同。像素位数、通道数、坐标原点位置、像素分量存放方式、对齐方式等5个参数在两种结构中部分相同,使用时可以取其交集,表中用粗体字表示。有2个参数是两种位图各自独有的,感兴趣区域为IplImage结构所独有,调色板单元为DIB所独有。从表1中可以看出,除了高精度图像(位深度16,32,64)外,这两种位图结构在图像处理的绝大部分应用中可以通用。从以上比较中也可看出,IplImage结构适用于高精度处理,并且可以限制处理的区域;而DIB适用于Windows图形操作,并且可以存储低位数图像文件,如每像素一位

3、的二值图像与像素8位的索引图像等。另一种实现MFC的方法是采用CvvImage类,它有一个特点,就是其成员函数DrawToHDC可将位图全部经缩放后显示到窗口中。这样,虽然能够察看全图,但当位图与窗口的长宽比不一致时会造成图像失真。而采用DIB实现的显示比例可选择为1:1,图像显示没有经过缩放,显示画面按窗口大小进行裁剪,并可使用滑动条选择显示部位,这比较符合图像采集与处理的使用习惯。二、调用 OpenCV 函数实现处理使用 OpenCV 函数处理图像在 MFC 环境下显示,实现功能为图像平滑、图像缩小与Canny 边缘检测。根据学习OpenCV一书第2章的3个例子(例2-4,2-5,2-6)

4、 改编而成。例2-4 与 2-5 使用例图 fruits.jpg,例 2-6 使用例图 lena.jpg。还增加了若干图像处理常用功能,详见下面表2菜单结构列表。视频播放也用 OpenCV 函数实现,根据OpenCV教程(基础篇)中第3章的例 3-5 改编而成,用的是 highgui 函数,测试视频文件为globe.avi。例图文件都在 image 目录下。三、用 DirectShow 编制的视频采集程序采用 DirectShow 实现视频采集,其优点是支持高分辨率图像采集,最高分辨率由所用的摄像头决定,如罗技130万像素USB摄像头C300最高分辨率可达1280*1024,在MPEG模式下采

5、集速度为每秒15帧。使用时CPU 的时间占用率在1530%之间。通过多图像平均可以采集得到质量不错的图像,经过4幅图像平均采集所得图像的信噪比可提高一倍。由于需要连续采集多帧图像,约需0.25秒,故适宜采集静态或缓慢移动对象的图像。视频采集功能调用 OpenCV China 网站下载的软件 camerads 中的函数实现。主要内容下面列出stdafx.h尾部集中的几个头文件,程序结构由此可见一斑。#include CVMFC.h / 窗口管理cv.h / OpenCV 头文件highgui.hCameraDS.h / DirectShow(基于OpenCV)CVDSCap.h / 视频采集接口

6、CVMFC的菜单结构程序分为文件、点处理、邻域处理、二值图像处理、形态学处理、综合处理例与视频采集播放等七、八个菜单条共70个功能,近半数功能由参考文献上的程序修改而成,为了便于找到相应参考材料进行对照,在程序中附上了它们的出处。程序的菜单结构见表2,其中列出了演示程序的大多数功能。表2 CVMFC菜单结构文件点处理邻域处理二值图像处理形态学处理综合处理例视频采集播放打开图像彩色变灰阶邻域平均选择阈值腐蚀图像缩小启动摄像头恢复图像图像反相Gauss 滤波自适应阈值法膨胀径向梯度打开 AVI 文件关闭当前窗口垂直镜像中值滤波全局阈值法开运算Canny 算法视频解冻保存当前位图水平镜像Sobel

7、算法外接矩形闭运算种子填充视频冻结最近文件180 度旋转Laplace算法最小面积矩形形态学梯度金字塔图像分割多图像平均恢复原始图像30 度旋转 点集凸包顶帽变换椭圆曲线拟合关闭视频当前画面存盘亮度变换区域凸包波谷检测Snake 原理选择分辨率退出图像直方图轮廓跟踪分水岭原理动态边缘检测直方图均衡化距离变换角点检测L_K光流跟踪典型例图各类功能都有一定的特异性,为了突出各功能的实效,建议初次使用时先用表3中列出的例图进行处理。这些例图在程序包的Image目录下,表中也对一些功能作了简要的说明。表3 功能的典型例图功能名称简要说明外接矩形 (BoundingRect)ExampleL.bmp、E

8、xampleQ.bmp仅适用于单连通区域,不能处理多连通区域与孔边界最小面积矩形 (MinAreaRect2)区域凸包 (ConvexHull2)轮廓跟踪 (FindContours)ExampleC.bmp、SteelBar.bmp、pic3.png适用各类二值图像,使用范围较宽图像反相后也可进行处理,得到不同结果距离变换 (DistTransform)ExampleD.bmp为灰值形态学运算,波谷检测又称黑顶帽变换图像反相后处理与另一方法直接处理等价lena.jpg、fruits.jpglena.jpgHough 变换(直线) (HoughLines2)pic1.pngHough 变换(圆

9、) (HoughCircles)stuff.jpg平行四边形检测pic1.png、pic2.png种子填充 (FloodFill)fruits.jpg鼠标选种子,命令键C、M、R、S、F、G、8、4,ESC金字塔图像分割 (PyrSegmentation)滑动条调节参数,任意键退出椭圆曲线拟合 (FitEllipse)stuff.jpg、rice.tifSnake原理 (SnakeImage)ring.bmp、square.bmp滑动条调节参数,ESC 退出分水岭原理 (Watershed)鼠标绘制区域标记,R 清除,W或Enter 分割,ESC 退出角点检测 (GoodFeaturesToT

10、rack)chessboard.jpg滑动条调节参数,鼠标确定检测范围,任意键退出人脸检测 (HaarDetectObjects)globe.avi不能播放用Mpeg压缩的视频文件L_K 算法光流跟踪鼠标选择跟踪点,命令键R、C、N,ESC退出程序结构程序采用VC+多文档结构,图像的存放与处理则采用OpenCV的结构与函数,图像的显示采用位图信息m_lpBmi实现,为了便于管理对m_lpBmi的操作集中在OnDraw程序中。待显示位图结构发生改变时用m_dibFlag标志激发m_lpBmi的刷新。除了文件结构与图像显示外,其余部分基本上是OpenCV程序。位图数据:CVMFCDoc中 pImg

11、 (读入图像文件所得原始位图) CVMFCView中 workImg (工作位图)、saveImg (备份位图) m_lpBmi (工作位图的位图信息) CVDSCap中 m_Frame (视频采集所得位图)视图的显示:void CCVMFC0View:OnDraw(CDC* pDC)CCVMFCDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for native data hereif (pDoc-pImg!=NULL) / 有磁盘输入图像CSize sizeTotal;sizeTotal = CSize(

12、pDoc-pImg-width,pDoc-height);SetScrollSizes(MM_TEXT, sizeTotal);m_Display=0) / 输入图像尚未显示newCloneImage(pDoc-pImg, &saveImg); / 复制到备份位图m_dibFlag=newCloneImage(saveImg, &workImg); / 复制到工作位图m_ImageType=pDoc-nChannels; / 设置标志m_SaveFlag=m_ImageType;pDoc-m_Display=1;if (m_dibFlag) / 刷新 DIB位图信息if (m_lpBmi)fr

13、ee(m_lpBmi);m_lpBmi = CtreateMapInfo(workImg, m_dibFlag);m_dibFlag = 0;if (workImg) / 刷新窗口画面StretchDIBits(pDC-m_hDC, 0, 0, workImg-width, workImg-height,0, 0, workImg-workImg-imageData, m_lpBmi, DIB_RGB_COLORS, SRCCOPY);CCVMFC模块中增加了4个函数,即CtreateMapInfo、imageType、imageClone与imageReplace。CtreateMapInf

14、o函数用于建立工作位图workImg的位图信息m_lpBmi,其特点是可以为单通道位图设置两种调色板,即黑白灰阶调色板与VGA默认调色板。因为在OpenCV中二值图像显示为灰阶图像,imageType函数可从单通道位图中识别出二值位图。ImageClone与imageReplace函数使用OpenCV函数实现位图的复制,自动释放老的指针所指向的存储单元以防止内存泄漏,同时返回的m_dibFlag标志可以用于激发刷新工作位图workImg的位图信息m_lpBmi。imageReplace与ImageClone相似,但不建立新位图,只用输入位图替换输出位图。LPBITMAPINFO Ctreate

15、MapInfo(IplImage* workImg, int flag) / 建立位图信息 BITMAPINFOHEADER BIH=40,1,1,1,8,0,0,0,0,0,0;LPBITMAPINFO lpBmi;int wid, hei, bits, colors,i;RGBQUAD ColorTab256;wid =workImg-width;hei =workImg-height;bits=workImg-depth*workImg-if (bits8) colors=0;else colors=1bits;lpBmi=(LPBITMAPINFO) malloc(40+4*color

16、s);BIH.biWidth =wid;BIH.biHeight =hei;BIH.biBitCount=(BYTE) bits;memcpy(lpBmi,&BIH,40); / 复制位图信息头if (bits=8) / 256 色位图if (flag=1) / 设置灰阶调色板for (i=0;ibmiColors, ColorTab, 1024);else if (flag=2) / 设置默认调色板bmiColors, VgaDefPal, 1024);return(lpBmi);int imageType(IplImage* p) / 识别二值图像int i,j,k,bpl,n,pg256

17、;BYTE *buf; k=p-if (k=1) / 检查二值图像i+) pgi=0;buf=(BYTE*) p-imageData; bpl=p-widthStep;p-for (j=0;jBitBlt( 0, 0, p-wid, p-hei, pSrcDC, 0, 0, SRCCOPY);源参数Src 目的参数DestOpenCV:cvCvtColor( pSrcImg, pDestcImg, CV_BGR2GRAY);cvSmooth( pSrcImg, pDestcImg, CV_GAUSSIAN, 3, 0, 0);本程序中除了OpenCV函数采用后一书写形式外,其他函数都采用前一书

18、写形式,千万注意不能混淆。OpenCV函数很容易辨认,都以前缀cv-开头,如cvCvtColor、cvSmooth。新增函数ImageClone与imageReplace因为调用OpenCV函数,故也采用后一书写形式。图像处理程序的修改本程序中待处理图像放在工作位图workImg中,处理结果也放在工作位图workImg中。同时,工作位图workImg也是窗口画面显示的内容。所以,处理程序中仅源图像的获取与结果图像的显示与OpenCV程序有所不同,中间处理部分可以完全相同,现以学习OpenCV一书中的例2-6为例来作修改说明。学习OpenCV例2-6原始程序:int main(int argc,

19、 char* argv) / Canny 边缘检测IplImage* pImage = NULL;IplImage* pImgCanny = NULL;IplImage* pImg8u = NULL;IplImage* pImg8uSmooth = NULL; pImage = cvLoadImage(argv1); / 输入待处理图像if (!pImage) return 0;cvNamedWindow(Example6-in,CV_WINDOW_AUTOSIZE);cvShowImage(,pImage);pImg8u =cvCreateImage(cvGetSize(pImage),IP

20、L_DEPTH_8U,1);pImg8uSmooth=cvCreateImage(cvGetSize(pImage),IPL_DEPTH_8U,1);pImgCanny =cvCreateImage(cvGetSize(pImage),IPL_DEPTH_8U,1);cvCvtColor(pImage,pImg8u,CV_BGR2GRAY);cvSmooth(pImg8u,pImg8uSmooth,CV_GAUSSIAN,3,0,0);cvCanny(pImg8uSmooth,pImgCanny,100,200,3);Example6-out, pImgCanny); / 显示处理结果cvWa

21、itKey(0);cvReleaseImage(&pImage);pImg8u);pImg8uSmooth);pImgCanny);cvDestroyWindow(return 0;在CVMFC程序中修改为:OnCannyBorddetec() / Canny 边缘检测 / 根据学习OpenCV例 2-6 改编 / 定义工作位图IplImage* pImage;/* 输入待处理图像 * / 修改部分 1pImage = workImg;/ 建立辅助位图/ 图像处理cvCvtColor(pImage, pImg8u,CV_BGR2GRAY);cvSmooth(pImg8u, pImg8uSmooth,CV_GAUSSIAN,3,0,0);cvCanny(pImg8uSmooth, pImgCanny,100,200,3);/* 输出处理结果 * / 修改部分 2m_dibFlag = ImageReplace(pImgCanny, &/ cvReleaseImage(& /

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1