用C++如何实现把拍照得到的图片保存在上面已经动态创建过的文件夹

岸阔 2017-12-02 10:48:47
void TakePhotos()
{
CascadeClassifier cascade;//加载级联分析器
cascade.load("haarcascade_frontalface_alt.xml");//加载训练得到的分类器xml文件
VideoCapture cap(0);//启动摄像头
Mat frame;
if (!cap.isOpened())
{
cout << "摄像头打开失败!" << endl;

}
char dir[200];
char key;
char filename[200];
int count = 0;
char str[20];
char *name = str;
printf("\n当摄像头开启时请保证好姿势之后按下空格键录入信息(拍摄10张以上不同角度不同表情的图片),确定");
system("pause");
printf("\n请输入你的名字缩写:", &str);
scanf("%s", str);
sprintf(dir,"D:\\vs2013priactice\\FAce_dect\\Face_dect\\pic\\%s",str);//写入创建文件夹位置和名字
_mkdir(dir);//在指定目录下创建文件夹


namedWindow("【视频】", 1);
namedWindow("【图片】", 1);
while (1)
{
key = waitKey(50);
cap >> frame;
imshow("【视频】", frame);

if (key == 27)
break;//按ESC键退出程序
if (key == 32)//按空格键进行拍照 32是空格键对应的ascll码
{
std::vector<Rect> faces;//定义了faces对象是一个RECT数组
Mat frame_gray;
cvtColor(frame, frame_gray, COLOR_BGR2GRAY);//图像灰度处理
cascade.detectMultiScale(frame_gray, faces, 1.1, 4, 0, Size(100, 100), Size(500, 500));
for (size_t i = 0; i < faces.size(); i++)
{
rectangle(frame, faces[i], Scalar(255, 0, 0), 2, 8, 0);//红色的矩形框
}
Mat faceROI = frame_gray(faces[0]);//感兴趣的区域ROI
Mat myFace;//建立一个自己的脸存储
resize(faceROI, myFace, Size(92, 112));//存储为92*112 拍照时候请保证好姿势,因为图片太大会造成错误
sprintf(filename, "%s%d.jpg",dir, ++count);
printf("11111111");
imwrite(filename, myFace);//图片保存到本工程目录中
imshow("【图片】", myFace);
}
}
destroyAllWindows();
printf("信息录入成功");
}




//////这是小弟的代码,
printf("\n请输入你的名字缩写:", &str);
scanf("%s", str);
sprintf(dir,"D:\\vs2013priactice\\FAce_dect\\Face_dect\\pic\\%s",str);//写入创建文件夹位置和名字
_mkdir(dir);//在指定目录下创建文件夹

这一点已经创建了文件夹
接下来想把下面拍照得到的图片保存在这个文件夹中
Mat faceROI = frame_gray(faces[0]);//感兴趣的区域ROI
Mat myFace;//建立一个自己的脸存储
resize(faceROI, myFace, Size(92, 112));//存储为92*112 拍照时候请保证好姿势,因为图片太大会造成错误
sprintf(filename, "%s%d.jpg",dir, ++count);
printf("11111111");
imwrite(filename, myFace);//图片保存到本工程目录中
imshow("【图片】", myFace);
}


这个文件夹是根据你输入的时候定的
也就是说你一个人输入了自己的名字创建了文件夹之后用此程序拍的的照片就要存储在此文件夹下,实现这样的功能就行
谢谢各位i大佬们的帮忙了.
...全文
439 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
ooolinux 2017-12-03
  • 打赏
  • 举报
回复
sprintf(filename, "%s%d.jpg",dir, ++count); 输出filename看看是否有效的路径名字,文件名和目录之间是否有分隔符。

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧