【MFC+opencv+C++】打开两个三个以及多个摄像头【超级详细解析教程】

话不多说,大家跟我一起念,保证分享源码!保证分享源码!保证分享源码!


基础预览:

微软基础类库(英语:Microsoft Foundation Classes,简称MFC)是一个微软公司提供的类库(class libraries),以C++类的形式封装了Windows API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。

OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效--由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

  

实践开始:

1、打开你的VS,点击创建新的项目弹出如下界面:

【MFC+opencv+C++】打开两个三个以及多个摄像头【超级详细解析教程】_第1张图片

项目命名cameras,选择MFC程序,点击确定。

【MFC+opencv+C++】打开两个三个以及多个摄像头【超级详细解析教程】_第2张图片

点击下一步,选择基于对话框,点击下一步

【MFC+opencv+C++】打开两个三个以及多个摄像头【超级详细解析教程】_第3张图片

点击下一步,再点下一步直到这个界面

【MFC+opencv+C++】打开两个三个以及多个摄像头【超级详细解析教程】_第4张图片

选择生成如图的类,这个时候直接点击完成。于是基本的MFC程序我们就创建完成了。

2、绘制界面

首先删除自动创建的控件

【MFC+opencv+C++】打开两个三个以及多个摄像头【超级详细解析教程】_第5张图片

然后从工具箱拖动控件到窗体上【MFC+opencv+C++】打开两个三个以及多个摄像头【超级详细解析教程】_第6张图片

右击按钮在弹出的菜单中选择属性,修改Caption属相为“打开双摄像头”

【MFC+opencv+C++】打开两个三个以及多个摄像头【超级详细解析教程】_第7张图片

然后右击另外俩个控件选择属性并,修改ID分别为“IDC_VIEW1”"IDC_VIEW2

【MFC+opencv+C++】打开两个三个以及多个摄像头【超级详细解析教程】_第8张图片

至此界面绘制完成。

3、程序实现

双击窗体上的按钮弹出如下代码

【MFC+opencv+C++】打开两个三个以及多个摄像头【超级详细解析教程】_第9张图片

在该函数出插入如下代码:

void CcamerasDlg::OnBnClickedButton1()
{
	// TODO: 在此添加控件通知处理程序代码
	Mat frame1, frame2;//创建mat对象
	VideoCapture capture1(0), capture2(1);//创建视频流对象
	try//防止无摄像头报错
	{
		while (true)//循环读取视频
		{
			capture1 >> frame1;
			capture2 >> frame2;
			imshow("view1", frame1);
			imshow("view2", frame2);
			waitKey(30);
		}
	}
	catch (const std::exception&)//错误提示
	{
		CString str("请插入足够的摄像头");
		MessageBox(str, L"提示", MB_OK);
	}
}

好了,代码加完了,这个时候我们会发现有红色下划线,是因为我们没有添加头文件,滚动滑轮翻到最上面,填加#include
using namespace cv;

【MFC+opencv+C++】打开两个三个以及多个摄像头【超级详细解析教程】_第10张图片

然后按下Ctrl+f搜索OnInitDialog,找到后向下面找到该位置

【MFC+opencv+C++】打开两个三个以及多个摄像头【超级详细解析教程】_第11张图片

并在该位置添加如下代码

// TODO: 在此添加额外的初始化代码
	namedWindow("view1", 0);
	HWND hwnd = (HWND)cvGetWindowHandle("view1");
	HWND hparent = ::GetParent(hwnd);
	::SetParent(hwnd, GetDlgItem(IDC_VIEW1)->m_hWnd);
	::ShowWindow(hparent, SW_HIDE);//设置VIEW1控件
	namedWindow("view2", 0);
	HWND hwnd2 = (HWND)cvGetWindowHandle("view2");
	HWND hparent2 = ::GetParent(hwnd2);
	::SetParent(hwnd2, GetDlgItem(IDC_VIEW2)->m_hWnd);
	::ShowWindow(hparent2, SW_HIDE);
//设置VIEW2控件
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE

添加完毕,大功告成!!抓紧点击测试一下吧!


源文件包随后上传!!楼主最近在学习图像处理,欢迎一起留言交流!





你可能感兴趣的:(MFC,OpenCV)