利用opencv为MFC某一界面单独添加视频采集框(待整理)

  • 时间:
  • 浏览:
  • 来源:互联网

建一个名为SingleCollect的MFC应用:
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述

生成的界面如图所示:
在这里插入图片描述

把其余控件删除,单独添加图片控件:
在这里插入图片描述设置其ID为:IDC_frame
在这里插入图片描述添加视频采集的SDK:
在这里插入图片描述在项目中添加:

在这里插入图片描述

选择对话框的头文件:
在这里插入图片描述
添加头文件和命名空间:

#include "stdafx.h"
#include <opencv2/core/core.hpp>    
#include <opencv2/highgui/highgui.hpp>  
#include <iostream>  
using namespace std;
using namespace cv;

打开对话框cpp文件:
在这里插入图片描述添加头文件和变量声明:

#include "CvvImage.h"
CvCapture* Capture;
CvCapture* m_Video;
IplImage* frame;
IplImage* m_grabframe;
CRect rect;
CDC *pDC;
HDC hDC;
CWnd *pwnd;
int ImgNum = 0;

初始化函数中添加代码:
在这里插入图片描述

		//2020.8.20
		Capture = cvCreateCameraCapture(0); //
	if (Capture==0)
	{
		MessageBox(_T("无法连接摄像头!!!"));
	}

	frame = cvQueryFrame(Capture); //从摄像头或者文件中抓取并返回一帧
	pDC = GetDlgItem(IDC_frame)->GetDC();//GetDlgItem(IDC_PIC_STATIC)意思为获取显示控件的句柄(句柄就是指针),获取显示控件的DC
	GetDlgItem(IDC_frame)->GetClientRect(&rect);
	hDC = pDC->GetSafeHdc();//获取显示控件的句柄

	CvvImage m_CvvImage;
	m_CvvImage.CopyOf(frame, 1); //复制该帧图像   
	m_CvvImage.DrawToHDC(hDC, &rect); //显示到设备的矩形框内
	ReleaseDC(pDC);

	SetTimer(1, 25, NULL); //定时器,定时时间和帧率一致
	//

添加timer:
在这里插入图片描述
在这里插入图片描述添加:

pDC = GetDlgItem(IDC_frame)->GetDC();//GetDlgItem(IDC_PIC_STATIC)意思为获取显示控件的句柄(句柄就是指针),获取显示控件的DC

	GetDlgItem(IDC_frame)->GetClientRect(&rect);

	hDC = pDC->GetSafeHdc();//获取显示控件的句柄

	frame = cvQueryFrame(Capture); //从摄像头或者文件中抓取并返回一帧
	CvvImage m_CvvImage;
	m_CvvImage.CopyOf(frame, 1); //复制该帧图像   

	m_CvvImage.DrawToHDC(hDC, &rect); //显示到设备的矩形框内

运行:
在这里插入图片描述
没有找到没有刷新的原因,这里改为确定式:
添加确定按钮(ID为IDOK):
在这里插入图片描述
双击按钮:
在这里插入图片描述
添加

//2020.8.20
		Capture = cvCreateCameraCapture(0); //
	if (Capture==0)
	{
		MessageBox(_T("无法连接摄像头!!!"));
		return TRUE;
	}

	frame = cvQueryFrame(Capture); //从摄像头或者文件中抓取并返回一帧
	pDC = GetDlgItem(IDC_frame)->GetDC();//GetDlgItem(IDC_PIC_STATIC)意思为获取显示控件的句柄(句柄就是指针),获取显示控件的DC
	GetDlgItem(IDC_frame)->GetClientRect(&rect);
	hDC = pDC->GetSafeHdc();//获取显示控件的句柄

	CvvImage m_CvvImage;
	m_CvvImage.CopyOf(frame, 1); //复制该帧图像   
	m_CvvImage.DrawToHDC(hDC, &rect); //显示到设备的矩形框内
	ReleaseDC(pDC);

	SetTimer(1, 25, NULL); //定时器,定时时间和帧率一致
		//

运行尝试成功:
在这里插入图片描述

本文链接http://element-ui.cn/article/show-103220.aspx