2016年4月8日 星期五

C++ 取得 特定資料夾下 的檔案名稱

利用 _findfirst 與 _findnext 完成

程式圖片:




程式碼:

#include <stdio.h>
#include <string.h>
#include <io.h> //c_file
#include <direct.h> 
#include <iostream>
using namespace std;
void main()
{
 char sdir[256], filter[256], path[256];
 struct _finddata_t c_file;
 intptr_t hFile;

 strcpy_s(sdir, "human");
 strcpy_s(filter, "*.jpg");

 _chdir(sdir);
 hFile = _findfirst(filter, &c_file);
 if (hFile != -1)
 {
  do {
   sprintf_s(path, "%s\\%s", sdir, c_file.name);
   cout << path<<endl;
  } while (_findnext(hFile, &c_file) == 0);
 }
 system("pause");
}


2016年4月7日 星期四

OpenCV 3.1 Face Recognition

OpenCV 3.1 人臉辨識

程式截圖:





請先將 openCV 內的訓練好的 xml 檔案放到主程式資料夾





程式碼:

#include <opencv\highgui.h>
#include <opencv\cv.h>
#include <opencv2\opencv.hpp>
using namespace std;
using namespace cv;

void detectAndDisplay(Mat);

String face_cascade_name = "haarcascade_frontalface_default.xml";
CascadeClassifier face_cascade;

int main()
{
 if (!face_cascade.load(face_cascade_name))
 {
  printf("--(!)Error loading\n");
  return -1;
 }
 Mat frame = imread("3.jpg", 1); //這裡請改你想放的圖片路徑
 imshow("image", frame);
 detectAndDisplay(frame);
 waitKey(0);
 return 0;
}
void detectAndDisplay(Mat frame)
{
 vector<Rect> faces;
 Mat frame_gray;

 cvtColor(frame, frame_gray, CV_BGR2GRAY);

 //-- Detect faces
 face_cascade.detectMultiScale(frame_gray, faces, 1.1, 2, 0 | CV_HAAR_SCALE_IMAGE, Size(10, 10));

 for (int i = 0; i < faces.size(); i++)
 {
  Point p1(faces[i].x, faces[i].y);
  Point p2(faces[i].x + faces[i].width, faces[i].y + faces[i].height);

  rectangle(frame, p1, p2, Scalar(0, 0, 255), 2, 0);
 }

 imshow("face detect", frame);
}