您的位置:首页 > 运维架构

Opencv+VS+MFC 播放视频(cv 2.3+版本)

2016-03-30 18:24 337 查看
配置环境,可以参考:VS2013配置OpenCv3.0
建立MFC对话框,添加按钮(打开视频和关闭视频),添加picture控件(IDC_P)。



导入Cvvimage 的头文件和cpp文件。下载地址



添加全局变量。
VideoCapture capture;
CRect rect;
CDC *pDC;
HDC hDC;
CWnd *pwnd;



在OnInitDialog()中添加
pDC = pwnd->GetDC();
hDC = pDC->GetSafeHdc();
pwnd->GetClientRect(&rect);


编辑按钮函数。
void CMFCApplication1Dlg::OnBnClickedOpenvideo()
{
// TODO:  在此添加控件通知处理程序代码
//VideoCapture

if (!capture.isOpened())
{
capture.open("D://1.avi");
}

SetTimer(1, 25, NULL); //定时器,定时时间和帧率一致
//Mat image = imread("0308.jpg", 1); //显示图片
//DrawPicToHDC(cvCloneImage(&(IplImage)image), IDC_P);
}

void CMFCApplication1Dlg::OnBnClickedClosevideo()
{
// TODO:  在此添加控件通知处理程序代码
capture.release();
}


添加timer:项目->类向导





void CMFCApplication1Dlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO:  在此添加消息处理程序代码和/或调用默认值
if (1 == nIDEvent)
{

Mat img;
capture.read(img); //从摄像头或者文件中抓取并返回一帧

CvvImage m_CvvImage;
IplImage* img_temp = cvCloneImage(&(IplImage)img);
m_CvvImage.CopyOf(img_temp, 1); //复制该帧图像
cvReleaseImage(&img_temp);
m_CvvImage.DrawToHDC(hDC, &rect); //显示到设备的矩形框内
}
CDialogEx::OnTimer(nIDEvent);
}


其中使用Mat格式,减少内存问题,经测试几乎没有内存问题,后续会把CvvImage中的Iplimage也换成Mat。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: