1. 程式人生 > >清晰度檢測照片演算法

清晰度檢測照片演算法

清晰度檢測照片演算法

功能:可以從一個指定的資料夾中讀取照片,然後轉為灰度影象等處理,然後把處理的虹膜影象進行分類,清晰的影象儲存在一個資料夾中,不清晰的虹膜影象也存在一個資料夾中,資料夾中影象的下標從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張:
在這裡插入圖片描述

然後執行程式碼,效果如下圖:
在這裡插入圖片描述

然後檢視,自己新建的資料夾中影象的儲存情況!:
在這裡插入圖片描述

在這裡插入圖片描述

結果成功!清晰度檢測是虹膜檢測的第一步,用演算法程式幫自己篩選清晰度不合格的影象!然後不合格的影象上自己可以加一句話告訴別人這個影象的清晰度多少,而合格的影象,只是清晰度達到了要求,裡面也有一些斜眼閉眼的情況,還需要進一步的處理,比如篩選斜眼的情況等,所以這些清晰度合格的影象就不再需要加一句話顯示影象的清晰度的值了!