因为3.0以后CvvImage(点击即可下载)被删除了,所以需要下载这个类,然后添加到工程目录下。
测试效果图:
(摄像头被挡住了,所以是黑的)
一、打开摄像头
添加一个成员变量
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显示一帧。