【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,点击创建新的项目弹出如下界面:


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


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


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


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

2、绘制界面

首先删除自动创建的控件


然后从工具箱拖动控件到窗体上

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


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


至此界面绘制完成。

3、程序实现

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


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

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<opencv2\opencv.hpp>
using namespace cv;


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


并在该位置添加如下代码

// 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

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


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





  • 11
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 19
    评论
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值