在opencv 4中调用摄像头显示画面,并在按下p键后将当前画面储存到指定的/root/20204367yyh路径下并根据保存顺序从photo1开始进行命名,直到按q键后关闭摄像头窗口。请进行程序编写并给出makefile文件并说明如何使用
时间: 2023-05-29 15:02:26 浏览: 127
以下是针对该问题的一个示例程序:
```cpp
#include <opencv2/opencv.hpp>
#include <iostream>
#include <string>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
VideoCapture cap(0); // 打开摄像头
if (!cap.isOpened()) {
cout << "Failed to open camera." << endl;
return -1;
}
namedWindow("Camera", WINDOW_NORMAL); // 创建窗口
string saveDir = "/root/20204367yyh/"; // 保存目录
int photoIndex = 1; // 图片编号
char key = 0;
while (key != 'q') { // 直到按下q键才退出程序
Mat frame;
cap >> frame; // 抓取一帧图像
imshow("Camera", frame); // 显示图像
if (key == 'p') { // 按下p键保存当前图像
string filePath = saveDir + "photo" + to_string(photoIndex) + ".jpg";
imwrite(filePath, frame);
cout << "Saved " << filePath << endl;
photoIndex++;
}
key = waitKey(10); // 等待10毫秒,获取键盘事件
}
cap.release(); // 释放摄像头
destroyAllWindows(); // 销毁窗口
return 0;
}
```
该程序通过opencv中的VideoCapture类打开摄像头,并循环抓取图像并显示在窗口上。当按下p键时,当前图像会保存到指定目录下并按照photoN的命名方式进行命名,N为当前保存图片的索引值。最多可以保存2,147,483,647张图片。当按下q键后,程序退出并关闭窗口。
以下是makefile文件:
```makefile
CXX = g++
CXXFLAGS = -std=c++11 `pkg-config --cflags opencv4`
LIBS = `pkg-config --libs opencv4` -pthread
all: main
main: main.cpp
$(CXX) $(CXXFLAGS) -o $@ $< $(LIBS)
clean:
rm -f main
```
在终端中进入源代码所在的目录,并执行以下命令即可编译程序:
```
make
```
然后直接运行可执行文件即可:
```
./main
```
当然,运行前需要保证摄像头设备可用。
阅读全文