图片人脸检测 (II)【ch13】

简介:

ch13

运行效果同样good:

//人脸检测

#include <opencv2/opencv.hpp>
#include <cstdio>
#include <cstdlib>
#include <Windows.h>

using namespace std;

int main()
{
	// 加载Haar特征检测分类器
	// haarcascade_frontalface_alt.xml系OpenCV自带的分类器 下面是我机器上的文件路径
	const char *pstrCascadeFileName = "D:\\Program Files\\opencv\\data\\haarcascades\\haarcascade_frontalface_alt.xml";
	CvHaarClassifierCascade *pHaarCascade = NULL;
	pHaarCascade = (CvHaarClassifierCascade*)cvLoad(pstrCascadeFileName);

	// 载入图像
	const char *pstrImageName = "005.jpg";
	IplImage *pSrcImage = cvLoadImage(pstrImageName, CV_LOAD_IMAGE_UNCHANGED);

	IplImage *pGrayImage = cvCreateImage(cvGetSize(pSrcImage), IPL_DEPTH_8U, 1); //变成灰度图像
	cvCvtColor(pSrcImage, pGrayImage, CV_BGR2GRAY);

	// 人脸识别与标记
	if (pHaarCascade != NULL)
	{
		//用不同的颜色标记人脸
		CvScalar FaceCirclecolors[] = 
		{
			{{0, 0, 255}},
			{{0, 128, 255}},
			{{0, 255, 255}},
			{{0, 255, 0}},
			{{255, 128, 0}},
			{{255, 255, 0}},
			{{255, 0, 0}},
			{{255, 0, 255}}
		};

		CvMemStorage *pcvMStorage = cvCreateMemStorage(0);
		cvClearMemStorage(pcvMStorage);
		// 识别
		DWORD dwTimeBegin, dwTimeEnd;
		dwTimeBegin = GetTickCount();
		CvSeq *pcvSeqFaces = cvHaarDetectObjects(pGrayImage, pHaarCascade, pcvMStorage);
		dwTimeEnd = GetTickCount();

		printf("人脸个数: %d   识别用时: %d ms\n", pcvSeqFaces->total, dwTimeEnd - dwTimeBegin);

		// 标记
		for(int i = 0; i <pcvSeqFaces->total; i++)
		{
			CvRect* r = (CvRect*)cvGetSeqElem(pcvSeqFaces, i);
			CvPoint center;
			int radius;
			center.x = cvRound((r->x + r->width * 0.5));
			center.y = cvRound((r->y + r->height * 0.5));
			radius = cvRound((r->width + r->height) * 0.25);
			cvCircle(pSrcImage, center, radius, FaceCirclecolors[i % 8], 2);
		}
		cvReleaseMemStorage(&pcvMStorage);
	}

	const char *pstrWindowsTitle = "人脸识别";

	cvNamedWindow(pstrWindowsTitle, CV_WINDOW_AUTOSIZE);
	cvShowImage(pstrWindowsTitle, pSrcImage);

	cvWaitKey(0);

	cvDestroyWindow(pstrWindowsTitle);
	cvReleaseImage(&pSrcImage);	
	cvReleaseImage(&pGrayImage);
	return 0;
}




相关文章
|
3月前
使用BASE64方式进行人脸检测
【8月更文挑战第2天】使用BASE64方式进行人脸检测。
65 3
|
5月前
|
存储 编解码 API
【图像文本化】Base64编解码OpenCV4中 Mat 对象
【图像文本化】Base64编解码OpenCV4中 Mat 对象
86 0
|
5月前
|
监控 安全 计算机视觉
实战 | 18行代码轻松实现人脸实时检测【附完整代码与源码详解】Opencv、人脸检测
实战 | 18行代码轻松实现人脸实时检测【附完整代码与源码详解】Opencv、人脸检测
|
6月前
|
文字识别 数据挖掘 网络安全
Python实现avif图片转jpg格式并识别图片中的文字
在做数据分析的时候有些数据是从图片上去获取的,这就需要去识别图片上的文字。Python有很多库可以很方便的实现OCR识别图片中的文字。这里介绍用EasyOCR库进行图片文字识别。easyocr是一个比较流行的库,支持超过80种语言,识别率高,速度也比较快。
127 2
|
6月前
|
计算机视觉 Python
OpenCV为图像扩边(填充)
OpenCV为图像扩边(填充)
65 0
|
算法 数据安全/隐私保护 计算机视觉
用 OpenCV 去除图片中的水印,骚操作!
这两天在 Stackoverflow 上面看到了一个有趣的案例,是关于OpenCV 的一个讨论,讨论的主题就是如何用 OpenCV 来去除下面图片中的水印,原图如下;
用 OpenCV 去除图片中的水印,骚操作!
|
计算机视觉
CV:利用cv2自带两步法haarcascade_frontalcatface.xml实现对猫脸检测
CV:利用cv2自带两步法haarcascade_frontalcatface.xml实现对猫脸检测
CV:利用cv2自带两步法haarcascade_frontalcatface.xml实现对猫脸检测
|
计算机视觉
CV之FR:DIY脚本通过人脸图像得到人脸特征向量并输出多张人脸图片之两两图片之间的距离
CV之FR:DIY脚本通过人脸图像得到人脸特征向量并输出多张人脸图片之两两图片之间的距离
CV之FR:DIY脚本通过人脸图像得到人脸特征向量并输出多张人脸图片之两两图片之间的距离
|
数据采集 机器学习/深度学习 算法
CV:基于face库利用cv2调用摄像头(或视频)根据人脸图片实现找人(先指定要识别已知人脸的文件夹转为numpy_array+输入新图片遍历已有numpy_array)
CV:基于face库利用cv2调用摄像头(或视频)根据人脸图片实现找人(先指定要识别已知人脸的文件夹转为numpy_array+输入新图片遍历已有numpy_array)
CV:基于face库利用cv2调用摄像头(或视频)根据人脸图片实现找人(先指定要识别已知人脸的文件夹转为numpy_array+输入新图片遍历已有numpy_array)
|
算法 计算机视觉
《Learning OpenCV3》ch18:相机模型与标定
省赛期间用到双目视觉的时候,只是很粗浅地调用了下API,毕竟初学而且时间紧迫。最近打算跟一个硕士生再做一个相关项目,而且也想用Stereo Vision作为毕业设计,所以很有必要了解一下其中的原理。
3158 0