国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【OpenCV】車輛識別 目標(biāo)檢測 級聯(lián)分類器 C++ 案例實現(xiàn)

這篇具有很好參考價值的文章主要介紹了【OpenCV】車輛識別 目標(biāo)檢測 級聯(lián)分類器 C++ 案例實現(xiàn)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

前言

一、目標(biāo)檢測技術(shù)

二、樣本采集工作原理

三、創(chuàng)建自己的級聯(lián)分類器

Step1:準(zhǔn)備好樣本圖像

Step2:環(huán)境配置(OpenCV win10)

Step3:設(shè)置路徑

Step4:實現(xiàn)樣本數(shù)據(jù)采集?

Step5:實現(xiàn)樣本數(shù)據(jù)訓(xùn)練

Step6:生成級聯(lián)分類器文件?

四、案例實現(xiàn)

Step1:灰度處理

Step2:二次壓縮

Step3:直方圖均衡化

Step4:標(biāo)定、框選目標(biāo)

??案例完整代碼

五、總結(jié)?


前言

本文繼續(xù)以車輛識別為目標(biāo),繼續(xù)改進方法,以此提高車輛識別進準(zhǔn)度,核心的內(nèi)容包括:OpenCV級聯(lián)分類器概念創(chuàng)建自己的級聯(lián)分類器以及使用級聯(lián)分類器對車流進行識別?

一、目標(biāo)檢測技術(shù)

目前常用實用性目標(biāo)檢測與跟蹤的方法有以下兩種:

  • 幀差法
  • 識別原理:基于前后兩幀圖像之間的差異進行對比,獲取圖像畫面中正在運動的物體從而達到目標(biāo)檢測
  • 缺點:畫面中所有運動中物體都能識別
  • 舉個例子:我們的目標(biāo)是識別運動的車輛,但是,在畫面中鏡頭晃動,大風(fēng)吹過樹葉飄動也會被計算在甄別范圍內(nèi),這就會導(dǎo)致甄別物出現(xiàn)錯誤
  • 級聯(lián)分類器
  • 那么,有沒有更好的方式能降低我們甄別目標(biāo)出現(xiàn)錯誤的概率呢?
  • 這邊就可以使用我們的級聯(lián)分類器了,如果我們的識別目標(biāo)是車輛,那就需要把車輛相關(guān)的信息全部統(tǒng)計出來,比如:車輛顏色、車輛形狀、車輛大小等信息,將他們存儲在一個文件中,以提高甄別準(zhǔn)確度,這個文件就是級聯(lián)分類器
  • 級聯(lián)分類器也是機器視覺和機器學(xué)習(xí)中非常重要的一個環(huán)節(jié)

二、樣本采集工作原理

  • 分析一?

使用基于Haar特征的級聯(lián)分類器的對象檢測,這是一種基于機器學(xué)習(xí)的方法,其中從許多正負(fù)圖像中訓(xùn)練級聯(lián)函數(shù),然后,用于檢測其他圖像中的對象,在這里,我將進行人臉檢測舉例說明,最初,該算法需要大量正圖像(面部圖像)和負(fù)圖像(無面部圖像)來訓(xùn)練分類器,?然后,我們需要從中提取特征,為此,使用下圖所示的Haar功能,?它們就像我們的卷積核一樣,每個特征都是通過從黑色矩形下的像素總和中減去白色矩形下的像素總和而獲得的單個值

【OpenCV】車輛識別 目標(biāo)檢測 級聯(lián)分類器 C++ 案例實現(xiàn)

  • 分析二

現(xiàn)在,每個內(nèi)核的所有可能大小和位置都用于計算許多功能,試想一下它產(chǎn)生多少計算?即使是一個24x24的窗口也會產(chǎn)生超過160000個特征,這對于每個特征計算,我們需要找到白色和黑色矩形下的像素總和,為了解決這個問題,引入了整體圖像,無論你的圖像有多大,它都會將給定像素的計算減少到僅涉及四個像素的操作,它使事情變得更快,?但是,在我們計算的所有這些特征中,大多數(shù)都不相關(guān),例如,下圖,第一行顯示了兩個良好的特征,選擇的第一個特征似乎著眼于眼睛區(qū)域通常比鼻子和臉頰區(qū)域更暗的性質(zhì),選擇的第二個特征依賴于眼睛比鼻梁更黑的屬性,但是,將相同的窗口應(yīng)用于臉頰或其他任何地方都是無關(guān)緊要的,那么,我們將如何從16萬多個功能中選擇最佳特征?

【OpenCV】車輛識別 目標(biāo)檢測 級聯(lián)分類器 C++ 案例實現(xiàn)

我們將所有特征應(yīng)用于所有訓(xùn)練圖像,對于每個特征,它會找到最佳的閾值,該閾值會將人臉分為正面和負(fù)面,顯然,會出現(xiàn)錯誤或分類錯誤,我們選擇錯誤率最低的特征,這意味著它們是對人臉和非人臉圖像進行最準(zhǔn)確分類的特征,此過程并非如此簡單,在開始時,每個圖像的權(quán)重均相等,在每次分類后,錯誤分類的圖像的權(quán)重都會增加,然后執(zhí)行相同的過程,將計算新的錯誤率,還要計算新的權(quán)重,繼續(xù)進行此過程,直到達到所需的精度或錯誤率或找到所需的功能數(shù)量為止,?最終分類器是這些弱分類器的加權(quán)和,之所以稱為弱分類,是因為僅憑它不能對圖像進行分類,而是與其他分類一起形成強分類器,甚至200個功能都可以提供95%的準(zhǔn)確度檢測

三、創(chuàng)建自己的級聯(lián)分類器

Step1:準(zhǔn)備好樣本圖像

  • 正樣本數(shù)據(jù)采集(我們需要檢識別的目標(biāo)圖片,例如:車輛)

【OpenCV】車輛識別 目標(biāo)檢測 級聯(lián)分類器 C++ 案例實現(xiàn)

  • 負(fù)樣本數(shù)據(jù)采集(非檢測物的圖片)

我們可以在生活中觀察到,大馬路上除了車輛,還存在諸多的干擾,比如說:行人、斑馬線、交通設(shè)別(路障、護欄、紅綠燈、路燈等等),以及上文所說的風(fēng)吹動,樹葉飄動等等

【OpenCV】車輛識別 目標(biāo)檢測 級聯(lián)分類器 C++ 案例實現(xiàn)

【OpenCV】車輛識別 目標(biāo)檢測 級聯(lián)分類器 C++ 案例實現(xiàn)

Step2:環(huán)境配置(OpenCV win10)

  • 下載OpenCV win10系統(tǒng)安裝包
  • 從安裝包中的opencv\build\x64\vc15\bin 找到

? ? ? ? -??opencv_createsamples.exe

? ? ? ? -? opencv_traincascade.exe

? ? ? ??-? opencv_world342.dll

  • 將以上文件拷貝到正負(fù)樣本文件路徑下

【OpenCV】車輛識別 目標(biāo)檢測 級聯(lián)分類器 C++ 案例實現(xiàn)

Step3:設(shè)置路徑

  • 創(chuàng)建正負(fù)樣本的圖像路徑的?.txt文件

【OpenCV】車輛識別 目標(biāo)檢測 級聯(lián)分類器 C++ 案例實現(xiàn)

【OpenCV】車輛識別 目標(biāo)檢測 級聯(lián)分類器 C++ 案例實現(xiàn)

Step4:實現(xiàn)樣本數(shù)據(jù)采集?

  • 調(diào)用opencv中opencv_createsamples.exe實現(xiàn)樣本數(shù)據(jù)采集

通過命令行執(zhí)行命令進行樣本采集生成car_samples.vec正樣本矢量集文件,命令行如下:

opencv_createsamples.exe -info car_list.txt -vec car_samples.vec ?-num 80 -w 33 -h 33

  • - info字段填寫正樣本描述文件
  • - vec用于保存制作的正樣本
  • - num制定正樣本的數(shù)目
  • ?- w和-h分別指定正樣本的寬和高
  • 在windows下終端運行,如下圖所示:?

【OpenCV】車輛識別 目標(biāo)檢測 級聯(lián)分類器 C++ 案例實現(xiàn)

Step5:實現(xiàn)樣本數(shù)據(jù)訓(xùn)練

  • 調(diào)用opencv中opencv_traincascade.exe對樣本進行訓(xùn)練?

通過命令行執(zhí)行命令進行訓(xùn)練生成,命令行如下:

opencv_traincascade.exe -data data -vec car_samples.vec ?-bg ng_data.txt ?-numPos 80 -numNeg 240 -numStages 7 -w 33 -h 33 -minHitRate 0.995 -maxFalseAlarmRate 0.45 -mode ALL

  • -data:指定保存訓(xùn)練結(jié)果的文件夾
  • -vec:指定正樣本集; -bg:指定負(fù)樣本的描述文件夾?
  • -numPos:指定每一級參與訓(xùn)練的正樣本的數(shù)目(要小于正樣本總數(shù))
  • -numNeg:指定每一級參與訓(xùn)練的負(fù)樣本的數(shù)目(可以大于負(fù)樣本圖片的總數(shù))
  • -numStage:訓(xùn)練的級數(shù)
  • -w:正樣本的寬
  • -h:正樣本的高?
  • -minHitRate:每一級需要達到的命中率(一般取值0.95-0.995)
  • -maxFalseAlarmRate:每一級所允許的最大誤檢率?
  • -mode:使用Haar-like特征時使用,可選BASIC、CORE或者ALL?
  • 另外,還可指定以下字段:
  • -featureType:可選HAAR或LBP,默認(rèn)為HAAR;
  • 在windows下終端運行,進行訓(xùn)練,每一層訓(xùn)練都會有顯示,如下圖所示:??
  • PS:訓(xùn)練時需要考慮一下自身電腦配置,小心電腦跑出問題!

【OpenCV】車輛識別 目標(biāo)檢測 級聯(lián)分類器 C++ 案例實現(xiàn)

Step6:生成級聯(lián)分類器文件?

  • 生成文件,如下所示:?

【OpenCV】車輛識別 目標(biāo)檢測 級聯(lián)分類器 C++ 案例實現(xiàn)

四、案例實現(xiàn)

我們將繼續(xù)編寫代碼通過C++ 編寫 OpenCVQt上來展現(xiàn)出我們的案例效果

【OpenCV】車輛識別 目標(biāo)檢測 級聯(lián)分類器 C++ 案例實現(xiàn)

Step1:灰度處理

  • 將我們的色彩通道縮小,簡化矩陣,提高運算速度?
    //【灰度處理】
    Mat gray;
    cvtColor(frame,gray,CV_RGB2GRAY);

Step2:二次壓縮

  • 灰度處理還不夠,級聯(lián)分類器比幀差法還更加慢,因此,再將灰度圖大小壓縮一半左右?
    //一次還不夠,級聯(lián)分類器比幀差法還更加慢
    //【二次壓縮】因此,再將灰度圖大小壓縮一半左右
    Mat smalling(cvRound(frame.rows/scale),cvRound(frame.cols/scale),CV_8UC1);
    resize(gray,smalling,smalling.size(),0,0,INTER_LINEAR);

Step3:直方圖均衡化

  • 將縮小一半的灰度圖進行均值化使其更加黑白分明
    equalizeHist(smalling,smalling);
    //imshow("smalling",smalling);

Step4:標(biāo)定、框選目標(biāo)

  • 調(diào)用級聯(lián)分類器進行模型匹配并框選目標(biāo)
    //調(diào)用級聯(lián)分類器進行模型匹配并框出內(nèi)容
    vector<Rect>cars;
    //【參數(shù)說明】 待檢測的圖片幀  被檢測物體的矩形向量容器  每次搜索減小的圖像比例  檢測目標(biāo)周圍相鄰矩形的最小個數(shù)(此處設(shè)為2個) 類型 目標(biāo)區(qū)域的大小尺寸
    cascade.detectMultiScale(smalling,cars,1.05,5,0|CV_HAAR_SCALE_IMAGE,Size(25,25));

    vector<Rect>::const_iterator iter;
    //【繪制標(biāo)記框】注意,標(biāo)記要畫在原幀上,要講方框的大小和幀坐標(biāo)擴大,因為是根據(jù)灰度圖識別的,灰度圖被縮小了
    for(iter=cars.begin();iter!=cars.end();iter++)
    {
        rectangle(frame,
                  cvPoint(cvRound(iter->x*scale),cvRound(iter->y*scale)),
                  cvPoint(cvRound((iter->x+iter->width)*scale),cvRound((iter->y+iter->height)*scale)),
                  Scalar(0,255,0),2,8
                    );
    }
    imshow("frame",frame);
}

??案例完整代碼

#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;

void datectCarDaw(Mat &frame,CascadeClassifier cascade,double scale)
{
    //【灰度處理】
    Mat gray;
    cvtColor(frame,gray,CV_RGB2GRAY);

    //一次還不夠,級聯(lián)分類器比幀差法還更加慢
    //【二次壓縮】因此,再將灰度圖大小壓縮一半左右
    Mat smalling(cvRound(frame.rows/scale),cvRound(frame.cols/scale),CV_8UC1);
    resize(gray,smalling,smalling.size(),0,0,INTER_LINEAR);

    //【直方圖均衡化】將縮小一半的灰度圖進行均值化使其更加黑白分明
    equalizeHist(smalling,smalling);
    //imshow("smalling",smalling);

    //調(diào)用級聯(lián)分類器進行模型匹配并框出內(nèi)容
    vector<Rect>cars;
    //【參數(shù)說明】 待檢測的圖片幀  被檢測物體的矩形向量容器  每次搜索減小的圖像比例  檢測目標(biāo)周圍相鄰矩形的最小個數(shù)(此處設(shè)為2個) 類型 目標(biāo)區(qū)域的大小尺寸
    cascade.detectMultiScale(smalling,cars,1.05,5,0|CV_HAAR_SCALE_IMAGE,Size(25,25));

    vector<Rect>::const_iterator iter;
    //【繪制標(biāo)記框】注意,標(biāo)記要畫在原幀上,要講方框的大小和幀坐標(biāo)擴大,因為是根據(jù)灰度圖識別的,灰度圖被縮小了
    for(iter=cars.begin();iter!=cars.end();iter++)
    {
        rectangle(frame,
                  cvPoint(cvRound(iter->x*scale),cvRound(iter->y*scale)),
                  cvPoint(cvRound((iter->x+iter->width)*scale),cvRound((iter->y+iter->height)*scale)),
                  Scalar(0,255,0),2,8
                    );
    }
    imshow("frame",frame);
}

int main(int argc, char *argv[])
{
    //級聯(lián)分類器(模型)
    CascadeClassifier cascade;
    cascade.load("C:/Users/86177/Desktop/cars-face/cars.xml");//讀取級聯(lián)分類器

    Mat frame;
    VideoCapture cap("C:/Users/86177/Desktop/image/test.mp4");//視頻路徑
    while (cap.read(frame))
    {
        imshow("video",frame);//將讀到的幀顯示出來
        datectCarDaw(frame,cascade,2);//將讀到的幀傳入函數(shù)用作識別
        waitKey(5);//延時5ms
    }
    return 0;
}
  • 實現(xiàn)效果,總體來說還是相當(dāng)不錯的,相較于幀差法而言,精度提高很多
  • 級聯(lián)分類器實現(xiàn),如下圖所示:

【OpenCV】車輛識別 目標(biāo)檢測 級聯(lián)分類器 C++ 案例實現(xiàn)

  • 為了方便對比,再次使用幀差法實現(xiàn),可以看到移動的電動車都被識別進去了,如下圖所示:
  • 幀差法實現(xiàn),如下圖所示:

【OpenCV】車輛識別 目標(biāo)檢測 級聯(lián)分類器 C++ 案例實現(xiàn)

五、總結(jié)?

  • 本文核心的內(nèi)容包括:OpenCV級聯(lián)分類器概念創(chuàng)建自己的級聯(lián)分類器以及使用級聯(lián)分類器對車流進行識別
  • 以車輛識別為例子,講解了級聯(lián)分類器相較于幀差法的實戰(zhàn)案例,實際效果還是不錯的
  • 車輛識別在我們?nèi)粘I钪蟹浅3R?,是一個很經(jīng)典的案例,本案例采用了較高級別的級聯(lián)分類器,可以實現(xiàn)對車輛較高精度的識別,車輛識別還是需要更大更復(fù)雜的樣本量才能在復(fù)雜環(huán)境下對車輛進行精確的識別,總體而言效果相較于幀差法更加精準(zhǔn)了!新能源汽車的發(fā)展,與車輛識別同理的無人駕駛技術(shù),在針對實際路況的識別難度還是較大的,各大巨頭還在努力研究相關(guān)技術(shù),相信在不久的將來,我們能看到無人駕駛技術(shù)達到較為成熟的一天!

以上就是本文的全部內(nèi)容啦!如果對您有幫助,麻煩點贊啦!收藏啦!歡迎各位評論區(qū)留言??!?

【OpenCV】車輛識別 目標(biāo)檢測 級聯(lián)分類器 C++ 案例實現(xiàn)文章來源地址http://www.zghlxwxcb.cn/news/detail-446154.html

到了這里,關(guān)于【OpenCV】車輛識別 目標(biāo)檢測 級聯(lián)分類器 C++ 案例實現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 目標(biāo)檢測YOLO實戰(zhàn)應(yīng)用案例100講-小麥麥穗的目標(biāo)檢測與雜草分類識別研究

    目錄 前言 相關(guān)理論知識? 彩色圖像的空間模型簡介? 卷積神經(jīng)網(wǎng)絡(luò)簡介?

    2024年02月16日
    瀏覽(23)
  • (終章)[圖像識別]13.OpenCV案例 自定義訓(xùn)練集分類器物體檢測

    (終章)[圖像識別]13.OpenCV案例 自定義訓(xùn)練集分類器物體檢測

    目錄 一、準(zhǔn)備階段 ?二、圖片處理 ?三、生成描述文件 ?四、生成.vec文件 ? 五、生成.xml自定義分類器文件 ?六、識別檢測 正樣本集: 正樣本集為包含“識別物體”的灰度圖,一般大于等于2000張,尺寸不能太大,尺寸太大會導(dǎo)致訓(xùn)練時間過長。 負(fù)樣本集: 負(fù)樣本集為不含

    2024年02月06日
    瀏覽(21)
  • Haar特征和級聯(lián)分類器目標(biāo)檢測介紹及應(yīng)用

    Haar特征和級聯(lián)分類器目標(biāo)檢測介紹及應(yīng)用

    Haar特征和級聯(lián)分類器是一種經(jīng)典的目標(biāo)檢測算法,適用于檢測物體在圖像中的位置、大小和姿態(tài)等。本教程將詳細介紹Haar特征和級聯(lián)分類器的原理、實現(xiàn)和應(yīng)用。 Haar特征是一種圖像處理中的特征提取方法,用于描述圖像中的紋理、邊緣和線條等特征。基于Haar小波變換的思

    2024年02月08日
    瀏覽(20)
  • python opencv 級聯(lián)Haar多目標(biāo)檢測

    python opencv 級聯(lián)Haar多目標(biāo)檢測

    一、基于OpenCV的haar分類器實現(xiàn)笑臉檢測 1、Haar分類器介紹 ??Haar分類器是一種基于機器學(xué)習(xí)的目標(biāo)檢測算法,它使用Haar特征描述圖像中的目標(biāo)。Haar特征是基于圖像亮度的局部差異計算得出的,可以用來描述目標(biāo)的邊緣、角落和線條等特征。 使用Haar分類器進行目標(biāo)檢測的步

    2024年02月17日
    瀏覽(22)
  • opencv案例: 車輛檢測

    opencv案例: 車輛檢測 說明:這是在嗶哩嗶哩上看李超老師的視頻時,他講的案例,我是搬運工。 實現(xiàn)功能: 1、識別出圖片中的汽車對象 2、對車輛進行統(tǒng)計,并將統(tǒng)計結(jié)果展示出來 涉及到的知識點: 圖像和視頻的加載、展示; 基本圖像繪制; 基本圖像運算與處理; 形態(tài)學(xué)

    2024年02月22日
    瀏覽(18)
  • 使用opencv實現(xiàn)人臉檢測:Haar級聯(lián)分類器

    使用opencv實現(xiàn)人臉檢測:Haar級聯(lián)分類器

    人臉檢測的目標(biāo)是確定圖像或視頻中是否存在人臉。如果存在多個面,則每個面都被一個邊界框包圍,因此我們知道這些面的位置。 人臉檢測算法的主要目標(biāo)是準(zhǔn)確有效地確定圖像或視頻中人臉的存在和位置。這些算法分析數(shù)據(jù)的視覺內(nèi)容,搜索與面部特征相對應(yīng)的模式和特

    2024年04月29日
    瀏覽(23)
  • OpenCV實戰(zhàn)(31)——基于級聯(lián)Haar特征的目標(biāo)檢測

    在機器學(xué)習(xí)基礎(chǔ)一節(jié)中,我們介紹了機器學(xué)習(xí)的一些基本概念,并通過使用不同類別的樣本來構(gòu)建分類器。但這種方法訓(xùn)練分類器需要存儲所有樣本的表示,然后通過查看最近標(biāo)記點(最近鄰居)來預(yù)測新實例的標(biāo)簽。對于大多數(shù)機器學(xué)習(xí)方法,訓(xùn)練是一個迭代過程,在此過程

    2024年02月09日
    瀏覽(14)
  • 基于opencv深度學(xué)習(xí),交通目標(biāo)檢測,行人車輛檢測,人流統(tǒng)計,交通流量檢測

    基于opencv深度學(xué)習(xí),交通目標(biāo)檢測,行人車輛檢測,人流統(tǒng)計,交通流量檢測

    文章目錄 0 前言+ 1. 目標(biāo)檢測概況+ 1.1 什么是目標(biāo)檢測?+ 1.2 發(fā)展階段 2. 行人檢測+ 2.1 行人檢測簡介+ 2.2 行人檢測技術(shù)難點+ 2.3 行人檢測實現(xiàn)效果+ 2.4 關(guān)鍵代碼-訓(xùn)練過程 最后 設(shè)計項目案例演示地址: 鏈接 畢業(yè)設(shè)計代做一對一指導(dǎo)項目方向涵蓋: 1.1 什么是目標(biāo)檢測? 目標(biāo)檢

    2024年02月04日
    瀏覽(27)
  • opencv 基于haar特征的級聯(lián)分類器實現(xiàn)圖象識別原理

    opencv 基于haar特征的級聯(lián)分類器實現(xiàn)圖象識別原理

    暑假的時候做了一個智能機械臂,用到了opencv里的級聯(lián)分類器,這里寫一下我的理解 級聯(lián)分類器上手簡單,同時Haar特征支持一些特殊圖形的檢測,例如人臉,我訓(xùn)練的是一個純色模型,效果并不好,不建議用該種方法識別一些顏色梯度變化不明顯的物體 (1)haar特征? ? 圖

    2024年02月07日
    瀏覽(22)
  • 目標(biāo)檢測YOLO實戰(zhàn)應(yīng)用案例100講-基于卷積神經(jīng)網(wǎng)絡(luò)的 車輛目標(biāo)檢測及跟蹤方法研究(續(xù))

    目錄 基于JDE算法的實時多目標(biāo)車輛跟蹤方法 4.1引言 4.2 JDE多目標(biāo)跟蹤算法

    2024年02月09日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包