opencv+directshow实现4个摄像头同步采集图像

本文介绍了如何使用opencv和directshow在VS2013环境下,通过多线程实现4个摄像头的同步图像采集。作者详细讲解了从界面布局到多线程处理,包括设置控件ID、初始化句柄、创建互斥对象等步骤,并探讨了其他同步方法。适合有一定编程基础的读者学习。
摘要由CSDN通过智能技术生成

基于网上许多人说到opencv打不开4个摄像头,事实果真如此么,记得哦:opencv是开源的,所以本作者我利用vs2013自己配置了一下opencv与directshow的开发环境,具体要怎么配置我就不详细讲了,上网搜一下就能找得到了,下面我详细讲一下如何将mfc和多线程与opencv和directshow结合实现4个摄像头同步采集图像,本作者正读大二,能力有限,有更好的方法也告诉我一下哈。


一.先在mfc上把界面先布局好如下图

打开4个摄像头


将布局好的界面稍微改一下相关的属性值

这里写图片描述


1-1将显示摄像头区域的ID分别改为:
IDC_Camera1
IDC_Camera2
IDC_Camera3
IDC_Camera3


1-2将控制摄像头开关和关闭界面的控件ID分别改为:
IDC_Capture1
IDC_Capture2
IDC_Capture3
IDC_Capture4
IDCANCEL


二.在对话框的头文件里添加4个线程句柄和打开4个摄像头和一个关闭界面的响应函数:
这里写图片描述

//创建4个线程句柄
protected:
        HANDLE h1;
        HANDLE h2;
        HANDLE h3;
        HANDLE h4;
// 创建打开摄像头和关闭界面的映射函数
public:
        afx_msg void OnBnClickedCancel();
        afx_msg void OnBnClickedCapture1();
        afx_msg void OnBnClickedCapture2();
        afx_msg void OnBnClickedCapture3();
        afx_msg void OnBnClickedCapture4();

三.在对话框的.cpp文件里的OnInitDialog()函数内初始化句柄

3.1定义一些全局变量来获取图片的句柄
这里写图片描述


//定义一些全局变量来获取图片的句柄
CRect rect1;
CRect rect2;
CRect rect3;
CRect rect4;

CDC* pDC1;
CDC* pDC2;
CDC* pDC3;
CDC* pDC4;

HDC hDC1;
HDC hDC2;
HDC hDC3;
HDC hDC4;

CWnd* pwnd1;
CWnd* pwnd2;
CWnd* pwnd3;
CWnd* pwnd4;

3.2OnInitDialog()函数内初始化句柄
这里写图片描述

//句柄的初始化
pwnd1 = GetDlgItem(IDC_Camera1);
pDC1 = pwnd1->GetDC();
hDC1 = pDC1->GetSafeHdc();
pwnd1->GetClientRect(&rect1);

pwnd2 = GetDlgItem(IDC_Camera2);
pDC2 = pwnd2->GetDC();
hDC2 = pDC2->GetSafeHdc();
pwnd2->GetClientRect(&rect2);

pwnd3 = GetDlgItem(IDC_Camera3);
pDC3 = pwnd3->GetDC();
hDC3 = pDC3->GetSafeHdc();
pwnd3->GetClientRect(&rect3);

pwnd4 = GetDlgItem(IDC_Camera4);
pDC4 = pwnd4->GetDC();
hDC4 = pDC4->GetSafeHdc();
pwnd4->GetClientRect(&rect4);

四.在对话框源文件里填加4个互斥对象并添加对应的响应函数:
这里写图片描述


    HANDLE hMutex1; //互斥对象1
    CCameraDS camera1;//摄像头1
    unsigned long _stdcall ThreadP
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值