在liunx系统下,如何用opencv调用摄像头显示画面,并在按下p键后将当前画面储存到指定的/root/20204367yyh路径下并根据保存顺序从photo1开始进行命名,直到按q键后关闭摄像头窗口。请进行程序编写并给出makefile文件并说明如何使用
时间: 2023-05-29 18:01:53 浏览: 168
以下是程序编写:
```cpp
#include <opencv2/opencv.hpp>
#include <string>
using namespace cv;
using namespace std;
int main()
{
VideoCapture cap(0);
if (!cap.isOpened()) {
cout << "Error: Cannot open camera." << endl;
return -1;
}
int photo_num = 1;
char photo_name[50];
string save_path = "/root/20204367yyh/";
while(true) {
Mat frame;
cap >> frame;
imshow("Camera Feed", frame);
char c = cvWaitKey(20);
if (c == 'p') {
sprintf(photo_name, "photo%d.jpg", photo_num);
string full_path = save_path + photo_name;
imwrite(full_path, frame);
photo_num++;
} else if (c == 'q') {
break;
}
}
cap.release();
destroyAllWindows();
return 0;
}
```
以下是makefile文件:
```makefile
CXX=g++
CXXFLAGS=-Wall -O3 `pkg-config --cflags opencv`
LDFLAGS=`pkg-config --libs opencv`
all: camera
camera: camera.cpp
$(CXX) $(CXXFLAGS) -o camera camera.cpp $(LDFLAGS)
.PHONY: clean
clean:
rm -f camera
```
使用方法:
1. 将上述程序保存到一个名为“camera.cpp”的文件中,makefile保存为“makefile”文件。
2. 打开终端并进入程序所在的文件夹。
3. 执行“make”命令,并等待程序编译完成。
4. 执行“./camera”命令启动程序。
5. 在摄像头窗口中按下“p”键保存当前画面并命名为“photo1.jpg”,下一次保存时自动命名为“photo2.jpg”,以此类推。
6. 当想要退出程序时,在摄像头窗口中按下“q”键即可。
注意:在程序开头的save_path变量中需将“20204367yyh”替换为自己的学号。保存路径中的“/root/”是根目录,需要root权限,可以将它替换为其他有写入权限的文件夹路径。
阅读全文