//运行环境OPENCV2.4.9 VS2012 WIN7X64
/*【opencv】批量人脸截取 - 小白笔记本 - CSDN博客
https ://blog.csdn.net/qq_15947787/article/details/51393030 */
#include <opencv2\opencv.hpp>
#include <iostream>
#include <Windows.h>
using namespace std;
using namespace cv;
void AllImagePro(string src, string dst, static int number);
void detectAndCut(Mat img, string dir, string filename);
char* WcharToChar(const wchar_t* wp);
wchar_t* CharToWchar(const char* c);
wchar_t* CharToWchar(const char* c);
wchar_t* StringToWchar(const string& s);
//1.CascadeClassifier face_cascade;
//2.String face_cascade_name = "haarcascade_frontalface_alt.xml";
String face_cascade_name = "D:\\D\\2019window\\opencvfacetwo\\haarcascade_frontalface_default.xml";
CascadeClassifier face_cascade;
int main()
{
//在文件夹0图片中寻找人脸并截取存放到文件夹0cut中
if (!face_cascade.load(face_cascade_name)) { printf("--(!)Error loading\n"); return -1; };
//AllImagePro("0", "0cut", 20);//20是图片数量
AllImagePro("D:\\D\\2019window\\opencvfacetwo\\pimage[25]", "D:\\D\\2019window\\opencvfacetwo\\pimage[25]size2",20);
cout << "cut……OK!" << endl;
return 0;
}
//读取目录src下min(number,所有图像)图像提取人脸并保存到srccut目录,
//参数:原图片目录src 剪切图片保存目录dst 读取最大数量number
void AllImagePro(string src, string dst, static int number)
{
int count = 0;
string src1 = src;
string src1cut = dst;
HANDLE hFile;
LPCTSTR lpFileName = StringToWchar(src1 + "/" + "*.*"); //指定搜索目录和文件类型,如搜索d盘的音频文件可以是"D:\\*.mp3"
WIN32_FIND_DATA pNextInfo; //搜索得到的文件信息将储存在pNextInfo中;
hFile = FindFirstFile(lpFileName, &pNextInfo);//请注意是 &pNextInfo , 不是 pNextInfo;
if (hFile == INVALID_HANDLE_VALUE)
{
//搜索失败
exit(-1);
}
cout << "文件夹" << src << "找到的图片:" << endl;
do
{
if (pNextInfo.cFileName[0] == '.')//过滤.和..
continue;
count++;
printf("%s\n", WcharToChar(pNextInfo.cFileName));
Mat img = imread(src1 + "/" + WcharToChar(pNextInfo.cFileName), 1);
detectAndCut(img, src1cut, WcharToChar(pNextInfo.cFileName));
} while (FindNextFile(hFile, &pNextInfo) && count<number);//如果设置读入的图片数量,则以设置的为准,如果图片不够,则读取文件夹下所有图片
}
//人脸检测
//参数:待检测图像img 保存路径dir 保存文件名name
void detectAndCut(Mat img, string dir, string filename)
{
std::vector<Rect> faces;
Mat img_gray;
cvtColor(img, img_gray, COLOR_BGR2GRAY);
equalizeHist(img_gray, img_gray);
//-- Detect faces
face_cascade.detectMultiScale(img_gray, faces, 1.1, 2, 0 | CV_HAAR_SCALE_IMAGE, Size(30, 30));
for (size_t i = 0; i < faces.size(); i++)
{
Point rec(faces[i].x, faces[i].y);
Point rec2(faces[i].x + faces[i].width, faces[i].y + faces[i].height);
Mat roi_img = img(Range(faces[i].y, faces[i].y + faces[i].height), Range(faces[i].x, faces[i].x + faces[i].width));
imwrite(dir + "/" + filename, roi_img);
//imwrite("D:\\D\\2019window\\opencvfacetwo\\pimage[25]size2", roi_img);
}
}
char* WcharToChar(const wchar_t* wp)
{
char *m_char;
int len = WideCharToMultiByte(CP_ACP, 0, wp, wcslen(wp), NULL, 0, NULL, NULL);
m_char = new char[len + 1];
WideCharToMultiByte(CP_ACP, 0, wp, wcslen(wp), m_char, len, NULL, NULL);
m_char[len] = '\0';
return m_char;
}
wchar_t* CharToWchar(const char* c)
{
wchar_t *m_wchar;
int len = MultiByteToWideChar(CP_ACP, 0, c, strlen(c), NULL, 0);
m_wchar = new wchar_t[len + 1];
MultiByteToWideChar(CP_ACP, 0, c, strlen(c), m_wchar, len);
m_wchar[len] = '\0';
return m_wchar;
}
wchar_t* StringToWchar(const string& s)
{
const char* p = s.c_str();
return CharToWchar(p);
}
截(2)取图片1成功不理想.zip_图片中截取人脸
版权申诉
64 浏览量
2022-09-22
14:34:40
上传
评论
收藏 2KB ZIP 举报
御道御小黑
- 粉丝: 61
- 资源: 1万+
最新资源
- meta-llama-3-8b-instruct 的 model-00004-of-00004.safetensors
- IMG_0006.CR2.cr2
- 幸运红包娱乐微信小程序源码 多玩法安装简单
- packagecom5_QQ浏览器压缩包.zip
- MY3-3WHY-可以刷萤石H6C-V100-2C3WF
- 深度解析木马隐藏技术:核心原理与VMware网络实验指南
- pbootcms百度智能小程序插件
- 指令调度和延迟分支学习资料.rar
- HTML5小游戏【飞得更高跳跃游戏feidegenggao】游戏源码分享下载 - feidegenggao.zip
- 第一讲:单片机STC89C52+RA8889驱动控制彩屏(源码公开)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈