亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

OpenCV如何使用BSM統計視頻中移動的對象

發布時間:2023-02-24 14:47:58 來源:億速云 閱讀:85 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“OpenCV如何使用BSM統計視頻中移動的對象”,內容詳細,步驟清晰,細節處理妥當,希望這篇“OpenCV如何使用BSM統計視頻中移動的對象”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

1、概述

案例:使用BackgroundSubstractor實現視頻中移動對象統計

實現步驟:

1.實例化VideoCapture

2.創建BackgroundSubstractor

3.while循環讀取視頻幀

4.使用BS->apply獲取mask

5.對mask進行二值化及形態學操作

6.使用findContours執行輪廓發現

7.統計最大外接矩形

8.輸出結果

ps:這個算法的抗干擾能力比較差,要相出正確的結果,必須要對frame進行預處理。或者提升視頻的質量才行。不然只能得到一個錯誤的結果

2、代碼示例

Move_Video_Object_Tracking::Move_Video_Object_Tracking(QWidget *parent)
    : MyGraphicsView{parent}
{
    this->setWindowTitle("視頻中移動對象統計");
    QPushButton *btn = new QPushButton(this);
    btn->setText("選擇視頻");
    connect(btn,&QPushButton::clicked,[=](){
        choiceVideo();
    });
 
}
 
 
void Move_Video_Object_Tracking::choiceVideo(){
    path = QFileDialog::getOpenFileName(this,"請選擇視頻","/Users/yangwei/Downloads/",tr("Image Files(*.mp4 *.avi)"));
    qDebug()<<"視頻路徑:"<<path;
    showMoveVideoObjectTracking(path.toStdString().c_str());
}
 
void Move_Video_Object_Tracking::showMoveVideoObjectTracking(const char* filePath){
    VideoCapture capture;
    capture.open(filePath);
 
    if(!capture.isOpened()){
        qDebug()<<"無法加載視頻文件";
        return;
    }
    Ptr<BackgroundSubtractor> mogSubstractor = createBackgroundSubtractorMOG2();
    Mat frame,gauss,mask;
    Mat kernel = getStructuringElement(MORPH_RECT,Size(3,3));
    int count=0;
    char text[8];
    while(capture.read(frame)){
        GaussianBlur(frame,gauss,Size(5,5),0,0);
        mogSubstractor->apply(gauss,mask);//獲取mask
        threshold(mask,mask,0,255,THRESH_BINARY|cv::THRESH_OTSU);
        //執行形態學操作
        morphologyEx(mask,mask,MORPH_OPEN,kernel);
        dilate(mask,mask,kernel,Point(-1,-1));
        imshow("mask",mask);
 
        //找到最大輪廓定位外接矩形
        vector<vector<Point>> contours;
        vector<Vec4i> heri;
        //尋找最大外接矩形
        findContours(mask,contours,RETR_EXTERNAL,CHAIN_APPROX_SIMPLE);
        count = 0;
        for(size_t i = 0;i<contours.size();i++){
            double area = contourArea(contours[i]);
            if(area<5000){
                continue;
            }
            Rect rect = boundingRect(contours[i]);
            qDebug()<<rect.width<<":"<<rect.height;
            if (rect.width < 200 || rect.height < 100) continue;
            count++;
            rectangle(frame,rect,Scalar(0,0,255),3,8);
            sprintf(text,"%d",count);
            putText(frame,text,Point(rect.x+rect.width/2,rect.y+rect.height/2),FONT_ITALIC, FONT_HERSHEY_PLAIN,Scalar(0,255,0),2,8);
        }
 
 
        imshow("frame",frame);
 
        int c = waitKey(1);
        if(c==27){
            break;
        }
    }
    capture.release();
 
}

讀到這里,這篇“OpenCV如何使用BSM統計視頻中移動的對象”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

磐石市| 开阳县| 紫金县| 庄河市| 固阳县| 汕头市| 和硕县| 龙游县| 百色市| 武隆县| 渝北区| 蒲江县| 佛冈县| 怀宁县| 新巴尔虎左旗| 剑川县| 永州市| 北安市| 托里县| 额敏县| 当阳市| 平谷区| 达孜县| 逊克县| 定结县| 收藏| 江安县| 左权县| 汝南县| 儋州市| 昭平县| 蒲城县| 尼玛县| 墨竹工卡县| 永寿县| 泽库县| 湄潭县| 陆丰市| 大安市| 济阳县| 黎城县|