目录
MFC界面控件
添加计时器,菜单选择“项目”,“类向导”
自动生成了代码
定义定时器事件和在按钮上启动按键
在头文件中添加头文件include和变量声明
添加MFC窗口初始化代码
输入栏输入视频路径
播放视频
结果
报错经过
参考
MFC界面控件
添加计时器,菜单选择“项目”,“类向导”
自动生成了代码
定义定时器事件和在按钮上启动按键
//定时器
void CCarOCRDlg::onTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
//定时器事件1
if (nIDEvent == 1) {
//这里写定时器触发的处理程序代码
}
CDialogEx::onTimer(nIDEvent);
}
//按钮
void CCarOCRDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
//设置定时器,定时器事件1, 触发频率是每30ms
SetTimer(1, 30, NULL);
}
在头文件中添加头文件include和变量声明
// CarOCRDlg.h: 头文件 // #pragma once //数组和字符串的头文件, 两个命名空间 #include#include //为了解决找不到cvGetWindowHandle() #include //添加opencv的头文件 #include using namespace std; using namespace cv; // CCarOCRDlg 对话框 class CCarOCRDlg : public CDialogEx { // 构造 //中间一大段自带代码,为了避免太长,省略了,项目中不用进行删除 //添加打开视频需要的opencv变量 public: VideoCapture capture; Mat frame; CRect rect1; };
添加MFC窗口初始化代码
BOOL CCarOCRDlg::onInitDialog(){
// TODO: 在此添加额外的初始化代码
//IDC_VIDEO控件picture control的id
CWnd* pWnd1 = GetDlgItem(IDC_VIDEO);
//rect1在CarOCRDIg.h中增加的类变量
pWnd1->GetClientRect(&rect1);
//"video"进行imshow的窗口名
namedWindow("video", WINDOW_AUTOSIZE);
HWND hWnd1 = (HWND)cvGetWindowHandle("video");
HWND hParent1 = ::GetParent(hWnd1);
::SetParent(hWnd1, GetDlgItem(IDC_VIDEO)->m_hWnd);
::ShowWindow(hParent1, SW_HIDE);
}
输入栏输入视频路径
//将各控件中的数据保存到相应的变量
UpdateData(true);
std::string path = (CStringA)videoPath;
播放视频
void CCarOCRDlg::onTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
//定时器事件1
if (nIDEvent == 1) {
capture >> frame;
//如果图像是空的,把这个事件关闭
if (frame.empty()) {
KillTimer(1);
}
else {
//使视频的画面大小适应窗口的大小
resize(frame, frame, Size(rect1.Width(), rect1.Height()));
//显示画面
imshow("video", frame);
}
}
CDialogEx::onTimer(nIDEvent);
}
void CCarOCRDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
//将各控件中的数据保存到相应的变量
//同步输入栏的CString变量
UpdateData(true);
std::string path = (CStringA)videoPath;
//string path = "D:\workFile\picture\m261taiChe\OCRVideo22.mp4";
//读取已采集到本地计算机的视频
capture.open(path);
if (!capture.isOpened())
{
//弹出MFC的消息窗口,提示视频打开失败
MessageBox(_T("打开视频失败!"));
}
else {
//设置定时器,定时器事件1, 触发频率是每67ms
SetTimer(1, 67, NULL);
}
//将各控件中的数据保存到相应的变量 UpdateData(true); std::string path = (CStringA)videoPath;
播放视频
void CCarOCRDlg::onTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
//定时器事件1
if (nIDEvent == 1) {
capture >> frame;
//如果图像是空的,把这个事件关闭
if (frame.empty()) {
KillTimer(1);
}
else {
//使视频的画面大小适应窗口的大小
resize(frame, frame, Size(rect1.Width(), rect1.Height()));
//显示画面
imshow("video", frame);
}
}
CDialogEx::onTimer(nIDEvent);
}
void CCarOCRDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
//将各控件中的数据保存到相应的变量
//同步输入栏的CString变量
UpdateData(true);
std::string path = (CStringA)videoPath;
//string path = "D:\workFile\picture\m261taiChe\OCRVideo22.mp4";
//读取已采集到本地计算机的视频
capture.open(path);
if (!capture.isOpened())
{
//弹出MFC的消息窗口,提示视频打开失败
MessageBox(_T("打开视频失败!"));
}
else {
//设置定时器,定时器事件1, 触发频率是每67ms
SetTimer(1, 67, NULL);
}
结果
启动
打开视频



