linux下openCV两摄像头同时工作---基于树莓派3

原创文章,若要转载请注明出处:http://blog.csdn.net/zouyu1746430162/article/details/78241068

/****************************************************************************/
 *
 *                  (c)    光明工作室  2017-2037  COPYRIGHT
 *
 *   光明工作室团队成员大部分来自全国著名985、211工程院校。具有丰富的工程实践经验,
 *本工作室热忱欢迎大家的光临。工作室长期承接嵌入式开发、PCB设计、算法仿真等软硬件设计。
 *
 *
 *1)基于C8051、AVR、MSP430单片机开发。
 *2)基于STM32F103、STM32F407等ARM处理器开发。(IIC、SPI、485、WIFI等相关设计)
 *3)基于C6678、DM388等DSP处理器开发。(视频、网络、通信协议相关设计)
 *4)基于QT、C#软件开发。
 *5)基于OPENCV、OPENGL图像处理算法开发。(基于LINUX、WINDOWS、MATLAB等)
 *6)无人机飞控、地面站程序开发。(大疆、PIX、 qgroundcontrol、missionplanner、MAVLINK)
 *7) ROS机器人操作系统下相关开发。
 *8)LINUX、UCOSII、VXWORKS操作系统开发。
 *
 *
 *                                                 联系方式:
 *                                                 QQ:2468851091 call:18163325140
 *                                                 Email:2468851091@qq.com
 *
/ ****************************************************************************/     

/*与OPENCV相关的头文件,这个版本是把所有的图像帧都显示了出来,但是有一个缺点就是刷新有点慢。*/

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


 CvCapture* pCapture0;  // CvCapture  类型指针  指向两个摄像头其中的一个。
 CvCapture* pCapture1; // CvCapture  类型指针  指向两个摄像头其中的一个。
 IplImage* pFrame0;//OPENCV标准存储类型。
 IplImage* pFrame1;//OPENCV标准存储类型。
 
  
int main()  
{  
    cout << "测试两个摄像头同时读取数据" << endl;  
  
    
  
    while(1)  
    {  
      
        pCapture0 = cvCaptureFromCAM(1);//获取摄像头1的数据,这里的数字要根据自己LINUX下DEV中的设备号来确定。
        cvSetCaptureProperty(pCapture0,CV_CAP_PROP_FRAME_WIDTH,320);//设置分辨率大小
        cvSetCaptureProperty(pCapture0,CV_CAP_PROP_FRAME_HEIGHT,240);
        pFrame0 = cvQueryFrame(pCapture0);
        cvShowImage("camera1",pFrame0); //显示图像
        cvReleaseCapture(&pCapture0);//清空摄像头1的总线带宽,为下面的摄像头2 的数据读取做准备。
       // cvWaitKey(1);




        pCapture1 = cvCaptureFromCAM(2);//获取摄像头2的数据,这里的数字要根据自己LINUX下DEV中的设备号来确定。
        cvSetCaptureProperty(pCapture1,CV_CAP_PROP_FRAME_WIDTH,320);
        cvSetCaptureProperty(pCapture1,CV_CAP_PROP_FRAME_HEIGHT,240);
        pFrame1 = cvQueryFrame(pCapture1);
        
        cvShowImage("camera2",pFrame1); 
        cvReleaseCapture(&pCapture1);
        cvWaitKey(1);


    }  
     
    return 0;  
  
}  




/*下面的这个版本,只是显示了奇数帧图像。速度有所提升。在树莓派3的环境下,完全可以跑起来。*/

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

CvCapture* pCapture0;  
CvCapture* pCapture1; 
 IplImage* pFrame0;
 IplImage* pFrame1;
 
  
int main()  
{  
    cout << "测试两个摄像头同时读取数据" << endl;  
   int i=0;
    
  
    while(1)  
    {  
        i++;
      if(i%2==1)
           {
                if(i>100){i=0;}
       pCapture0 = cvCaptureFromCAM(1);
       cvSetCaptureProperty(pCapture0,CV_CAP_PROP_FRAME_WIDTH,320);
       cvSetCaptureProperty(pCapture0,CV_CAP_PROP_FRAME_HEIGHT,240);
       pFrame0 = cvQueryFrame(pCapture0);
       cvShowImage("camera1",pFrame0); 
       cvWaitKey(10);
       cvReleaseCapture(&pCapture0);
      // cvWaitKey(1);


       pCapture1 = cvCaptureFromCAM(0);
       cvSetCaptureProperty(pCapture1,CV_CAP_PROP_FRAME_WIDTH,320);
       cvSetCaptureProperty(pCapture1,CV_CAP_PROP_FRAME_HEIGHT,240);
       pFrame1 = cvQueryFrame(pCapture1);
        
       cvShowImage("camera2",pFrame1); 
       cvWaitKey(10);
       cvReleaseCapture(&pCapture1);
          }


    }  
    return 0;  
  
}  




/*下图是两个摄像头的显示效果,在网上随便买的网络摄像头,图片效果不太好。但是数据处理流程完全没有问题。接下来会解决刷新速度过慢的问题。*/



CC = g++  
TARGET=webcamera-six
# # C文件  
SRCS=webcamera-six.cpp  
# # 目标文件  
OBJS=$(SRCS:.cpp=.o)  
# # 库文件  
DLIBS=-lopencv_core -lopencv_imgproc -lopencv_highgui  
# # 链接为可执行文件  
$(TARGET):$(OBJS)  
	$(CC) -o $@ $^ $(DLIBS)  
clean:  
	rm -rf $(TARGET) $(OBJS)  
#   # 编译规则 $@代表目标文件 $< 代表第一个依赖文件  
%.o:%.cpp  
	$(CC) -o $@ -c $<


     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值