脚本 opencv_createsamples 创建 .vec 文件,其中包含训练级联所需的所有图像。
我想知道是否有办法将图像直接从该文件加载到 python 脚本。
谢谢你。
脚本 opencv_createsamples 创建 .vec 文件,其中包含训练级联所需的所有图像。
我想知道是否有办法将图像直接从该文件加载到 python 脚本。
谢谢你。
这个 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