基於vlfeat的HOG特徵提取c++程式碼實現
HOG特徵又叫方向特徵直方圖特徵,是計算機視覺中作為目標檢測十分常用且奏效的特徵。其最著名的應用就是HOG+SVM這種思路解決了行人檢測的任務,這項工作發表在了CVPR2005上,從此之後,HOG+SVM這種模式被複制在了很多其他工作中。
有趣的是,在網路上我們可以輕而易舉的搜尋到無數篇關於HOG特徵的理論介紹,卻很少可以找到C++版本的程式碼。這無疑對計算機視覺研究剛剛入門的同學造成了很大困擾,紙上談兵不如將程式碼跑出來直接檢視實驗效果。這裡我與大家分享一下基於VLFeat的HOG特徵提取程式碼,希望對大家的學習有所幫助。當然,我的程式碼只是實現了對一張圖片的處理流程,及簡單的引數設定,同學們還要根據自己的實際情況在這段程式碼的基礎上稍作修改。話不多說,直接上程式碼。
#include <iostream>
#include <opencv.hpp>
#include <vl/hog.h>
using namespace std;
int main()
{
cv::Mat image,img;
image = cv::imread("image path");
cv::cvtColor(image,img,CV_RGB2GRAY);
//convert img to a float array
float *vlimg = new float[img.cols*img.rows];
int tmp = 0;
for(int i=0;i<img.cols;i++)
for(int j=0;j<img.rows;j++)
{
vlimg[tmp++] = img.at<uchar>(j,i)/255.0;
}
//set vl parameters
vl_size numOrientations = 9; //specifies the number of orientations
vl_size numChannels = 1; //number of image channel
vl_size height = img.rows;
vl_size width = img.cols;
vl_size cellSize = 8; //size of a hog cell
vl_size hogWidth, hogHeight, hogD;
float *hogArray; //hog features array
//extract hog
VlHog *hog = vl_hog_new(VlHogVariantDalalTriggs, numOrientations, VL_FALSE) ;
vl_hog_put_image(hog, vlimg, height, width, numChannels, cellSize) ;
hogWidth = vl_hog_get_width(hog) ;
hogHeight = vl_hog_get_height(hog) ;
hogD = vl_hog_get_dimension(hog) ;
hogArray = (float*)vl_malloc(hogWidth*hogHeight*hogD*sizeof(float)) ;
vl_hog_extract(hog, hogArray) ;
vl_hog_delete(hog) ;
//parameters of image and its hog
cout<<"height = "<<img.rows<<" width = "<<img.cols<<endl;
cout<<"hogWidth = "<<hogWidth<<endl<<"hogHeight = "<<hogHeight<<endl<<"hogD = "<<hogD;
cv::imshow("img",img);
delete[] vlimg;
cv::waitKey(0);
}
這段程式碼用到了opencv及vlfeat兩個庫。這兩個庫的配置大家可以自行百度,網上的方法很多。這裡就不再贅述。
程式碼最後的輸出部分只是依據理論分析的一個結果驗證,結合程式輸出可以幫助同學們更好的理解hog原理。
相關文章
- 影象特徵提取之HoG特徵特徵HOG
- OpenCV特徵提取與影像檢索實現(附程式碼)OpenCV特徵
- 基於節拍同步的 IF PCP 特徵提取特徵
- 學習筆記17:DenseNet實現多分類(卷積基特徵提取)筆記SENet卷積特徵
- C/C++ 實現PE檔案特徵碼識別C++特徵
- librosa 音訊特徵提取的現成文件ROS音訊特徵
- 計算機視覺 | Matlab實現單目視覺里程計基於SURF特徵(程式碼類)計算機視覺Matlab特徵
- C++ 實現基於TCP的聊天室C++TCP
- 基於OpenSSL的HTTPS通訊C++實現HTTPC++
- 【數字影像處理6】python+opencv使用LBP、HOG提取特徵來分類人臉【更新中】PythonOpenCVHOG特徵
- 特徵工程:基於梯度提升的模型的特徵編碼效果測試特徵工程梯度模型
- 特徵提取-map特徵
- 基於Python的遺傳演算法特徵約簡(附程式碼)Python演算法特徵
- 200 行程式碼實現基於 Paxos 的 KV 儲存行程
- 基於MySql主從分離的程式碼層實現MySql
- 實現基於內容的電影推薦系統—程式碼實現
- C++基於armadillo im2col的實現C++
- 基於i.MX6ULL實現的核酸自動提取儀
- C++基於模板實現智慧指標C++指標
- 使用yarGen提取Linux惡意指令碼特徵Linux指令碼特徵
- 攜程基於Flink的實時特徵平臺特徵
- C++實現管理系統的示例程式碼C++
- 基於句子嵌入的無監督文字摘要(附程式碼實現)
- Yang 提取Cifar-100的特徵特徵
- 基於物件特徵的推薦物件特徵
- 40行Python程式碼,實現卷積特徵視覺化Python卷積特徵視覺化
- 基於C++程式設計醫院醫學影像系統PACS實現C++程式設計
- 流量特徵提取工具NFStream特徵NFS
- NLP segment-03-基於 TF-IDF 實現關鍵詞提取 java 開源實現Java
- 百行程式碼實現基於Redis的可靠延遲佇列行程Redis佇列
- 簡單解析C++基於Boost庫實現命令列C++命令列
- 基於 “typesys” 實現序列指令碼框架指令碼框架
- 語音的關鍵聲學特徵(語音情感特徵提取)特徵
- 機器學習-特徵提取機器學習特徵
- 基於Jsp的簡單論壇(BBS)的設計與實現(附程式碼)JS
- 基於GRU和am-softmax的句子相似度模型 | 附程式碼實現模型
- 線性表的順序儲存C++程式碼實現C++
- 基於Apache Zookeeper手寫實現動態配置中心(純程式碼實踐)Apache
- PHP 幾行核心程式碼實現提取快手水印視訊播放地址PHP