亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

OpenCV實(shí)現(xiàn)車輛識(shí)別和運(yùn)動(dòng)目標(biāo)檢測(cè)

 更新時(shí)間:2022年08月01日 11:23:48   作者:我今年十六歲  
本文主要介紹了OpenCV實(shí)現(xiàn)車輛識(shí)別和運(yùn)動(dòng)目標(biāo)檢測(cè),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

一:車輛識(shí)別成果展示

二:車輛識(shí)別超詳細(xì)步驟解析

步驟一:灰度化處理

灰度處理目的 RGB三通道轉(zhuǎn)灰度單通道 壓縮到原圖片三分之一大小

效果展示:【避免內(nèi)存浪費(fèi) 幀差法對(duì)前后幀圖像灰度化處理】

//1 灰度處理 目的 RGB三通道轉(zhuǎn)灰度單通道 壓縮到原圖片三分之一大小
    cvtColor(frontFrame,frontGray,CV_RGB2GRAY);//前一幀灰度化處理
    cvtColor(afterFrame,afterGray,CV_RGB2GRAY);//后一幀灰度化處理
    //imshow("frontGray",frontGray);//測(cè)試
    //imshow("afterGray",afterGray);//測(cè)試

 步驟二:幀差處理

幀差處理目的 找到幀與幀之間的差異(正在運(yùn)動(dòng)的物體)

效果展示:【運(yùn)動(dòng)目標(biāo)的檢測(cè):運(yùn)動(dòng)事物顯示灰度,靜止事物顯示黑度】

 //2 幀差處理 目的 找到幀與幀之間的差異(正在運(yùn)動(dòng)的物體)
    Mat diff;
    Mat frontGray,afterGray;
    absdiff(frontGray,afterGray,diff);//前后幀對(duì)比存于diff中
    imshow("diff",diff);//測(cè)試

步驟三:二值化處理

二值化處理 目的 將灰度圖繼續(xù)識(shí)別轉(zhuǎn)換為黑白分明的圖像

效果展示:【步驟二中運(yùn)動(dòng)事物顯示灰度,靜止事物顯示黑度,在這里進(jìn)行二值化處理,能夠黑白分明,便于計(jì)算機(jī)識(shí)別運(yùn)動(dòng)目標(biāo),如下右圖二值化處理后黑白分明】【缺點(diǎn):存在白色噪點(diǎn),如下右圖除了車輛外后面的背景也顯示白度,這就是白色噪點(diǎn),需要去除】

    //3 二值化處理 目的 將灰度圖繼續(xù)識(shí)別轉(zhuǎn)換為黑白分明的圖像
    threshold(diff,diff,25,255,CV_THRESH_BINARY);
    imshow("threshold",diff);//測(cè)試

步驟四:圖像降噪

4-1 腐蝕處理 目的 去除白色噪點(diǎn)

效果展示:【步驟三中存在的白色噪點(diǎn)能夠去除,但是在去除白色噪點(diǎn)的同時(shí),也影響了車輛的白度顯示,如下右圖可以看出,車輛白度顯示有所降低,因此還是需要改進(jìn)】

    //4 圖像降噪
    //4-1 腐蝕處理 目的 去除白色噪點(diǎn)
    Mat element = cv::getStructuringElement(MORPH_RECT,Size(3,3));//小于3*3方塊的白色噪點(diǎn)都會(huì)被腐蝕
    erode(diff,diff,element);
    imshow("erode",diff);//測(cè)試

4-2 膨脹處理 目的 把白色區(qū)域變大

效果展示:【如下右圖,將車輛形狀大致顯示,便于框選車輛識(shí)別操作】

    //4-2 膨脹 目的 把白色區(qū)域變大
    Mat element2=cv::getStructuringElement(MORPH_RECT,Size(20,20));
    dilate(diff,diff,element2);
    imshow("dilate",diff);//測(cè)試

步驟五:提取關(guān)鍵點(diǎn) 框選運(yùn)動(dòng)目標(biāo)檢測(cè)

效果展示:車輛識(shí)別成功

    //5 提取關(guān)鍵點(diǎn)
    //5-1 查找特征點(diǎn)
    vector<vector<Point>>contours;
    findContours(diff,contours,CV_RETR_EXTERNAL,CV_CHAIN_APPROX_SIMPLE,Point(0,0));
 
    //5-2 提取關(guān)鍵點(diǎn)
    vector<vector<Point>>contours_poly(contours.size());
    vector<Rect>boundRect(contours.size());
 
    //5-3 確定下四個(gè)點(diǎn)來(lái)用于框選目標(biāo)物體
    int x,y,w,h;
    int num=contours.size();
    for(int i = 0;i < num;i++)
    {
        approxPolyDP(Mat(contours[i]),contours_poly[i],3,true);
        //多邊擬合
        boundRect[i]=boundingRect(Mat(contours_poly[i]));
        x=boundRect[i].x;
        y=boundRect[i].y;
        w=boundRect[i].width;
        h=boundRect[i].height;
        //繪制矩形
        rectangle(resFrame,Point(x,y),Point(x+w,y+h),Scalar(0,0,255),2);
    }

三:車輛識(shí)別完整代碼

#include <iostream>
#include <opencv2/opencv.hpp>
 
using namespace std;
using namespace cv;
 
Mat moveCheck(Mat &frontFrame,Mat &afterFrame)
{
    Mat resFrame,diff;
    Mat frontGray,afterGray;
 
    //克隆當(dāng)前幀畫(huà)面 返回最終結(jié)果
    resFrame = afterFrame.clone();
 
    //1 灰度處理 目的 RGB三通道轉(zhuǎn)灰度單通道 壓縮到原圖片三分之一大小
    cvtColor(frontFrame,frontGray,CV_RGB2GRAY);
    cvtColor(afterFrame,afterGray,CV_RGB2GRAY);
 
    //imshow("frontGray",frontGray);
    //imshow("afterGray",afterGray);
 
    //2 幀差處理 目的 找到幀與幀之間的差異(正在運(yùn)動(dòng)的物體)
    absdiff(frontGray,afterGray,diff);
    //imshow("diff",diff);
 
    //3 二值化處理 目的 將灰度圖繼續(xù)識(shí)別轉(zhuǎn)換為黑白分明的圖像
    threshold(diff,diff,25,255,CV_THRESH_BINARY);
    //imshow("threshold",diff);
 
    //4 圖像降噪
    //4-1 腐蝕處理 目的 去除白色噪點(diǎn)
    Mat element = cv::getStructuringElement(MORPH_RECT,Size(3,3));//小于3*3方塊的白色噪點(diǎn)都會(huì)被腐蝕
    erode(diff,diff,element);
    //imshow("erode",diff);
 
    //4-2 膨脹 目的 把白色區(qū)域變大
    Mat element2=cv::getStructuringElement(MORPH_RECT,Size(20,20));
    dilate(diff,diff,element2);
    //imshow("dilate",diff);
 
    //5 提取關(guān)鍵點(diǎn)
    //5-1 查找特征點(diǎn)
    vector<vector<Point>>contours;
    findContours(diff,contours,CV_RETR_EXTERNAL,CV_CHAIN_APPROX_SIMPLE,Point(0,0));
 
    //5-2 提取關(guān)鍵點(diǎn)
    vector<vector<Point>>contours_poly(contours.size());
    vector<Rect>boundRect(contours.size());
 
    //5-3 確定下四個(gè)點(diǎn)來(lái)用于框選目標(biāo)物體
    int x,y,w,h;
    int num=contours.size();
    for(int i = 0;i < num;i++)
    {
        approxPolyDP(Mat(contours[i]),contours_poly[i],3,true);
        //多邊擬合
        boundRect[i]=boundingRect(Mat(contours_poly[i]));
        x=boundRect[i].x;
        y=boundRect[i].y;
        w=boundRect[i].width;
        h=boundRect[i].height;
        //繪制矩形
        rectangle(resFrame,Point(x,y),Point(x+w,y+h),Scalar(0,0,255),2);
    }
 
    return resFrame;
}
 
int main(int argc, char *argv[])
{
    Mat frame;
    Mat temp;
    Mat res;
    int count = 0;
 
    VideoCapture cap("D:/00000000000003jieduanshipincailliao/carMove.mp4");//視頻路徑
 
    while (cap.read(frame))
    {
        count++;
        if(count == 1)
        {
            res = moveCheck(frame,frame);
        }
        else
        {
            res = moveCheck(temp,frame);
        }
        imshow("frame",frame);
        imshow("res",res);//最終車輛識(shí)別成果
        temp = frame.clone();
        waitKey(15);
    }
    return 0;
}

當(dāng)然,夜晚的車輛也能夠正常識(shí)別

不過(guò),本次的幀差法的車輛識(shí)別存在弊端,只要是運(yùn)動(dòng)的物體都會(huì)識(shí)別,比如,博主打開(kāi)攝像頭,動(dòng)一動(dòng)手指頭,也會(huì)被框選識(shí)別,因此是有一定弊端的

不過(guò),這種幀差法的運(yùn)動(dòng)目標(biāo)檢測(cè),在夜晚監(jiān)控中是非常廣泛地應(yīng)用到,因?yàn)橛腥魏蔚娘L(fēng)吹草動(dòng),都會(huì)被框選識(shí)別。 

到此這篇關(guān)于OpenCV實(shí)現(xiàn)車輛識(shí)別和運(yùn)動(dòng)目標(biāo)檢測(cè)的文章就介紹到這了,更多相關(guān)OpenCV車輛識(shí)別和運(yùn)動(dòng)目標(biāo)檢測(cè)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python itchat實(shí)現(xiàn)調(diào)用微信接口的第三方模塊方法

    python itchat實(shí)現(xiàn)調(diào)用微信接口的第三方模塊方法

    這篇文章主要介紹了python itchat實(shí)現(xiàn)調(diào)用微信接口的第三方模塊方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • python黑魔法之編碼轉(zhuǎn)換

    python黑魔法之編碼轉(zhuǎn)換

    這篇文章主要介紹了python黑魔法之編碼轉(zhuǎn)換,分析了python編碼轉(zhuǎn)換的方法,感興趣的小伙伴們可以參考一下
    2016-01-01
  • Python正則表達(dá)式的應(yīng)用詳解

    Python正則表達(dá)式的應(yīng)用詳解

    這篇文章主要介紹了Python中正則表達(dá)式的詳細(xì)教程,正則表達(dá)式是Python學(xué)習(xí)進(jìn)階當(dāng)中的重要內(nèi)容,需要的朋友可以參考下,希望能給你帶來(lái)幫助
    2021-08-08
  • 如何關(guān)掉pycharm中的python console(圖解)

    如何關(guān)掉pycharm中的python console(圖解)

    本文通過(guò)圖文并茂的形式給大家介紹了如何關(guān)掉pycharm中的python console,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Python處理字節(jié)串:struct.pack和struct.unpack使用

    Python處理字節(jié)串:struct.pack和struct.unpack使用

    這篇文章主要介紹了Python處理字節(jié)串:struct.pack和struct.unpack使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • python多進(jìn)程使用函數(shù)封裝實(shí)例

    python多進(jìn)程使用函數(shù)封裝實(shí)例

    這篇文章主要介紹了python多進(jìn)程使用函數(shù)封裝實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-05-05
  • 解決TensorFlow訓(xùn)練內(nèi)存不斷增長(zhǎng),進(jìn)程被殺死問(wèn)題

    解決TensorFlow訓(xùn)練內(nèi)存不斷增長(zhǎng),進(jìn)程被殺死問(wèn)題

    今天小編就為大家分享一篇解決TensorFlow訓(xùn)練內(nèi)存不斷增長(zhǎng),進(jìn)程被殺死問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-02-02
  • Django靜態(tài)文件配置request對(duì)象方法ORM操作講解

    Django靜態(tài)文件配置request對(duì)象方法ORM操作講解

    這篇文章主要為大家介紹了Django靜態(tài)文件配置request對(duì)象方法ORM操作,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • 使用Py2Exe for Python3創(chuàng)建自己的exe程序示例

    使用Py2Exe for Python3創(chuàng)建自己的exe程序示例

    今天小編就為大家分享一篇使用Py2Exe for Python3創(chuàng)建自己的exe程序示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-10-10
  • 如何使用 python查詢Amazon DynamoDB

    如何使用 python查詢Amazon DynamoDB

    本文介紹了如何使用Python Boto3在Amazon DynamoDB上查詢DynamoDB 表、創(chuàng)建、列出和執(zhí)行其他 CRUD 活動(dòng)以及執(zhí)行其他維護(hù)任務(wù),本文給大家介紹的非常詳細(xì),需要的朋友參考下
    2023-06-06

最新評(píng)論