OpenCV學習筆記3找出人臉-同時比較兩張圖片中的人臉相似度_第1頁
OpenCV學習筆記3找出人臉-同時比較兩張圖片中的人臉相似度_第2頁
OpenCV學習筆記3找出人臉-同時比較兩張圖片中的人臉相似度_第3頁
OpenCV學習筆記3找出人臉-同時比較兩張圖片中的人臉相似度_第4頁
OpenCV學習筆記3找出人臉-同時比較兩張圖片中的人臉相似度_第5頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

OpenCV學習筆記3:找出人臉,同時比較兩張圖片中的人臉相似度分類:

OpenCV2012-11-1218:50

5394人閱讀

評論(4)

\o"收藏"收藏

\o"舉報"舉報

終于到了有實際應用的功能了,有2張圖片,里面各有一個人臉,我的目的是比較這兩個人臉的相似度,這里用到了facedetect的功能,還有圖像轉換,圖像剪切,以及直方圖的比較。具體流程是:

1。分別用facedetect功能將兩張圖片中的人臉檢測出來

2。將人臉部分的圖片剪切出來,存到兩張只有人臉的圖片里。

3。將這兩張人臉圖片轉換成單通道的圖像

4。使用直方圖比較這兩張單通道的人臉圖像,得出相似度。

這里對圖的要求還是比較高的,光線和姿勢不能有差別,臉的垂直或者左右角度偏差就會影響比較,但和兩張圖片的大小關系不大,本人覺得較適合于證件照的對比。下面是代碼,其中haarcascade_frontalface_alt.xml是opencv里facedetect例子用的樣本。比較的是srcImage和targetImage對應的文件.還有下面是IplImage和Mat混用,純當熟悉這兩個類了。[cpp]

\o"viewplain"viewplain\o"copy"copy

[cpp]

\o"viewplain"viewplain\o"copy"copy

[cpp]

\o"viewplain"viewplain\o"copy"copy#include

"opencv/cv.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

cascadeName

=

"D:\\OpenCV-2.4.2\\data\\haarcascades\\haarcascade_frontalface_alt.xml";

IplImage*

cutImage(IplImage*

src,

CvRect

rect)

{

cvSetImageROI(src,

rect);

IplImage*

dst

=

cvCreateImage(cvSize(rect.width,

rect.height),

src->depth,

src->nChannels);

cvCopy(src,dst,0);

cvResetImageROI(src);

return

dst;

}

IplImage*

detect(

Mat&

img,

CascadeClassifier&

cascade,

double

scale)

{

int

i

=

0;

double

t

=

0;

vector<Rect>

faces;

Mat

gray,

smallImg(

cvRound

(img.rows/scale),

cvRound(img.cols/scale),

CV_8UC1

);

cvtColor(

img,

gray,

CV_BGR2GRAY

);

resize(

gray,

smallImg,

smallImg.size(),

0,

0,

INTER_LINEAR

);

equalizeHist(

smallImg,

smallImg

);

t

=

(double)cvGetTickCount();

cascade.detectMultiScale(

smallImg,

faces,

1.3,

2,

CV_HAAR_SCALE_IMAGE,

Size(30,

30)

);

t

=

(double)cvGetTickCount()

-

t;

printf(

"detection

time

=

%g

ms\n",

t/((double)cvGetTickFrequency()*1000.)

);

for(

vector<Rect>::const_iterator

r

=

faces.begin();

r

!=

faces.end();

r++,

i++

)

{

//

cvSaveImage("d:\\face.jpg",

faceImage1,

0);

faceImage2

=

detect(targetImg,

cascade,

1);

if

(faceImage2

==

NULL)

{

return

-1;

}

//

cvSaveImage("d:\\face1.jpg",

faceImage2,

0);

imshow("image1",

Mat(faceImage1));

imshow("image2",

Mat(faceImage2))

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論