目標(biāo)檢測學(xué)習(xí)_1(用opencv自帶hog實現(xiàn)行人檢測)

本文主要介紹下opencv中怎樣使用hog算法蹈胡,因為在opencv中已經(jīng)集成了hog這個類渊季。其實使用起來是很簡單的,從后面的代碼就可以看出來罚渐。本文參考的資料為opencv自帶的sample却汉。

關(guān)于opencv中hog的源碼分析,可以參考本人的另一篇博客:opencv源碼解析之(6):hog源碼分析

開發(fā)環(huán)境:opencv2.4.2+Qt4.8.2+ubuntu12.04+QtCreator2.5.

實驗功能:

單擊Open Image按鈕荷并,選擇需要進行人檢測的一張圖片合砂,確定后自動顯示出來。該圖片的大小沒限制源织。

單擊People Detect按鈕翩伪,則程序會自動對該圖片進行行人檢測,且將檢測到的效果顯示出來谈息,即用1個矩形框?qū)⑿腥丝虺鰜怼?/p>

單擊Close按鈕缘屹,退出程序。

實驗說明:

1. hog描述子在opencv中為HOGDescriptor侠仇。

2.可以調(diào)用該描述子setSVMDetector方法給用于對hog特征進行分類的svm模型的系數(shù)賦值轻姿,這里的參數(shù)為HOGDescriptor::getDefaultPeopleDetector()時表示采用系統(tǒng)默認(rèn)的參數(shù)犁珠,因為這些參數(shù)是用很多圖片訓(xùn)練而來的。

3.對輸入圖片進行行人檢測時由于圖片的大小不一樣互亮,所以要用到多尺度檢測犁享。這里是用hog類的方法detectMultiScale。參數(shù)解釋如下:

HOGDescriptor::detectMultiScale(const GpuMat&img, vector&found_locations, doublehit_threshold=0, Sizewin_stride=Size(), Sizepadding=Size(), doublescale0=1.05, intgroup_threshold=2)

該函數(shù)表示對輸入的圖片img進行多尺度行人檢測img為輸入待檢測的圖片豹休;found_locations為檢測到目標(biāo)區(qū)域列表炊昆;參數(shù)3為程序內(nèi)部計算為行人目標(biāo)的閾值,也就是檢測到的特征到SVM分類超平面的距離;參數(shù)4為滑動窗口每次移動的距離威根。它必須是塊移動的整數(shù)倍窑眯;參數(shù)5為圖像擴充的大小医窿;參數(shù)6為比例系數(shù)磅甩,即滑動窗口每次增加的比例;參數(shù)7為組閾值姥卢,即校正系數(shù)卷要,當(dāng)一個目標(biāo)被多個窗口檢測出來時,該參數(shù)此時就起了調(diào)節(jié)作用独榴,為0時表示不起調(diào)節(jié)作用僧叉。

4.最后對檢測出來的目標(biāo)矩形框,要采用一些方法處理棺榔,比如說2個目標(biāo)框嵌套著瓶堕,則選擇最外面的那個框。5.因為hog檢測出的矩形框比實際人體框要稍微大些,所以需要對這些矩形框大小尺寸做一些調(diào)整症歇。

實驗結(jié)果:

圖片1效果:

圖片2效果:

圖片3效果:

圖片4效果:

實驗主要部分代碼(附錄有工程code下載鏈接):

#include"dialog.h"#include"ui_dialog.h"#include#includeDialog::Dialog(QWidget*parent) :

QDialog(parent),

ui(newUi::Dialog)

{

ui->setupUi(this);

}

Dialog::~Dialog()

{

delete ui;

}voidDialog::on_openButton_clicked()

{

QString img_mame= QFileDialog::getOpenFileName(this,"Open img","../people", tr("Image Files(*.png *.jpg *.bmp *.jpeg)"));

img=imread( img_mame.toAscii().data() );

imwrite("../hog_test.jpg", img);

ui->textBrowser->setFixedSize(img.cols, img.rows);

ui->textBrowser->append("");

}voidDialog::on_detectButton_clicked()

{

vectorfound, found_filtered;

cv::HOGDescriptor people_dectect_hog;//采用默認(rèn)的已經(jīng)訓(xùn)練好了的svm系數(shù)作為此次檢測的模型people_dectect_hog.setSVMDetector(cv::HOGDescriptor::getDefaultPeopleDetector());//對輸入的圖片img進行多尺度行人檢測//img為輸入待檢測的圖片郎笆;found為檢測到目標(biāo)區(qū)域列表;參數(shù)3為程序內(nèi)部計算為行人目標(biāo)的閾值忘晤,也就是檢測到的特征到SVM分類超平面的距離;//參數(shù)4為滑動窗口每次移動的距離宛蚓。它必須是塊移動的整數(shù)倍;參數(shù)5為圖像擴充的大猩杷凄吏;參數(shù)6為比例系數(shù),即測試圖片每次尺寸縮放增加的比例闰蛔;//參數(shù)7為組閾值痕钢,即校正系數(shù),當(dāng)一個目標(biāo)被多個窗口檢測出來時序六,該參數(shù)此時就起了調(diào)節(jié)作用悔据,為0時表示不起調(diào)節(jié)作用探越。people_dectect_hog.detectMultiScale(img, found,0, Size(8,8), Size(32,32),1.05,2);//從源碼中可以看出://#define __SIZE_TYPE__ long unsigned int//typedef __SIZE_TYPE__ size_t;//因此,size_t是一個long unsigned int類型size_t i, j;for(i =0; i < found.size(); i++)

{

Rect r=found[i];//下面的這個for語句是找出所有沒有嵌套的矩形框r,并放入found_filtered中,如果有嵌套的//話,則取外面最大的那個矩形框放入found_filtered中for(j =0; j

found_filtered.push_back(r);

}//在圖片img上畫出矩形框,因為hog檢測出的矩形框比實際人體框要稍微大些,所以這里需要//做一些調(diào)整for(i =0; i

{

Rect r=found_filtered[i];

r.x+= cvRound(r.width*0.1);

r.width= cvRound(r.width*0.8);

r.y+= cvRound(r.height*0.07);

r.height= cvRound(r.height*0.8);

rectangle(img, r.tl(), r.br(), Scalar(0,255,0),3);

}

imwrite("../hog_test_result.jpg", img);

ui->textBrowser->clear();

ui->textBrowser->append("");

}voidDialog::on_closeButton_clicked()

{

close();

}

實驗總結(jié):從實驗的結(jié)果來看心俗,圖片檢測的準(zhǔn)確率一般,當(dāng)人體遮擋情況比較嚴(yán)重撬呢,且背景比較復(fù)雜時,有些誤檢和漏檢鞠呈。不過程序的檢查速度還行藐唠,因為源碼中用做了些優(yōu)化處理。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末爆土,一起剝皮案震驚了整個濱河市椭懊,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌步势,老刑警劉巖氧猬,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異坏瘩,居然都是意外死亡盅抚,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門倔矾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來妄均,“玉大人,你說我怎么就攤上這事哪自》岚” “怎么了?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵壤巷,是天一觀的道長邑彪。 經(jīng)常有香客問我,道長胧华,這世上最難降的妖魔是什么寄症? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮矩动,結(jié)果婚禮上瘸爽,老公的妹妹穿的比我還像新娘。我一直安慰自己铅忿,他們只是感情好剪决,可當(dāng)我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著檀训,像睡著了一般柑潦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上峻凫,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天渗鬼,我揣著相機與錄音,去河邊找鬼荧琼。 笑死譬胎,一個胖子當(dāng)著我的面吹牛差牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播堰乔,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼偏化,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了镐侯?” 一聲冷哼從身側(cè)響起侦讨,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎苟翻,沒想到半個月后韵卤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡崇猫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蜡歹。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片季稳。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖景鼠,靈堂內(nèi)的尸體忽然破棺而出铛漓,到底是詐尸還是另有隱情浓恶,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站树肃,受9級特大地震影響胸嘴,放射性物質(zhì)發(fā)生泄漏劣像。R本人自食惡果不足惜蚊伞,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一颅停、第九天 我趴在偏房一處隱蔽的房頂上張望癞揉。 院中可真熱鬧柏肪,春花似錦烦味、人聲如沸谬俄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽乎婿。三九已至捍靠,卻和暖如春榨婆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背烟央。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工钞艇, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留哩照,地道東北人。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓赖草,卻偏偏與公主長得像,于是被迫代替她去往敵國和親秧骑。 傳聞我的和親對象是個殘疾皇子版确,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內(nèi)容