硬件设施:双目摄像头支持:一条usb接口的两个摄像头,和两条usb的两个摄像头。
双目摄像头的读取,有的用directshow来实现。这里使用opencv直接进行双目摄像头的读取。
代码如下:#include #includeusing namespace cv;using namespace std;int main(){ //initialize and allocate memory to load the video stream from camera VideoCapture camera0(1); camera0.set(CV_CAP_PROP_FRAME_WIDTH,320); camera0.set(CV_CAP_PROP_FRAME_HEIGHT,240); VideoCapture camera1(0); camera1.set(CV_CAP_PROP_FRAME_WIDTH,320); camera1.set(CV_CAP_PROP_FRAME_HEIGHT,240); if( !camera0.isOpened() ) return 1; if( !camera1.isOpened() ) return 1; while(true) { //grab and retrieve each frames of the video sequentially Mat3b frame0; camera0 >> frame0; Mat3b frame1; camera1 >> frame1; imshow("Video0", frame0); imshow("Video1", frame1);// std::cout
注释:分辨率为320*240,能够正常显示,分辨率太高,只有一个摄像头能正常显示,另一个显示灰度图。原因是USB的带宽有限。摄像头的序号在opencv中是采用降序的形式,才能正确读取多个摄像头,否则就不能。
VideoCapture类有两种用法,一种是VideoCapture(const string& filename)用来打开视频文件,一种是VideoCapture(int device)用来打开设备。
isOpened函数用来检测VideoCapture类是否打开成功。C++版本的OpenCV有一个明显的好处,就是不需要释放操作(不论是视频还是图片),VideoCapture类的析构函数会自动帮你完成。