一、相关代码
#include <opencv2/opencv.hpp>#include <opencv2/imgcodecs.hpp>#include <opencv2/highgui.hpp>#include <iostream>using namespace std;using namespace cv;int main(){int d = 0;char str[300] = { 0 };VideoCapture capture;capture.open(0);//判断相机是否打开if (!capture.isOpened()){cout << "open camera failed" << endl;return -1;}while (true){Mat camera_frame;capture >> camera_frame; //读取图像帧至camera_frame// 第二种获取方式//capture.read(camera_frame);if (!camera_frame.empty()){imshow("picture", camera_frame);}// 按“s”键保存图片至指定路径int k = waitKey(2);if (k == 's'){// 路径斜杠要注意,容易出错sprintf_s(str,300, "D:\\360MoveData\\Users\\ZNC\\Desktop\\op\\%d.jpg", ++d);imwrite(str, camera_frame);}// 按q键退出程序if (k == 'q'){break;}}// 销毁显示窗口,不添加按q会报错cv::destroyAllWindows();}
二、相关知识
(1)sprintf_s()函数
sprintf_s是sprintf的安全版本,指定缓冲区长度来避免sprintf()存在的溢出风险,区别在sprintf_s第二个参数,可以控制缓冲区大小。
sprintf/sprintf_s指的是字符串格式化命令,其功能是把格式化的数据写入指定字符串中。
sprintf 是个变参函数。使用sprintf 对于写入buffer的字符数是没有限制的,这就存在了buffer溢出的可能性。
头文件 stdio.h
原型 int sprintf_s(char *buffer,size_t sizeOfBuffer,const char *format, [argument] ...);
参数列表 buffer:char型指针,指向将要写入的字符串的缓冲区。
sizeOfBuffer:缓冲区大小。
format:格式化字符串。
[argument]...:可选参数,可以是任何类型的数据
相关参考:
(1)opencv学习---VideoCapture 类基础知识_hairuiJY的博客-CSDN博客_cv::videocapture
(2)c++中sprintf和sprintf_s的区别_奔跑的大茄子的博客-CSDN博客_c++ sprintf_s