MFC+OPENCV3.0显示摄像头画面

==> 学习汇总(持续更新)
==> 从零搭建后端基础设施系列(一)-- 背景介绍


因为3.0以后CvvImage(点击即可下载)被删除了,所以需要下载这个类,然后添加到工程目录下。

测试效果图:
MFC+OPENCV3.0显示摄像头画面_第1张图片
(摄像头被挡住了,所以是黑的)

一、打开摄像头

添加一个成员变量
VideoCapture m_capture;

void COPENCV摄像头操作Dlg::OnBnClickedBtnOpen()
{
	if (!m_capture.isOpened())
	{
		m_capture.open(0);
		SetTimer(1, 40, NULL);
	}	
}

二、读取帧

void COPENCV摄像头操作Dlg::OnTimer(UINT_PTR nIDEvent)
{
	Mat frame;
	m_capture >> frame; //读取
	ShowFrame(frame);  //显示

	CDialogEx::OnTimer(nIDEvent);
}

三、显示到Picture 控件上

//显示帧
void COPENCV摄像头操作Dlg::ShowFrame(Mat& frame)
{
	CvvImage vimg;
	IplImage img(frame);
	vimg.CopyOf(&img);
	//获取pic控件的句柄
	CWnd* pWnd = GetDlgItem(IDC_STATIC_VIDIO);
	//获取pic控件的DC
	HDC dc = pWnd->GetDC()->GetSafeHdc();
	//获取pic控件的大小
	RECT rect;
	pWnd->GetClientRect(&rect);
	//将视频帧画到控件上
	vimg.DrawToHDC(dc, &rect);
}

四、关闭摄像头

void COPENCV摄像头操作Dlg::OnBnClickedBtnClose()
{
	if (m_capture.isOpened())
	{
		m_capture.release();  
		KillTimer(1);
		Invalidate();
	}
}

定时器的间隔就是多少ms显示一帧。

你可能感兴趣的:(OPENCV)