基於opencv3/C++ haar 特徵人臉檢測(源碼)
源碼:
#include "opencv2/opencv.hpp"
#include "opencv/cvaux.hpp"
using namespace std;
using namespace cv;
int main( int argc, char** argv)
{
if(argc != 2){
cout<<"NULL"<<endl;
return 0;
}
Mat src =imread(argv[1],-1);
if(src.empty()) return -1;
namedWindow("src",WINDOW_AUTOSIZE);
imshow("src",src);
CascadeClassifier face_cascade;
String file1 = "/data/haarcascades/haarcascade_frontalface_alt.xml";
if( !face_cascade.load(file1) )
{
printf("can not load the file... xml\n");
return -1;
}
vector<Rect> faces;
Mat gray_image;
cvtColor( src, gray_image, CV_BGR2GRAY );
//直方圖均衡化
equalizeHist( gray_image, gray_image );
face_cascade.detectMultiScale( gray_image, faces, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE, Size(1, 1) );
//框選出臉部區域
for (int i = 0; i < faces.size(); i++)
{
RNG rng(i);
Scalar color = Scalar(rng.uniform(0,255), rng.uniform(0,255), 20);
rectangle(src, faces[static_cast<int>(i)], color, 2, 8, 0);
}
imshow("face", src );
waitKey(0);
return 0;
}
實驗原圖1:
實驗原圖2:
實驗結果1:
實驗結果2: