通过Opencv自带的Haar检测并框出的人脸如何单独输出

persimmonunderhill 2015-10-16 04:56:12
如题所述,目前程序可以通过摄像头检测并框出人脸。
我现在想把检测到的人脸区域截出,做进一步处理
请问如何能够做到把检测到的人脸区域图像单独输出,
如果能够提供示范将不胜感激~!求各位大神指导
...全文
786 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lingzhaoli 2017-11-06
  • 打赏
  • 举报
回复
在rectangle语句下面添加Mat image_cut=frame(cvRect(x,y,w,h)) ,然后显示使用imshow,保存使用imwrite("文件名", image_cut)
_qwerty 2017-03-07
  • 打赏
  • 举报
回复
您好,请问您最后是怎么解决的,可以分享一下么
persimmonunderhill 2015-10-16
  • 打赏
  • 举报
回复
大神们帮帮忙哇,实在是弄不出来
persimmonunderhill 2015-10-16
  • 打赏
  • 举报
回复
using namespace cv;
using namespace std;

string face_cascade_name = "haarcascade_frontalface_alt.xml";
CascadeClassifier face_cascade;
string window_name = "人脸识别";

void detectAndDisplay(Mat frame){
	std::vector<Rect> faces;
	Mat frame_gray;

	cvtColor(frame, frame_gray, CV_BGR2GRAY);
	equalizeHist(frame_gray, frame_gray);

	face_cascade.detectMultiScale(frame_gray, faces, 1.1, 2, 0 | CV_HAAR_SCALE_IMAGE, Size(40, 40));

	for (int i = 0; i < faces.size(); i++){

		Point pt1(faces[i].x + faces[i].width, faces[i].y + faces[i].height);
		Point pt2(faces[i].x, faces[i].y);

		rectangle(frame, pt1, pt2, cvScalar(255, 0, 0, 0), 3, 8, 0);

	}

	imshow(window_name, frame);
}

int main(int argc, char* argv[])
 {
	VideoCapture cap(0);
	if (!cap.isOpened())
		return -1;

	Mat edges;

	if (!face_cascade.load(face_cascade_name)){         //( !eyes_cascade.load(eyes_cascade_name)){ 
		printf("无法加载级联分类器文件!\n");
		return -1;
	}
	int nTick = 0;
	for (;;)
	{
		if (!cap.isOpened())
		{
			continue;
		}
		Mat frame;
		nTick = getTickCount();
		cap >> frame;  // get a new frame from camera  
		if (frame.data == NULL)
		{
			continue;
		}
		cvtColor(frame, edges, CV_BGR2BGRA);
		
		detectAndDisplay(edges);


		if (waitKey(30) >= 0) break;
	}
	return 0;
}
你好,我的程序是这样的,请问要加在哪里呢?
lx624909677 2015-10-16
  • 打赏
  • 举报
回复
假设Mat src里是放着一张有人脸的图片,人脸区域你已经知道了,那么人脸可以从src中这样截取Mat temp = src(Rect(x,y,width,height));其中Rect里面的四个参数分别代表人脸图像的起点x,起点y,人脸区域长,人脸区域宽,之后temp里就是你的人脸了!
        人脸美颜美型是十分常见的图像处理功能,应用于手机拍照、视频直播、视频会议等图像视频流处理领域。如下图所示是一款拍照软件中针对人脸美颜美型功能的具体介绍。        人脸美颜美型是一个综合性较高的算法,包括基于机器学习的人脸与关键点检测,与常见传统图像处理方法,如图像滤波,图像融合,形态学操作、图像变形等。每一个知识点都涉及某个研究领域,具有较高的算法学习与工程实践意义。        同时由于当前视频直播的火热,以及疫情下线上会议办公的更加流行,都使人脸美颜美型方面的应用需求越发强烈;相对应的很多公司都设立了着重研发美颜美型算法的开发岗位。在这种背景下如果具有人脸美颜美型算法相关的开发与应用经验,将会有力地提高就业/工作竞争力。        鉴于此,笔者设计了一套基于OpenCV实现一套比较完整的人脸美颜美型算法的课程,将实现包括磨皮、美白、大眼、瘦脸、下巴收放、瘦鼻等功能,算法效果如下几张动图所示。        课程框架如下图所示,我们将从开发环境搭建到每个子功能的实现逐一讲解,详细介绍每项功能的需求分析、功能定义与原理设计。        在开发该套算法的过程中我们将学习并应用如人脸及关键点检测、肤色检测、图像滤波、图像提亮、图像融合、图像变形、图像插值等知识点。因此这将是一个复杂度较高,同时干货满满的实战课程。        通过该课程的学习,你将了解从零开始开发一套人脸美颜美型算法的过程,并通过项目实战掌握其中涉及的各个图像处理领域的知识点。更重要的是,课程中通过需求分析——功能定义——原理设计——编程实战的流程来让你掌握比较复杂的图像算法开发流程剖析与实施的技能,这将会在你后续的科研/项目开发过程中发挥更大的作用。        这里使用Windows平台,基于VS2015与OpenCV3.4.6版本进行代码开发,对学习者相对更容易上手与代码调试。课程资料包括视频、PPT与源码,均提供下载学习;学习过程中若遇到问题可通过学习网站交流通道提问,作者将尽力及时解答。

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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