清晰度检测照片算法
功能:可以从一个指定的文件夹中读取照片,然后转为灰度图像等处理,然后把处理的虹膜图像进行分类,清晰的图像存储在一个文件夹中,不清晰的虹膜图像也存在一个文件夹中,文件夹中图像的下标从1开始递增,也可以自己修改代码吧原始图像的编号原封不动的进行保存。
连续读取照片(下标连续!)和保存连续多张照片(自己写的代码效果是连续的!)
代码如下:
#include <highgui/highgui.hpp>
#include <imgproc/imgproc.hpp>
#include <iostream>
#include <string>
#include<iostream>
#include <sstream>
using namespace std;
using namespace cv;
int main()
{
//定义转化后的图像
Mat imageGrey;
char buffer[6000]; //左右眼虹膜图像 各3000 定义大一点
int m=1;
int n=1;
for(int i=1;i<3000;i++)
{
sprintf(buffer,"E:\\zqx\\L\\%d.bmp",i); //u盘中的一个文件夹
Mat imageSource=imread(buffer);
//转灰度图像处理
cvtColor(imageSource, imageGrey, CV_RGB2GRAY); //转化成灰度图像
Mat imageSobel; //soble算子
Laplacian(imageGrey, imageSobel, CV_16U); //把灰度图像 拉普拉斯操作后 图像名字为imagesoble 为了避免数据溢出 图像深度为CV_16U
//图像的平均灰度
double meanValue = 0.0;
meanValue = mean(imageSobel)[0]; //imagesoble图像 的平均灰度为0
//定义字符流 输出字符
stringstream meanValueStream;
string meanValueString;
meanValueStream << meanValue;
meanValueStream >> meanValueString;
meanValueString = "Articulation(Laplacian Method): " + meanValueString;
if(meanValue<2.4) //自己可以定义阈值
{
printf("图像不合格,太模糊");
printf("\n");
putText(imageSource, meanValueString, Point(20, 50), CV_FONT_HERSHEY_COMPLEX, 0.8, Scalar(255, 255, 25), 2);
imshow("不合格的图像", imageSource);
waitKey(50);
stringstream ss;
ss<<m;
string savepath="C:\\不合格的图像\\"+ss.str()+".bmp";
imwrite(savepath,imageSource);
m++;
}
else
{
printf("图像合格 ");
printf("\n");
//各参数依次是:照片/添加的文字/左上角坐标/字体/字体大小/颜色/字体粗细 Scalar(255, 255, 255)是白色字体 Scalar(0,0, 0)是黑色字体 顺序b g r cv.color是 r g b顺序
//putText(imageSource, meanValueString, Point(20, 50), CV_FONT_HERSHEY_COMPLEX, 0.8, Scalar(255, 255, 25), 2);
imshow("合格的图像", imageSource);
waitKey(50);
stringstream ss;
ss<<n;
string savepath="C:\\合格的图像\\"+ss.str()+".bmp";
imwrite(savepath,imageSource);
n++;
}
}
return 0;
}
测试我就不贴上去了,不好截屏。 效果就是两个新建的文件夹下都有图片,合格和不合格的照片,下标都是从1开始递增。注释也比较全,比较好理解。
e盘的虹膜库 左右眼各3000张:
然后运行代码,效果如下图:
然后查看,自己新建的文件夹中图像的保存情况!:
结果成功!清晰度检测是虹膜检测的第一步,用算法程序帮自己筛选清晰度不合格的图像!然后不合格的图像上自己可以加一句话告诉别人这个图像的清晰度多少,而合格的图像,只是清晰度达到了要求,里面也有一些斜眼闭眼的情况,还需要进一步的处理,比如筛选斜眼的情况等,所以这些清晰度合格的图像就不再需要加一句话显示图像的清晰度的值了!