用OpenCV在MFC Dialog中Picture控件上显示摄像头采集实时视频

OpenCV之所以能在MFC Dialog的Picture控件上绘图,全靠了CvvImage::DrawToHDC()方法。这就是下文为出现CvvImage和HDC的原因。下面是具体过程,用OpenCV1.0+VC6实现。本文代码下载地址:http://download.csdn.net/detail/ybdesire/5297584


1、在Dlg类中添加public变量

	CvCapture* capture;	//用于采集摄像头数据
	CRect rect;		//HDC用,下同
	CDC *pDC;
	HDC hDC;
	CWnd *pwnd;
并在构造函数中将三个指针初始化。

 

2、在OnInitDialog()中:添加设备上下文操作

    pwnd = GetDlgItem(IDC_PIC_SHOW);//获取句柄
    pDC =pwnd->GetDC();//设备上下文操作
    hDC= pDC->GetSafeHdc();//
    pwnd->GetClientRect(&rect);

3、在begin方法中:打开摄像头、显示、定时刷新

void CRunDetectDlg::OnButton1() 
{
    // TODO: Add your control notification handler code here
    if(capture==NULL)  
    {  
        capture = cvCaptureFromCAM(0);  
    }  
    if (capture==NULL)  
    {  
        AfxMessageBox("无法打开摄像头");  
        return;  
    }  
 
    IplImage* m_Frame;//
    m_Frame=cvQueryFrame(capture);//从摄像头抓取一帧图像 
    CvvImage m_CvvImage;//
    m_CvvImage.CopyOf(m_Frame,3);//将m_Frame复制到当前对象中,复制后图像的通道为3,即RGB
    m_CvvImage.DrawToHDC(hDC, &rect);
    
    // 设置计时器,每1ms触发一次事件  
    SetTimer(1,1,NULL);  
}

4、在OnTimer()中:定时刷新,原理同上

void CRunDetectDlg::OnTimer(UINT nIDEvent) 
{
    // TODO: Add your message handler code here and/or call default
    m_Frame=cvQueryFrame(capture);  
    CvvImage m_CvvImage;  
    m_CvvImage.CopyOf(m_Frame,3);     
    m_CvvImage.DrawToHDC(hDC, &rect);  
  
    CDialog::OnTimer(nIDEvent);
}

5、在Close方法中:关闭摄像头设备

    cvReleaseCapture(&capture);


参考:

[1] http://blog.csdn.net/weixingstudio/article/details/7360941

[2] http://blog.csdn.net/chenyusiyuan/article/details/4744097

[3] http://blog.sina.com.cn/s/blog_5310fac60100og8h.html


  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值