OpenCV中的HighGUI模块可以和摄像头中读取的实时数据流进行交互
这种方法很接近使用cv::VideoCapture从硬盘读取视频的方式(在我的上上一篇博客中有相关代码)
cv::VideoCapture对磁盘上的文件和摄像头是有一致接口的,对于前者,需要给一个读取文件名的路径,对于后者而言,需要给一个相机ID号,如果只有一个摄像头链接,则这个ID号通常为0,当ID值为-1时则代表任意选择一个
代码如下:
// 从摄像头中读取
#include <opencv2/opencv.hpp>
#include <opencv2/core.hpp>
#include <opencv2//highgui/highgui.hpp>
#include <iostream>
int main() {
cv::namedWindow("暴风影音", cv::WINDOW_AUTOSIZE);
cv::VideoCapture cap;
// 读取摄像头
cap.open(0);
// 判断摄像头是否打开
if (!cap.isOpened()) {
std::cerr << "Could't open capture" << std::endl;
return -1;
}
cv::Mat frame;
// 接收键盘上的输入
char keyCode;
// 保存的图片名称
std::string imgName = "123.jpg";
while (1) {
// 把读取的摄像头传入Mat对象中
cap >> frame;
// 判断是否成功
if (frame.empty()) {
break;
}
// 把每一帧图片表示出来
cv: