把检测出的人脸用椭圆画出

把检测出的人脸用椭圆画出。使用opencv中自带的haarcascades

#include "opencv2/core/core.hpp"
#include "opencv2/objdetect/objdetect.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp" 

#include <iostream>
#include <stdio.h> 

using namespace std;
using namespace cv;
string face_cascade_name = "D:\\opencv\\sources\\data\\haarcascades\\haarcascade_frontalface_alt.xml";
//该文件存在于OpenCV安装目录下的\sources\data\haarcascades内,需要将该xml文件复制到当前工程目录下
CascadeClassifier face_cascade;
void detectAndDisplay(Mat frame);
int main(int argc, char** argv){
	Mat image;
	image = imread("E:\\Work\\libfacedetection-master\\11.jpg", 1);  //当前工程的image目录下的mm.jpg文件,注意目录符号
	if (!face_cascade.load(face_cascade_name)){
		printf("级联分类器错误,可能未找到文件,拷贝该文件到工程目录下!\n");
		return -1;
	}
	detectAndDisplay(image); //调用人脸检测函数
	waitKey(0);
	//暂停显示一下。
}

void detectAndDisplay(Mat face){
	std::vector<Rect> faces;
	Mat face_gray;

	cvtColor(face, face_gray, CV_BGR2GRAY);  //rgb类型转换为灰度类型
	equalizeHist(face_gray, face_gray);   //直方图均衡化

	face_cascade.detectMultiScale(face_gray, faces, 1.1, 2, 0 | CV_HAAR_SCALE_IMAGE, Size(1, 1));

	for (int i = 0; i < faces.size(); i++){
		Point center(faces[i].x + faces[i].width*0.5, faces[i].y + faces[i].height*0.5);
		ellipse(face, center, Size(faces[i].width*0.5, faces[i].height*0.5), 0, 0, 360, Scalar(255, 0, 0), 2, 7, 0);
	}
	namedWindow("人脸检测", CV_WINDOW_NORMAL);
	imshow("人脸检测", face);
}

Ellipse

绘制椭圆圆弧和椭圆扇形。

void cvEllipse( CvArr* img, CvPoint center, CvSize axes, double angle,
                double start_angle, double end_angle, CvScalar color,
                int thickness=1, int line_type=8, int shift=0 );

C++: void ellipse(Mat&img, Pointcenter, Size axes, doubleangle, doublestartAngle,
double endAngle, const Scalar&color, intthickness=1, int lineType=8, intshift=0)

C++: void ellipse(Mat&img, const RotatedRect&box, const Scalar& color, int thickness=1,
intlineType=8)

img
图像。
center
椭圆圆心坐标。
axes
轴的长度。
angle
偏转的角度。
start_angle
圆弧起始角的角度。.
end_angle
圆弧终结角的角度。
color
线条的颜色。
thickness
线条的粗细程度。
line_type
线条的类型,见CVLINE的描述。
shift
圆心坐标点和数轴的精度。
时间: 2024-11-02 09:33:38

把检测出的人脸用椭圆画出的相关文章

如何用css画出三角形

看到有面试题里会有问到如何用css画出三角形 众所周知好多图形都可以拆分成三角形,所以说会了画三角形就可以画出很多有意思的形状 画出三角形的原理是调整border(边框)的四个方向的宽度,线条样式以及颜色. 如果你将宽度调的足够大,改变不同方向的颜色,你就可以发现盒模型的border是四个梯形一样的线条. 这个时候如果将盒模型内部的height,width调为0px,则三角形就形成了. 1 border:100px solid transparent //边框100px,实线,透明颜色,下面三行

运用椭圆画法,45行代码画出任意正多边形

最近做Box2dWeb开发时,想写个创建正多边形的功能,可是由于学识尚浅,我在草稿纸上画了,想了一个上午也没有研究出什么好方法.后来翻抽屉的时候,找出了以前哥哥画的一张用同心圆画椭圆的示意图.看到这幅画,我不禁在想椭圆不就是一个N边形吗?圆不就是一个正N边形吗?如果把两个同心圆的半径设定为相等,画出来的椭圆不就是一个圆吗?因此,我立刻开始实验.原本我以为比较难,会用到圆的解析式之类的,没想到就45行代码就搞定了,主要用到的数学知识就是sin和cos. 也许有人不明白如何用同心圆画椭圆,我就借用网

第三十七节、人脸检测MTCNN和人脸识别Facenet

在说到人脸检测我们首先会想到利用Harr特征提取和Adaboost分类器进行人脸检测(有兴趣的可以去一看这篇博客第九节.人脸检测之Haar分类器),其检测效果也是不错的,但是目前人脸检测的应用场景逐渐从室内演变到室外,从单一限定场景发展到广场.车站.地铁口等场景,人脸检测面临的要求越来越高,比如:人脸尺度多变.数量冗大.姿势多样包括俯拍人脸.戴帽子口罩等的遮挡.表情夸张.化妆伪装.光照条件恶劣.分辨率低甚至连肉眼都较难区分等.在这样复杂的环境下基于Haar特征的人脸检测表现的不尽人意.随着深度学

Python3 Tkinter基础 Canvas bind 绑定左键 鼠标左键点击时,在当前位置画出一个椭圆形

镇场诗: 清心感悟智慧语,不着世间名与利.学水处下纳百川,舍尽贡高我慢意. 学有小成返哺根,愿铸一良心博客.诚心于此写经验,愿见文者得启发.------------------------------------------ code: from tkinter import * root=Tk() w=Canvas(root,width=200,height=200,background='white') w.pack() def paint(event): #event.x 鼠标左键的横坐标

SVG技术入门:如何画出一条会动的线

我喜欢用图画.图表来演示流程信息或浏览器的操作过程,但大量的图片有时候也会很不方便.在我的一个关于应用缓存和缓存方法的演讲中,我让屏幕首先空白,然后各种图表按照我的演讲内容自己一点一点的画出来.下面就是我如何用SVG技术在浏览器里实现这种效果的. SVG里的路径(path) SVG里用来定义路径的格式堪比正则表达式的怪异: <path fill="none" stroke="deeppink" stroke-width="14" strok

如何在论文中画出漂亮的插图?

知乎用户的回答(1259票)]: 强烈推荐 Python 的绘图模块 matplotlib: python plotting .画出来的图真的是高端大气上档次,低调奢华有内涵~ 适用于从 2D 到 3D,从标量到矢量的各种绘图.能够保存成从 eps, pdf 到 svg, png, jpg 的多种格式.并且 Matplotlib 的绘图函数基本上都与 Matlab 的绘图函数名字都差不多,迁移的学习成本比较低.开源免费.如图所示(题目描述中的图在最后): (以下图片均引用自 Thumbnail

[转]html5 Canvas画图教程(9)—canvas中画出矩形和圆形

本文讲一下在canvas中画出矩形和圆形的办法,他们属于基础图形.当然,基础图形本来不止他们,但在canvas中,只有画矩形与圆形不需要用其他方法模拟. canvas画矩形 1,fillRect与strokeRect fillRect可以直接填充出一个矩形,填充样式是你当前设置的样式:同理strokeRect就是直接描边一个矩形 他们的参数是一致的,依次是(起点x坐标,起点y,矩形的宽,矩形的高).这里的起点,注意,是指矩形的左上角那个点. 我们通常用他们来做简单的事,他们也只能做简单的事.为什

在资源里面画出你的界面

在资源里面画出你的界面.在添加类.然后在视图里定义这个类的指针,DIALOG的指针,还有就是区域对象, 如下Cwindows *tw;  CRect m_cle;CDialogEx *ph;在CPP文件构造函数里初始化ZeroMemory(&m_cle,sizeof(m_cle));tw = new Cwindows(this);:在重写OnCreate(LPCREATESTRUCT lpCreateStruct)函数在里面加上 { if (CView::OnCreate(lpCreateStr

全面总结:MATLAB如何画出漂亮的图

在绘图命令中应该如何确定横坐标和纵坐标的标度尺寸(自己定范围) 如何在一个坐标中绘制多条曲线,并用不同的颜色区别. 希望得到答案,谢谢!!!!!!!!!!! help plot help axis axis ('xlabel','ylabel') a1=plot(); hlod on a2=plot(); legend([a1 a2],'图1名',‘图2名') hold off 还可以更多 x1=-pi:pi/12:pi; x2=-pi:pi/12:pi; y1=sin(x1); y2=cos(