【求助!!!】怎么利用opencv 选取“最近”的人脸 并对其进行一系列的操作

warm_in_spring 2016-08-04 05:42:31
通过打开摄像头 然后检测出了人脸 我的疑问是 当多人时,怎么让计算机来判断哪个人脸“最近”
我得想法是:多人时 通过矩形框 框出人脸 此时 矩形框面积最大的 就是最近的。但是 这里就有一个疑问了 怎么让计算机知道哪个最近呢?在框出人脸时 都是同时框出多个人脸 并没有一个东西来指明A、B、C(假设ABC是三个人脸)
有人知道怎么来确定“最近”吗?以下是我的部分代码


		Mat dst;
string string_temp;
stringstream stream;
for( size_t i = 0; i < faces.size(); i++ )
{
//Point center( int(faces[i].x + faces[i].width*0.5), int(faces[i].y + faces[i].height*0.5) );
//ellipse( imgcv, center, Size( int(faces[i].width*0.5), int(faces[i].height*0.5)), 0, 0, 360, Scalar( 255, 0, 255 ), 2, 8, 0 );
Rect rec(faces[i].x, faces[i].y, faces[i].width, faces[i].height);
cv::rectangle(imgcv, rec, Scalar(255, 0, 255), 1, 8, 0);

int int_temp=i;
stream<<int_temp;
string_temp=stream.str();
dst=imgcv(rec);
imshow(string_temp,dst);

}
...全文
230 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-08-08
  • 打赏
  • 举报
回复
矩形面积=矩形的长×矩形的宽
warm_in_spring 2016-08-08
  • 打赏
  • 举报
回复
谢谢各位了 问题已经解决了 以下是我选出最近人脸的代码
		Mat dst;
			string string_temp;
			stringstream stream;
			float recmax=99999999999;
			size_t j=0;
			for( size_t i = 0; i < faces.size(); i++ )
			{
				if(recmax>faces[i].area())
				{
					recmax=faces[i].area();
					j=i;
	
				}
			}
		
			Rect rec(faces[j].x, faces[j].y, faces[j].width, faces[j].height);
			cv::rectangle(imgcv, rec, Scalar(255, 0, 0), 1, 8, 0);
lx624909677 2016-08-08
  • 打赏
  • 举报
回复
faces[i].width*faces[i].height就是面积了把。这个结果最大的,应该就是人脸也最大的
lx624909677 2016-08-08
  • 打赏
  • 举报
回复
引用 6 楼 warm_in_spring 的回复:
[quote=引用 5 楼 lx624909677 的回复:] 那你画矩形怎么画?矩形不是你自己用代码去画上去的吗?
    Rect rec(faces[i].x, faces[i].y, faces[i].width, faces[i].height);
    cv::rectangle(imgcv, rec, Scalar(255, 0, 255), 1, 8, 0);
这是我画矩形的代码。。 [/quote] 你的代码中的rec不就已经是矩形了吗?算这个矩形的大小就可以了
penghuahuijuan 2016-08-07
  • 打赏
  • 举报
回复
面积大的那个矩形所对应位置的人脸就是最近的
shiter 2016-08-06
  • 打赏
  • 举报
回复
怎么让计算机知道? 算一下矩形的面积不行么?
warm_in_spring 2016-08-05
  • 打赏
  • 举报
回复
引用 5 楼 lx624909677 的回复:
那你画矩形怎么画?矩形不是你自己用代码去画上去的吗?
    Rect rec(faces[i].x, faces[i].y, faces[i].width, faces[i].height);
    cv::rectangle(imgcv, rec, Scalar(255, 0, 255), 1, 8, 0);
这是我画矩形的代码。。
lx624909677 2016-08-05
  • 打赏
  • 举报
回复
那你画矩形怎么画?矩形不是你自己用代码去画上去的吗?
warm_in_spring 2016-08-05
  • 打赏
  • 举报
回复
引用 3 楼 lx624909677 的回复:
不是已经有矩形框来标注人脸了吗,看哪个框大不就是脸大了吗
可是 怎么让计算机知道呢??
lx624909677 2016-08-05
  • 打赏
  • 举报
回复
不是已经有矩形框来标注人脸了吗,看哪个框大不就是脸大了吗
warm_in_spring 2016-08-05
  • 打赏
  • 举报
回复
那请问 怎么选取“最大”的人脸呢?? 还是那个问题 怎么让计算机 区别在这个区域里 A,B,C 三人?
赵4老师 2016-08-05
  • 打赏
  • 举报
回复
通常最大的那个脸就是最近的;但不排除有的人天生脸大。 不然上kinect?

19,469

社区成员

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

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