最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

opencv 做人臉識(shí)別 opencv 人臉匹配分析

 更新時(shí)間:2012年11月22日 10:36:59   作者:  
opencv 人臉識(shí)別通過級(jí)聯(lián)分類器對(duì)特征的分級(jí)篩選來確定是否是人臉,每個(gè)節(jié)點(diǎn)的正確識(shí)別率很高,但正確拒絕率很低,任一節(jié)點(diǎn)判斷沒有人臉特征則結(jié)束運(yùn)算,宣布不是人臉
機(jī)器學(xué)習(xí)
機(jī)器學(xué)習(xí)的目的是把數(shù)據(jù)轉(zhuǎn)換成信息。
機(jī)器學(xué)習(xí)通過從數(shù)據(jù)里提取規(guī)則或模式來把數(shù)據(jù)轉(zhuǎn)成信息。

人臉識(shí)別
人臉識(shí)別通過級(jí)聯(lián)分類器對(duì)特征的分級(jí)篩選來確定是否是人臉。
每個(gè)節(jié)點(diǎn)的正確識(shí)別率很高,但正確拒絕率很低。
任一節(jié)點(diǎn)判斷沒有人臉特征則結(jié)束運(yùn)算,宣布不是人臉。
全部節(jié)點(diǎn)通過,則宣布是人臉。
工業(yè)上,常用人臉識(shí)別技術(shù)來識(shí)別物體。

對(duì)圖片進(jìn)行識(shí)別
復(fù)制代碼 代碼如下:

#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 = "人臉識(shí)別";

void detectAndDisplay( Mat frame );

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

if( argc != 2 || !image.data ){
printf("[error] 沒有圖片\n");
return -1;
}

if( !face_cascade.load( face_cascade_name ) ){
printf("[error] 無法加載級(jí)聯(lián)分類器文件!\n");
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 );
}


CascadeClassifier類

class CascadeClassifier

用于檢測(cè)物體的級(jí)聯(lián)分類器類。

CascadeClassifier::CascadeClassifier
從一個(gè)文件讀取分類器。

C++: CascadeClassifier::CascadeClassifier(const string& filename)
參數(shù) filename – 所要讀取分類器文件的文件名
參數(shù) filename – 所要讀取分類器文件的文件名

CascadeClassifier::empty
檢查分類器是否已經(jīng)載入。

C++: bool CascadeClassifier::empty() const
CascadeClassifier::load
從一個(gè)文件讀取分類器。

C++: bool CascadeClassifier::load(const string& filename)
參數(shù) filename – 所要讀取分類器文件的文件名。文件可以是舊版的HAAR分類器模型也可以是新版的分類器模型。
參數(shù) filename – 所要讀取分類器文件的文件名。文件可以是舊版的HAAR分類器模型也可以是新版的分類器模型。

CascadeClassifier::read
讀取一個(gè)文件存儲(chǔ)節(jié)點(diǎn)的分類器。

C++: bool CascadeClassifier::read(const FileNode& node)


CascadeClassifier::detectMultiScale
對(duì)不同大小的輸入圖像進(jìn)行物體識(shí)別,并返回一個(gè)識(shí)別到的物體的矩陣列表。

C++: void CascadeClassifier::detectMultiScale(const Mat& image, vector<Rect>& objects, double scaleFactor=1.1, int minNeighbors=3, int flags=0, Size minSize=Size(), Size maxSize=Size()) 
參數(shù)
  • image – 需要檢測(cè)的 CV_8U 輸入矩陣。
  • objects – 輸出vector載體容器用于保存被識(shí)別的物體矩陣。
  • scaleFactor – 指定每張圖片的縮小比例的參數(shù)。
  • minNeighbors – 指定每個(gè)候選矩陣至少包含的鄰近元素個(gè)數(shù)。
  • flags與舊版級(jí)聯(lián)分類器模型函數(shù)cvHaarDetectObjects的flags相同. 此參數(shù)不被用于新版模型。
  • minSize – 最小可能的對(duì)象的大小,小于的對(duì)象將被忽略。
  • maxSize – 最大可能的對(duì)象的大小,大于的對(duì)象將被忽略。

CascadeClassifier::setImage
設(shè)置被用于檢測(cè)的圖像。

C++: bool CascadeClassifier::setImage(Ptr<FeatureEvaluator>& feval, const Mat& image)
參數(shù)
  • feval – 用于特征計(jì)算的特征求值程序的指針。
  • image – 需要進(jìn)行特征檢測(cè)的 CV_8U 輸入矩陣。

這個(gè)函數(shù)將在每張圖片中被 CascadeClassifier::detectMultiScale() 自動(dòng)調(diào)用。 但如果你想在不同位置手動(dòng)使用 CascadeClassifier::runAt(),你需要先調(diào)用該函數(shù),使得圖像被積分計(jì)算。

CascadeClassifier::runAt
在指定點(diǎn)運(yùn)行檢測(cè)。

C++: int CascadeClassifier::runAt(Ptr<FeatureEvaluator>& feval, Point pt, double& weight) 
參數(shù)

feval – 用于特征計(jì)算的特征求值程序。

pt – 指定檢測(cè)窗口左上角的點(diǎn)。窗口的大小和檢測(cè)的圖片大小一致。


如果級(jí)聯(lián)分類器檢測(cè)到給定的位置中的一個(gè)對(duì)象,該函數(shù)返回1。否則,它會(huì)返回已被否決的候選區(qū)域在哪個(gè)階段的否定的指數(shù)。

使用CascadeClassifier::setImage() 設(shè)置圖像的檢測(cè)工作。

代碼注釋

復(fù)制代碼 代碼如下:

//需要載入的級(jí)聯(lián)分類器文件
string face_cascade_name = "haarcascade_frontalface_alt.xml";
//級(jí)聯(lián)分類器類
CascadeClassifier face_cascade;

//……

//載入級(jí)聯(lián)分類器,并判斷是否載入成功,如果不成功則打印提示
if( !face_cascade.load( face_cascade_name ) ){
printf("[error] 無法加載級(jí)聯(lián)分類器文件!\n");
return -1;
}

//……

//對(duì)圖片frame進(jìn)行識(shí)別檢測(cè)
face_cascade.detectMultiScale( frame_gray, faces, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE, Size(30, 30) );

轉(zhuǎn)換成灰度圖

由于CascadeClassifier類只支持CV_8U矩陣數(shù)據(jù),所以我們需要將圖片變成灰度圖。

cvtColor API:

將圖片從一個(gè)色彩空間轉(zhuǎn)到另一個(gè)色彩空間。

C++: void cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0 )
參數(shù)
  • src – 輸入圖像:8位無符號(hào),16位無符號(hào)(CV_16UC...),或單精度浮點(diǎn)數(shù)據(jù)類型。
  • dst – 輸出圖像,與輸入圖像相同大小、深度。
  • code – 顏色空間轉(zhuǎn)換代碼。
  • dstCn – 目標(biāo)圖像的通道數(shù),當(dāng)該參數(shù)為0時(shí),則通道樹由src和code自動(dòng)得出。

該函數(shù)將輸入圖片從一個(gè)色彩空間轉(zhuǎn)到另一個(gè)色彩空間。當(dāng)從RGB顏色空間進(jìn)行變換時(shí),應(yīng)明確指定的信道的順序(RGB或BGR)。值得注意,在OpenCV的默認(rèn)顏色格式中,通常被稱為作為RGB,但實(shí)際上是BGR(字節(jié)是相反的)。因此,在一個(gè)標(biāo)準(zhǔn)的(24位)的彩色圖像的第一個(gè)字節(jié)是一個(gè)8位的藍(lán)色分量,第二個(gè)字節(jié)將是綠色的,第三個(gè)字節(jié)將是紅色的。而第四,第五,和第六字節(jié),則是第二像素(藍(lán),然后綠色,然后紅色),依此類推。

R、G和B 通道通常信道值范圍

CV_8U:0 — 255
CV_16U:0 — 65535
CV_32F:0 — 1
線性變換的情況下,有沒有范圍是無所謂的。但是,在一個(gè)非線性變換的情況下,輸入的RGB圖像應(yīng)被歸為適當(dāng)?shù)闹捣秶鷥?nèi),以得到正確的結(jié)果。例如,如果你有一個(gè)32位浮點(diǎn)圖像直接轉(zhuǎn)換成一個(gè)8位的圖像而沒有任何縮放,那么它將有0到255的數(shù)值范圍,而這并不能準(zhǔn)確0..1所有浮點(diǎn)數(shù)的值。所以,你需要之前調(diào)用cvtColor,進(jìn)行圖像縮放。

代碼注釋:
復(fù)制代碼 代碼如下:

//將frame轉(zhuǎn)換成灰度圖,輸出到frame_gray
cvtColor( frame, frame_gray, CV_BGR2GRAY );

直方圖均衡化

直方圖是圖像中像素強(qiáng)度分布的圖形表達(dá)方式。
它統(tǒng)計(jì)了每一個(gè)強(qiáng)度值所具有的像素個(gè)數(shù)。
http://www.cnblogs.com/http://www.cnblogs.com/../_images/Histogram_Equalization_Theory_0.jpg 
直方圖均衡化是通過拉伸像素強(qiáng)度分布范圍來增強(qiáng)圖像對(duì)比度的一種方法。
說得更清楚一些, 以上面的直方圖為例, 你可以看到像素主要集中在中間的一些強(qiáng)度值上. 直方圖均衡化要做的就是 拉伸 這個(gè)范圍. 見下面左圖: 綠圈圈出了 少有像素分布其上的 強(qiáng)度值. 對(duì)其應(yīng)用均衡化后, 得到了中間圖所示的直方圖. 均衡化的圖像見下面右圖.
http://www.cnblogs.com/http://www.cnblogs.com/../_images/Histogram_Equalization_Theory_1.jpg 
我們利用直方圖均衡化對(duì)圖片增強(qiáng)對(duì)比度,方便級(jí)聯(lián)分類器分析。

equalizeHist API:

對(duì)灰度圖像進(jìn)行直方圖均衡。

C++: void equalizeHist(InputArray src, OutputArray dst)

table4
直方圖均衡函數(shù)使用了下列的算發(fā):

計(jì)算源文件的直方圖H 。

調(diào)整直方圖,使得其方格總個(gè)數(shù)為255。

對(duì)直方圖進(jìn)行積分:

H'_i = \sum _{0 \le j < i} H(j)

使用H'變換圖片,其映射函數(shù)為:\texttt{dst}(x,y) = H'(\texttt{src}(x,y))。

該算法歸一化亮度并增加了圖像的對(duì)比度。

相關(guān)文章

  • 用C++來解決3*3拼圖的問題

    用C++來解決3*3拼圖的問題

    這篇文章主要介紹了用C++來解決3*3拼圖的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • 深入理解C預(yù)處理器

    深入理解C預(yù)處理器

    下面小編就為大家?guī)硪黄钊肜斫釩預(yù)處理器。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-08-08
  • c語言標(biāo)準(zhǔn)庫中字符轉(zhuǎn)換函數(shù)和數(shù)字轉(zhuǎn)換函數(shù)

    c語言標(biāo)準(zhǔn)庫中字符轉(zhuǎn)換函數(shù)和數(shù)字轉(zhuǎn)換函數(shù)

    這篇文章主要介紹了c標(biāo)準(zhǔn)庫中字符轉(zhuǎn)換函數(shù)和數(shù)字轉(zhuǎn)換函數(shù),需要的朋友可以參考下
    2014-04-04
  • C++中cout輸出中文信息亂碼問題及解決

    C++中cout輸出中文信息亂碼問題及解決

    這篇文章主要介紹了C++中cout輸出中文信息亂碼問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • C語言實(shí)現(xiàn)堆的簡單操作的示例代碼

    C語言實(shí)現(xiàn)堆的簡單操作的示例代碼

    堆(heap)是計(jì)算機(jī)科學(xué)中一類特殊的數(shù)據(jù)結(jié)構(gòu)的統(tǒng)稱。堆通常是一個(gè)可以被看做一棵樹的數(shù)組對(duì)象。本文介紹了C語言中堆的一些簡單操作,需要的可以參考一下
    2022-11-11
  • C++中引用&與取地址&的區(qū)別分析

    C++中引用&與取地址&的區(qū)別分析

    這篇文章主要介紹了C++中引用&與取地址&的區(qū)別,有助于C++初學(xué)者更好的掌握指針的概念及用法,需要的朋友可以參考下
    2014-09-09
  • C++超詳細(xì)講解單鏈表的實(shí)現(xiàn)

    C++超詳細(xì)講解單鏈表的實(shí)現(xiàn)

    單鏈表是后面要學(xué)的雙鏈表以及循環(huán)鏈表的基礎(chǔ),要想繼續(xù)深入了解數(shù)據(jù)結(jié)構(gòu)以及C++,我們就要奠定好這塊基石!接下來就和我一起學(xué)習(xí)吧
    2022-03-03
  • C語言利用system調(diào)用系統(tǒng)命令行詳情

    C語言利用system調(diào)用系統(tǒng)命令行詳情

    這篇文章主要介紹了C語言利用system調(diào)用系統(tǒng)命令行詳情,system就是調(diào)用系統(tǒng)命令行,輸入為字符串,然后把這個(gè)字符串輸出給命令行,讓命令行執(zhí)行。下文的具體內(nèi)容,需要的小伙伴可以參考一下
    2022-01-01
  • 淺析string 與char* char[]之間的轉(zhuǎn)換

    淺析string 與char* char[]之間的轉(zhuǎn)換

    與char*不同的是,string不一定以NULL('\0')結(jié)束。string長度可以根據(jù)length()得到,string可以根據(jù)下標(biāo)訪問。所以,不能將string直接賦值給char*
    2013-10-10
  • C語言大小端字節(jié)序存儲(chǔ)模式深入解讀

    C語言大小端字節(jié)序存儲(chǔ)模式深入解讀

    我們知道,當(dāng)編譯器執(zhí)行 “創(chuàng)建變量” 這一代碼時(shí),會(huì)在內(nèi)存中開辟空間相應(yīng)的空間來存儲(chǔ)變量值。而對(duì)于整型變量而言,變量值又是以二進(jìn)制補(bǔ)碼的形式存放的
    2022-09-09

最新評(píng)論

正宁县| 衡山县| 胶州市| 探索| 文昌市| 获嘉县| 修武县| 雷波县| 凤冈县| 民县| 沅江市| 哈尔滨市| 奉贤区| 会东县| 蛟河市| 剑阁县| 拜泉县| 措勤县| 正镶白旗| 曲阳县| 连州市| 青海省| 华蓥市| 壤塘县| 保山市| 楚雄市| 色达县| 玛沁县| 蓝田县| 叙永县| 达日县| 自贡市| 涞源县| 通渭县| 东光县| 壤塘县| 铁岭市| 得荣县| 确山县| 尼勒克县| 习水县|