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

【opencv】示例-peopledetect.cpp HOG(方向梯度直方圖)描述子和SVM(支持向量機)進行行人檢測...

這篇具有很好參考價值的文章主要介紹了【opencv】示例-peopledetect.cpp HOG(方向梯度直方圖)描述子和SVM(支持向量機)進行行人檢測...。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

【opencv】示例-peopledetect.cpp HOG(方向梯度直方圖)描述子和SVM(支持向量機)進行行人檢測...,opencv,支持向量機,人工智能,計算機視覺,算法

【opencv】示例-peopledetect.cpp HOG(方向梯度直方圖)描述子和SVM(支持向量機)進行行人檢測...,opencv,支持向量機,人工智能,計算機視覺,算法

【opencv】示例-peopledetect.cpp HOG(方向梯度直方圖)描述子和SVM(支持向量機)進行行人檢測...,opencv,支持向量機,人工智能,計算機視覺,算法

// 包含OpenCV項目所需的objdetect模塊頭文件
#include <opencv2/objdetect.hpp>
// 包含OpenCV項目所需的highgui模塊頭文件,用于圖像的顯示和簡單操作
#include <opencv2/highgui.hpp>
// 包含OpenCV項目所需的imgproc模塊頭文件,用于圖像處理
#include <opencv2/imgproc.hpp>
// 包含OpenCV項目所需的videoio模塊頭文件,用于視頻的讀寫
#include <opencv2/videoio.hpp>
#include <iostream> // 包含輸入輸出流的標準頭文件
#include <iomanip> // 包含輸入輸出流格式化的標準頭文件


// 使用OpenCV和標準命名空間下的所有實體
using namespace cv;
using namespace std;


// 定義一個Detector類,用于行人檢測
class Detector
{
    enum Mode { Default, Daimler } m; // 定義兩種模式的枚舉類型
    HOGDescriptor hog, hog_d;         // 定義兩個HOG描述子對象
public:
    // 構造函數(shù),初始化模式為Default和兩個描述子hog與hog_d
    Detector() : m(Default), hog(), hog_d(Size(48, 96), Size(16, 16), Size(8, 8), Size(8, 8), 9)
    {
        // 設置HOG描述子的SVM檢測器為默認的行人檢測器
        hog.setSVMDetector(HOGDescriptor::getDefaultPeopleDetector());
        // 設置hog_d描述子的SVM檢測器為Daimler行人檢測器
        hog_d.setSVMDetector(HOGDescriptor::getDaimlerPeopleDetector());
    }
    // 切換檢測模式的方法
    void toggleMode() { m = (m == Default ? Daimler : Default); }
    // 獲取當前模式名稱的方法
    string modeName() const { return (m == Default ? "Default" : "Daimler"); }
    // 執(zhí)行檢測的方法
    vector<Rect> detect(InputArray img)
    {
        // 創(chuàng)建一個向量來存儲檢測到的矩形
        vector<Rect> found;
        if (m == Default)
            // 默認模式下使用hog描述子進行多尺度檢測
            hog.detectMultiScale(img, found, 0, Size(8,8), Size(), 1.05, 2, false);
        else if (m == Daimler)
            // Daimler模式下使用hog_d描述子進行多尺度檢測
            hog_d.detectMultiScale(img, found, 0, Size(8,8), Size(), 1.05, 2, true);
        return found; // 返回檢測結果
    }
    // 調整檢測矩形的方法
    void adjustRect(Rect & r) const
{
        // HOG檢測器返回的矩形稍大于真實的物體,故稍微縮小矩形以獲得更好的效果
        r.x += cvRound(r.width*0.1);
        r.width = cvRound(r.width*0.8);
        r.y += cvRound(r.height*0.07);
        r.height = cvRound(r.height*0.8);
    }
};


// 定義命令行參數(shù)的keys字符串
static const string keys = "{ help h   |   | print help message }"
                           "{ camera c | 0 | capture video from camera (device index starting from 0) }"
                           "{ video v  |   | use video as input }";


// main函數(shù),程序的入口
int main(int argc, char** argv)
{
    // 創(chuàng)建CommandLineParser對象來解析命令行參數(shù)
    CommandLineParser parser(argc, argv, keys);
    parser.about("This sample demonstrates the use of the HoG descriptor.");
    if (parser.has("help"))
    {
        // 如果存在help參數(shù),則打印幫助信息并退出
        parser.printMessage();
        return 0;
    }
    // 獲取camera和video參數(shù)
    int camera = parser.get<int>("camera");
    string file = parser.get<string>("video");
    if (!parser.check())
    {
        // 檢查參數(shù)解析是否有誤,如果有則打印錯誤并退出
        parser.printErrors();
        return 1;
    }


    VideoCapture cap; // 創(chuàng)建一個VideoCapture對象來捕獲視頻
    if (file.empty())
        // 如果video參數(shù)為空則從相機捕獲視頻
        cap.open(camera);
    else
    {
        // 否則打開指定的視頻文件
        file = samples::findFileOrKeep(file);
        cap.open(file);
    }
    if (!cap.isOpened())
    {
        // 如果視頻流打不開則打印錯誤信息并退出
        cout << "Can not open video stream: '" << (file.empty() ? "<camera>" : file) << "'" << endl;
        return 2;
    }


    cout << "Press 'q' or <ESC> to quit." << endl;
    cout << "Press <space> to toggle between Default and Daimler detector" << endl;
    Detector detector; // 創(chuàng)建一個Detector對象
    Mat frame;         // 創(chuàng)建一個Mat對象來存儲幀
    for (;;)           // 無限循環(huán)
    {
        cap >> frame; // 從視頻流中讀取一幀到frame中
        if (frame.empty())
        {
            // 如果幀為空則打印信息并退出循環(huán)
            cout << "Finished reading: empty frame" << endl;
            break;
        }
        int64 t = getTickCount(); // 獲取當前的tick計數(shù)
        vector<Rect> found = detector.detect(frame); // 使用detector檢測行人
        t = getTickCount() - t; // 計算檢測所用的時間


        // 顯示窗口
        {
            ostringstream buf;
            // 將模式名稱和FPS信息打印到視頻幀上
            buf << "Mode: " << detector.modeName() << " ||| "
                << "FPS: " << fixed << setprecision(1) << (getTickFrequency() / (double)t);
            putText(frame, buf.str(), Point(10, 30), FONT_HERSHEY_PLAIN, 2.0, Scalar(0, 0, 255), 2, LINE_AA);
        }
        for (vector<Rect>::iterator i = found.begin(); i != found.end(); ++i)
        {
            // 迭代找到的矩形,并在視頻幀上畫出矩形框
            Rect &r = *i;
            detector.adjustRect(r);
            rectangle(frame, r.tl(), r.br(), cv::Scalar(0, 255, 0), 2);
        }
        imshow("People detector", frame); // 顯示帶有檢測框的視頻幀


        // 與用戶交互
        const char key = (char)waitKey(1);
        // 如果用戶按下ESC或'q'鍵,則退出循環(huán)
        if (key == 27 || key == 'q') // ESC
        {
            cout << "Exit requested" << endl;
            break;
        }
        // 如果用戶按下空格鍵,則切換檢測模式
        else if (key == ' ')
        {
            detector.toggleMode();
        }
    }
    return 0; // 程序正常退出
}

本段代碼是一個使用OpenCV庫的HOG(Histogram of Oriented Gradients,方向梯度直方圖)描述子和SVM(Support Vector Machines,支持向量機)進行行人檢測的程序。程序定義了Detector類來執(zhí)行行人檢測,可以在兩種模式(默認模式和戴姆勒模式)之間切換。通過命令行參數(shù),用戶可以選擇是從相機實時捕獲視頻還是讀取視頻文件進行檢測。本程序還支持與用戶的簡單交互,比如按鍵切換模式和退出程序。最后在視頻中實時標記檢測到的行人,并顯示當前的模式和幀率(FPS)。

hog.detectMultiScale(img, found, 0, Size(8,8), Size(), 1.05, 2, false);

【opencv】示例-peopledetect.cpp HOG(方向梯度直方圖)描述子和SVM(支持向量機)進行行人檢測...,opencv,支持向量機,人工智能,計算機視覺,算法

【opencv】示例-peopledetect.cpp HOG(方向梯度直方圖)描述子和SVM(支持向量機)進行行人檢測...,opencv,支持向量機,人工智能,計算機視覺,算法文章來源地址http://www.zghlxwxcb.cn/news/detail-851028.html

到了這里,關于【opencv】示例-peopledetect.cpp HOG(方向梯度直方圖)描述子和SVM(支持向量機)進行行人檢測...的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

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

領支付寶紅包贊助服務器費用

相關文章

  • echats 時間直方圖示例

    echats 時間直方圖示例

    需求背景 某訂單有N個定時任務,每個任務的執(zhí)行時間已經確定,希望直觀的查看該訂單的任務執(zhí)行趨勢 查詢SQL: 把查詢結果copy出來,粘貼到 https://echarts.apache.org/zh/spreadsheet.html,轉換成二維數(shù)組 把轉換好的數(shù)據(jù)copy出來,代入到 baseData 中的 new Map() 中。 效果如下:

    2024年02月20日
    瀏覽(23)
  • 【OpenCV學習筆記30】- OpenCV 中的直方圖 - 直方圖 - 4:直方圖反投影

    【OpenCV學習筆記30】- OpenCV 中的直方圖 - 直方圖 - 4:直方圖反投影

    這是對于 OpenCV 官方文檔中 圖像處理 的學習筆記。學習筆記中會記錄官方給出的例子,也會給出自己根據(jù)官方的例子完成的更改代碼,同樣彩蛋的實現(xiàn)也會結合多個知識點一起實現(xiàn)一些小功能,來幫助我們對學會的知識點進行結合應用。 如果有喜歡我筆記的請麻煩幫我關注

    2024年03月26日
    瀏覽(28)
  • 【OpenCV ? c++】自定義直方圖 | 灰度直方圖均衡 | 彩色直方圖均衡

    ??直方圖廣泛應用于很多計算機視覺處理當中。通過標記幀與幀之間顯著的邊緣和顏色的變化,可以檢測視頻中的場景變化。在每個興趣點設置一個有相似特征的直方圖所構成的“標簽”,可以用來標記各種不同的事情,比如圖像的色彩分布,物體邊緣梯度模板等等。是計

    2024年02月08日
    瀏覽(20)
  • OpenCV10-圖像直方圖:直方圖繪制、直方圖歸一化、直方圖比較、直方圖均衡化、直方圖規(guī)定化、直方圖反射投影

    圖像直方圖就是統(tǒng)計圖像中每個灰度值的個數(shù),之后將灰度值作為橫軸,以灰度值個數(shù)或者灰度值所占比率作為縱軸的統(tǒng)計圖。通過直方圖,可以看出圖像中哪些灰度值數(shù)目較多,哪些較少,可以通過一定的方法將灰度值較為集中的區(qū)域映射到較為稀疏的區(qū)域,從而使圖像在

    2024年01月16日
    瀏覽(23)
  • 【OpenCV ? c++】直方圖計算 | 繪制 H-S 直方圖 | 繪制一維直方圖 | 繪制 RGB 三色直方圖

    ??直方圖廣泛應用于很多計算機視覺處理當中。通過標記幀與幀之間顯著的邊緣和顏色的變化,可以檢測視頻中的場景變化。在每個興趣點設置一個有相似特征的直方圖所構成的“標簽”,可以用來標記各種不同的事情,比如圖像的色彩分布,物體邊緣梯度模板等等。是計

    2024年02月09日
    瀏覽(18)
  • opencv直方圖

    在OpenCV中,直方圖是一個重要的圖像分析工具,它可以提供關于圖像亮度分布的詳細信息。OpenCV提供了多種方法來計算和操作圖像的直方圖。 基本概念 直方圖是一個離散函數(shù),它將圖像中的像素值映射到一個連續(xù)的區(qū)間上,并計算每個區(qū)間內像素的數(shù)量。對于灰度圖像,直

    2024年04月28日
    瀏覽(21)
  • 【OpenCV--直方圖】

    【OpenCV--直方圖】

    目錄 一、直方圖是什么? 1.描述: 2.相關術語: 二、直方圖的計算和繪制 三、掩膜的應用 四、直方圖均衡化: 五、自適應的直方圖均衡化 1.描述: 1直方圖是對數(shù)據(jù)進行統(tǒng)計的一種方法,并且將統(tǒng)計值組織到一系列實現(xiàn)定義好的bin(直條/組距)當中。bin的數(shù)值可以是梯度、方

    2024年02月05日
    瀏覽(24)
  • opencv-2D直方圖

    opencv-2D直方圖

    cv2.calcHist() 是 OpenCV 中用于計算直方圖的函數(shù)。它可以計算一維或多維直方圖,用于分析圖像中像素值的分布。 基本的語法如下: 參數(shù)說明: images : 輸入圖像, 可以是單通道或多通道圖像 。在計算多通道圖像的直方圖時,要將通道分別傳遞給 channels 參數(shù)。 channels : 要考慮

    2024年02月20日
    瀏覽(18)
  • 【opencv】教程代碼 —Histograms_Matching(2)計算直方圖、直方圖比較、直方圖均衡、模板匹配...

    【opencv】教程代碼 —Histograms_Matching(2)計算直方圖、直方圖比較、直方圖均衡、模板匹配...

    計算直方圖 直方圖比較 圖像進行直方圖均衡化處理 模板匹配 1.?calcHist_Demo.cpp?計算直方圖 這段代碼的功能是加載圖像,分離圖像的三個顏色通道,然后分別計算這三個通道的直方圖,繪制出來并顯示結果。直方圖是圖像中像素值分布的圖形表示,可以用于圖像分析或圖像處

    2024年04月11日
    瀏覽(21)
  • OpenCV:圖像直方圖計算

    OpenCV:圖像直方圖計算

    圖像直方圖為圖像中像素強度的分布提供了有價值的見解。通過了解直方圖,你可以獲得有關圖像對比度、亮度和整體色調分布的信息。這些知識對于圖像增強、圖像分割和特征提取等任務非常有用。 本文旨在為學習如何使用 OpenCV 執(zhí)行圖像直方圖計算提供清晰且全面的指南

    2024年02月16日
    瀏覽(97)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包