




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
安装和配置OpenCV1. 安装OpenCV1.0(因为VC+6.0只与OpenCV1.0兼容,更高版本的OpenCV不兼容);2. 检查C:Program FilesOpenCVbin是否已经被加入到环境变量PATH,如果没有,请加入。加入后需要注销当前Windows用户(或重启)后重新登陆才生效。(可以在任务管理器里重启explorer.exe)3. 配置Visual C+ 6.01. 全局设置:菜单Tools-Options-Directories:先设置lib路径,选择Library files,在下方填入路径:C:Program FilesOpenCVlib然后选择include files,在下方填入路径:C:Program FilesOpenCVcxcoreincludeC:Program FilesOpenCVcvincludeC:Program FilesOpenCVcvauxincludeC:Program FilesOpenCVmlincludeC:Program FilesOpenCVotherlibshighguiC:Program FilesOpenCVotherlibscvcaminclude然后选择source files,在下方填入路径:C:Program FilesOpenCVcvsrcC:Program FilesOpenCVcxcoresrcC:Program FilesOpenCVcvauxsrcC:Program FilesOpenCVotherlibshighguiC:Program FilesOpenCVotherlibscvcamsrcwindows最后点击“ok”,完成设置。2. 项目设置:每创建一个将要使用OpenCV的VC Project,都需要给它指定需要的lib。菜单:Project-Settings,然后将Setting for选为All Configurations(虽然这里选择了All Configuration,但是我在后期建立新的工程的时候会出现没有包含头文件的提示,做笨的办法就是在每一次创建新的工程的时候把以下内容加上),然后选择右边的link标签,在Object/library modules附加上:cxcore.lib cv.lib ml.lib cvaux.lib highgui.lib cvcam.lib如果你不需要这么多lib,你可以只添加你需要的lib。Highgui.h与CvvImage类的问题:编写代码的时候最好都加上#include”highgui.h”和#include”cv.h”,否则CvvImage类会无法使用,OpenCV2.2.0以上版本都取消了CvvImage类,需要自己添加类。附:CvvImage类:头文件 CvvImage.h#pragma once #ifndef CVVIMAGE_CLASS_DEF #define CVVIMAGE_CLASS_DEF #include cv.h #include highgui.h /* CvvImage class definition */ class CvvImage public: CvvImage(); virtual CvvImage(); /* Create image (BGR or grayscale) */ virtual bool Create( int width, int height, int bits_per_pixel, int image_origin = 0 ); /* Load image from specified file */ virtual bool Load( const char* filename, int desired_color = 1 ); /* Load rectangle from the file */ virtual bool LoadRect( const char* filename, int desired_color, CvRect r ); #if defined WIN32 | defined _WIN32 virtual bool LoadRect( const char* filename, int desired_color, RECT r ) return LoadRect( filename, desired_color, cvRect( r.left, r.top, r.right - r.left, r.bottom - r.top ); #endif /* Save entire image to specified file. */ virtual bool Save( const char* filename ); /* Get copy of input image ROI */ virtual void CopyOf( CvvImage& image, int desired_color = -1 ); virtual void CopyOf( IplImage* img, int desired_color = -1 ); IplImage* GetImage() return m_img; ; virtual void Destroy(void); /* width and height of ROI */ int Width() return !m_img ? 0 : !m_img-roi ? m_img-width : m_img-roi-width; ; int Height() return !m_img ? 0 : !m_img-roi ? m_img-height : m_img-roi-height; int Bpp() return m_img ? (m_img-depth & 255)*m_img-nChannels : 0; ; virtual void Fill( int color ); /* draw to highgui window */ virtual void Show( const char* window ); #if defined WIN32 | defined _WIN32 /* draw part of image to the specified DC */ virtual void Show( HDC dc, int x, int y, int width, int height, int from_x = 0, int from_y = 0 ); /* draw the current image ROI to the specified rectangle of the destination DC */ virtual void DrawToHDC( HDC hDCDst, RECT* pDstRect ); #endif protected: IplImage* m_img; ; typedef CvvImage CImage; #endif 源文件 CvvImage.cpp #include StdAfx.h #include CvvImage.h / / Construction/Destruction / CV_INLINE RECT NormalizeRect( RECT r ); CV_INLINE RECT NormalizeRect( RECT r ) int t; if( r.left r.right ) t = r.left; r.left = r.right; r.right = t; if( r.top r.bottom ) t = r.top; r.top = r.bottom; r.bottom = t; return r; CV_INLINE CvRect RectToCvRect( RECT sr ); CV_INLINE CvRect RectToCvRect( RECT sr ) sr = NormalizeRect( sr ); return cvRect( sr.left, sr.top, sr.right - sr.left, sr.bottom - sr.top ); CV_INLINE RECT CvRectToRect( CvRect sr ); CV_INLINE RECT CvRectToRect( CvRect sr ) RECT dr; dr.left = sr.x; dr.top = sr.y; dr.right = sr.x + sr.width; dr.bottom = sr.y + sr.height; return dr; CV_INLINE IplROI RectToROI( RECT r ); CV_INLINE IplROI RectToROI( RECT r ) IplROI roi; r = NormalizeRect( r ); roi.xOffset = r.left; roi.yOffset = r.top; roi.width = r.right - r.left; roi.height = r.bottom - r.top; roi.coi = 0; return roi; void FillBitmapInfo( BITMAPINFO* bmi, int width, int height, int bpp, int origin ) assert( bmi & width = 0 & height = 0 & (bpp = 8 | bpp = 24 | bpp = 32); BITMAPINFOHEADER* bmih = &(bmi-bmiHeader); memset( bmih, 0, sizeof(*bmih); bmih-biSize = sizeof(BITMAPINFOHEADER); bmih-biWidth = width; bmih-biHeight = origin ? abs(height) : -abs(height); bmih-biPlanes = 1; bmih-biBitCount = (unsigned short)bpp; bmih-biCompression = BI_RGB; if( bpp = 8 ) RGBQUAD* palette = bmi-bmiColors; int i; for( i = 0; i = max_img_size | (unsigned)h = max_img_size | (origin != IPL_ORIGIN_TL & origin != IPL_ORIGIN_BL) assert(0); / most probably, it is a programming error return false; if( !m_img | Bpp() != bpp | m_img-width != w | m_img-height != h ) if( m_img & m_img-nSize = sizeof(IplImage) Destroy(); /* prepare IPL header */ m_img = cvCreateImage( cvSize( w, h ), IPL_DEPTH_8U, bpp/8 ); if( m_img ) m_img-origin = origin = 0 ? IPL_ORIGIN_TL : IPL_ORIGIN_BL; return m_img != 0; void CvvImage:CopyOf( CvvImage& image, int desired_color ) IplImage* img = image.GetImage(); if( img ) CopyOf( img, desired_color ); #define HG_IS_IMAGE(img) (img) != 0 & (const IplImage*)(img)-nSize = sizeof(IplImage) & (IplImage*)img)-imageData != 0) void CvvImage:CopyOf( IplImage* img, int desired_color ) if( HG_IS_IMAGE(img) ) int color = desired_color; CvSize size = cvGetSize( img ); if( color nChannels 1; if( Create( size.width, size.height, (!color ? 1 : img-nChannels 1 ? img-nChannels : 3)*8, img-origin ) cvConvertImage( img, m_img, 0 ); bool CvvImage:Load( const char* filename, int desired_color ) IplImage* img = cvLoadImage( filename, desired_color ); if( !img ) return false; CopyOf( img, desired_color ); cvReleaseImage( &img ); return true; bool CvvImage:LoadRect( const char* filename, int desired_color, CvRect r ) if( r.width 0 | r.height width; r.height = img-height; r.x = r.y = 0; if( r.x img-width | r.y img-height | r.x + r.width 0 | r.y + r.height 0 ) cvReleaseImage( &img ); return false; /* truncate r to source image */ if( r.x 0 ) r.width += r.x; r.x = 0; if( r.y img-width ) r.width = img-width - r.x; if( r.y + r.height img-height ) r.height = img-height - r.y; cvSetImageROI( img, r ); CopyOf( img, desired_color ); cvReleaseImage( &img ); return true; bool CvvImage:Save( const char* filename ) if( !m_img ) return false; cvSaveImage( filename, m_img ); return true; void CvvImage:Show( const char* window ) if( m_img ) cvShowImage( window, m_img ); void CvvImage:Show( HDC dc, int x, int y, int w, int h, int from_x, int from_y ) if( m_img & m_img-depth = IPL_DEPTH_8U ) uchar buffersizeof(BITMAPINFOHEADER) + 1024; BITMAPINFO* bmi = (BITMAPINFO*)buffer; int bmp_w = m_img-width, bmp_h = m_img-height; FillBitmapInfo( bmi, bmp_w, bmp_h, Bpp(), m_img-origin ); from_x = MIN( MAX( from_x, 0 ), bmp_w - 1 ); from_y = MIN( MAX( from_y, 0 ), bmp_h - 1 ); int sw = MAX( MIN( bmp_w - from_x, w ), 0 ); int sh = MAX( MIN( bmp_h - from_y, h ), 0 ); SetDIBitsToDevice( dc, x, y, sw, sh, from_x, from_y, from_y, sh, m_img-imageData + from_y*m_img-widthStep, bmi, DIB_RGB_COLORS ); void CvvImage:DrawToHDC( HDC hDCDst, RECT* pDstRect ) if( pDstRect & m_img & m_img-depth = IPL_DEPTH_8U & m_img-imageData ) uchar buffersizeof(BITMAPINFOHEADER) + 1024; BITMAPINFO* bmi = (BITMAPINFO*)buffer; int bmp_w = m_img-width, bmp_h = m_img-height; CvRect roi = cvGetImageROI( m_img ); CvRect dst = RectToCvRect( *pDstRect ); if( roi.width = dst.width & roi.height = dst.height ) Show( hDCDst, dst.x, dst.y, dst.width, dst.height, roi.x, roi.y ); return; if( roi.width dst.width ) SetStretchBltMode( hDCDst, / handle to device context HALFTONE ); else SetStretchBltMode( hDCDst, / handle to device context COLORONCOLOR ); FillBitmapInfo( bmi, bmp_w, bmp_h, Bpp(), m_img-origin ); :StretchDIBits( hDCDst, dst.x, dst.y, dst.width, dst.height, roi.x, roi.y, roi.width, roi.height, m_img-imageData, bmi, DIB_RGB_COLORS, SRCCOPY ); void CvvImage:Fill( int color ) cvSet(m_img, cvScalar(color&255,(color8)&255,(color16)&255,(color24)&255) ); 如何通过摄像头获取视频:1. 添加图片控件:IDC_ShowImage和按钮控件:IDCBUTTON1;2. 在*Dlg.cpp文件开头包含highgui.h文件;3. 在*Dlg.cpp文件开头添加代码:CvCapture* capture;CRect rect;CDC *pDC;HDC hDC;CWnd *pwnd;4. 在CTXimageloadDlg:OnInitDialog()函数中添加如下代码(在todo后加入):pwnd=GetDlgItem(IDC_ShowImage);pDC=pwnd-GetDC();hDC=pDC-GetSafeHdc();pwnd-GetClientRect(&rect);5. 为IDC_BUTTON1控件添加函数OnButton1():if(!capture) capture = cvCaptureFromCAM(0); /打开摄像头 /AfxMessageBox(OK); if (!capture) AfxMessageBox(无法打开摄像头); return; / 测试 IplImage* m_Frame; m_Frame=cvQueryFrame(capture); CvvImage m_CvvImage; m_CvvImage.CopyOf(m_Frame,1); if (true) m_CvvImage.DrawToHDC(hDC, &rect); /cvWaitKey(10); / 设置计时器,每10ms触发一次事件 SetTimer(1,10,NULL);6. 右键建立类向导-Message Maps-Object IDS-*Dlg-Messages-WM_TIMER双击-MemberFunctions-OnTimer双击,然后在OnTimer函数中添加:IplImage* m_Frame; m_Frame=cvQueryFrame(capture); CvvImage m_CvvImage; m_CvvImage.CopyOf(m_Frame,1); if (true) m_CvvImage.DrawToHDC(hDC, &rect); /cvWaitKey(10); 如何播放AVI视频(弹窗)1. 新建MFCwindow工程,为MFCwindowDlg类添加一个public的成员变量strAviFilePath,类型为CString(S必须大写,犯了错,导致调试了一个上午);2. 在MFCwindowDlg.cpp中添加一个全局变量:CvCapture* capture;3. 添加按钮控件IDC_OPEN,为控件添加函数Open():CFileDialog dlg(true,*.avi,NULL,NULL,*.avi|*.avi|);if (dlg.DoModal()=IDOK)strAviFilePath = dlg.GetPathName();elsereturn;cvNamedWindow(Example,CV_WINDOW_AUTOSIZE);capture=cvCreateFileCapture(strAviFilePath);IplImage* frame;while(1)frame=cvQueryFrame(capture);if (!frame) break;cvShowImage(Example,frame);char c=cvWaitKey(33);if (c=27) break;cvReleaseCapture(&capture);cvDestroyWindow(Example);4. 注意:一定要添加#include”h
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 水调歌头课件
- 氢能产业园氢燃料电池电动汽车推广
- 施工人员劳动保护方案
- 园区招商引资信息化方案
- 风电场噪音控制与环境保护方案
- 人防工程建设期间安全保障方案
- 建筑工程建筑材料回收利用方案
- 水磨石镜面处理培训课件
- 中医儿科学湖北中医药高等专科学校21课件
- 2025版建筑公司劳务合作合同及员工劳动权益保护协议
- 青岛版科学 二年级《天气与动植物》
- 《养老护理员》-课件:协助老年人穿脱简易矫形器
- 影视艺术欣赏课程(教案)
- 动物的行为发育与行为遗传
- 风光储储能项目PCS舱、电池舱吊装方案
- 重庆医科大学附属第一医院改建PET-CT、PET-MR项目环评报告
- 政务服务大厅管理规范:安全与应急处置
- 双重预防机制构建-隐患排查治理(中石化中原油田天然气厂)
- 五牌一图(完整版)
- 二年级下册音乐《每天》教案
- 音乐美学.课件
评论
0/150
提交评论