㈠ 需要用OpenCV對動態背景的視頻序列進行目標檢測,是不是必須用光流法啊
本科畢設還是碩士畢設?這種東西應該自己研究才對啊。
光流法只是其中一種,好好學習吧,既然搞這個課題,就應該在學校多下點相關論文看看。
你要的代碼發到你的郵箱了,沒啥用,都是基於OpenCV的執行和研究內容,你還得自己建立工程環境把它們添加進去,你會發現在於士祺的書中以及OPENCV中文網站上都有介紹的。
㈡ 如何使用OpenCV中的AdBoost演算法訓練分類器
OpenCV訓練分類器
一、簡介
目標檢測方法最初由Paul Viola [Viola01]提出,並由Rainer Lienhart [Lienhart02]對這一方法進行了改善。
該方法的基本步驟為:
首先,利用樣本(大約幾百幅樣本圖片)的 harr 特徵進行分類器訓練,得到一個級聯的boosted分類器。
分類器中的"級聯"是指最終的分類器是由幾個簡單分類器級聯組成。在圖像檢測中,被檢窗口依次通過每一級分類器, 這樣在前面幾層的檢測中大部分的候選區域就被排除了,全部通過每一級分類器檢測的區域即為目標區域。
分類器訓練完以後,就可以應用於輸入圖像中的感興趣區域(與訓練樣本相同的尺寸)的檢測。檢測到目標區域(汽車或人臉)分類器輸出為1,否則輸出為0。為了檢測整副圖像,可以在圖像中移動搜索窗口,檢測每一個位置來確定可能的目標。為了搜索不同大小的目標物體,分類器被設計為可以進行尺寸改變,這樣比改變待檢圖像的尺寸大小更為有效。所以,為了在圖像中檢測未知大小的目標物體,掃描程序通常需要用不同比例大小的搜索窗口對圖片進行幾次掃描。
目前支持這種分類器的boosting技術有四種:
Discrete Adaboost, Real Adaboost, Gentle Adaboost and Logitboost。
"boosted" 即指級聯分類器的每一層都可以從中選取一個boosting演算法(權重投票),並利用基礎分類器的自我訓練得到。
根據上面的分析,目標檢測分為三個步驟:
1、 樣本的創建
2、 訓練分類器
3、 利用訓練好的分類器進行目標檢測。
二、樣本創建
訓練樣本分為正例樣本和反例樣本,其中正例樣本是指待檢目標樣本(例如人臉或汽車等),反例樣本指其它任意圖片,所有的樣本圖片都被歸一化為同樣的尺寸大小(例如,20x20)。
負樣本
負樣本可以來自於任意的圖片,但這些圖片不能包含目標特徵。負樣本由背景描述文件來描述。背景描述文件是一個文本文件,每一行包含了一個負樣本圖片的文件名(基於描述文件的相對路徑)。該文件必須手工創建。
e.g: 負樣本描述文件的一個例子:
假定目錄結構如下:
/img
img1.jpg
img2.jpg
bg.txt
則背景描述文件bg.txt的內容為:
img/img1.jpg
img/img2.jpg
正樣本
正樣本由程序craatesample程序來創建。該程序的源代碼由OpenCV給出,並且在bin目錄下包含了這個可執行的程序。
正樣本可以由單個的目標圖片或者一系列的事先標記好的圖片來創建。
Createsamples程序的命令行參數:
命令行參數:
-vec
訓練好的正樣本的輸出文件名。
-img
源目標圖片(例如:一個公司圖標)
-bg
背景描述文件。
-num
要產生的正樣本的數量,和正樣本圖片數目相同。
-bgcolor
背景色(假定當前圖片為灰度圖)。背景色制定了透明色。對於壓縮圖片,顏色方差量由bgthresh參數來指定。則在bgcolor-bgthresh和bgcolor+bgthresh中間的像素被認為是透明的。
-bgthresh
-inv
如果指定,顏色會反色
-randinv
如果指定,顏色會任意反色
-maxidev
背景色最大的偏離度。
-maxangel
-maxangle,
-maxzangle
最大旋轉角度,以弧度為單位。
-show
如果指定,每個樣本會被顯示出來,按下"esc"會關閉這一開關,即不顯示樣本圖片,而創建過程繼續。這是個有用的debug選項。
-w
輸出樣本的寬度(以像素為單位)
-h《sample_height》
輸出樣本的高度,以像素為單位。
註:正樣本也可以從一個預先標記好的圖像集合中獲取。這個集合由一個文本文件來描述,類似於背景描述文件。每一個文本行對應一個圖片。每行的第一個元素是圖片文件名,第二個元素是對象實體的個數。後面緊跟著的是與之匹配的矩形框(x, y, 寬度,高度)。
㈢ 採用Visual studio 2005和Opencv為平台,研究靜止背景下運動目標檢測方法
1、找個標准背景幀
2、捕獲當前幀,減背景幀
3、差即為運動目標(可能有多個)
㈣ 如何用OpenCV自帶的adaboost程序訓練並檢測目標
轉自:http://hi..com/andyzcj/blog/item/3b9575fc63c3201f09244d9a.html
可能遇到的問題:
1.如果跑到某一個分類器時,幾個小時也沒有反應,而且顯示不出訓練百分比,這是因為你的負樣本數量太少,或者負樣本的尺寸太小,所有的負樣本在這個分類器都被reject了,程序進入不了下一個循環,果斷放棄吧。解決方法:負樣本盡量要大一些,比如我的正樣本是40*15,共300個,負樣本是640*480,共500個。
2.讀取樣本時報錯:Negative or too large argument of CvAlloc function,網上說這個錯誤是因為opencv規定單幅iplimage的內存分配不能超過10000,可是我的每個負樣本都不會超過這個大小,具體原因不明。後來我把負樣本的數量減少,尺寸加大,這個問題就解決了。
最近要做一個性別識別的項目,在人臉檢測與五官定位上我採用OPENCV的haartraining進行定位,這里介紹下這兩天我學習的如何用opencv訓練自己的分類器。在這兩天的學習里,我遇到了不少問題,不過我遇到了幾個好心的大俠幫我解決了不少問題,特別是無忌,在這里我再次感謝他的幫助。
一、簡介
目標檢測方法最初由Paul Viola [Viola01]提出,並由Rainer Lienhart [Lienhart02]對這一方法進行了改善。該方法的基本步驟為: 首先,利用樣本(大約幾百幅樣本圖片)的 harr 特徵進行分類器訓練,得到一個級聯的boosted分類器。
分類器中的"級聯"是指最終的分類器是由幾個簡單分類器級聯組成。在圖像檢測中,被檢窗口依次通過每一級分類器,這樣在前面幾層的檢測中大部分的候選區域就被排除了,全部通過每一級分類器檢測的區域即為目標區域。
分類器訓練完以後,就可以應用於輸入圖像中的感興趣區域的檢測。檢測到目標區域分類器輸出為1,否則輸出為0。為了檢測整副圖像,可以在圖像中移動搜索窗口,檢測每一個位置來確定可能的目標。為了搜索不同大小的目標物體,分類器被設計為可以進行尺寸改變,這樣比改變待檢圖像的尺寸大小更為有效。所以,為了在圖像中檢測未知大小的目標物體,掃描程序通常需要用不同比例大小的搜索窗口對圖片進行幾次掃描。
目前支持這種分類器的boosting技術有四種: Discrete Adaboost, Real Adaboost, Gentle Adaboost and Logitboost。
"boosted" 即指級聯分類器的每一層都可以從中選取一個boosting演算法(權重投票),並利用基礎分類器的自我訓練得到。
根據上面的分析,目標檢測分為三個步驟:
1、 樣本的創建
2、 訓練分類器
3、 利用訓練好的分類器進行目標檢測。
二、樣本創建
訓練樣本分為正例樣本和反例樣本,其中正例樣本是指待檢目標樣本,反例樣本指其它任意圖片。
負樣本
負樣本可以來自於任意的圖片,但這些圖片不能包含目標特徵。負樣本由背景描述文件來描述。背景描述文件是一個文本文件,每一行包含了一個負樣本圖片的文件名(基於描述文件的相對路徑)。該文件創建方法如下:
採用Dos命令生成樣本描述文件。具體方法是在Dos下的進入你的圖片目錄,比如我的圖片放在D:\face\posdata下,則:
按Ctrl+R打開Windows運行程序,輸入cmd打開DOS命令窗口,輸入d:回車,再輸入cd D:\face\negdata進入圖片路徑,再次輸入dir /b > negdata.dat,則會圖片路徑下生成一個negdata.dat文件,打開該文件將最後一行的negdata.dat刪除,這樣就生成了負樣本描述文件。dos命令窗口結果如下圖:
正樣本
對於正樣本,通常的做法是先把所有正樣本裁切好,並對尺寸做規整(即縮放至指定大小),如下圖所示:
由於HaarTraining訓練時輸入的正樣本是vec文件,所以需要使用OpenCV自帶的CreateSamples程序(在你所按照的opencv\bin下,如果沒有需要編譯opencv\apps\HaarTraining\make下的.dsw文件,注意要編譯release版的)將准備好的正樣本轉換為vec文件。轉換的步驟如下:
1) 製作一個正樣本描述文件,用於描述正樣本文件名(包括絕對路徑或相對路徑),正樣本數目以及各正樣本在圖片中的位置和大小。典型的正樣本描述文件如下:
posdata/1(10).bmp 1 1 1 23 23
posdata/1(11).bmp 1 1 1 23 23
posdata/1(12).bmp 1 1 1 23 23
不過你可以把描述文件放在你的posdata路徑(即正樣本路徑)下,這樣你就不需要加前面的相對路徑了。同樣它的生成方式可以用負樣本描述文件的生成方法,最後用txt的替換工具將「bmp」全部替換成「bmp 1 1 1 23 23
」就可以了,如果你的樣本圖片多,用txt替換會導致程序未響應,你可以將內容拷到word下替換,然後再拷回來。bmp後面那五個數字分別表示圖片個數,目標的起始位置及其寬高。這樣就生成了正樣本描述文件posdata.dat。
2) 運行CreateSamples程序。如果直接在VC環境下運行,可以在Project\Settings\Debug屬性頁的Program arguments欄設置運行參數。下面是一個運行參數示例:
-info D:\face\posdata\posdata.dat -vec D:\face\pos.vec -num 50 -w 20 -h 20
表示有50個樣本,樣本寬20,高20,正樣本描述文件為posdata.dat,結果輸出到pos.vec。
或者在dos下輸入:
"D:\Program Files\OpenCV\bin\createsamples.exe" -info "posdata\posdata.dat" -vec data\pos.vec -num 50 -w 20 -h 20
運行完了會d:\face\data下生成一個*.vec的文件。該文件包含正樣本數目,寬高以及所有樣本圖像數據。結果入下圖:
Createsamples程序的命令行參數:
命令行參數:
-vec <vec_file_name>
訓練好的正樣本的輸出文件名。
-img<image_file_name>
源目標圖片(例如:一個公司圖標)
-bg<background_file_name>
背景描述文件。
-num<number_of_samples>
要產生的正樣本的數量,和正樣本圖片數目相同。
-bgcolor<background_color>
背景色(假定當前圖片為灰度圖)。背景色制定了透明色。對於壓縮圖片,顏色方差量由bgthresh參數來指定。則在bgcolor-bgthresh和bgcolor+bgthresh中間的像素被認為是透明的。
-bgthresh<background_color_threshold>
-inv
如果指定,顏色會反色
-randinv
如果指定,顏色會任意反色
-maxidev<max_intensity_deviation>
背景色最大的偏離度。
-maxangel<max_x_rotation_angle>
-maxangle<max_y_rotation_angle>,
-maxzangle<max_x_rotation_angle>
最大旋轉角度,以弧度為單位。
-show
如果指定,每個樣本會被顯示出來,按下"esc"會關閉這一開關,即不顯示樣本圖片,而創建過程繼續。這是個有用的debug選項。
-w<sample_width>
輸出樣本的寬度(以像素為單位)
-h《sample_height》
輸出樣本的高度,以像素為單位。
到此第一步樣本訓練就完成了。恭喜你,你已經學會訓練分類器的五成功力了,我自己學這個的時候花了我一天的時間,估計你幾分鍾就學會了吧。
三、訓練分類器
樣本創建之後,接下來要訓練分類器,這個過程是由haartraining程序來實現的。該程序源碼由OpenCV自帶,且可執行程序在OpenCV安裝目錄的bin目錄下。
Haartraining的命令行參數如下:
-data<dir_name>
存放訓練好的分類器的路徑名。
-vec<vec_file_name>
正樣本文件名(由trainingssamples程序或者由其他的方法創建的)
-bg<background_file_name>
背景描述文件。
-npos<number_of_positive_samples>,
-nneg<number_of_negative_samples>
用來訓練每一個分類器階段的正/負樣本。合理的值是:nPos = 7000;nNeg = 3000
-nstages<number_of_stages>
訓練的階段數。
-nsplits<number_of_splits>
決定用於階段分類器的弱分類器。如果1,則一個簡單的stump classifier被使用。如果是2或者更多,則帶有number_of_splits個內部節點的CART分類器被使用。
-mem<memory_in_MB>
預先計算的以MB為單位的可用內存。內存越大則訓練的速度越快。
-sym(default)
-nonsym
指定訓練的目標對象是否垂直對稱。垂直對稱提高目標的訓練速度。例如,正面部是垂直對稱的。
-minhitrate《min_hit_rate》
每個階段分類器需要的最小的命中率。總的命中率為min_hit_rate的number_of_stages次方。
-maxfalsealarm<max_false_alarm_rate>
沒有階段分類器的最大錯誤報警率。總的錯誤警告率為max_false_alarm_rate的number_of_stages次方。
-weighttrimming<weight_trimming>
指定是否使用權修正和使用多大的權修正。一個基本的選擇是0.9
-eqw
-mode<basic(default)|core|all>
選擇用來訓練的haar特徵集的種類。basic僅僅使用垂直特徵。all使用垂直和45度角旋轉特徵。
-w《sample_width》
-h《sample_height》
訓練樣本的尺寸,(以像素為單位)。必須和訓練樣本創建的尺寸相同。
一個訓練分類器的例子:
"D:\Program Files\OpenCV\bin\haartraining.exe" -data data\cascade -vec data\pos.vec -bg negdata\negdata.dat -npos 49 -nneg 49 -mem 200 -mode ALL -w 20 -h 20
訓練結束後,會在目錄data下生成一些子目錄,即為訓練好的分類器。
訓練結果如下:恭喜你,你已經學會訓練分類器的九成功力了。
四:利用訓練好的分類器進行目標檢測。
這一步需要用到performance.exe,該程序源碼由OpenCV自帶,且可執行程序在OpenCV安裝目錄的bin目錄下。
performance.exe -data data/cascade -info posdata/test.dat -w 20 -h 20 -rs 30
performance的命令行參數如下:
Usage: ./performance
-data <classifier_directory_name>
-info <collection_file_name>
[-maxSizeDiff <max_size_difference = 1.500000>]
[-maxPosDiff <max_position_difference = 0.300000>]
[-sf <scale_factor = 1.200000>]
[-ni]
[-nos <number_of_stages = -1>]
[-rs <roc_size = 40>]
[-w <sample_width = 24>]
[-h <sample_height = 24>]
也可以用opencv的cvHaarDetectObjects函數進行檢測:
CvSeq* faces = cvHaarDetectObjects( img, cascade, storage,1.1, 2, CV_HAAR_DO_CANNY_PRUNING,cvSize(40, 40) ); //3. 檢測人臉
㈤ 利用OpenCV開發行人檢測程序,怎樣提高檢測速率
目標檢測方法最初由PaulViola[Viola01]提出,並由RainerLienhart[Lienhart02]對這一方法進行了改善。該方法的基本步驟為:首先,利用樣本(大約幾百幅樣本圖片)的harr特徵進行分類器訓練,得到一個級聯的boosted分類器。分類器中的"級聯"是指最終的分類器是由幾個簡單分類器級聯組成。在圖像檢測中,被檢窗口依次通過每一級分類器,這樣在前面幾層的檢測中大部分的候選區域就被排除了,全部通過每一級分類器檢測的區域即為目標區域。分類器訓練完以後,就可以應用於輸入圖像中的感興趣區域(與訓練樣本相同的尺寸)的檢測。檢測到目標區域(汽車或人臉)分類器輸出為1,否則輸出為0。為了檢測整副圖像,可以在圖像中移動搜索窗口,檢測每一個位置來確定可能的目標。為了搜索不同大小的目標物體,分類器被設計為可以進行尺寸改變,這樣比改變待檢圖像的尺寸大小更為有效。所以,為了在圖像中檢測未知大小的目標物體,掃描程序通常需要用不同比例大小的搜索窗口對圖片進行幾次掃描。
㈥ 新手學習opencv打算做運動目標實時監測如何入手
opencv只是個工具,它實現了計算機視覺領域很多很實用的演算法。
學習opencv之前請先對計算機視覺的基礎知識進行學習,建議至少學習一本計算機視覺的理論書籍和一本圖像處理的理論書籍
有了以上基本的理論基礎,再學習opencv,教程可以看,但更多的應該是看參考文檔。opencv的參考文檔是非常完善的,有看不懂的再到網上搜索,要抓住這個函數有什麼用,在什麼情況下用,輸入輸出分別是什麼這條主線來學習。
另外關於opencv1.0和2.0以上版本
我建議新手從1.0入手,2.0大量使用mat,對於新手來說有些函數使用方法難以理解。
其實1.0版本已經足夠強大了,我做過很多項目,都是用的1.0,對於新手來說,1.0已經足夠你去啃上一年。當然2.0以上版本又多了很多演算法,但其實很多演算法很少用。所以從1.0入手是個不錯的選擇
㈦ 求高手幫忙翻譯一段基於OPENCV的運動目標檢測的程序,詳細翻譯,老師會提問
這種運動目標檢測的方法還是很經典的,下面寫了一些注釋僅作參考,希望對你有所幫助。
#include "stdafx.h"
#include "cv.h"
#include "highgui.h"
#include <time.h>
#include <math.h>
#include <ctype.h>
#include <stdio.h>
#include <string.h>
const double MHI_DURATION = 0.1;//定義運動跟蹤的最大時間
const double MAX_TIME_DELTA = 0.5;
const double MIN_TIME_DELTA = 0.05;
const int N = 3;//定義數組的維度為3
const int CONTOUR_MAX_AERA = 10;//定義的閾值
IplImage **buf = 0;
int last = 0;
IplImage *mhi = 0;
CvFilter filter = CV_GAUSSIAN_5x5;//高斯卷積濾波
CvConnectedComp *cur_comp, min_comp;//定義連通域操作的存儲
CvConnectedComp comp;//定義連通域操作的存儲
CvMemStorage *storage;//定義內存分配
CvPoint pt[4];//定義點的存儲
/*****************************
*下面update_mhi函數輸入img,輸出識別結果dst,閾值diff_threshold
*/
void update_mhi( IplImage* img, IplImage* dst, int diff_threshold )
{
double timestamp = clock()/1.; //返回從「開啟這個程序進程」到「程序中調用clock()函數」時之間的CPU時鍾計時單元
CvSize size = cvSize(img->width,img->height); //獲取圖像的寬和高
int i, idx1, idx2;
IplImage* silh;
IplImage* pyr = cvCreateImage( cvSize((size.width & -2)/2, (size.height & -2)/2), 8, 1 );//
CvMemStorage *stor;//申請內存
CvSeq *cont;//定義保存數據的結構
/*先進行數據的初始化*/
if( !mhi || mhi->width != size.width || mhi->height != size.height )
{
//分配內存操作:如果buf是空值,則分配存儲空間
if( buf == 0 )
{
buf = (IplImage**)malloc(N*sizeof(buf[0]));//利用malloc動態分配內存
memset( buf, 0, N*sizeof(buf[0]));//作用是在一段內存塊中填充某個給定的值,此處值為0
}
//創建通道為N=3,大小為size的圖像存儲
for( i = 0; i < N; i++ )
{
cvReleaseImage( &buf[i] );//釋放buf
buf[i] = cvCreateImage( size, IPL_DEPTH_8U, 1 );//創建buf[i]
cvZero( buf[i] );//初始化為0
}
cvReleaseImage( &mhi );//釋放變數mhi
mhi = cvCreateImage( size, IPL_DEPTH_32F, 1 );//創建mhi,大小為size,深度為IPL_DEPTH_32F,1個通道
cvZero( mhi ); ///初始化為0
}
cvCvtColor( img, buf[last], CV_BGR2GRAY );//將RGB圖像img轉換成gray灰度圖像buf
idx1 = last;//將last賦值到idx1
idx2 = (last + 1) % N; //計算(last + 1)除以N的余數
last = idx2;//將idx2賦值到last
silh = buf[idx2];//將buf[idx2]賦值到silh
//下面計算buf[idx1]與buf[idx2]差的絕對值,輸出結果存入silh
cvAbsDiff( buf[idx1], buf[idx2], silh );
//下面對單通道數組silh應用固定閾值操作,閾值為30,閾值化類型為CV_THRESH_BINARY最大值為255
cvThreshold( silh, silh, 30, 255, CV_THRESH_BINARY );
//去掉影像(silh) 以更新運動歷史圖像為mhi,當前時間為timestamp,運動跟蹤的最大時間為MHI_DURATION=0.1
cvUpdateMotionHistory( silh, mhi, timestamp, MHI_DURATION );
//下面對mhi進行線性變換操作,輸出結果存入dst:dst(I)=mhi(I)*第二個參數 + 第三個參數
cvCvtScale( mhi, dst, 255./MHI_DURATION,
(MHI_DURATION - timestamp)*255./MHI_DURATION );
cvCvtScale( mhi, dst, 255./MHI_DURATION, 0 );
cvSmooth( dst, dst, CV_MEDIAN, 3, 0, 0, 0 );//對dst進行中值濾波
cvPyrDown( dst, pyr, 7 );//利用卷積濾波器對dst進行下采樣
cvDilate( pyr, pyr, 0, 1 );//對圖像pyr使用3*3長方形進行膨脹操作
cvPyrUp( pyr, dst, 7 );//利用卷積濾波器對dst進行上采樣
stor = cvCreateMemStorage(0);//動態內存存儲創建內存塊
cont = cvCreateSeq(CV_SEQ_ELTYPE_POINT, sizeof(CvSeq), sizeof(CvPoint) , stor);//創建存儲結構
//函數cvFindContours為尋找圖像dst的角點,數據存入cont中,其中包含角點的坐標值
cvFindContours( dst, stor, &cont, sizeof(CvContour),
CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE, cvPoint(0,0));
for(;cont;cont = cont->h_next)
{
CvRect r = ((CvContour*)cont)->rect;//創建矩形區域
if(r.height * r.width > CONTOUR_MAX_AERA)
{
//下面是在圖像Img上繪制紅色的矩形框,利用左上點和右下點
cvRectangle( img, cvPoint(r.x,r.y),
cvPoint(r.x + r.width, r.y + r.height),
CV_RGB(255,0,0), 1, CV_AA,0);
}
}
cvReleaseMemStorage(&stor);//釋放內存
cvReleaseImage( &pyr );//釋放結構體
}
int _tmain(int argc, _TCHAR* argv[])
{
IplImage* motion = 0;
CvCapture* capture = 0;
capture = cvCaptureFromFile("D://Capture1.avi");//獲取視頻文件
if( capture )
cvNamedWindow( "視頻分析", 1 );//創建窗口
{
for(;;)
{
IplImage* image;
if( !cvGrabFrame( capture ))//如果讀取視頻失敗,則退出
break;
image = cvRetrieveFrame( capture );//獲取圖像
if( image )
{
if( !motion )
{
motion = cvCreateImage( cvSize(image->width,image->height), 8, 1 );
cvZero( motion );
motion->origin = image->origin;
}
}
update_mhi( image, motion, 60);//運動目標檢測,閾值為60
cvShowImage( "視頻分析", image );//在窗口中顯示圖像
if( cvWaitKey(10) >= 0 )
break;
}
cvReleaseCapture( &capture );//釋放
cvDestroyWindow( "視頻分析" );//釋放窗口
}
return 0;
}
㈧ 如何用OpenCV訓練自己的分類器
目標檢測方法最初由Paul Viola [Viola01]提出,並由Rainer Lienhart [Lienhart02]對這一方法進行了改善。該方法的基本步驟為: 首先,利用樣本(大約幾百幅樣本圖片)的 harr 特徵進行分類器訓練,得到一個級聯的boosted分類器。
分類器中的"級聯"是指最終的分類器是由幾個簡單分類器級聯組成。在圖像檢測中,被檢窗口依次通過每一級分類器, 這樣在前面幾層的檢測中大部分的候選區域就被排除了,全部通過每一級分類器檢測的區域即為目標區域。
分類器訓練完以後,就可以應用於輸入圖像中的感興趣區域的檢測。檢測到目標區域分類器輸出為1,否則輸出為0。為了檢測整副圖像,可以在圖像中移動搜索窗口,檢測每一個位置來確定可能的目標。 為了搜索不同大小的目標物體,分類器被設計為可以進行尺寸改變,這樣比改變待檢圖像的尺寸大小更為有效。所以,為了在圖像中檢測未知大小的目標物體,掃描程序通常需要用不同比例大小的搜索窗口對圖片進行幾次掃描。
目前支持這種分類器的boosting技術有四種: Discrete Adaboost, Real Adaboost, Gentle Adaboost and Logitboost。
"boosted" 即指級聯分類器的每一層都可以從中選取一個boosting演算法(權重投票),並利用基礎分類器的自我訓練得到。
根據上面的分析,目標檢測分為三個步驟:
1、 樣本的創建
2、 訓練分類器
3、 利用訓練好的分類器進行目標檢測。
㈨ 「opencv」是什麼
OpenCV是一個用於圖像處理、分析、機器視覺方面的開源函數庫.
無論你是做科學研究,還是商業應用,opencv都可以作為你理想的工具庫,因為,對於這兩者,它完全是免費的。
該庫採用C及C++語言編寫,可以在windows, linux, mac OSX系統上面運行。該庫的所有代碼都經過優化,計算效率很高,因為,它更專注於設計成為一種用於實時系統的開源庫。opencv採用C語言進行優化,而且,在多核機器上面,其運行速度會更快。它的一個目標是提供友好的機器視覺介面函數,從而使得復雜的機器視覺產品可以加速面世。該庫包含了橫跨工業產品檢測、醫學圖像處理、安防、用戶界面、攝像頭標定、三維成像、機器視覺等領域的超過500個介面函數。
同時,由於計算機視覺與機器學習密不可分,該庫也包含了比較常用的一些機器學習演算法。或許,很多人知道,圖像識別、機器視覺在安防領域有所應用。但,很少有人知道,在航拍圖片、街道圖片(例如google street view)中,要嚴重依賴於機器視覺的攝像頭標定、圖像融合等技術。
近年來,在入侵檢測、特定目標跟蹤、目標檢測、人臉檢測、人臉識別、人臉跟蹤等領域,opencv可謂大顯身手,而這些,僅僅是其應用的冰山一角。
如今,來自世界各地的各大公司、科研機構的研究人員,共同維護支持著opencv的開源庫開發。這些公司和機構包括:微軟,IBM,索尼、西門子、google、intel、斯坦福、MIT、CMU、劍橋。。。。