原创文章,若要转载请注明出处: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 $<