VS2013 / MFC + OpenCV 2.4.9实现视频的播放暂停和结束
2017-06-12 16:03
597 查看
这次和大家分享一个简单的MFC+Opencv2.4.9实现的视频播放,暂停和结束的案例,在这个demo中会用到线程的一点知识,这里就不啰嗦了。由于刚接触MFC和OpenCV,所以还是讲解的详细一点,希望可以帮助更多编程的朋友吧!
1 新建项目
1.1 文件--》新建--》项目--》MFC应用程序,程序命名为VideoPlayer,点击确定
点击下一步
选择基于对话框,在静态库中使用mfc 完成
出现下图的界面:
接下来我们就拖几个控件,首先在工具箱中拖一个picture控件
拖上去以后调整大小,点击属性,将Type设置为Rectangle
再拖一个Button
添加button后
点击button1属性分别修改id为IDC_STARTVIDEO caption为开始
双击进去便会生成一个OnBnClickedStartvideo()控件方法
同样的方法添加暂停和结束按钮,最后界面如图所示:
点击暂停按钮,添加一个变量,变量名为StopButton
VS2013+OpenCV2.4.9开发环境的搭建
声明并定义一个线程函数DWORD WINAPI PlayVideo(LPVOID lpParam);
[cpp] view
plain copy
DWORD WINAPI PlayVideo(LPVOID lpParam){
CVideoPlayerDlg* pThis = (CVideoPlayerDlg*)lpParam;
CvCapture* pCapture;
IplImage* pFrame;
pCapture = cvCreateFileCapture("屌丝男士.mov");
if (pCapture == NULL)
{
return -1;
}
pFrame = cvQueryFrame(pCapture);
while (pFrame)
{
WaitForSingleObject(start_event, INFINITE);
start_event.SetEvent();
if (terminate_flag == -1)
{
terminate_flag = 0;
_endthreadex(0);
};
pThis->Display(pFrame, IDC_STATIC);
Sleep(33);
pFrame = cvQueryFrame(pCapture);
}
cvReleaseCapture(&pCapture);
}
声明并定义一个显示图片到MFC的picture控件的函数void Display(IplImage * img ,UINT ID);
[cpp] view
plain copy
void CVideoPlayerDlg::Display(IplImage * img,UINT ID){
CDC* pDC = GetDlgItem(ID)->GetDC(); //CDC是一个类
//GetDlgItem(ID)获取控件窗口对象,GetDC()由窗口对象得到DC,然后可以用来在控件中画图
//上一句等价于CWnd* pWin=GetDlgItem(ID); CDC* pDC=pWin->GetDC();
HDC hDC = pDC->GetSafeHdc();//HDC是一个句柄
CRect rect;
CWnd *pWnd;
int picWidth;
int picHeight;
pWnd = GetDlgItem(ID);
pWnd->GetClientRect(&rect);
//求图片控件的宽和高
picWidth = rect.Width();
picHeight = rect.Height();
IplImage*dst = cvCreateImage(cvSize(picWidth, picHeight), img->depth, img->nChannels);
cvResize(img, dst, CV_INTER_LINEAR);
// cvFlip(dst,NULL,0);
//在控件里显示图片
CvvImage cimg;
cimg.CopyOf(dst);
cimg.DrawToHDC(hDC, &rect);
cvReleaseImage(&dst);
ReleaseDC(pDC);
}
点击开始按钮,添加代码
[cpp] view
plain copy
void CVideoPlayerDlg::OnBnClickedStartvideo()
{
// TODO: 在此添加控件通知处理程序代码
HANDLE hThreadSend; //创建独立线程发送数据
DWORD ThreadSendID;
start_event.SetEvent();
hThreadSend = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)PlayVideo, (LPVOID)this, 0, &ThreadSendID);
CloseHandle(hThreadSend);
}
点击暂停按钮,添加代码
[cpp] view
plain copy
void CVideoPlayerDlg::OnBnClickedSuspendvideo()
{
// TODO: 在此添加控件通知处理程序代码
CString buttonText;
StopButton.GetWindowText(buttonText);
if (buttonText.Compare(_T("暂停"))==0)
{
start_event.ResetEvent();
StopButton.SetWindowTextW(_T("继续"));
}
else
{
start_event.SetEvent();
StopButton.SetWindowText(_T("暂停"));
}
}
点击结束按钮,添加代码
[cpp] view
plain copy
void CVideoPlayerDlg::OnBnClickedStopvideo()
{
// TODO: 在此添加控件通知处理程序代码
terminate_flag = -1;
}
最后我们将Opencv2.2以后的版本就取消了CvvImage这个类,而显示图片到MFC的Picture控件需要用到这个类,所以需要准备CvvImage.h和CvvImage.cpp文件(从以前版本的源码中获得),下载地址:http://download.csdn.net/detail/davebobo/9488047
将下载到的头文件和源文件添加到工程中即可,最后看一下我们的成果
源码CSDN下载地址:http://download.csdn.net/detail/davebobo/9489090
运行工程需要自己配置opencv环境。
顶2
踩0
1 新建项目
1.1 文件--》新建--》项目--》MFC应用程序,程序命名为VideoPlayer,点击确定点击下一步
选择基于对话框,在静态库中使用mfc 完成
出现下图的界面:
接下来我们就拖几个控件,首先在工具箱中拖一个picture控件
拖上去以后调整大小,点击属性,将Type设置为Rectangle
再拖一个Button
添加button后
点击button1属性分别修改id为IDC_STARTVIDEO caption为开始
双击进去便会生成一个OnBnClickedStartvideo()控件方法
同样的方法添加暂停和结束按钮,最后界面如图所示:
点击暂停按钮,添加一个变量,变量名为StopButton
2 配置opencv环境
关于opencv的环境配置这里不多说了,请参考【OpenCV学习笔记001】VS2013+OpenCV2.4.9开发环境的搭建
3 编写代码
引入opencv头文件,定义两个全局变量,声明并定义一个线程函数DWORD WINAPI PlayVideo(LPVOID lpParam);
[cpp] view
plain copy
DWORD WINAPI PlayVideo(LPVOID lpParam){
CVideoPlayerDlg* pThis = (CVideoPlayerDlg*)lpParam;
CvCapture* pCapture;
IplImage* pFrame;
pCapture = cvCreateFileCapture("屌丝男士.mov");
if (pCapture == NULL)
{
return -1;
}
pFrame = cvQueryFrame(pCapture);
while (pFrame)
{
WaitForSingleObject(start_event, INFINITE);
start_event.SetEvent();
if (terminate_flag == -1)
{
terminate_flag = 0;
_endthreadex(0);
};
pThis->Display(pFrame, IDC_STATIC);
Sleep(33);
pFrame = cvQueryFrame(pCapture);
}
cvReleaseCapture(&pCapture);
}
声明并定义一个显示图片到MFC的picture控件的函数void Display(IplImage * img ,UINT ID);
[cpp] view
plain copy
void CVideoPlayerDlg::Display(IplImage * img,UINT ID){
CDC* pDC = GetDlgItem(ID)->GetDC(); //CDC是一个类
//GetDlgItem(ID)获取控件窗口对象,GetDC()由窗口对象得到DC,然后可以用来在控件中画图
//上一句等价于CWnd* pWin=GetDlgItem(ID); CDC* pDC=pWin->GetDC();
HDC hDC = pDC->GetSafeHdc();//HDC是一个句柄
CRect rect;
CWnd *pWnd;
int picWidth;
int picHeight;
pWnd = GetDlgItem(ID);
pWnd->GetClientRect(&rect);
//求图片控件的宽和高
picWidth = rect.Width();
picHeight = rect.Height();
IplImage*dst = cvCreateImage(cvSize(picWidth, picHeight), img->depth, img->nChannels);
cvResize(img, dst, CV_INTER_LINEAR);
// cvFlip(dst,NULL,0);
//在控件里显示图片
CvvImage cimg;
cimg.CopyOf(dst);
cimg.DrawToHDC(hDC, &rect);
cvReleaseImage(&dst);
ReleaseDC(pDC);
}
点击开始按钮,添加代码
[cpp] view
plain copy
void CVideoPlayerDlg::OnBnClickedStartvideo()
{
// TODO: 在此添加控件通知处理程序代码
HANDLE hThreadSend; //创建独立线程发送数据
DWORD ThreadSendID;
start_event.SetEvent();
hThreadSend = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)PlayVideo, (LPVOID)this, 0, &ThreadSendID);
CloseHandle(hThreadSend);
}
点击暂停按钮,添加代码
[cpp] view
plain copy
void CVideoPlayerDlg::OnBnClickedSuspendvideo()
{
// TODO: 在此添加控件通知处理程序代码
CString buttonText;
StopButton.GetWindowText(buttonText);
if (buttonText.Compare(_T("暂停"))==0)
{
start_event.ResetEvent();
StopButton.SetWindowTextW(_T("继续"));
}
else
{
start_event.SetEvent();
StopButton.SetWindowText(_T("暂停"));
}
}
点击结束按钮,添加代码
[cpp] view
plain copy
void CVideoPlayerDlg::OnBnClickedStopvideo()
{
// TODO: 在此添加控件通知处理程序代码
terminate_flag = -1;
}
最后我们将Opencv2.2以后的版本就取消了CvvImage这个类,而显示图片到MFC的Picture控件需要用到这个类,所以需要准备CvvImage.h和CvvImage.cpp文件(从以前版本的源码中获得),下载地址:http://download.csdn.net/detail/davebobo/9488047
将下载到的头文件和源文件添加到工程中即可,最后看一下我们的成果
源码CSDN下载地址:http://download.csdn.net/detail/davebobo/9489090
运行工程需要自己配置opencv环境。
顶2
踩0
相关文章推荐
- VS2013 / MFC + OpenCV 2.4.9实现视频的播放暂停和结束
- VS2013 / MFC + OpenCV 2.4.9实现视频的播放暂停和结束
- VS2013 / MFC + OpenCV 2.4.9实现视频的播放暂停和结束
- VS2013 MFC opencv 播放视频
- opencv +MFC实现视频播放、暂停、视频标注、跟踪
- VS2013 MFC opencv 播放视频
- MFC中利用OpenCV实现视频播放
- OpenCV 课后练习-利用TrackBar实现视频的暂停与播放
- VS2013 MFC+opencv2.4.9打开摄像头拍照图片处理
- opencv 利用trackbar滚动条实现视频的播放和暂停控制
- Opencv+VS+MFC 播放视频(cv 2.3+版本)
- VS2013 / MFC + OpenCV 2.4.9打开图片
- MFC控件实现视频“暂停” “播放”循环
- vs2013+Opencv2.4.9+MFC的图像浏览窗口
- opencv例2.3实现视频播放(带滚动条)
- opencv+ffmpeg实现avi视频的播放
- OpenCV笔记(二)实现获取视频并控制视频的播放速度
- OpenCV 2.4.9 +VS2013 开发环境配置
- opencv中实现滚动条随着视频播放移动
- opencv实现视频加载与播放