MFC通过opencv显示摄像头

上传人:碎****木 文档编号:220860835 上传时间:2021-12-09 格式:DOCX 页数:8 大小:275.67KB
返回 下载 相关 举报
MFC通过opencv显示摄像头_第1页
第1页 / 共8页
MFC通过opencv显示摄像头_第2页
第2页 / 共8页
MFC通过opencv显示摄像头_第3页
第3页 / 共8页
亲,该文档总共8页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《MFC通过opencv显示摄像头》由会员分享,可在线阅读,更多相关《MFC通过opencv显示摄像头(8页珍藏版)》请在金锄头文库上搜索。

1、在 MFC 中通过 opencv 显示摄像头视频或者文件视频分类: c+ 2021-03-16 14:56 15136 人阅读 评论(75) 保藏 举报mfcinitializationwizardapplicationnullsystem这里通过MFC 显示摄像头视频,同样要用到 CvvImage 类,本人用的 opencv2.3.1 的版本, 这里没有这个类,所以仍旧需要手动参加这个类的头文件和代码文件。关于CvvImage 类的说明请看: :/ :/然后就是搭建工程了。这里就不多说界面的设计了。我这里的界面如下图,有一个开头翻开摄像头的按钮,一个关闭摄像头的按钮。有一个PictureBo

2、x 的控件。为了能够在PictureBox 里面显示图片,我们需要定义一些变量来猎取 PictureBox 的句柄。在主窗口的cpp 文件中,添加如下的全局变量:cpp view plaincopyprint?1. CvCapture* capture;2. CRect rect;3. CDC *pDC;4. HDC hDC;5. CWnd *pwnd;这里特别留意,这些变量肯定要是全局变量。再来看一下这些变量的添加位置:cpp view plaincopyprint?1. #include “stdafx.h“2. #include “VideoMFC.h“3. #include “Vide

3、oMFCDlg.h“4. #include “afxdialogex.h“ 5.6. #ifdef _DEBUG7. #define new DEBUG_NEW8. #endif 9.10.11. CvCapture* capture;12. CRect rect;13. CDC *pDC;14. HDC hDC;15. CWnd *pwnd; 16.17. / CAboutDlg dialog used for App About 18.19. class CAboutDlg : public CDialogEx20. 21. public:然后在窗口的初始化函数中进展句柄的初始化:cpp

4、view plaincopyprint?1. OnInitDialog()这个函数,BOOL CVideoMFCDlg:OnInitDialog()初始化代码:cpp view plaincopyprint?1. / CVideoMFCDlg message handlers2.3. BOOL CVideoMFCDlg:OnInitDialog() 4. 5.CDialogEx:OnInitDialog();6.7./ Add “About.“ menu item to system menu.8.9./ IDM_ABOUTBOX must be in the system command r

5、ange.10.ASSERT(IDM_ABOUTBOX & 0xFFF0) = IDM_ABOUTBOX);11.ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR);23.pSysMenu-AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);24.25.26.27.28./ Set the icon for this dialog. The framework does this automatically29./ when the application”s main window is not a dia

6、log33./ TODO: Add extra initialization here34.pwnd = GetDlgItem(IDC_ShowImage);35./pwnd-MoveWindow(35,30,352,288);36.pDC =pwnd-GetDC();37./pDC =GetDC();38.hDC= pDC-GetSafeHdc();39.pwnd-GetClientRect(&rect);40.41.42.43.return TRUE; / return TRUE unless you set the focus to a control44. 30.SetIcon(m_h

7、Icon, TRUE);/ Setbig icon31.SetIcon(m_hIcon, FALSE);/ Setsmall icon32.这里的初始化代码只有Todo 后面的是自己添加的,目的是获得图像控件的句柄,将来好在上面显示图像。这一步也可以放在具体的显示图像的时候在进展,但是就需要每显示一帧, 都获得一次句柄。在把握台程序中,我们可以很简洁的通过for(;)的空循环来不停的实现猎取摄像头的每一帧, 但是我觉察这么做在MFC 里面是不行行的。一个是由于MFC 是用户界面程序,假设这么 写的话,全部的界面都会卡住,而且这么写的话其他的功能按钮就失去作用了。这里为了实现猎取摄像头的每一帧,

8、我们要通过设定一个时间大事,让每隔肯定时间,比方20ms,就调用一个函数,通过这个时间调用来猎取摄像头的帧。这样,我们就可以实现在图像控件中显示视频,并且用户界面不会卡住了。看一下翻开摄像头按钮的代码:cpp view plaincopyprint?1. void CVideoMFCDlg:OnBnClickedButton1() 2. 3./ TODO: Add your control notification handler code here4./AfxMessageBox(“OK“);5.if(!capture)6.7.capture = cvCaptureFromCAM(0);8.

9、/AfxMessageBox(“OK“);9.10.11.if (!capture)12.13.AfxMessageBox(“无法翻开摄像头“);14.return;15.16.17./ 测试18.IplImage* m_Frame;19.m_Frame=cvQueryFrame(capture);20.CvvImage m_CvvImage;21.m_CvvImage.CopyOf(m_Frame,1);22.if (true)23.24.m_CvvImage.DrawToHDC(hDC, &rect);25./cvWaitKey(10);26.27.28./ 设置计时器,每 10ms 触发

10、一次大事29.SetTimer(1,10,NULL);30. 这里有一个SetTimer();函数,这个函数就是调用win32 函数实现每隔指定的时间调用一次我们指定的大事。这个函数有两种用法,一种是指定一个回调函数,一个是通过MFC 的ClassWizard 指定的回调函数。SetTimer()的具体用法请见: :/baike.baidu /view/998104.htm这里我们使用了通过MFC 的 ClassWizard 设定回调函数。在 VS 中,用户界面设计右击翻开Class Wizard, 切换到Message 选项卡,然后找到WM_TIMER 这个message, 双击右边的OnT

11、imer 句柄,然后进入回调函数的代码。回调函数的代码如下:cpp view plaincopyprint?1. void CVideoMFCDlg:OnTimer(UINT_PTR nIDEvent)2. 3./ TODO: Add your message handler code here and/or call default4./*/5./* 显示摄像头*/6./*/7.IplImage* m_Frame;8.m_Frame=cvQueryFrame(capture);9.CvvImage m_CvvImage;10.m_CvvImage.CopyOf(m_Frame,1);11.i

12、f (true)12.13.m_CvvImage.DrawToHDC(hDC, &rect);14./cvWaitKey(10);15.16.17.CDialogEx:OnTimer(nIDEvent);18. 关闭摄像头代码:cpp view plaincopyprint?1. void CVideoMFCDlg:OnBnClickedButton2()2. 3./ TODO: Add your control notification handler code here4.cvReleaseCapture(&capture);5.CDC MemDC;6.CBitmap m_Bitmap1;7.m_Bitmap1.LoadBitmap(IDB_BITMAP1);8.MemDC.Cre

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 教育/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号