写一个用sklearn提取图像边缘直方图和颜色直方图特征的代码
时间: 2023-07-16 12:16:27 浏览: 140
以下是一个使用sklearn提取图像边缘直方图和颜色直方图特征的示例代码:
```python
import cv2
import numpy as np
from sklearn.preprocessing import normalize
# 读取图像
img = cv2.imread('image.jpg')
# 提取边缘直方图特征
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray, 100, 200)
hist_edges, _ = np.histogram(edges, bins=256, range=(0, 255))
hist_edges = normalize(hist_edges.reshape(1,-1), norm='l1')[0]
# 提取颜色直方图特征
colors = ('b', 'g', 'r')
hist_colors = []
for i, col in enumerate(colors):
hist, _ = np.histogram(img[:,:,i], bins=256, range=(0, 255))
hist_colors.append(hist)
hist_colors = np.concatenate(hist_colors)
hist_colors = normalize(hist_colors.reshape(1,-1), norm='l1')[0]
# 将两个特征拼接在一起
features = np.concatenate((hist_edges, hist_colors))
print(features)
```
在上面的代码中,我们首先读取了一张图像,然后使用cv2库提取了图像的边缘直方图特征和颜色直方图特征。对于边缘直方图特征,我们将图像转换为灰度图像,然后使用cv2.Canny()函数提取图像的边缘,并使用np.histogram()函数计算边缘直方图。对于颜色直方图特征,我们分别计算了图像的蓝色、绿色和红色通道的直方图,并将它们拼接在一起。最后,我们将两个特征拼接在一起,得到最终的特征向量。
阅读全文