批处理人脸检测区域的保存和下采样

花了一晚上时间,终于解决了检测到的人脸区域的保存和下采样,成果如下:

1.可以批处理一个文件夹下的所有图像;

2.利用opencv进行人脸的检测;

3.对检测到的人脸区域进行保存;

4.对人脸图像32*32的下采样保存。

源代码:

#include "cv.h"
#include "highgui.h"
#include <stdio.h>

using namespace cv;
#include<iostream>
#include<opencv2\opencv.hpp>
#include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include <math.h>
#include <stdio.h>
#include <cv.h>
#include <highgui.h>
#include<io.h>
using std::cout;
using std::endl;
using namespace std;
#include <cmath>
#include<string.h>
#include <iostream>
#include <fstream>
using namespace std;

int main(int argc, char** argv)
{
	CvHaarClassifierCascade * pCascade = 0;  // the face detector
	CvMemStorage * pStorage = 0;        // expandable memory buffer
	CvSeq * pFaceRectSeq;               // list of detected faces
	int ii;

	// initializations
	FILE *fp;

	char str0[200][100];
	char str2[200][100];
	char str3[200][100];
	int i, n = 0;
	system("dir /a-d /b E:\\pic\\安以轩\\ >d:\\cam5.txt");
	fp = fopen("d:\\cam5.txt", "r");
	while (1){
		if (fgets(str0[n], 50, fp) == NULL) break;
		str0[n][strlen(str0[n]) - 1] = '\0';   // 加一个字符串结束符
		n++;
	}
	n--;
	fclose(fp);
	double value_psnr01 = 0;
	double value_ssim01 = 0;
	double value_psnr21 = 0;
	double value_ssim21 = 0;
	double value_psnr11 = 0;
	double value_ssim11 = 0;
	for (i = 0; i < 100; i++){
		char refColor[200] = "E:\\pic\\安以轩\\";
		strcat(refColor, str0[i]);
		IplImage * pInpImg = cvLoadImage(refColor, CV_LOAD_IMAGE_COLOR);
		pStorage = cvCreateMemStorage(0);
		pCascade = (CvHaarClassifierCascade *)cvLoad
			("D:\\opencv\\opencv\\sources\\data\\haarcascades\\haarcascade_frontalface_alt.xml", 0, 0, 0);

		// validate that everything initialized properly
		if (!pInpImg || !pStorage || !pCascade){
			printf("Initialization failed: %s \n",
				(!pInpImg) ? "didn't load image file" :
				(!pCascade) ? "didn't load Haar cascade -- "
				"make sure path is correct" :
				"failed to allocate memory for data storage");
			exit(-1);
		}

		// detect faces in image
		pFaceRectSeq = cvHaarDetectObjects
			(pInpImg, pCascade, pStorage,
			1.1,                       // increase search scale by 10% each pass
			3,                         // drop groups of fewer than three detections
			CV_HAAR_DO_CANNY_PRUNING,  // skip regions unlikely to contain a face
			cvSize(0, 0));              // use XML default for smallest search scale

		// create a window to display detected faces
		//cvNamedWindow("Haar Window", CV_WINDOW_AUTOSIZE);
		//cv::Mat xMat;

		// draw a rectangular outline around each detection
		for (ii = 0; ii<(pFaceRectSeq ? pFaceRectSeq->total : 0); ii++){
			CvRect * r = (CvRect*)cvGetSeqElem(pFaceRectSeq, ii);
			CvPoint pt1 = { r->x, r->y };
			CvPoint pt2 = { r->x + r->width, r->y + r->height };
			CvSize size = cvSize(r->width, r->height);
			cvSetImageROI(pInpImg, cvRect(r->x, r->y, size.width, size.height));
			IplImage* pDest = cvCreateImage(size, pInpImg->depth, pInpImg->nChannels);
			cvCopy(pInpImg, pDest);
			//cvNamedWindow("ShowImage...", 1); //cvNamedWindow会创建一个显示窗口
			//cvShowImage("ShowImage...", pDest); //cvShowImage在窗口中显示创建的图像
			cvResetImageROI(pDest);
			cvSaveImage(refColor, pDest);
			cv::Mat pDest1 = imread(refColor);
			resize(pDest1, pDest1, Size(32, 32), 0, 0, CV_INTER_LINEAR);
			//imshow("wangjian",pDest1);
			imwrite(refColor, pDest1);
			cvRectangle(pInpImg, pt1, pt2, CV_RGB(0, 255, 0), 3, 4, 0);
		}

		// display face detections
		//cvShowImage("Haar Window", pInpImg);
		//cvWaitKey(0);
		//cvDestroyWindow("Haar Window");

		// clean up and release resources
		cvReleaseImage(&pInpImg);

	}

	if (pCascade) cvReleaseHaarClassifierCascade(&pCascade);
	if (pStorage) cvReleaseMemStorage(&pStorage);
	return 0;
}
时间: 2024-11-08 10:36:57

批处理人脸检测区域的保存和下采样的相关文章

从视频中提取图片,对图片做人脸检测并截取人脸区域

环境配置:VS2013+opencv2.4.10+libface.lib 参考博客:http://blog.csdn.net/augusdi/article/details/11042329 http://www.1024do.com/?p=1296 首先给出视频处理的函数video_process.hpp #include <stdio.h> #include <opencv2/opencv.hpp> #include "facedetect-dll.h" #

MyElipse6.5环境下java调用vs2010动态链接库DLL人脸检测

Java调用C++动态链接库的网络上的文章也很多,但是还是有个别的问题没有提到,导致操作起来还是难度较大,关键是程序的疑难杂症不好治. 准备工具:vs2010,java1.6,MyElipse6.5,opencv2.4.6(其他版本请留意程序中的版本号),摄像头. 操作流程,流水式操作: 1.先建立文件FaceDetect.java文件并通过指令生成.h头文件 FaceDetect.java的代码: public class FaceDetect { static { System.loadLi

用caffe一步一步实现人脸检测

学习深度学习已有一段时间了,总想着拿它做点什么,今天终于完成了一个基于caffe的人脸检测,这篇博文将告诉你怎样通过caffe一步步实现人脸检测.本文主要参考唐宇迪老师的教程,在这里感谢老师的辛勤付出. 传统机器学习方法实现人脸检测: 人脸检测在opencv中已经帮我们实现了,我们要把它玩起来很简单,只需要简简单单的几行代码其实就可以搞定.(haarcascade_frontalface_alt.xml这个文件在opencv的安装目录下能找到,笔者的路径是:E:\opencv2.4.10\ope

Python-OpenCV人脸检测(代码)

Python-OpenCV人脸检测(代码) @author:wepon @blog:http://blog.csdn.net/u012162613/article/details/43523507 做人脸识别,首先要检测出图片/视频中的人脸,今天就研究了一下OpenCV的Python接口,把常用的一些功能模块写成函数.基于Python-OpenCV以及PIL,实现图片中人脸的检测以及截取保存.眼睛检测.笑脸检测.下面简单总结一下. 一.软件安装 安装Python-OpenCV以及其依赖库.PIL

人脸检测之Haar-like,Adaboost,级联(cascade)

0:写在前面的话 写在前面的牢骚话,作为一个非主流工程师,我专业与目前工作都与这些知识相隔十万八千里,所以,我所学习和实现的完全是因为兴趣,目前还研究学习的很浅,谈不上高深,所以还是要继续努力学习.希望和大家多交流,也欢迎伪大牛,假专家板砖伺候,也希望真大牛多指点(真大牛不会啰嗦一堆来显得他知道的多,哈哈),总之,本人还在菜鸟阶段,欢迎指教.0.0本文如有错误请及时留言指出,博主会在第一时间修改,确保不会对其他读者产生副作用. 1:人脸检测与识别 人脸识别系统主要包括四个组成部分,分别为:人脸图

基于OpenCV读取摄像头进行人脸检测和人脸识别

前段时间使用OpenCV的库函数实现了人脸检测和人脸识别,笔者的实验环境为VS2010+OpenCV2.4.4,opencv的环境配置网上有很多,不再赘述.检测的代码网上很多,记不清楚从哪儿copy的了,识别的代码是从OpenCV官网上找到的:http://docs.opencv.org/trunk/modules/contrib/doc/facerec/facerec_api.html 需要注意的是,opencv的FaceRecogizer目前有三个类实现了它,特征脸和fisherface方法

python中使用Opencv进行人脸检测

这两天学习了人脸识别,看了学长写的代码,边看边码边理解搞完了一边,再又是自己靠着理解和记忆硬码了一边,感觉还是很生疏,就只能来写个随笔加深一下印象了. 关于人脸识别,首先需要了解的是级联分类器CascadeClassifier,它可以它既可以是Haar特征,也可以是LBP特征的分类器,可以加载OpenCV所提供的库当中的.xml文件,文件存放在anaconda\pkgs\libopencv-3.4.1-h875b8b8_3\Library\etc的haarcascades文件夹中,包含了许多个.

图像人脸检测(框出人脸、笑脸、眼睛)

1 # 通过图片识别人脸 2 3 #1.概述: 人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术.用摄像机或摄像头采集含有人脸的图像或视频流,并自动在图像中检测和跟踪人脸,进而对检测到的人脸进行脸部的一系列相关技术,通常也叫做人像识别.面部识别. 4 5 # 2.人脸识别步骤 6 # 1 人脸图像采集及检测 7 # 2 人脸图像预处理 8 # 3 人脸图像特征提取以及匹配与识别 9 10 # 3. 人脸识别的方法 11 # 在OpenCV中主要使用了两种特征(即两种方法)进行人脸检

Python学习经典案例:人脸检测

前言 随着科技的发展,人脸识别技术在许多领域得到的非常广泛的应用,手机支付.银行身份验证.手机人脸解锁等等. 识别 废话少说,这里我们使用 opencv 中自带了 haar人脸特征分类器,利用训练好的 haar 特征的 xml 文件,在图片上检测出人脸的坐标,利用这个坐标,我们可以将人脸区域剪切保存,也可以在原图上将人脸框出. 代码实现: # -*-coding:utf8-*-# import os import cv2 from PIL import Image, ImageDraw from