使用python从图像集中提取hog功能时出错

时间:2016-05-14 04:39:04

标签: python opencv image-processing

我正在尝试从图像集中提取HOG功能但是我得到了内存错误

hists = [np.bincount(b.ravel(), m.ravel(), bin_n) for b, m in zip(bin_cells, mag_cells)]

的MemoryError

我从opencv example复制了HOG功能,我的示例代码是

def hog(img):
  gx = cv2.Sobel(img, cv2.CV_32F, 1, 0)
  gy = cv2.Sobel(img, cv2.CV_32F, 0, 1)
  mag, ang = cv2.cartToPolar(gx, gy)
  bins = np.int32(bin_n*ang/(2*np.pi))    # quantizing binvalues in (0...16)
  bin_cells = bins[:10,:10], bins[10:,:10], bins[:10,10:], bins[10:,10:]
  mag_cells = mag[:10,:10], mag[10:,:10], mag[:10,10:], mag[10:,10:]
  hists = [np.bincount(b.ravel(), m.ravel(), bin_n) for b, m in zip(bin_cells, mag_cells)]
  hist = np.hstack(hists)     # hist is a 64 bit vector
  return hist
path_url="d:/anto/preimages/"
listdir = os.listdir(path_url)
for file in listdir:
  img = cv2.imread(path_url + file)
  h=hog(img)

1 个答案:

答案 0 :(得分:1)

问题出在你的图像集上。因为你已经从google中随机下载了图片。它可能有不同的大小而导致Error.Before调用hog函数你必须调整图像大小。在opencv中你可以使用

resized=cv2.resize(img,(250,250))
h=hog(resized)

在PIL库中,您可以使用

调整大小
resolutin=(250.250)
resizes=img.resize(resolution , Image.ANTIALIAS)

但我必须建议添加一个单独的preproceesing步骤。在预处理步骤中,您可以调整大小并保存您的' preimages'文件夹到另一个文件夹,您可以将其作为猪的提取程序的输入。