2014-12-07 225 views
1

我嘗試計算圖像上的HOG功能。此代碼:OpenCV HOGDescriptor.compute錯誤

hog = cv2.HOGDescriptor() 
return hog.compute(image) 

引發以下錯誤在第二行:

error: ..\..\..\..\opencv\modules\objdetect\src\hog.cpp:630: error: (-215) (unsigned)pt.x <= (unsigned)(grad.cols - blockSize.width) && (unsigned)pt.y <= (unsigned)(grad.rows - blockSize.height) in function cv::HOGCache::getBlock 

我檢查image是有效的圖片。你有關於問題的根源的想法嗎?

+2

您的HoGDescriptor會採用什麼尺寸,您的圖片的尺寸是多少?嘗試重新縮放圖像以適合「winSize」 – Micka 2014-12-07 14:32:34

+0

非常感謝!就是這樣。如果您將其作爲答案發布,我會將其標記爲已接受的答案。 – Arnaud 2014-12-07 15:16:49

回答

3

錯誤消息看起來像圖像像素超出了您的HoG窗口區域。據我所知,HoG描述符具有某種「winSize」屬性(例如64x128像素的人物描述符afair)。

通過調整圖像大小或選擇相關子區域,確保圖像符合描述符窗口大小!

3

1.獲取內置文檔:您也可以根據您的要求改變HOGDescriptor性質, 你的Python控制檯下面的命令將幫助你知道類HOGDescriptor的結構:

import cv2 help(cv2.HOGDescriptor())

2.示例代碼:下面是用不同參數初始化cv2.HOGDescriptor的代碼片段(這裏使用的術語是在OpenCV文檔here中明確定義的標準術語):

import cv2 
image = cv2.imread("test.jpg",0) 
winSize = (64,64) 
blockSize = (16,16) 
blockStride = (8,8) 
cellSize = (8,8) 
nbins = 9 
derivAperture = 1 
winSigma = 4. 
histogramNormType = 0 
L2HysThreshold = 2.0000000000000001e-01 
gammaCorrection = 0 
nlevels = 64 
hog = cv2.HOGDescriptor(winSize,blockSize,blockStride,cellSize,nbins,derivAperture,winSigma, 
         histogramNormType,L2HysThreshold,gammaCorrection,nlevels) 
#compute(img[, winStride[, padding[, locations]]]) -> descriptors 
winStride = (8,8) 
padding = (8,8) 
locations = ((10,20),) 
hist = hog.compute(image,winStride,padding,locations) 

3.推理:所得豬描述符將具有尺寸爲: 9取向X(4角塊即獲得在該獲得2個歸一化+ 6x6的塊即得到4邊緣1個正常化+ 6×4塊規範化)= 1764.因爲我只給出了hog.compute()的一個位置。

4.初始化另一種方式是它包含了所有的參數值的XML文件:

hog = cv2.HOGDescriptor("hog.xml") 

爲了得到一個XML文件可以做到以下幾點:

hog = cv2.HOGDescriptor() 
hog.save("hog.xml") 

和編輯xml文件中的各個參數值​​。

問題的解決方案:您可以將'winSize'值更改爲您想要的值。使您的圖像尺寸不會出HoG窗口區域。