项目简介
该项目利用OpenCV和skimage库实现了图像处理和HOG特征提取,并使用matplotlib库进行图像显示。通过对图像进行处理和特征提取,可以用于图像分类等领域。
项目特点
- 使用OpenCV进行图像处理,包括读取图片、颜色格式转换、尺寸缩放等。
- 利用skimage库提取图像的HOG特征,并可视化展示。
- 使用matplotlib库实现图像显示,包括灰度图和HOG特征图
实现步骤:
读取图片并进行尺寸缩放。
将图片从BGR格式转换为RGB格式以适应matplotlib显示。
将图片转换为灰度图。
提取图像的HOG特征并进行可视化展示
使用技术:
- OpenCV:用于图像处理,包括读取图片、颜色格式转换等。
- skimage:用于提取图像的HOG特征。
- matplotlib:用于图像显示和可视化。
项目用途:
姿势识别:通过提取HOG特征,可以用于手部姿势识别。
目标检测:HOG特征在目标检测领域有着广泛的应用。
图像分析:利用图像处理和特征提取技术,可以进行图像分析和识别。
使用说明:
需要安装OpenCV、skimage和matplotlib库。
图片路径需要根据实际情况进行修改。
可根据需求调整HOG特征提取参数,如 orientations、pixels_per_cell 和 cells_per_block。
案例代码:
# 导入OpenCV库,用于图像处理
import cv2
# 导入matplotlib库,用于图像显示
import matplotlib.pylab as plt
import numpy as np
# 导入skimage, 用于提取HOG特征
from skimage.feature import hog
# 导入skimage的数据和曝光模块, 用于图像处理
from skimage import data, exposure
def im_read(filePath):
"""
读取图片, 支持中文路径格式
Args:
filePath: 图片路径
return: img
"""
raw_path = np.fromfile(filePath, dtype=np.uint8)
img = cv2.imdecode(raw_path, -1)
return img
def cv2show_img(img, img_name=None) :
"""
显示图片使用OpenCV
"""
# 保存图片
cv2.imshow(img_name, img)
cv2.imwrite("1.png", img)
cv2.waitKey(0)
cv2.destroyAllWindows()
def pltshow_img(img, img_name=None) :
"""
显示图片使用matplotlib
"""
# 去掉网格线
plt.rcParams['axes.unicode_minus'] = False
plt.figure(img_name)
plt.imshow(img)
# plt.grid(False) # 去掉网格线
plt.axis('off') # 去掉坐标轴
plt.savefig("2") # 保存图片
plt.show()
if __name__ == "__main__":
# 读取图片
img = im_read(r"D:/01_OneFlowTech/Repo2/Kaggle猫狗大战/test1/test1/7.jpg")
img = cv2.resize(img, (224, 224)) # 将图片进行缩放
# 将图片从BGR格式转换为RGB格式, 以适应matplotlib显示
img_fixed = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # BGR->RGB
pltshow_img(img_fixed)
# 将图片转换为灰度图
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # BGR->GRAYS
cv2show_img(img_gray)
# 提取图像的HOG特征并可视化
fea_val, hog_img = hog(image=img_gray,
orientations=9,
pixels_per_cell=(8,8),
cells_per_block=(2, 2),
visualize=True
)
# 创建子图,显示原始图片和HOG特征图
fig, (ax1, ax2) = plt.subplots(1, 2,
figsize=(10, 5),
sharex=True,
sharey=True)
ax1.axis('off')
ax1.imshow(img_fixed)
ax1.set_title("src_img")
# 调整HOG特征图的亮度范围以更好地显示颜色
hog_image_rescaled = exposure.rescale_intensity(hog_img, in_range=(0, 20))
ax2.axis('off')
ax2.imshow(hog_image_rescaled, cmap=plt.cm.gray)
ax2.set_title("Histogram of Oriented Gradients")
plt.show()
注意事项
本项目仅为演示用途,未经过完整测试和优化,可能存在一定的局限性和不足之处。
如需商业应用或其他用途,请谨慎使用并自行承担风险。