opencv 얼굴 인식 opencv 얼굴 매 칭 분석

7916 단어 opencv얼굴 인식
기계 학습 기계 학습 의 목적 은 데 이 터 를 정보 로 바 꾸 는 것 이다.기계 학습 은 데이터 에서 규칙 이나 패턴 을 추출 하여 데 이 터 를 정보 로 전환시킨다.얼굴 인식 얼굴 인식 은 등급 별 분류 기 를 통 해 특징 에 대한 등급 별 선별 을 통 해 얼굴 여 부 를 확인한다.각 노드 의 정확 한 식별 율 은 매우 높 지만 정확 한 거절 율 은 매우 낮다.어떤 노드 가 사람의 얼굴 특징 이 없다 고 판단 하면 연산 을 끝내 고 사람의 얼굴 이 아니 라 고 선포 한다.모든 노드 가 통과 되면 얼굴 임 을 선포 한다.산업 에 서 는 얼굴 인식 기술 로 물 체 를 인식 한다.그림 을 식별 하 는
 
#include "opencv2/core/core.hpp"
#include "opencv2/objdetect/objdetect.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"

#include <iostream>
#include <stdio.h>

using namespace std;
using namespace cv;

string face_cascade_name = "haarcascade_frontalface_alt.xml";
CascadeClassifier face_cascade;
string window_name = " ";

void detectAndDisplay( Mat frame );

int main( int argc, char** argv ){
Mat image;
image = imread( argv[1]);

if( argc != 2 || !image.data ){
printf("[error]
");
return -1;
}

if( !face_cascade.load( face_cascade_name ) ){
printf("[error] !
");
return -1;
}

detectAndDisplay(image);

waitKey(0);
}

void detectAndDisplay( Mat frame ){
std::vector<Rect> faces;
Mat frame_gray;

cvtColor( frame, frame_gray, CV_BGR2GRAY );
equalizeHist( frame_gray, frame_gray );

face_cascade.detectMultiScale( frame_gray, faces, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE, Size(30, 30) );

for( int i = 0; i < faces.size(); i++ ){
Point center( faces[i].x + faces[i].width*0.5, faces[i].y + faces[i].height*0.5 );
ellipse( frame, center, Size( faces[i].width*0.5, faces[i].height*0.5), 0, 0, 360, Scalar( 255, 0, 255 ), 4, 8, 0 );
}

imshow( window_name, frame );
}
Cascade Classifier 류 class Cascade Classifier 는 물체 의 직렬 분류 기 류 를 검사 하 는 데 사용 된다.Cascade Classifier::Cascade Classifier 는 파일 에서 분류 기 를 읽 습 니 다.C++:CascadeClassifier::CascadeClassifier(const string&filename)인자 filename C 에서 분류 기 파일 을 읽 을 파일 이름
매개 변수
filename C 에서 분류 기 파일 을 읽 을 파일 이름 Cascade Classifier::empty 분류 기 가 불 러 왔 는 지 확인 합 니 다.C++:bool Cascade Classifier::empty()const Cascade Classifier::load 는 파일 에서 분류 기 를 읽 습 니 다.C++:bool CascadeClassifier::load(const string&filename)인자 filename C 에서 분류 기 파일 을 읽 을 파일 이름 입 니 다.파일 은 기 존 HAAR 분류 기 모델 일 수도 있 고 새 분류 기 모델 일 수도 있 습 니 다.
매개 변수
filename C 에서 분류 기 파일 을 읽 을 파일 이름 입 니 다.파일 은 기 존 HAAR 분류 기 모델 일 수도 있 고 새 분류 기 모델 일 수도 있 습 니 다.Cascade Classifier::read 는 파일 저장 노드 의 분류 기 를 읽 습 니 다.C++:bool Cascade Classifier::read(const FileNode&node)Cascade Classifier::detectMultiScale 은 서로 다른 크기 의 입력 이미 지 를 물체 인식 하고 식 별 된 물체 의 행렬 목록 을 되 돌려 줍 니 다.C++: void CascadeClassifier::detectMultiScale(const Mat& image, vector& objects, double scaleFactor=1.1, int minNeighbors=3, int flags=0, Size minSize=Size(), Size maxSize=Size()) 
매개 변수
  • image C 검 측 이 필요 한 CV8U 입력 매트릭스.
  • objects C 출력 vector 캐리어 용 기 는 식 별 된 물체 행렬 을 저장 하 는 데 사 용 됩 니 다.
  • scaleFactor C 는 각 그림 의 축소 비율의 인 자 를 지정 합 니 다.
  • minNeighbors C 는 각 후보 행렬 에 적어도 포 함 된 근접 요소 의 개 수 를 지정 합 니 다.
  • flags C 는 구형 직렬 분류 기 모델 함수 cvHaarDetectObjects 의 flags 와 같 습 니 다.이 매개 변 수 는 새 모델 에 사용 되 지 않 습 니 다.
  • minSize C 의 최소 가능 한 대상 의 크기 는 작은 대상 은 무 시 됩 니 다.
  • max Size C 의 최대 가능 한 대상 의 크기 는 큰 대상 은 무 시 됩 니 다.
  • Cascade Classifier::setImage 설정 은 검 측 에 사용 되 는 그림 입 니 다.C++: bool CascadeClassifier::setImage(Ptr& feval, const Mat& image)
    매개 변수
  • feval C 는 특징 계산 에 사용 되 는 특징 값 구 하 는 프로그램의 지침 입 니 다.
  • image C 특징 검출 이 필요 한 CV8U 입력 매트릭스.
  • 이 함 수 는 그림 마다 Cascade Classifier::detectMultiScale()에서 자동 으로 호출 됩 니 다.그러나 다른 위치 에서 Cascade Classifier::runAt()을 수 동 으로 사용 하려 면 이 함 수 를 먼저 호출 하여 그림 을 포인트 로 계산 해 야 합 니 다.Cascade Classifier::runAt 이 지정 한 지점 에서 검 사 를 실행 합 니 다.C++: int CascadeClassifier::runAt(Ptr& feval, Point pt, double& weight) 
    매개 변수
    feval C 는 특징 계산 에 사용 되 는 특징 값 프로그램 입 니 다.
    pt C 는 창 왼쪽 상단 의 점 을 지정 합 니 다.창 크기 와 검 측 된 그림 크기 가 일치 합 니 다.직렬 분류 기 가 주어진 위치 에 있 는 대상 을 감지 하면 이 함 수 는 1 로 되 돌아 갑 니 다.그렇지 않 으 면 부 결 된 후보 지역 의 어느 단계 에서 부정적인 지 수 를 되 돌려 줄 것 이다.Cascade Classifier::setImage()를 사용 하여 그림 의 검 측 작업 을 설정 합 니 다.코드 설명:
     
    //
    string face_cascade_name = "haarcascade_frontalface_alt.xml";
    //
    CascadeClassifier face_cascade;

    //……

    // , ,
    if( !face_cascade.load( face_cascade_name ) ){
    printf("[error] !
    ");
    return -1;
    }

    //……

    // frame
    face_cascade.detectMultiScale( frame_gray, faces, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE, Size(30, 30) );
    을 그 레이스 케 일 로 변환 합 니 다.Cascade Classifier 클래스 는 CV 만 지원 하기 때 문 입 니 다.8U 매트릭스 데이터 이기 때문에 그림 을 그 레이스 케 일 로 바 꿔 야 합 니 다.cvtColor API:그림 을 한 색 공간 에서 다른 색 공간 으로 옮 깁 니 다.C++: void cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0 )
    매개 변수
  • src C 입력 이미지:8 비트 기호 없 음,16 비트 기호 없 음(CV16UC...)또는 단일 정밀도 부동 소수점 데이터 형식.
  • dst C 출력 이미지,입력 이미지 와 같은 크기,깊이.
  • code C 색상 공간 변환 코드.
  • dstCn C 목표 이미지 의 채널 수 는 이 매개 변수 가 0 일 때 채널 트 리 는 src 와 code 에서 자동 으로 나온다.
  • 이 함 수 는 그림 을 입력 하여 한 색채 공간 에서 다른 색채 공간 으로 이동 합 니 다.RGB 색상 공간 에서 변환 할 때 지 정 된 채널 의 순서(RGB 또는 BGR)를 명 확 히 해 야 합 니 다.주의해 야 할 것 은 OpenCV 의 기본 색상 형식 에 서 는 통상 RGB 라 고 불리 지만 실제로는 BGR(바이트 가 반대)이다.따라서 하나의 표준(24 비트)의 컬러 이미지 의 첫 번 째 바 이 트 는 8 비트 의 파란색 분량 이 고 두 번 째 바 이 트 는 녹색 이 며 세 번 째 바 이 트 는 빨간색 이 될 것 이다.네 번 째,다섯 번 째,여섯 번 째 바이트 는 두 번 째 픽 셀(파란색,그리고 녹색,그리고 빨간색)로 유추 된다.R,G,B 채널 일반 채널 값 범위:CV8U:0 ― 255 CV_16U:0 ― 65535 CV_32F:0-1 선형 변환 의 경우 범위 가 있 든 없 든 상관없다.그러나 비 선형 변환 상황 에서 입력 한 RGB 이미 지 는 정확 한 결 과 를 얻 기 위해 적당 한 값 범위 로 분류 되 어야 한다.예 를 들 어 32 비트 부동 소수점 그림 이 크기 조정 없 이 8 비트 그림 으로 직접 변환 된다 면 0 에서 255 의 수치 범위 가 있 을 것 입 니 다.이것 은 0.1 모든 부동 소수점 값 을 정확하게 할 수 없습니다.따라서 그림 크기 를 조정 하기 위해 서 는 cvtColor 를 사용 해 야 합 니 다.코드 설명:
     
    // frame , frame_gray
    cvtColor( frame, frame_gray, CV_BGR2GRAY );
    직사 도 균형 화 직사 도 는 이미지 에서 픽 셀 강도 분포 의 도형 표현 방식 입 니 다.그것 은 모든 강도 값 이 가지 고 있 는 픽 셀 의 개 수 를 통계 했다.http://www.cnblogs.com/http://www.cnblogs.com/../_images/Histogram_Equalization_Theory_0.jpg  직사 도 균형 화 는 픽 셀 의 강도 분포 범 위 를 늘 려 이미지 대비 도 를 높이 는 방법 이다.좀 더 분명하게 말하자면 위의 직사 도 를 예 로 들 면 픽 셀 은 주로 중간의 강도 값 에 집중 되 어 있 는 것 을 볼 수 있다.직사 도 균형 화 는 이 범 위 를 늘 리 는 것 이다.아래 왼쪽 그림 을 보면 녹색 원 은 픽 셀 분포 가 적은 강도 값 을 나 타 냈 다.이 를 균형 화 한 후에중간 그림 에서 보 여 준 직사 도 를 얻 었 습 니 다.균형 화 된 그림 은 아래 오른쪽 그림 을 보십시오.http://www.cnblogs.com/http://www.cnblogs.com/../_images/Histogram_Equalization_Theory_1.jpg 우 리 는 직사 도 균형 화 를 이용 하여 이미지 에 대한 대비 도 를 강화 하고 등급 별 분류 기 분석 을 편리 하 게 한다.equalizeHist API:그 레이스 케 일 이미지 에 직사 도 균형 을 맞 춥 니 다.C++:void equalizeHist(InputArray src,OutputArray dst)table 4 직사 도 균형 함 수 는 다음 과 같은 계산 을 사 용 했 습 니 다.원본 파일 의 직사 도 H 을 계산 합 니 다. 。 직사 도 를 조정 하여 격자 의 총 개 수 를 255 로 한다.직사 도 에 포 인 트 를 줍 니 다:H'_i = \sum _{0 \le j < i} H(j)H' 을 사용 하여 그림 을 바 꿉 니 다.그 맵 함 수 는 \texttt{dst}(x,y) = H'(\texttt{src}(x,y)) 입 니 다.이 알고리즘 은 밝 기 를 획일 화하 고 이미지 의 대비 도 를 증가 시 켰 다.

    좋은 웹페이지 즐겨찾기