建一个名为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); //定时器,定时时间和帧率一致
//
运行尝试成功: