2

脚本 opencv_createsamples 创建 .vec 文件,其中包含训练级联所需的所有图像。

我想知道是否有办法将图像直接从该文件加载到 python 脚本。

谢谢你。

4

1 回答 1

1

这个 python 片段显示了从 .vec 文件中提取图像。可以使用 showvec('xxx.vec') 调用该函数。仅当 vec 文件中的图像具有其他标准尺寸时,才必须设置宽度和高度参数。( 24 x 24 ) resize 参数调整图像的大小以便更好地查看。当调用此函数时,一个窗口将在按下一个键时一个接一个地显示图像。esc 键将打破循环。它演示了使用 python 从 .vec 文件中提取图像是多么容易。

import struct,array

import cv2
import numpy as np

def showvec(fn, width=24, height=24, resize=4.0):
  f = open(fn,'rb')
  HEADERTYP = '<iihh' # img count, img size, min, max

  # read header
  imgcount,imgsize,_,_ = struct.unpack(HEADERTYP, f.read(12))

  for i in range(imgcount):
    img  = np.zeros((height,width),np.uint8)

    f.read(1) # read gap byte

    data = array.array('h')

    ###  buf = f.read(imgsize*2)
    ###  data.fromstring(buf)

    data.fromfile(f,imgsize)

    for r in range(height):
      for c in range(width):
        img[r,c] = data[r * width + c]

    img = cv2.resize(img, (0,0), fx=resize, fy=resize, interpolation=cv2.INTER_LINEAR)
    cv2.imshow('vec_img',img)
    k = 0xFF & cv2.waitKey(0)
    if k == 27:         # esc to exit
      break
于 2015-08-21T09:51:29.777 回答