目錄
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 <vector>
#include <string>
//為了解決找不到cvGetWindowHandle()
#include<opencv2/highgui/highgui_c.h>
//添加opencv的頭檔案
#include <opencv2/opencv.hpp>
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);
}
結果
啟動

打開視頻

報錯經過
- 已經添加的#include "NeuroDetection.h"中已經有了#include <opencv2/opencv.hpp>,但是出現了找不到的報錯,
- 添加#include<opencv2/highgui/highgui_c.h>之后出現了VideoCapture未知重寫說明符的報錯,
- 把 "NeuroDetection.h"中opencv的頭檔案注釋掉,放在MFC的頭檔案,解決了
參考
- OpenCV基礎與應用視頻教程43講_嗶哩嗶哩_bilibili
- ??????關于找不到cvGetWindowHandle()的解決方法_Jesus_z的博客-CSDN博客_cvgetwindowhandle
- error C3646: 未知重寫說明符_happy987818的博客-CSDN博客_未知重寫說明符
- MFC OpenCV 輸入圖片絕對路徑 打開圖片_一low永逸的博客-CSDN博客
- 待補充
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/354793.html
標籤:其他
