对于新手的你和我来说,不要害怕和畏惧
接收新知识,尤其是对于学计算机的我们来说,我们对概念可能懵懵懂懂,但是你只要上手操作你就可以明白这其中的原理,学会使用,慢慢就会发现你所害怕接收的新知识和你已经学过的知识其实有异曲同工之处!
文章目录
- 一、认识HDF5
- 二、可视化工具-HDFView
- 三、案例测试
一、认识HDF5
可以存储不同类型的图像和数码数据
的文件格式,并且可以在不同类型的机器上传输,同时还有统一处理这种文件格式的函数库。大多数普通计算机都支持这种文件格式。–【百度百科】
想进一步加深了解相关概念----->百度百科:HDF
- 理解h5文件并使用python对h5格式文件进行读写操作
- HDF5 数据文件简介 ⭐
二、可视化工具-HDFView
百度网盘:HDF5文件可视化工具 提取码:ktzu
HDFView是将*.hdf5
文件进行数据可视化的软件工具,下面讲一讲具体使用流程:
- 下载安装
可以根据我给的链接进行下载,或者自己去官网下载。(我的就是官网下载的,因为慢所以放进了百度网盘,不放心的可以直接去官网下载的)
- 安装完成图
到此为止,你可能会双击打开软件,若是直接可以使用,请看第三步,若是不能看第二布
- 设置环境变量
【1.此电脑】–》【2.右击,属性】–》【3.高级系统设置】–》【4.系统变量】–》【5.Path】–》【6.编辑】–》【7.确定】
我的路径:E:\\python3.7\\HDFView\\runtime\\bin
- 工具测试
- 测试文件
- 窗口界面
类似于juoyter notebook有一个启动器
- 打开文件
三、案例测试
import cv2
import numpy as np
import os
import h5py
image_types = (".jpg", ".jpeg?s=#34;, ".bmp", ".tif", ".tiff")
def geturlPath(dirpath):
path_list = []
dirs = os.listdir(dirpath)
for picname in dirs:
pa = dirpath + '\\\\'+ picname
print('image path:',pa)
if picname.endswith(image_types):
path_list.append(pa)
path_list.sort(key=lambda x: int(x.split('.')[1].split('/')[2]))
return path_list,True
def sift_kp(sift,image):
kp,des = sift.detectAndCompute(image, None)
return kp,des
def create_featurefile(name):
txt_name = name
current_path = os.getcwd()
path = current_path + '\\\\' + txt_name
if os.path.exists(path):
pass
else:
os.system(r"touch {}".format(path))
return path,True
def save_keypoint(keypoint,path):
np.set_printoptions(threshold=np.inf)
with open(path, 'a') as fp:
fp.write(str(keypoint.shape))
fp.write('\\n')
fp.write(str(keypoint))
def save_HDF5(hdf5fp,imagepath,des):
'''
:param hdf5fp: HDF5文件操作符
:param imagepath: 传入的文件名路径
:param des: 特征值矩阵
:return:
'''
charnum = imagepath.split('/')[-1].split('.')[0]
groupname = 'image' + charnum
datasetname = 'feature_data_' + charnum
group = hdf5fp.create_group(groupname)
dataset = group.create_dataset(datasetname, data=des)
if __name__ == '__main__':
dirpath = r'F:\\graduate_stu\\task1\\wood'
image_list,flag = geturlPath(dirpath)
print(image_list)
if flag:
sift = cv2.xfeatures2d_SIFT.create()
file = h5py.File("./imagefeature.hdf5", "w")
for imagepath in image_list:
try :
image = cv2.imread(imagepath)
_, des = sift_kp(sift, image)
print('des:', des.shape)
save_HDF5(file,imagepath,des)
except AttributeError:
pass
print(imagepath.split('/')[2] + '的特征值数据写入完毕!')
print('-----------------------------')
file.close()
print('所有图片特征数据写入完成!')
else:
print('txt_file is not exist!')
geturlPath()
:获取指定路径下的所有图片,并进行排序,因为获取的所有文件是无序的,然而我有强迫症!sift_kp()
:提取图像特征save_keypoint()
:一开始采取的策略将每一张图片的特征存在txt格式文件中,后来发现特别慢,所以才使用的HDF5格式文件进行存储,存储非常快save_HDF5()
:写入HDF5格式文件try-except
的使用:在程序运行的过程中发现有些图片没有特征(可能是我技术没到家),所以进行Error忽略。
geturlPath()方法获取的有序列表:
['./query/1.jpg', './query/2.jpg', './query/3.jpg', './query/4.jpg', './query/5.jpg',
'./query/6.jpg', './query/7.jpg', './query/8.jpg', './query/9.jpg', './query/10.jpg', './query/11.jpg', './query/12.jpg', './query/13.jpg','./query/14.jpg',
'./query/15.jpg','./query/16.jpg', './query/17.jpg', './query/18.jpg', './query/19.jpg', './query/20.jpg','./query/21.jpg', './query/22.jpg', './query/23.jpg', './query/24.jpg', './query/25.jpg']