2014-12-07 3 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

+0

Спасибо большое! Вот что. Если вы опубликуете его как ответ, я буду отмечать его как принятый ответ. – Arnaud

ответ

3

Сообщение об ошибке похоже на то, что пиксель изображения находится вне области вашего окна HoG.

Насколько я знаю, HoG Descriptors имеют какое-то свойство «winSize» (например, 64x128 пикселей для дескриптора людей afair).

Убедитесь, что ваше изображение соответствует размеру окна дескриптора, изменив размер изображения или выбрав соответствующую подзону!

3

1. Получить ВСТРОЕННУЮ Документацию: Вы также можете изменить свойства HOGDescriptor в соответствии с вашими требованиями, После команды на вашем питон консоли поможет вам узнать структуру класса 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 угловых блоки, которые получают 1 нормировку + 6x4 блоков по краям, которые получают 2 нормировок + блоки 6х6, которые получают 4 нормализации) = 1764. поскольку я дал только одно место для hog.compute().

4. Еще один способ инициализации от XML-файл, который содержит все значения параметров:

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

Чтобы получить XML-файл, можно сделать следующее:

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

и редактировать соответствующие значения параметров в файле xml.

Решение проблемы:Вы можете изменить значение «winSize» так, как вы хотите. так что размер вашего изображения не будет отображаться в области окна HoG.