日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OpenCV HOGDescriptor 参数图解

發(fā)布時間:2025/3/21 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenCV HOGDescriptor 参数图解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

最近要做圖像特征提取,可能要用下HOG特征,所以研究了下OpenCV的HOG描述子。OpenCV中的HOG特征提取功能使用了HOGDescriptor這個類來進(jìn)行封裝,其中也有現(xiàn)成的行人檢測的接口。

然而,無論是OpenCV官方說明文檔還是各個中英文網(wǎng)站目前都沒有這個類的使用說明,所以在這里把研究的部分心得分享一下。

????? 首先我們進(jìn)入HOGDescriptor所在的頭文件,看看它的構(gòu)造函數(shù)需要哪些參數(shù)。?

[cpp]?view plaincopyprint?
  • CV_WRAP?HOGDescriptor()?:?winSize(64,128),?blockSize(16,16),?blockStride(8,8),??
  • ????cellSize(8,8),?nbins(9),?derivAperture(1),?winSigma(-1),??
  • ????histogramNormType(HOGDescriptor::L2Hys),?L2HysThreshold(0.2),?gammaCorrection(true),???
  • ????nlevels(HOGDescriptor::DEFAULT_NLEVELS)??
  • {}??

  • [cpp]?view plaincopyprint?
  • CV_WRAP?HOGDescriptor(Size?_winSize,?Size?_blockSize,?Size?_blockStride,??
  • ??????????????Size?_cellSize,?int?_nbins,?int?_derivAperture=1,?double?_winSigma=-1,??
  • ??????????????int?_histogramNormType=HOGDescriptor::L2Hys,??
  • ??????????????double?_L2HysThreshold=0.2,?bool?_gammaCorrection=false,??
  • ??????????????int?_nlevels=HOGDescriptor::DEFAULT_NLEVELS)??
  • :?winSize(_winSize),?blockSize(_blockSize),?blockStride(_blockStride),?cellSize(_cellSize),??
  • nbins(_nbins),?derivAperture(_derivAperture),?winSigma(_winSigma),??
  • histogramNormType(_histogramNormType),?L2HysThreshold(_L2HysThreshold),??
  • gammaCorrection(_gammaCorrection),?nlevels(_nlevels)??
  • {}??

  • [cpp]?view plaincopyprint?
  • CV_WRAP?HOGDescriptor(const?String&?filename)??
  • {??
  • ????load(filename);??
  • }??

  • [cpp]?view plaincopyprint?
  • HOGDescriptor(const?HOGDescriptor&?d)??
  • {??
  • ????d.copyTo(*this);??
  • }??

  • ? 我們看到HOGDescriptor一共有4個構(gòu)造函數(shù),前三個有CV_WRAP前綴,表示它們是從DLL里導(dǎo)出的函數(shù),即我們在程序當(dāng)中可以調(diào)用的函數(shù);最后一個沒有上述的前綴,所以我們暫時用不到,它其實(shí)就是一個拷貝構(gòu)造函數(shù)。

    ????? 下面我們就把注意力放在前面的構(gòu)造函數(shù)的參數(shù)上面吧,這里有幾個重要的參數(shù)要研究下:winSize(64,128), blockSize(16,16), blockStride(8,8), cellSize(8,8), nbins(9)。上面這些都是HOGDescriptor的成員變量,括號里的數(shù)值是它們的默認(rèn)值,它們反應(yīng)了HOG描述子的參數(shù)。這里做了幾個示意圖來表示它們的含義。

    ??????窗口大小 winSize

    ????? 塊大小 blockSize

    ??????胞元大小 cellSize

    ??????梯度方向數(shù) nbins

    ????? nBins表示在一個胞元(cell)中統(tǒng)計梯度的方向數(shù)目,例如nBins=9時,在一個胞元內(nèi)統(tǒng)計9個方向的梯度直方圖,每個方向?yàn)?80/9=20度。

    ??????HOG描述子維度

    ??????在確定了上述的參數(shù)后,我們就可以計算出一個HOG描述子的維度了。OpenCV中的HOG源代碼是按照下面的式子計算出描述子的維度的。?

    [cpp]?view plaincopyprint?
  • size_t?HOGDescriptor::getDescriptorSize()?const??
  • {??
  • ????CV_Assert(blockSize.width?%?cellSize.width?==?0?&&??
  • ????????blockSize.height?%?cellSize.height?==?0);??
  • ????CV_Assert((winSize.width?-?blockSize.width)?%?blockStride.width?==?0?&&??
  • ????????(winSize.height?-?blockSize.height)?%?blockStride.height?==?0?);??
  • ????return?(size_t)nbins*??
  • ????????(blockSize.width/cellSize.width)*??
  • ????????(blockSize.height/cellSize.height)*??
  • ????????((winSize.width?-?blockSize.width)/blockStride.width?+?1)*??
  • ????????((winSize.height?-?blockSize.height)/blockStride.height?+?1);??
  • }??

  • 參考文獻(xiàn)

    ????? OpenCV中的HOG算法來源于Histograms of Oriented Gradients for Human Detection, CVPR 2005。詳細(xì)的算法可以參考這個文章。

    總結(jié)

    以上是生活随笔為你收集整理的OpenCV HOGDescriptor 参数图解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。