MFC使用opencv在picture控件上面播放摄像头视频
·
一、目的:
1、想知道:MFC使用opencv在picture控件上面播放摄像头视频
二、参考
1、
三、操作
1、MFC中创建picture控件:IDC_camera


1、MFC中创建Camera类
①Camera.h
#pragma once
#include "afxwin.h"
#include "Resource.h"
#include "opencv.hpp"
#include "videoio.hpp"
#include "CvvImage.h"
using namespace std;
using namespace cv;
class Camera
{
public:
Camera();
~Camera();
public:
CWnd *m_pCWnd;//相机:窗口类指针
HWND m_HWND;//相机:窗口类句柄
bool m_bIsCanPlay=false;//相机是否能够播放
VideoCapture m_videoCapture;
public:
//相机:在picture上面显示相机画面
void CameraPlayOnPicture();
};
①Camera.cpp
#include "stdafx.h"
#include "Camera.h"
Camera::Camera()
{
}
Camera::~Camera()
{
}
void Camera::CameraPlayOnPicture()
{
//测试:此地方不使用while
if (m_bIsCanPlay)
{
if (!m_videoCapture.isOpened())
{
m_videoCapture.open(0);
};
Mat frame;
m_videoCapture >> frame;
IplImage* pFrame = (IplImage *)&IplImage(frame); //IplImage* 与Mat 格式相互转换:Mat转换为IplImage
CDC *pCDC = AfxGetApp()->GetMainWnd()->GetDlgItem(IDC_camera)->GetDC(); //获得控件设备上下文指针,IDC_CAMERA为控件的ID
HDC hDC = pCDC->GetSafeHdc(); //转换为句柄
CRect rect;
AfxGetApp()->GetMainWnd()->GetDlgItem(IDC_camera)->GetClientRect(&rect); //获得控件的位置
AfxGetApp()->GetMainWnd()->GetDlgItem(IDC_camera)->MoveWindow(0, 0, 1920, 1080);
CvvImage cimg;
cimg.CopyOf(pFrame);
cimg.DrawToHDC(hDC, &rect); //显示图像
if (m_pCWnd == NULL)
{
m_pCWnd = AfxGetApp()->GetMainWnd()->GetDlgItem(IDC_camera);//找到IDC_inVideo控件
}
if (m_HWND == NULL)
{
m_HWND = m_pCWnd->GetSafeHwnd();//得到窗口指针句柄
}
ReleaseDC(m_HWND, hDC); //CDC类在用完后记得释放
}
}
1、MyLiftDlg中创建线程,不断播放监控视频
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)