Opencv2.4.9多尺度檢測detectMultiScale函式原始碼分析
一、簡介
在Opencv2.4.9的原始碼中,對modules模組opencv_objdetect子專案中CascadeClasssifier類中的detectMultiScale函式進行了分析,涉及程式碼在cascadedetect.hpp和cascadedetect.cpp中。
CascadeClassifier為級聯分類器檢測類,使用Adaboost的方法,提取LBP\HOG\HAAR特徵進行目標檢測,載入traincascade進行訓練的分類器。
detectMultiScale能夠實現多尺度檢測,但多尺度檢測是通過縮放影象來完成的。
二、函式簡介
voidCascadeClassifier::detectMultiScale( const Mat& image, —Mat
vector<Rect>& objects,—檢測得到的矩形
doublescaleFactor, —影象縮放因子,必須大於1
intminNeighbors,—構成檢測目標的相鄰矩形的最小個數
int flags, —舊分類器使用,新分類器棄用
Size minObjectSize, —
Size maxObjectSize)—最大檢測視窗大小(預設是影象大小)
三、函式使用
在進入detectMultiScal函式之前,首先需要對CascadeClassifier做初始化。
1. 初始化——read函式
CascadeClassifier的初始化很簡單:
cv::CascadeClassifierclassifier;
classifier.load(“cascade.xml”);//這裡的xml是訓練得到的分類器xml
CascadeClassifier類中既有load也有read函式,二者是相同的,load將引用read函式。
1.1 xml的結構
訓練得到的分類器以xml形式儲存,整體上它包括stageType、featureType、height、width、stageParams、featureParams、stageNum、stages、features節點。
除stages和features外,其他主要是一些分類器的引數。
Stages中包含stageNum個stage(訓練程式設定),每個stage中包含多個weakClassifiers,而每個weakClassifier中又包含一個internalNodes和一個leafValues。internalNodes中變數代表一個node,分別為node中的left/right標記、特徵池中的ID和threshold。leafValues中兩個變數代表一個node,分別為left leaf的值和right leaf的值。
而features是分類器的特徵池,每個特徵包含一個矩形。
1.2 read的過程
下面是read程式碼,主要包括從xml中獲取兩部分內容:data和featureEvaluator的讀取。
1.3 read的結果
read的結果一是初始化了分類器的特徵型別、最小檢測視窗size等引數;二是建立級聯的分類器樹;三是提取了xml中的特徵池。
2. detectMultiscale函式
在load分類器之後,可以呼叫該函式對一幅影象做多尺度檢測。
1.1 顏色通道
如果輸入是彩色影象,程式碼會自動轉為灰度圖。
1.2 縮放尺寸
輸入影象尺寸必須大於分類器樣本尺寸。
影象尺寸經縮放因子後,再四舍五捨得到尺寸。
ex1:
分類器:18*18;輸入影象:24*24;detectMultiScale(frame_gray,vct_rc, 1.05, 1, 0, Size(20,20));
多尺度檢測尺寸:22*22、21*21、20*20、19*19
ex2:
分類器:18*18;輸入影象:24*24;detectMultiScale(frame_gray, vct_rc, 1.05, 1, 0, Size(21,21));
多尺度檢測尺寸:21*21、20*20、19*19
ex3:
分類器:18*18;輸入影象:24*24;detectMultiScale(frame_gray,vct_rc, 1.05, 1, 0, Size(22,22));
多尺度檢測尺寸:20*20、19*19
ex4:
分類器:18*18;輸入影象:26*26;detectMultiScale(frame_gray,vct_rc, 1.05, 1, 0, Size(22,22));
多尺度檢測尺寸:21*21、20*20、19*19
1.3 平行計算
平行計算內容寫在過載操作()函式體中。
classCV_EXPORTS ParallelLoopBody
{
public:
virtual~ParallelLoopBody();
virtual void operator() (const Range& range) const= 0;
};
CV_EXPORTSvoid parallel_for_(constRange& range, const ParallelLoopBody&body, double nstripes=-1.);
1) detectSingleScale函式中,setImage函式計算積分圖,對於X個特徵,根據對應的X個rect,分別計算各個rect的積分圖,並進行儲存。積分圖是16維的int陣列,跟矩形的對應關係如下圖,每個rect產生8維特徵:
2) setImage函式中,先將原圖進行降取樣,然後提取全圖的積分圖,然後根據updatePtrs函式分配給X個特徵rect的積分圖陣列,放入featurePtr結構體陣列中,有rect和intp[];
X個特徵rect是訓練分類器時分配的,每個rect的寬度和高度為一個block的寬高度;
3) CV_SUM_PTRS:目的是根據原圖的積分圖,計算特徵rect的積分圖陣列。引數ptr為原圖的積分圖資料,tr為當前計算的rect,step為積分圖的寬度;
#defineCV_SUM_PTRS( p0, p1, p2, p3, sum, rect, step ) \
/* (x, y) */ \
(p0) = sum + (rect).x + (step) *(rect).y, \
/* (x + w, y) */ \
(p1) = sum + (rect).x + (rect).width +(step) * (rect).y, \
/* (x , y + h) */ \
(p2) = sum + (rect).x + (step) * ((rect).y+ (rect).height), \
/* (x + w, y + h)*/ \
(p3) = sum + (rect).x + (rect).width +(step) * ((rect).y + (rect).height)
4) calc函式,根據rect的積分圖16維int資料,獲取8位二進位制特徵,所以樣本特徵維數是8*num(rect);
相關推薦
Opencv2.4.9多尺度檢測detectMultiScale函式原始碼分析
一、簡介 在Opencv2.4.9的原始碼中,對modules模組opencv_objdetect子專案中CascadeClasssifier類中的detectMultiScale函式進行了分析,涉及程式碼在cascadedetect.hpp和cascadede
VS2013配置OPENCV2.4.9
rac 菜單 s2d 配置 targe itblog 按鈕 控制 cvs 轉載自->這裏 設置opencv SDK解壓目錄,點擊Extract後解壓 我是習慣於解壓到這個位置的。 解壓過程如上圖。 2、 文件目錄介紹 解壓後會在目錄下生成open
VS2013+opencv2.4.9配置
ner 系統設置 opencv pad 動態庫 adding light hot demo VS2013+opencv2.4.9(10)配置[zz] - yifeier12 - 博客園 http://www.cnblogs.com/cuteshongshong/p/4057
opencv2.4.9 + vs2010 配置
mark 打開 bin 文件 第三方 路徑配置 bit x86 系統選擇 要想學好OpenCV,首先當然要知道怎麽配置環境了。 本人系統軟件硬件環境如下: 以本人的配置環境為例,配置步驟如下。 第一步 下載及解壓OpenCV源碼 雖然很多第三方網站及一些學習論壇會提供
4.9 多表單切換
b- 百度 class 可用 一個 fir switch AS oot 在 web 應用中經常會遇到 frame 嵌套頁面的應用,頁 WebDriver 每次只能在一個頁面上識別元素,對於 frame 嵌套內的頁面上的元素,直接定位是定位是定位不到的。這個時候就需要通過 s
VS2010+OpenCV2.4.9配置
區分大小寫 debug 控制臺應用程序 features font 編輯 avi 接下來 stitch 第一步 下載及解壓OpenCV源碼 官網的下載速度慢 可以到我的網盤下載,地址如下: 鏈接:https://pan.baidu.com/s/1lcKerBOIZ32yz
ubuntu16.04 python opencv2.4.9安裝
href vision 12px 下載安裝 lease name align red light 1. 安裝python: 一般Ubuntu會自帶,如果需要其他自定版本,請自行下載安裝。 2. 下載OpenCV的源碼 OpenCV官網上有linux版本的源碼包可以下載,不
OpenCV2.4.9在VS2010下的安裝教程及部分安裝問題
官網http://opencv.org/有OpenCV2.4.9,無需進行CMake編譯,直接配置就可使用, 安裝和配置方法挺簡單的。 下載程式 下載windows版本的“opencv-2.4.9.exe”,執行解壓至某目錄資料夾,本文中儲存在D盤: D:\Program Fil
0045-OpenCV2.4.9下載地址及連結器配置檔案列表
因為OpenCV3.0的nonfree模組官方並沒有編譯,所以有時候我們使用OpenCV2.4.9進行影象處理的開發。 OpenCV2.4.9下載連結:https://pan.baidu.com/s/1o8FsD2i 密碼:n6ak 配置方法見帖子:https://blog.csdn.net
VS2015 編譯配置 opencv2.4.9 與 dlib1.10。
按 在VS2015 執行opencv 或 dlib 有許多簡便方式。如使用Win pack 編譯好的可執行檔案。參考步驟 opencv.exe 。 但是由於需要使用 一個開源庫 heads-hands-and-faces-tracking ,簡稱heads庫 https://
vs2015下編譯配置opencv2.4.9
參考: vs2015下配置opencv2.4.9 不同點: 1 cmake 選擇 Visual studio 14 2015 win64. 此後的都在64 下操作。 2 新建屬性表。在Debug | 64上右鍵單擊,選擇新增新專案屬性表。 參考第六步: 屬性表 注意
64bit win7+VS2013+opencv2.4.9配置
我的配置是opencv2.4.9與VS2013,在win7 64bit下。 從opencv官網(http://opencv.org/downloads.html),下載安裝檔案,然後雙擊安裝包,類似於解壓,跟著步驟,就安裝到自己想要安裝的位置。 安裝完成後,就先設定下系統變數。 1、
windows10下VS2013搭建opencv2.4.9吐血之作
1、下載opencv2.4.9.exe檔案,然後雙擊extract檔案到指定目錄 2、按此連結安裝opencv:https://www.cnblogs.com/cuteshongshong/p/4057193.html (注意:在配置系統path環境變數後要重啟計算機才能生效) 3、配置完2後
ubuntu14.04中安裝opencv2.4.9
https://blog.csdn.net/chcyj/article/details/78424372 http://jaist.dl.sourceforge.net/project/opencvlibrary/opencv-unix/2.4.9/opencv-2.4.9.zip
VS2010+OpenCV2.4.9環境配置
轉載於:http://blog.csdn.net/bestgonghuibin/article/details/38409613 要想學好OpenCV,首先當然要知道怎麼配置環境了。 本人系統軟體硬體環境如下: 以本人的配置環境為例,配置步驟如下。 第
VS2013+opencv2.4.9配置步驟詳解
1、 下載opencv2.4.9,然後解壓到一個位置 設定opencv SDK解壓目錄,點選Extract後解壓 我是習慣於解壓到這個位置的。 解壓過程如上圖
opencv2.4.9輸出把影象轉換成灰色
#include <stdio.h> #include “stdafx.h” #include"cv.h" #include<highgui.h> using namespace cv; int main() { Mat image=imread(“pic.jpg
配合Opencv2.4.9,CMake3.12.1和VS2010在win10下構建專案踩坑記錄
配合Opencv3,CMake和VS2010在win10下構建專案踩坑記錄 參考https://blog.csdn.net/qq_26623659/article/details/78322782 博文中是x64,但是我配置的是x86。 這個部落格中的內容
Opencv2.4.9原始碼分析——HoughCircles
【原文:http://blog.csdn.net/zhaocj/article/details/50454847】 圖形可以用一些引數進行表示,標準霍夫變換的原理就是把影象空間轉換成引數空間(即霍夫空間),例如霍夫變換的直線檢測就是在距離-角度空間內進行檢測。圓可以表示成:
linux(ubuntu14.04)+cuda7.5+caffe+openCV2.4.9+matlab+cudnn新手配置
ubuntu14.04的安裝 *********************************************************************************