在liunx系统下,如何用opencv调用摄像头显示画面,并在按下p键后将当前画面储存到指定的/root/20204367yyh路径下并根据保存顺序从photo1开始进行命名,直到按q键后关闭摄像头窗口。请进行程序编写并给出makefile文件
时间: 2023-05-29 22:01:49 浏览: 79
程序代码如下:
```cpp
#include <opencv2/opencv.hpp>
#include <iostream>
#include <sstream>
using namespace cv;
using namespace std;
int main()
{
// 打开摄像头
VideoCapture capture(0);
if (!capture.isOpened())
{
cerr << "Failed to open camera." << endl;
return -1;
}
// 创建窗口
namedWindow("Camera", WINDOW_NORMAL);
// 计数器,用于保存照片的编号
int counter = 1;
while (true)
{
// 读取一帧画面
Mat frame;
capture >> frame;
if (frame.empty())
{
cerr << "Failed to capture frame." << endl;
break;
}
// 在窗口中显示画面
imshow("Camera", frame);
// 检测按键
int key = waitKey(30);
if (key == 'p')
{
// 按下p键,保存当前画面
stringstream filename;
filename << "/root/20204367yyh/photo" << counter << ".jpg";
imwrite(filename.str(), frame);
counter++;
}
else if (key == 'q')
{
// 按下q键,退出循环
break;
}
}
// 关闭窗口
destroyWindow("Camera");
// 释放摄像头
capture.release();
return 0;
}
```
makefile文件如下:
```makefile
# 指定编译器和编译选项
CC = g++
CFLAGS = -Wall -I/usr/local/include/opencv4
# 指定链接选项
LIBS = -lopencv_core -lopencv_highgui -lopencv_imgcodecs -lopencv_videoio
# 源文件列表
SRCS = main.cpp
# 生成目标文件的列表
OBJS = $(SRCS:.cpp=.o)
# 生成可执行文件
camera: $(OBJS)
$(CC) $(CFLAGS) $(OBJS) -o camera $(LIBS)
# 生成目标文件
%.o: %.cpp
$(CC) $(CFLAGS) -c $< -o $@
# 清理命令
clean:
rm -f camera $(OBJS)
```
说明:
在编译时需要指定opencv的头文件路径和库文件路径,同时需要链接opencv的相关库文件。
在程序中使用了stringstream来将文件路径和文件编号拼接在一起,形成完整的文件名。
在按下p键时,调用imwrite函数将当前画面储存到指定路径下,并将计数器加1。计数器可以用于记录保存的照片数量,方便后续命名。
在按下q键时,退出循环,关闭窗口,释放摄像头。
阅读全文