已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
安装和配置 OpenCV 1. 安装 OpenCV1.0(因为 VC+6.0 只与 OpenCV1.0 兼容,更高版本的 OpenCV 不兼容); 2. 检查 C:Program FilesOpenCVbin 是否已经被加入到环境变量 PATH,如果没有, 请加入。加入后需要注销当前 Windows 用户(或重启)后重新登陆才生效。(可以在 任务管理器里重启 explorer.exe) 3. 配置 Visual C+ 6.0 1. 全局设置:菜单 Tools-Options-Directories:先设置 lib 路径,选择 Library files,在下方填入路径: C:Program FilesOpenCVlib 然后选择 include files,在下方填入路径: C:Program FilesOpenCVcxcoreinclude C:Program FilesOpenCVcvinclude C:Program FilesOpenCVcvauxinclude C:Program FilesOpenCVmlinclude C:Program FilesOpenCVotherlibshighgui C:Program FilesOpenCVotherlibscvcaminclude 然后选择 source files,在下方填入路径: C:Program FilesOpenCVcvsrc C:Program FilesOpenCVcxcoresrc C:Program FilesOpenCVcvauxsrc C:Program FilesOpenCVotherlibshighgui C: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 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 ; 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 BITMAPINFOHEADER* bmih = 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 / 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 /* 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 if( img ) CopyOf( img, desired_color ); #define HG_IS_IMAGE(img) (img) != 0 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( return true; bool CvvImage:LoadRect( const char* filename, int desired_color, CvRect r ) if( r.width width; r.height = img-height; r.x = r.y = 0; if( r.x img-width | r.y img-height | r.x + r.width 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( 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 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 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 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 如何通过摄像头获取视频: 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( 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, /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, /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(); else return; 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( cvDestroyWindow(“Example“); 4. 注意:一定要添加#include”highgui.h” ;检查工程-设置 -所有配置-链接中对象/库模 块是否添加齐全。 如何播放 AVI 视频(图片控件) 1. 修改上面通过窗口播放 AVI 的代码,在 OnInitDialog()函数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026银行提干面试题及答案
- 2026饮用水工程面试题及答案
- 2026城投审计面试题及答案
- 2026滁州教资面试题目及答案
- 2026创意插画面试题目及答案
- (2026版)社联部个人工作总结
- 高中英语选择性必修第三册Unit 6 Section Ⅲ Using language板块主题意义探究与读写整合教学设计
- 小学六年级英语教学设计:Unit 2 Getting together A Let's talk 核心素养导向下的单元整体教学实践
- 初中语文九年级一词多义专项突破教学设计:2026年河南中考语境下高频多义词的精准辨析与运用
- 初中数学九年级“二次根式及其运算”教学设计-聚焦无理数估值与分层作业实践
- 危废收集转运项目可行性研究报告
- 2026江西九江长途汽车运输集团有限公司劳动合同制员工招聘4人笔试参考题库及答案解析
- 2026年中国农业银行校园招聘笔试真题及详细答案解析
- 换热站系统调试与试运行方案
- 2025-2026学年广东省上进联考高一上学期期中调研测试数学试卷(解析版)
- 2026 年护理带教中临床思维能力培养路径
- AQ3064.3-2025《“工业互联网+危化安全生产”建设规范 第3部分:人员定位》标准解读
- 2026年永州职业技术学院高职单招职业技能考试题库及完整答案详解【历年真题】
- AI在智慧水利技术中的应用
- 冠心病患者的运动处方护理查房
- 2026年招商银行校招面试仿真题集
评论
0/150
提交评论