zoukankan      html  css  js  c++  java
  • 人眼定位识别

    • 本系列历程启发于“禾路老师”的视频课程,学习到两个重要知识点:实战和自己的库!
    • 本系列历程多源于answer.opencv论坛的一些牛人的解答,作为小白只是代码的搬运工。

    言归正传,请看项目要求:

    • 求取找到人眼位置
    • 根据人眼特征确定
    • 简单的小例子,实用价值不大,但是对于其他项目有帮助!

    思路分析一:

    • 利用黑色特征进行筛选
    • 然后根据眼睛是成对出现,再进一步帅选

    思路分析二:

    • 利用拉普拉斯金字塔对人进行特征提取
    • 提取之后利用眼睛位置很亮进行帅选
    • 当然也可以根据眼睛大概的位置进行帅选,如:脸部、成对出现、周围是白色眼珠。。。。

    代码实现:

    • 本博文利用第二种方法,识别精度和效率较高
    1. 去拉普拉斯金字塔,自己手动构造。
    2. 利用眼睛特征进行筛选
    #include <opencv2/opencv.hpp>
    #include <iostream>
    using namespace std;
    using namespace cv;
    
    int main(int argc, const char** argv)
    {
    	Mat matFrontFace = imread("abc.png");
    	Mat gray; Mat temp;
    	double minPixelValue, maxPixelValue;
    	Point minPixelPoint, maxPixelPoint;
    	cvtColor(matFrontFace, gray, COLOR_BGR2GRAY);
    	// Laplacian pyramid
    	pyrDown(gray, temp);
    	pyrUp(temp, temp);
    	temp = gray - temp;
    	// 找两个最亮的地方,且距离不能低于一个阈值
    	size_t count = 0;
    	vector<Point2i> point;
    	do
    	{
    		//寻找最大值
    		minMaxLoc(temp, &minPixelValue, &maxPixelValue, &minPixelPoint, &maxPixelPoint);
    		if (count == 0)
    		{
    			point.push_back(maxPixelPoint);
    			circle(matFrontFace, maxPixelPoint, 10, Scalar(0, 0, 255), 2);
    			temp.at<uchar>(maxPixelPoint.y, maxPixelPoint.x) = 0;
    			count++;
    		}
    		else
    		{
    			//---两只眼睛高度差别低于5,距离在35-100之内
    			float dis = sqrt(pow(maxPixelPoint.x - point[0].x, 2) + pow(maxPixelPoint.y - point[0].y, 2));
    			if (dis > 35 && dis<100 && abs(maxPixelPoint.y - point[0].y)<5)
    			{
    				point.push_back(maxPixelPoint);
    				circle(matFrontFace, maxPixelPoint, 10, Scalar(0, 0, 255), 2);
    				count++;
    			}
    			else
    			{
    				temp.at<uchar>(maxPixelPoint.y, maxPixelPoint.x) = 0;
    			}
    		}
    	} while (count!=2);
    	
    }
    

    人眼定位结果图

    拉普拉斯金字塔

    参考资料:

  • 相关阅读:
    CCF CSP 201709-1 打酱油 (贪心)
    CCF CSP 201712-1 最小差值
    CCF CSP 201612-1 中间数
    CCF CSP 201609-1 最大波动
    CCF CSP 201604-1 折点计数
    CCF CSP 201512-1 数位之和
    CCF CSP 201509-1 数列分段
    CCF CSP 201503-1 图像旋转 (降维)
    CCF CSP 201412-1 门禁系统
    CCF CSP 201409-1 相邻数对
  • 原文地址:https://www.cnblogs.com/wjy-lulu/p/9162044.html
Copyright © 2011-2022 走看看