睁眼 闭眼 眯眼检测算法

睁眼 闭眼 眯眼检测算法

功能:
能够实现循环的读入一连串连续的图像,图像的下标一定要连续!然后读入图像进行一些列的处理,具体什么操作看代码!然后对虹膜图像进行霍夫圆画图操作,看是1.5的反比能画霍夫圆还是2的时候能够画霍夫圆,检测i=1还是i=0或者i大于1 判断画了几条霍夫圆,从而判断出来是闭眼还是睁眼,还是眯眼! 然后把检测的图像进行保存,分别把闭眼眯眼睁眼的虹膜图像保存在文件中,下标从1开始递增。

代码如下:

#include 
#include 
#include 
#include 
#include 
#include   
#include   
#include 
#include 
using namespace cv;
using namespace std;

int main()
{
	Mat midImage,dstImage,edge;
	char buffer[200];
	//char imgPath[200] ;
	int radius=0;
	int k=1;
	int m=1;
	int n=1;

	 
	for(int j=1;j<8;j++)//通过for循环对每个图片 霍夫圆检测
	{
		int i=0;
	 
	
		//sprintf函数的功能与printf函数的功能基本一样,只是它把结果输出到指定的字符串中了
		//sprintf(buffer,"%d.bmp",j);
		sprintf(buffer,"C:\\Iris1\\%d.bmp",j);
		//strcpy(imgPath,buffer);    //strcpy把从src地址开始且含有'\0'结束符的字符串复制到以dest开始的地址空间,返回值的类型为char*。
		//printf("%s",imgPath);
		Mat srcImage = imread(buffer);

		threshold(srcImage, srcImage, 30, 200.0, CV_THRESH_BINARY);//二值化
		cvtColor(srcImage,midImage,COLOR_BGR2GRAY);
		blur(midImage,edge,Size(3,3));
		Canny(edge,edge,3,9,3);
		GaussianBlur(midImage,midImage,Size(9,9),2,2);
		vector circles;
		HoughCircles(midImage,circles,CV_HOUGH_GRADIENT,1.5,10,200,100,0,0); //1.5 反比  
		for( i=0;i=1)
		{
			printf("睁眼");
			imshow("效果图",srcImage);
			printf("\n");
		    waitKey(500);
			stringstream ss;
		
			ss< circles;
			HoughCircles(midImage,circles,CV_HOUGH_GRADIENT,2,10,200,100,0,0);  //2 反比  代表是二分之一  也就是图像的一半
			for( i=0;i=1)
				  {
					printf("咪眼");
					imshow("效果图",srcImage);
					printf("\n");
		            waitKey(500);
					stringstream ss;
			        ss<

结果如下:
新建三个文件夹:
睁眼 闭眼 眯眼检测算法_第1张图片

在Iris1文件夹中存储的七张虹膜图像待处理,下标需要连续!
在这里插入图片描述

运行时候的效果图!
睁眼 闭眼 眯眼检测算法_第2张图片

结果: 看文件夹中有没有保存成功。
NILL1文件夹中:
睁眼 闭眼 眯眼检测算法_第3张图片
NILL2文件夹中:
睁眼 闭眼 眯眼检测算法_第4张图片
NILL3文件夹中:
睁眼 闭眼 眯眼检测算法_第5张图片

这样,虹膜图像的睁眼闭眼眯眼就算成功了。

你可能感兴趣的:(opencv,虹膜识别,机器学习,opencv)