程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 目標檢測:HOG特征和OpenCV中的實現

目標檢測:HOG特征和OpenCV中的實現

編輯:關於C++

關於HOG特征可以看http://blog.csdn.net/zouxy09/article/details/7929348和http://www.cnblogs.com/tornadomeet/archive/2012/08/15/2640754.html,

關於OpenCV HOGDescriptor參數圖解可以參考這裡http://blog.csdn.net/raodotcong/article/details/6239431;

現在利用HOG特征來進行行人檢測,既然要有了特征,現在其實要有一個方法來判斷是否一個圖片的某一部分是行人,SVM是一個很好的機器學習方法,可以用來分類,結合HOG特征就可以用來檢測圖片中的行人。OpenCV中集成了一個方法,getDefaultPeopleDetector等可以直接得到一個SVM的分類器,這個分類器是OpenCV自帶的已經訓練好的,可以直接拿來使用。下面可以看一下使用它的代碼。

OpenCV自帶SVM分類器使用:

#include <iostream>  
#include <opencv2/opencv.hpp>  
       
using namespace cv;  
       
int main(int argc, char** argv)  
{  
    cv::Mat image = cv::imread("G:\\視頻分析入門練習\\視頻分析入門練習 - 附件\\testingdata for HOG\\frame_0061.jpg"); 
    if (image.empty())  
    {  
        std::cout << "read imagefailed"<< std::endl;  
    }  
       
       
    // 1. 定義HOG對象  
    cv::HOGDescriptor hog; // 采用默認參數  
       
       
    // 2. 設置SVM分類器  
    hog.setSVMDetector(cv::HOGDescriptor::getDefaultPeopleDetector());   // 采用已經訓練好的行人檢測分類器  
       
    // 3. 在測試圖像上檢測行人區域  
    std::vector<cv::Rect> regions;  
    hog.detectMultiScale(image, regions, 0, cv::Size(8, 8), cv::Size(32, 32), 1.05, 1);  
       
    // 顯示  
    for (size_t i = 0; i < regions.size(); i++)  
    {  
        cv::rectangle(image, regions[i], cv::Scalar(0, 0, 255),2);  //對判定是行人的區域畫一個正方形標記一下。  
    }  
       
    cv::imshow("hog", image);  
    cv::waitKey(0);  
       
    return 0;  
}

結果:

返回欄目頁:http://www.bianceng.cn/Programming/cplus/

上面使用的OpenCV自帶的SVM分類器,但是針對特定應用場景,很有必要進行重新訓練得到適合的分類器。實現的代碼可以從這裡得到:http://download.csdn.net/detail/u013035103/7809229,效果不是很好,個人覺得訓練的樣本數量有點少,導致這樣。

作者:csdn博客 鐘桓

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved