OpenCV學(xué)習(xí)筆記3找出人臉-同時(shí)比較兩張圖片中的人臉相似度_第1頁(yè)
OpenCV學(xué)習(xí)筆記3找出人臉-同時(shí)比較兩張圖片中的人臉相似度_第2頁(yè)
OpenCV學(xué)習(xí)筆記3找出人臉-同時(shí)比較兩張圖片中的人臉相似度_第3頁(yè)
OpenCV學(xué)習(xí)筆記3找出人臉-同時(shí)比較兩張圖片中的人臉相似度_第4頁(yè)
OpenCV學(xué)習(xí)筆記3找出人臉-同時(shí)比較兩張圖片中的人臉相似度_第5頁(yè)
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

OpenCV學(xué)習(xí)筆記3:找出人臉,同時(shí)比較兩張圖片中的人臉相似度分類(lèi):

OpenCV2012-11-1218:50

5394人閱讀

評(píng)論(4)

\o"收藏"收藏

\o"舉報(bào)"舉報(bào)

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

1。分別用facedetect功能將兩張圖片中的人臉檢測(cè)出來(lái)

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

3。將這兩張人臉圖片轉(zhuǎn)換成單通道的圖像

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

這里對(duì)圖的要求還是比較高的,光線(xiàn)和姿勢(shì)不能有差別,臉的垂直或者左右角度偏差就會(huì)影響比較,但和兩張圖片的大小關(guān)系不大,本人覺(jué)得較適合于證件照的對(duì)比。下面是代碼,其中haarcascade_frontalface_alt.xml是opencv里facedetect例子用的樣本。比較的是srcImage和targetImage對(duì)應(yīng)的文件.還有下面是IplImage和Mat混用,純當(dāng)熟悉這兩個(gè)類(lèi)了。[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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論