在liunx系统下,如何用opencv调用摄像头显示画面,并在按下p键后将当前画面储存到指定的/home/20204367路径下,请用c语言进行程序编写并详细解释每一行代码的作用和使用的相关函数
时间: 2023-05-29 17:01:23 浏览: 160
以下是示例代码:
```c
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
// 打开摄像头
VideoCapture cap(0);
if (!cap.isOpened()) {
cerr << "Failed to open camera." << endl;
return -1;
}
// 创建窗口
namedWindow("Camera",WINDOW_NORMAL);
while (1) {
Mat frame; // 定义用于存储图像的变量
cap >> frame; // 从摄像头中读取图像
// 判断读取是否成功
if (frame.empty()) {
cerr << "Failed to capture frame." << endl;
break;
}
imshow("Camera", frame); // 显示图像
// 检测是否按下了 p 键
if (waitKey(30) == 'p') {
imwrite("/home/20204367/camera.jpg", frame); // 将图像保存到指定路径
cout << "Saved current frame." << endl;
}
}
// 关闭窗口
destroyWindow("Camera");
return 0;
}
```
解释:
1. 首先包含了必要的头文件,其中 `opencv2/opencv.hpp` 包含了 OpenCV 的头文件,`iostream` 用于输入输出流的处理。
2. 定义了 OpenCV 的命名空间,方便调用其中的函数和类。
3. main 函数中首先通过 `VideoCapture` 类打开了摄像头,传入参数 `0` 表示使用默认的摄像头。
4. 对于摄像头打开失败的情况,输出错误信息并退出程序。
5. 创建了一个窗口,用于显示摄像头读取到的画面。
6. 通过循环不断读取摄像头的画面,存放在 `frame` 变量中。
7. 判断读取是否成功,如果图像为空,则输出错误信息并退出循环。
8. 调用 `imshow` 函数将 `frame` 变量中的图像显示在窗口中。
9. 调用 `waitKey` 函数等待用户按下按键。在本例中,当用户按下 p 键时,将当前画面存储到指定路径。
10. 调用 `imwrite` 函数将图像保存到指定路径,注意不要保存成 png 格式,否则会出现绿色的边缘。
11. 输出提示信息。
12. 最后,循环结束后关闭窗口,退出程序。
阅读全文