绘制颜色矩的直方图

# 代码5-2 绘制颜色矩的直方图
def color_moments(img, trans_hsv=False):
    if trans_hsv == True:
        img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
    # 颜色分割
    f, s, t = cv2.split(img)
    # 创建特征存放列表
    color_feature = []
    # 一阶
    f_mean = np.mean(f)
    s_mean = np.mean(s)
    t_mean = np.mean(t)
    color_feature.extend([f_mean, s_mean, t_mean])
    # 二阶
    f_std = np.std(f)
    s_std = np.std(s)
    t_std = np.std(t)
    color_feature.extend([f_std, s_std, t_std])
    # 三阶
    f_skewness = np.mean(abs(f - f.mean()) ** 3)
    s_skewness = np.mean(abs(s - s.mean()) ** 3)
    t_skewness = np.mean(abs(t - t.mean()) ** 3)
    f_thirdMoment = f_skewness ** (1. / 3)
    s_thirdMoment = s_skewness ** (1. / 3)
    t_thirdMoment = t_skewness ** (1. / 3)
    color_feature.extend([f_thirdMoment, s_thirdMoment, t_thirdMoment])

    return color_feature


img1 = cv2.imread('../data/leaf1.jpg')
img2 = cv2.imread('../data/leaf2.jpg')

img1 = img1[188: 238, 275: 325, :]
img2 = img2[69: 119, 108: 158, :]
# 调用函数获取颜色矩
img1_feature = color_moments(img1)
img2_feature = color_moments(img2)

x = np.arange(9)
labels = [i + j for i in ['一阶', '二阶', '三阶'] for j in ['B', 'G', 'R']]
fs = 15
plt.figure(figsize=(7, 4))  # 设置画布的大小
plt.bar(x - 0.15, img1_feature, width=0.3)
plt.bar(x + 0.15, img2_feature, width=0.3)
plt.xticks(x, labels, fontsize=fs)
plt.xlabel('各阶颜色矩', fontsize=fs)
plt.legend(['leaf1', 'leaf2'])
plt.tight_layout()
# plt.savefig('../tmp/颜色矩.png', dpi=1080)
plt.show()

这段代码是用于绘制颜色矩的直方图。它首先定义了一个color_moments函数,该函数计算图像的颜色矩特征。然后,它从两张图像中提取颜色矩特征,并将这些特征存储在img1_featureimg2_feature变量中。

接下来,代码使用matplotlib库绘制直方图。它创建一个包含9个条形的图表,分别表示一阶、二阶和三阶的颜色矩特征。通过调用plt.bar函数,将img1_featureimg2_feature的值分别绘制为两组条形。

最后,代码设置x轴的刻度标签和标签字体的大小,以及x轴和y轴的标签。通过调用plt.legend函数,为图表添加图例。最后,调用plt.show函数显示图表。

如果你想保存这个图表,可以将注释掉的代码plt.savefig('../tmp/颜色矩.png', dpi=1080)取消注释,将图表保存为指定路径下的图片文件。

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

人工智能教学实践

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值