最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

OpenCV實現車輛識別和運動目標檢測

 更新時間:2022年08月01日 11:23:48   作者:我今年十六歲  
本文主要介紹了OpenCV實現車輛識別和運動目標檢測,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

一:車輛識別成果展示

二:車輛識別超詳細步驟解析

步驟一:灰度化處理

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

效果展示:【避免內存浪費 幀差法對前后幀圖像灰度化處理】

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

 步驟二:幀差處理

幀差處理目的 找到幀與幀之間的差異(正在運動的物體)

效果展示:【運動目標的檢測:運動事物顯示灰度,靜止事物顯示黑度】

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

步驟三:二值化處理

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

效果展示:【步驟二中運動事物顯示灰度,靜止事物顯示黑度,在這里進行二值化處理,能夠黑白分明,便于計算機識別運動目標,如下右圖二值化處理后黑白分明】【缺點:存在白色噪點,如下右圖除了車輛外后面的背景也顯示白度,這就是白色噪點,需要去除】

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

步驟四:圖像降噪

4-1 腐蝕處理 目的 去除白色噪點

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

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

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

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

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

步驟五:提取關鍵點 框選運動目標檢測

效果展示:車輛識別成功

    //5 提取關鍵點
    //5-1 查找特征點
    vector<vector<Point>>contours;
    findContours(diff,contours,CV_RETR_EXTERNAL,CV_CHAIN_APPROX_SIMPLE,Point(0,0));
 
    //5-2 提取關鍵點
    vector<vector<Point>>contours_poly(contours.size());
    vector<Rect>boundRect(contours.size());
 
    //5-3 確定下四個點來用于框選目標物體
    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);
    }

三:車輛識別完整代碼

#include <iostream>
#include <opencv2/opencv.hpp>
 
using namespace std;
using namespace cv;
 
Mat moveCheck(Mat &frontFrame,Mat &afterFrame)
{
    Mat resFrame,diff;
    Mat frontGray,afterGray;
 
    //克隆當前幀畫面 返回最終結果
    resFrame = afterFrame.clone();
 
    //1 灰度處理 目的 RGB三通道轉灰度單通道 壓縮到原圖片三分之一大小
    cvtColor(frontFrame,frontGray,CV_RGB2GRAY);
    cvtColor(afterFrame,afterGray,CV_RGB2GRAY);
 
    //imshow("frontGray",frontGray);
    //imshow("afterGray",afterGray);
 
    //2 幀差處理 目的 找到幀與幀之間的差異(正在運動的物體)
    absdiff(frontGray,afterGray,diff);
    //imshow("diff",diff);
 
    //3 二值化處理 目的 將灰度圖繼續(xù)識別轉換為黑白分明的圖像
    threshold(diff,diff,25,255,CV_THRESH_BINARY);
    //imshow("threshold",diff);
 
    //4 圖像降噪
    //4-1 腐蝕處理 目的 去除白色噪點
    Mat element = cv::getStructuringElement(MORPH_RECT,Size(3,3));//小于3*3方塊的白色噪點都會被腐蝕
    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 提取關鍵點
    //5-1 查找特征點
    vector<vector<Point>>contours;
    findContours(diff,contours,CV_RETR_EXTERNAL,CV_CHAIN_APPROX_SIMPLE,Point(0,0));
 
    //5-2 提取關鍵點
    vector<vector<Point>>contours_poly(contours.size());
    vector<Rect>boundRect(contours.size());
 
    //5-3 確定下四個點來用于框選目標物體
    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);//最終車輛識別成果
        temp = frame.clone();
        waitKey(15);
    }
    return 0;
}

當然,夜晚的車輛也能夠正常識別

不過,本次的幀差法的車輛識別存在弊端,只要是運動的物體都會識別,比如,博主打開攝像頭,動一動手指頭,也會被框選識別,因此是有一定弊端的

不過,這種幀差法的運動目標檢測,在夜晚監(jiān)控中是非常廣泛地應用到,因為有任何的風吹草動,都會被框選識別。 

到此這篇關于OpenCV實現車輛識別和運動目標檢測的文章就介紹到這了,更多相關OpenCV車輛識別和運動目標檢測內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • pandas中df.groupby()方法深入講解

    pandas中df.groupby()方法深入講解

    在使用pandas進行數據統(tǒng)計分析時遇到了問題,找了很久才找到解決辦法,所以下面這篇文章主要給大家介紹了關于pandas中df.groupby()方法的相關資料,需要的朋友可以參考下
    2022-12-12
  • JSON Web Tokens的實現原理

    JSON Web Tokens的實現原理

    本文主要介紹了JSON Web Tokens的實現原理。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-04-04
  • python tkinter庫實現氣泡屏保和鎖屏

    python tkinter庫實現氣泡屏保和鎖屏

    這篇文章主要為大家詳細介紹了python tkinter庫實現氣泡屏保和鎖屏,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • Python實現一個簡單的驗證碼程序

    Python實現一個簡單的驗證碼程序

    這篇文章主要介紹了Python實現一個簡單的驗證碼程序,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • pytorch中dataloader 的sampler 參數詳解

    pytorch中dataloader 的sampler 參數詳解

    這篇文章主要介紹了pytorch中dataloader 的sampler 參數詳解,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,感興趣的小伙伴可以參考一下
    2022-09-09
  • python算法學習之桶排序算法實例(分塊排序)

    python算法學習之桶排序算法實例(分塊排序)

    本代碼介紹了python算法學習中的桶排序算法實例,大家參考使用吧
    2013-12-12
  • Python?中?Selenium?的?send_keys()?函數用法小結

    Python?中?Selenium?的?send_keys()?函數用法小結

    send_keys() 是將數字、文本和符號等鍵盤輸入發(fā)送到應用程序的文本框的過程, send_keys() 是 WebDriver 的一部分,每個鍵盤輸入都會發(fā)送到此元素,這篇文章主要介紹了Python?中?Selenium?的?send_keys()?函數,需要的朋友可以參考下
    2023-11-11
  • Mac下使用HomeBrew安裝python3

    Mac下使用HomeBrew安裝python3

    這篇文章介紹了Mac下使用HomeBrew安裝python3的方法,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • PyCharm 2020 激活到 2100 年的教程

    PyCharm 2020 激活到 2100 年的教程

    這篇文章主要介紹了PyCharm 2020 激活到 2100 年,本文圖文并茂給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • Python3實現發(fā)送郵件和發(fā)送短信驗證碼功能

    Python3實現發(fā)送郵件和發(fā)送短信驗證碼功能

    這篇文章主要介紹了Python3實現發(fā)送郵件和發(fā)送短信驗證碼功能,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-01-01

最新評論

郓城县| 工布江达县| 乌拉特前旗| 竹溪县| 西藏| 从化市| 永兴县| 中方县| 瑞昌市| 大安市| 四川省| 广灵县| 桃江县| 建德市| 岳池县| 宽甸| 丹阳市| 田东县| 泰宁县| 四川省| 和政县| 兖州市| 夹江县| 香港 | 鸡泽县| 江陵县| 柳江县| 杭锦后旗| 从化市| 贡觉县| 南宫市| 温宿县| 库尔勒市| 台中县| 五原县| 阿合奇县| 朝阳市| 新闻| 中西区| 平湖市| 广州市|