《学习OpenCV 3(中文版)》 —从摄像头中读取
从摄像头中读取
“视觉”在计算机世界中可以表示很多东西,在一些情况下,我们分析从任意地方加载的静止的图像。在另一些情况下,我们会分析从硬盘中读取的视频。然而在更多的情况下,我们想要和从某种摄像头中读取的实时数据流进行交互。
OpenCV——或更准确地说,OpenCV中的HighGUI模块——为我们提供了一个简单的方式来驾驭这种情况。这个方法很接近于我们使用cv::VideoCapture从硬盘读取视频的方式,事实上,cv::VideoCapture对磁盘上的文件和摄像头是有一致接口的。对于前者来说,需要给它一个指示读取文件名的路径,对于后者来说,需要给它一个相机ID号(如果只有一个摄像头连接,这个ID号通常为0),ID的默认值是-1,这意味着“随意选择一个”,当然,当只有一个摄像头可以选择的时候这能够很好地工作(参考第8章,查阅详细解释),示例2-10展示了从文件或者摄像头中读取视频。
示例2-10:同一个对象可以读取视频文件,也可以连接摄像头
#include <opencv2/opencv.hpp> #include <iostream> int main( int argc, char** argv ) { cv::namedWindow( "Example2_10", cv::WINDOW_AUTOSIZE );
cv::VideoCapture cap; if (argc==1) { cap.open(0); // open the first camera
} else {
cap.open(argv[1]);
} if( !cap.isOpened() ) { // check if we succeeded std::cerr << "Couldn't open capture." << std::endl; return -1; }
// The rest of program proceeds as in #simple_opencv_program_for_playing_a_vide ...
在示例2-10中,如果一个文件名被提供,OpenCV将如示例2-3所示打开指定的文件。如果没有给予任何文件名,程序将尝试打开一个摄像头。我们加入一段检查代码来确定程序是否真的开启了一些东西,如果没有,将报错。
- 点赞
- 收藏
- 关注作者
评论(0)