opencv打开摄像头全过程
时间: 2023-11-04 11:59:32 浏览: 89
打开摄像头的过程分为两个步骤,首先是打开摄像头设备并获取摄像头的属性,接着是从摄像头中读取图像数据。
第一步,打开摄像头设备并获取摄像头属性:
首先,需要引入opencv库并创建一个VideoCapture对象,通过指定摄像头设备的ID来打开摄像头。例如,如果要打开第一个摄像头,则设备ID为0,代码如下所示:
```c++
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
// 打开摄像头设备,并获取摄像头属性
VideoCapture cap(0);
if (!cap.isOpened()) { // 如果无法打开摄像头设备
cout << "Error opening camera!" << endl;
return -1;
}
// 获取摄像头图像的宽、高、帧率等属性
int width = cap.get(CAP_PROP_FRAME_WIDTH);
int height = cap.get(CAP_PROP_FRAME_HEIGHT);
double fps = cap.get(CAP_PROP_FPS);
cout << "Camera opened successfully! Properties:" << endl;
cout << "Width: " << width << " px" << endl;
cout << "Height: " << height << " px" << endl;
cout << "FPS: " << fps << endl;
// 程序继续执行...
return 0;
}
```
在上面的代码中,我们首先创建了一个VideoCapture对象cap,通过指定设备ID为0来打开第一个摄像头设备。在打开摄像头之后,我们使用cap.get()方法获取了摄像头图像的宽、高、帧率等属性,并将这些属性打印到控制台中。
第二步,从摄像头设备中读取图像数据:
接下来,我们使用cap.read()方法从摄像头设备中读取图像数据,代码如下所示:
```c++
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
// 打开摄像头设备,并获取摄像头属性
VideoCapture cap(0);
if (!cap.isOpened()) { // 如果无法打开摄像头设备
cout << "Error opening camera!" << endl;
return -1;
}
// 获取摄像头图像的宽、高、帧率等属性
int width = cap.get(CAP_PROP_FRAME_WIDTH);
int height = cap.get(CAP_PROP_FRAME_HEIGHT);
double fps = cap.get(CAP_PROP_FPS);
cout << "Camera opened successfully! Properties:" << endl;
cout << "Width: " << width << " px" << endl;
cout << "Height: " << height << " px" << endl;
cout << "FPS: " << fps << endl;
// 从摄像头中读取图像数据,循环读取直到用户按下q键
while (1) {
Mat frame;
bool success = cap.read(frame);
if (!success) { // 如果读取失败
cout << "Error reading frame from camera!" << endl;
break;
}
imshow("Camera", frame);
// 等待20ms,处理按键事件
char c = waitKey(20);
if (c == 'q') { // 如果用户按下q键,则退出循环
break;
}
}
// 释放摄像头对象
cap.release();
// 程序继续执行...
return 0;
}
```
在上面的代码中,我们使用了cap.read()方法循环读取摄像头中的图像数据,并使用imshow()方法显示图像。为了让窗口可以响应按键事件,我们还使用了waitKey()方法等待用户按下按键,并判断用户是否按下了q键来退出循环。最后,在程序结束之前,我们需要调用cap.release()方法释放摄像头对象,这样才能让其他程序或进程可以访问摄像头设备。
阅读全文