绘制图像灰度直方图——将图像的灰度分布可视化方法总结

2023-05-16

        今天在实现图像阈值分割的时候,需要找到能将背景与物体区分开的灰度阈值,因为处理到的图像比较简单,它的直方图具有一个十分明显的特点,也就是它的直方图以双峰一谷的形式呈现,将物体与背景区分开来的阈值也就是谷所对应的阈值,利用数学概念解释一下,双峰就对应着两个极大值,谷对应着极小值,也就是在两个极大值之间找到这个最小值,当然也可以通过统计一下图像灰度值的分布,将灰度值分布以可视化的方式呈现,然后找到合适的阈值,这比排序找极小值的效率快很多,在这里我将介绍三种将灰度分布可视化的方式。

        方法一————利用matplotlib库中的hist()函数

matplotlib.pyplot.hist(xbins=Nonerange=Nonedensity=Falseweights=Nonecumulative=Falsebottom=Nonehisttype='bar'align='mid'orientation='vertical'rwidth=Nonelog=Falsecolor=Nonelabel=Nonestacked=False*data=None**kwargs)

一般只定义前面三个参数:

x: 输入的数据

bins:如果bins输入的是一个整数,那么它代表着在输出的图像中,横坐标被均分为多少份

range:它定义了横坐标的范围,输入的是存储了两个数的列表,左边的数是横坐标起点,右边的数是横坐标截止点

这个函数输出的最终结果,是显示每一个灰度值,以及其对应的频率的连续图 

        方法二————利用opencv中的calcHist函数

cv.calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate]]) 

 image:需要被统计灰度值分布的图像,有一个血的教训,image一定要用[]框住

channels:图像通道,对于一个BGR图像, [0], [1],[2]分别对于B,G,R三个通道

mask:一般默认其为None即可

histSize:定义了直方图横坐标范围

ranges:定义了横坐标被分为多少份

        方法三————利用PLotly进行可视化绘图

Plotly生成的图表是交互式的,也就是说当你用鼠标指向对应的一个灰度值时,他会直接显示这个灰度值的频率,但是耗时比较长,应为他需要用程序计算出每个灰度值对应的频数是多少。

        在这里主要用到了:

        Bar函数,来存储输入数据的横纵坐标

        Layout函数,用来定义函数的标题,横纵坐标

        offline.plot, 最终的绘图

三种方法的实现过程总程序如下:

import cv2
import matplotlib.pyplot as plt
from plotly import offline
from  plotly.graph_objs import Bar, Layout
img_source = cv2.imread('C:\\Users\\yu\\Desktop\\picture_csdn\\cells_segmentation.jpg', cv2.IMREAD_COLOR)
img_gray = cv2.cvtColor(img_source, cv2.COLOR_BGR2GRAY)
cv2.imshow('img_gray', img_gray)
#   方法二————利用opencv中的calcHist函数
img_hist = cv2.calcHist([img_gray], [0], None, [256], [0, 256])
plt.plot(img_hist, color='blue')
plt.show()
#   方法一————利用matplotlib库中的hist()函数
plt.hist(img_gray.ravel(), 256, [0, 256])#ravel函数功能是将多维数组降为一维数组
plt.show()
ret, img_segmentation = cv2.threshold(img_gray, 80, 255, cv2.THRESH_TRUNC)#    对图像进行阈值分割
cv2.imshow('img_segmentation', img_segmentation)#    图像分割结果
#    方法三————利用PLotly进行可视化绘图
a_input = list(img_gray.ravel())
frequencies = []
for value in list(range(0, 256)):
    print(value)
    frequency = a_input.count(value)
    frequencies.append(frequency)
#   对结果可视化
x_values = list(range(0, 256))
data = [Bar(x=x_values, y=frequencies)]
x_axis_config = {'title': '灰度值'}
y_axis_config = {'title': '灰度值的频率'}
my_layout = Layout(title='一个图像的灰度直方图', xaxis=x_axis_config, yaxis=y_axis_config)
offline.plot({'data': data, 'layout': my_layout}, filename='gray_histogram.html')
cv2.waitKey(0)
cv2.destroyAllWindows()

   在上面的程序中,附带了一个我对图像进行阈值分割的两条代码,读者在使用程序的时候可以将其注释掉。

在这里我统计的图像是一个将彩色图像转化为灰度图像的细胞图像:

 三种灰度直方分布结果如下所示:

方法一

方法二

方法三

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

绘制图像灰度直方图——将图像的灰度分布可视化方法总结 的相关文章

  • 【MAC】添加软连接 将 sublime 放入命令行中

    软链接 类似于 Windows 的快捷方式加环境变量 将 Sublime Text 以 subl 作为新的名字进行全局软连接 span class token function sudo span span class token func
  • 【ARM】 《C 语言调用汇编子程序》 与 《汇编调用 C 语言程序》

    题目 xff1a 实现计算 1 43 2 43 3 43 43
  • 【MAC】启动 ssh 服务 及 ssh 长时间不用自动断开解决

    一 启动 ssh 服务 mac本身安装了ssh服务 xff0c 默认情况下不会开机自启 启动sshd服务 xff1a span class token function sudo span launchctl load w System L
  • 【Linux】ssh 链接服务器 并 安装宝塔面板

    一 ssh 链接服务器 xx 是连接 ssh 的端口号 xx xx xx xx 是 IP 号 span class token function ssh span p xx root 64 xx xx xx xx 二 安装宝塔面板 yum
  • 【Linux】解决 SS 在安装宝塔面板后无法连接服务器问题

    问题 xff1a 在安装宝塔面板后 ss 无法使用 xff0c 但是 ssh 可以连接服务器 原因 xff1a 因为宝塔面板的安全设置默认会禁止除 ssh 端口外的所有端口 解决 xff1a 找到宝塔面板里的安全将 ss 的 server
  • 【SSH】解决 WIN10 通过 ssh 连接 Mac 中文乱码

    问题 xff1a MacOSX 下默认的是 utf 8 字符集 xff0c WIN10 通过 ssh 连接后显示是 utf 8 xff0c 但是中文乱码 原因 xff1a 这种情况一般是终端和服务器的字符集不匹配 在 Mac 终端中输入 l
  • 【python】Notebook

    CONTENT 1 小Tips三元运算符平均数 np mean range 与 np arange 求最大 小值及索引值合并 list 为字符串剪切板模块 pyperclip将秒数转化为小时分钟秒 2 数学随机数 3 文件相关按分隔文件路径
  • 【Mac】Mac 系统读写 NTFS 格式硬盘

    查看磁盘 typename diskutil list 更新 etc fstab文件 sudo vim etc fstab 写入如下内容 xff1a LABEL 61 GRMCULXFRER none ntfs rw auto nobrow
  • 小米路由器青春版刷入其他固件

    小米路由器青春版搭载的是基于OpenWRT深度定制的智能路由器操作系统MiWiFi ROM xff0c 实质即嵌入式linux系统 小米路由器青春版自带的miwifi r1cl all 59371 2 1 26 bin及其以下版本中存在通过
  • 【数据结构】排序算法

    不稳定的排序算法 xff1a 快排 堆排 选择 希尔 排序算法时间复杂度空间复杂度稳定性冒泡 xff08 Bubble Sort xff09 O n 2 O 1 稳定快排 xff08 Quick Sort xff09 O n logn O
  • 【数据结构】POJ 1985 Cow Marathon(树的直径)

    链接 xff1a http poj org problem id 61 1985 题意 xff1a 有 n n n 个农场和 m m m 条路 xff0c 以及每条
  • 【C#】接口的基本概念

    目录 基本 什么是接口接口与抽象类的区别 抽象类接口实例 设计接口 基本 什么是接口 C 接口 interface 是 xff1a 用来定义一种程序的协定 实现接口的类或者结构要与接口的定义严格一致 有了这个协定 xff0c 就可以抛开编程
  • 部署Sonic编译服务器

    编译Sonic环境 部署Sonic编译环境编译准备开机自动挂载硬盘创建用户安装 Docker开始编译 部署Sonic编译环境 先给服务器安装 Ubuntu20 04 02 系统 xff0c Sonic编译 Github 链接 sonic b
  • 【闲聊STP/RSTP】

    闲聊STP RSTP xff08 Spanning Tree Protocol xff09 STP xff08 Spanning Tree Protocol xff09 xff0c 1998年IEEE提出的802 1D协议 xff0c 它是
  • 实现云弹性的一种方法—系统和混沌测试

    在当今数字技术时代 xff0c 停工就意味着停机 xff0c 构建弹性云结构势在必行 例如 xff0c 在新冠疫情期间 xff0c IT 维护团队不能再在本地重新启动数据中心的任何服务器 如果本地硬件出现故障 xff0c 这可能会导致访问所
  • 如何选择云数据库?

    无论你是在建立你的第一个还是第五十个应用程序 xff0c 选择一个数据库是最困难的选择之一 这将是你做出的第一个决定之一 xff0c 也可能是在你的应用程序中根深蒂固的一个决定 由于有大量优秀的数据库可用 xff0c 而且有大量现成的信息可
  • Hbase(一)入门

    Hbase xff08 一 xff09 一 Hbase概述1 简介2 Hbase数据模型3 Hbase简化架构4 写数据5 MemStore Flush6 读数据7 StoreFile Compaction 二 Hbase安装1 Hbase
  • 解决properties文件读取中文乱码

    版权声明 xff1a 本文为博主原创文章 xff0c 遵循 CC 4 0 BY SA 版权协议 xff0c 转载请附上原文出处链接和本声明 本文链接 xff1a https blog csdn net qq 39237513 article
  • gcc下载地址(Linux/windows安装)

    gcc官网 xff1a http gcc gnu org gcc镜像站点 xff1a https gcc gnu org mirrors html 各版本下载地址 ftp ftp mirrorservice org sites source
  • 树莓派系统镜像备份

    SD卡系统镜像备份 引言1 下载镜像备份脚本2 查看sd卡设备名称3 复制镜像4 压缩镜像 引言 SD卡系统镜像备份有多种方式 xff0c 最简单粗暴的是使用Win32diskImager工具 xff0c 将SD卡的镜像直接读取 xff0c

随机推荐

  • 不同版本mysql-connector-java的jar包下载地址

    jar包下载方式 官网地址 xff1a MySQL Download Connector J xff0c 如果你打不开官网 xff0c 在下面我为你准备了直接下载jar包的链接地址 在选择操作系统时 xff0c 此处选择platform i
  • 需要来自administrators的权限才能对此文件夹进行更改

    1 右键文件夹 xff0c 选择 属性 2 选择 安全 3 选择 高级 4 选择 更改 5 选择 高级 6 选择 立即查找 7 选择 Administrators xff0c 然后点击确定 8 再次点击 确定 9 选择 替换子容器和对象的所
  • 远程计算机或设备不接受连接解决方法

    当你的电脑浏览器不能正常上网时 xff0c 显示 点击网络诊断 xff0c 显示远程计算机或设备将不接受连接 解决办法 xff1a 1 点击左下角开始 xff0c 点击运行 xff0c 输入inetcpl cpl xff0c 点击确定 xf
  • Navicat 右键刷新没用

    Navicat 右键刷新没用 xff0c 点下方刷新图标才有用 右键刷新应该是刷新表结构 xff0c 下方刷新图标是刷新这张表的数据
  • leetcode 150. 逆波兰表达式求值

    题目描述 xff1a 给你一个字符串数组 tokens xff0c 表示一个根据 逆波兰表示法 表示的算术表达式 请你计算该表达式 返回一个表示表达式值的整数 注意 xff1a 有效的算符为 39 43 39 39 39 39 39 和 3
  • leetcode 239. 滑动窗口最大值

    题目描述 xff1a 给你一个整数数组 nums xff0c 有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧 你只可以看到在滑动窗口内的 k 个数字 滑动窗口每次只向右移动一位 返回 滑动窗口中的最大值 样例 xff1a 示例
  • leetcode 347. 前 K 个高频元素

    题目描述 xff1a 给你一个整数数组 nums 和一个整数 k xff0c 请你返回其中出现频率前 k 高的元素 你可以按 任意顺序 返回答案 样例 xff1a 示例 1 输入 nums 61 1 1 1 2 2 3 k 61 2 输出
  • com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 解决方案

    com mysql jdbc exceptions jdbc4 MySQLSyntaxErrorException Unknown column 39 39 in 严重 Servlet service for servlet jsp thr
  • Windbg使用说明书

    Windbg使用说明书 Windbg使用说明书 简书 jianshu com 术语 缩略语 windbg windows平台下 xff0c 强大的用户态和内核态调试工具 dmp 内存映像文件 xff0c 一般是系统错误产生的文件 Pdb 程
  • Kube-OVN源码解析 | pod IP地址管理

    作者介绍 xff1a Kube OVN社区贡献者 Mr Li 作者说 xff1a 上文 kube ovn源码解析 xff08 一 xff09 kube ovn controller 中我们提到kube ovn controller组件有一个
  • kartoslam找bug之行

    文章目录 那么之前测试不好的解释有以下几点编写launch测试bug猜测 激光数据和MIT的不一样 xff0c MIT的激光原数据好 xff0c 我们的差 不跑karto只录制信息终于找到问题根源啦 又出问题拉 xff0c 出大问题 WAR
  • sqlyog复制所有列名

    sqlyog不像navicat可以选中所有列名直接复制 需要 gt 点击表 gt 信息 gt 文本 gt 按住alt然后选中 在idea中也一样 xff0c 先按住alt 从第一个属性前开始往下拉 xff0c 多行编辑 idea格式化快捷键
  • Ubuntu安装proxychains4

    Ubuntu安装proxychains4 安装配置 安装 通过apt进行安装 sudo apt install proxychains4 配置 对 etc proxychains4 conf文件进行修改 sudo gedit etc pro
  • 解决依赖无法下载 (http://dl.bintray.com/spark-packages/maven/commons-codec/commons-codec/maven-metadata.xml)

    问题 xff1a maven 打包时 xff0c 有个依赖无法下载 xff0c 提示是 Forbidden xff08 http dl bintray com spark packages maven commons codec commo
  • ADB常用命令及其用法大全

    前言 xff1a 本文主要记述ADB的常用命令 xff0c 关于ADB用法大全 xff0c 可参考文末链接 ADB简介 xff1a ADB xff0c 即 Android Debug Bridge xff0c 它是 Android 开发 测
  • GPU版本pytorch和tensorflow部署(cuda、cudnn)

    概述 部署前建议简单了解显卡 显卡驱动 cuda cudnn 部署GPU版本pytorch和tensorflow的可用流程如下 xff1a 当前软硬件环境 xff1a aarch64架构麒麟V10系统 xff0c 两块NVIDIA A100
  • python下载所需要的库时,下载速度太慢,这篇文章教你如何解决

    看到这篇文章的读者 xff0c 请往最后面看 xff0c 最近对这个文章有所更改 xff0c 标题中的内容在后半部分讲解 在为Pycharm配置opencv库的时候 xff0c 下载了很多次 xff0c 每次都被提示 requirement
  • Python实现判断所给数字是否是回文数

    输入一个数字 xff0c 判断这个数是否是回文数 xff1a 回文数的特征 xff1a 设x是一任意自然数 若将x的各位数字反向排列所得自然数x1 xff0c 与x进行比较 xff0c 如果相等 xff0c 则称x为一回文数 xff0c 反
  • 利用Matplotlib绘图时,无法显示中文字体的解决方案

    我在利用Pycharm中的matplotlib库进行绘图的时候 xff0c 出现了一个问题 xff0c 当我将所绘的图的横 xff0c 纵坐标 xff0c 希望加上一个中文描述的时候 xff0c 比如 xff0c 39 横坐标 39 xff
  • 绘制图像灰度直方图——将图像的灰度分布可视化方法总结

    今天在实现图像阈值分割的时候 xff0c 需要找到能将背景与物体区分开的灰度阈值 xff0c 因为处理到的图像比较简单 xff0c 它的直方图具有一个十分明显的特点 xff0c 也就是它的直方图以双峰一谷的形式呈现 xff0c 将物体与背景