绘制颜色矩的直方图

# 代码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)取消注释,将图表保存为指定路径下的图片文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/215492.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

聊聊刻意练习-构建心理表征

这是鼎叔的第八十一篇原创文章。行业大牛和刚毕业的小白,都可以进来聊聊。 欢迎关注本专栏和微信公众号《敏捷测试转型》,星标收藏,大量原创思考文章陆续推出。本人新书《无测试组织-测试团队的敏捷转型》已出版(机械工业出版社&…

使用Linux docker方式快速安装Plik并结合内网穿透实现公网访问

文章目录 1. Docker部署Plik2. 本地访问Plik3. Linux安装Cpolar4. 配置Plik公网地址5. 远程访问Plik6. 固定Plik公网地址7. 固定地址访问Plik 本文介绍如何使用Linux docker方式快速安装Plik并且结合Cpolar内网穿透工具实现远程访问,实现随时随地在任意设备上传或者…

Python面向对象②:属性与方法【侯小啾python领航班系列(二十)】

Python面向对象:属性与方法【侯小啾python领航班系列(二十)】 大家好,我是博主侯小啾, 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ�…

Golang使用Swagger文档教程

Golang开发效率是杠杠滴,简单几行代码就可完成一个可用的服务,如下代码: 采用Gin作为web framework采用Gorm作为持久化ORM采用Swagger作为OpenAPI文档管理工具 package mainimport ("encoding/csv""fmt""os"…

电脑监控软件的监控方式有哪些

电脑监控软件是一种用于监视和控制计算机操作的工具,通常用于企业或个人对计算机的使用情况进行监控和管理。本文将探讨电脑监控软件的监控方式及其存在的问题。 首先,电脑监控软件的监控方式主要包括以下几种: 1、屏幕监控:这种…

4382系列数字荧光示波器

4382系列数字荧光示波器 简述: 4382系列手持式数字荧光示波器具有8个产品型号,带宽200MHz、350MHz、500MHz、1GHz,最高采样率5GSa/s,最大存储深度60kpts/CH,最快波形捕获率10万个波形/秒,独创的Any Acquire…

【程序员 | 交流】程序员情商修炼指南系列 (沟通是有效合作一大利器)

🤵‍♂️ 个人主页: AI_magician 📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。 👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!&…

无需编程,绿云PMS如何优化用户运营—API连接、集成、广告推广

无需编程的优化艺术:绿云PMS如何改善用户运营 随着科技的进步,企业面临着持续的数字化转型压力。在这个过程中,如何在不增加技术负担的前提下改善用户运营成为一大挑战。杭州绿云软件股份有限公司通过其创新的绿云PMS系统,为企业…

vue 用Nginx实现负载均衡

Nginx负载均衡的作用(相当于客户端的请求是发到Nginx上的,然后由Nginx决定到底调用哪台服务器): 在 .net core 中的具体实现步骤 1.在nginx官网上下载安装包,推荐稳定版; 建议1.18版本 2.下载完成后,到所在目录执行 nginx绿色图…

基于PLC的电梯控制系统(论文+源码)

1.系统设计 电梯采用了PLC控制方式,通过对PLC进行逻辑程序设计,电梯不仅在控制水平上得到了质的提升,同时在安全性上也得到了大大提高。控制系统在构造上实现了简洁化,不仅优化了硬件接线方便了线路施工,同时对控制要…

【每日OJ —— 101. 对称二叉树】

每日OJ —— 101. 对称二叉树 1.题目:101. 对称二叉树2.解法2.1.算法讲解2.2.代码实现2.3.提交通过展示 1.题目:101. 对称二叉树 2.解法 2.1.算法讲解 1.该题是判断二叉树是否对称,关键在于,左子树等于右子树,而所给的…

Make sure that using this pseudorandom number generator is safe here.

问题类型:安全热点 安全问题级别:MEDIUM 一、问题代码 工具类Package: Java commons-lang3 库 RandomUtils 随机数工具类 import org.apache.commons.lang3.RandomUtils; 用法: RandomUtils.nextInt(0, 999999999) //生成 0…

SpringBoot的配置加载优先级

目录 一、背景分析 二、学习资源 三、具体使用 四、一些小技巧 方式一 方式二 一、背景分析 SpringBoot项目在打包之后&#xff0c;其配置文件就在jar包内&#xff0c;如果没有<配置文件优先级>这个机制&#xff0c;那么项目打成jar包之后&#xff0c;如果启动项目…

Qt配置OpenCV(MSVC编译)

目录 1.准备工具 1.1 Qt&#xff1a;5.14.2 64位 1.2 Opencv&#xff1a;4.6.0 1.3 Visual Studio 2017 2. QtMSVC开发环境搭建 3. 配置环境变量 3.1 Opencv环境变量配置 4. Qt 代码测试 1.准备工具 1.1 Qt&#xff1a;5.14.2 64位 1.2 Opencv&#xff1a;4.6.0 官…

网工学习5 交换机端口相关配置

交换机的接口属性默认支待一般网络环境&#xff0c;一般情况下是不需要对其接口进行设置的。在某些情况下需 要对其端口属性进行配置时&#xff0c;配置的对象主要有接口隔离、速率、双工等信息。 5.1 接口隔离设置 > 配置接口 GE0/0/1 和 GE0/0/2 的接口隔离功能&#xf…

Windows系列:Windows Server 2016搭建AD域服务

Windows Server 2016搭建AD域服务 AD域安装实验简介实验环境服务端配置客户端配置1. 加域方法一IP地址配置第二台客户端加域 2. 加域方法二Windows10客户端加完域是需要重启计算机的&#xff0c;等待客户端重启成功 AD域安装 实验简介 AD的全称是Active Directory。AD域是Win…

C语言从入门到实战——常用内存函数的了解和模拟实现

常用内存函数的了解和实现 前言1. memcpy使用和模拟实现2. memmove使用和模拟实现3. memset函数的使用4. memcmp函数的使用 前言 内存函数&#xff08;memory functions&#xff09;指的是控制计算机内存操作的函数 1. memcpy使用和模拟实现 void * memcpy ( void * destinat…

逆波兰表达式求值

逆波兰表达式求值 一:中缀表达式和逆波兰表达式二&#xff1a;力扣&#xff1a;[逆波兰表达式求值](https://leetcode-cn.com/problems/evaluate-reverse-polish-notation/)二&#xff1a;原理&#xff1a;三:代码实现&#xff1a; 一:中缀表达式和逆波兰表达式 中缀表达式就是…

Vue3.0 所采用的 Composition Api 与 Vue2.x 使用的 Options Api 有什么不同?

面试官&#xff1a;Vue3.0 所采用的 Composition Api 与 Vue2.x 使用的 Options Api 有什么不同&#xff1f; 开始之前 Composition API 可以说是Vue3的最大特点&#xff0c;那么为什么要推出Composition Api&#xff0c;解决了什么问题&#xff1f; 通常使用Vue2开发的项目&…

数据库之 redis

前言&#xff1a; 就学习爬虫而言&#xff0c;对于三种常见的数据库做个基本了解足以&#xff0c;所以笔记都是浅尝辄止&#xff0c;不会涉及太深入的东西。 redis简介 Redis&#xff08;Remote Dictionary Server &#xff0c;远程字典服务&#xff09; 是一个使用ANSI C编写…