python实现HOG特征提取的代码
时间: 2023-10-01 15:02:12 浏览: 131
下面是一个简单的 Python 代码示例,用于提取 HOG 特征:
```python
import cv2
import numpy as np
from skimage.feature import hog
# 读取图像
img = cv2.imread('test.jpg')
# 将图像从 BGR 转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 计算 HOG 特征
features, hog_image = hog(gray, orientations=9, pixels_per_cell=(8, 8), cells_per_block=(2, 2), visualize=True, block_norm='L2-Hys')
# 显示结果
cv2.imshow('Original Image', img)
cv2.imshow('HOG Image', hog_image)
```
在此示例中,我们首先读取了一张图像,然后将其转换为灰度图像。接下来,我们使用 scikit-image 库中的 `hog()` 函数来计算 HOG 特征。该函数的参数包括:
- `orientations`:HOG 算法中的方向数。
- `pixels_per_cell`:每个单元格的像素数。
- `cells_per_block`:每个块中的单元格数。
- `visualize`:是否返回可视化的 HOG 图像。
- `block_norm`:块规范化方法。
最后,我们显示原始图像和 HOG 图像。
相关问题
python实现hog特征提取代码
可以,以下是一个Python实现HOG特征提取的代码示例:
```python
import cv2
import numpy as np
# 读取图片
img = cv2.imread('your_image_file.jpg')
# 将图片转为灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 计算图像梯度
gx = cv2.Sobel(gray, cv2.CV_32F, 1, 0)
gy = cv2.Sobel(gray, cv2.CV_32F, 0, 1)
# 计算梯度幅值和方向
mag, angle = cv2.cartToPolar(gx, gy, angleInDegrees=True)
# 将方向范围从0~360度改为0~180度
angle = angle % 180
# 将图像分成若干个块,每个块9个直方图bin,计算直方图
cell_size = (8, 8)
block_size = (2, 2)
nbins = 9
# 计算每个块的梯度直方图
hog = cv2.HOGDescriptor(_winSize=(gray.shape[1] // cell_size[1] * cell_size[1],
gray.shape[0] // cell_size[0] * cell_size[0]),
_blockSize=(block_size[1] * cell_size[1],
block_size[0] * cell_size[0]),
_blockStride=(cell_size[1], cell_size[0]),
_cellSize=(cell_size[1], cell_size[0]),
_nbins=nbins)
hist = hog.compute(mag, winStride=(cell_size[1], cell_size[0]), padding=(0, 0))
# 将直方图展开为特征向量
features = np.array(hist).reshape(-1)
```
这段代码通过opencv库实现了HOG特征提取,具体实现过程如下:
1. 读取图像并将其转换为灰度图;
2. 计算图像的梯度,包括x和y方向的梯度;
3. 计算梯度幅值和方向,并将方向范围从0~360度改为0~180度;
4. 将图像分成若干个块,并计算每个块的梯度直方图;
5. 将直方图展开为特征向量。
这段代码可以用于目标检测、行人识别、人脸识别等计算机视觉任务中。
python实现hog特征提取及展示代码
以下是Python实现HOG特征提取及展示代码:
```python
import cv2
import numpy as np
# 获取图像的HOG特征
def get_hog_feature(image):
hog = cv2.HOGDescriptor()
h = hog.compute(image)
return h.flatten()
# 读取图片并显示HOG特征图
def show_hog_image(image_path):
image = cv2.imread(image_path)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
hog = cv2.HOGDescriptor()
h = hog.compute(gray)
hog_image = hog.visualize(gray, np.squeeze(h))
cv2.imshow("HOG Image", hog_image)
cv2.waitKey(0)
if __name__ == '__main__':
image_path = "example.jpg"
show_hog_image(image_path)
```
以上代码中,get_hog_feature()函数用于提取输入的图像的HOG特征,show_hog_image()函数则用于读取指定路径的图像,并展示其HOG特征图。在show_hog_image()函数中,我们首先读取图像并转换为灰度图像,然后调用cv2.HOGDescriptor()构造函数创建HOGDescriptor对象。接着,使用该对象的compute()方法计算图像的HOG特征,并使用其visualize()方法将HOG特征可视化,最后使用cv2.imshow()方法展示HOG特征图。
阅读全文