基于OpenCv的图像二值图和灰度直方图

⚠申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址。 全文共计3077字,阅读大概需要3分钟
🌈更多学习内容, 欢迎👏关注👀【文末】我的个人微信公众号:不懂开发的程序猿
个人网站:https://jerry-jy.co/

❗❗❗知识付费,🈲止白嫖,有需要请后台私信或【文末】个人微信公众号联系我

基于OpenCv的图像二值图和灰度直方图

  • 基于OpenCv的图像二值图和灰度直方图
    • 任务需求
    • 任务目标
      • 1、掌握图像的灰度化和二值化
      • 2、掌握绘制图像灰度直方图
    • 任务环境
      • 1、jupyter开发环境
      • 2、OpenCv
      • 3、python3.6
    • 任务实施过程
      • 一、图像的灰度化和二值化
        • 1、图像灰度化
        • 2、图像二值化
      • 二、图像灰度直方图
      • 三、任务小结
  • 说明

基于OpenCv的图像二值图和灰度直方图

任务需求

本次实验主要完成基于OpenCv的图像二值化和绘制图像灰度直方图。

  • 图像二值化就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果。在数字图像处理中,二值图像占有非常重要的地位。图像的二值化有利于图像的进一步处理,能凸显出感兴趣的目标的轮廓。
  • 图像灰度直方图是关于灰度级分布的函数,是对图像中灰度级分布的统计。灰度直方图是将数字图像中的所有像素,按照灰度值的大小,统计其出现的频率。灰度直方图是灰度级的函数,它表示图像中具有某种灰度级的像素的个数,反映了图像中某种灰度出现的频率。

在这里插入图片描述

在这里插入图片描述

任务目标

1、掌握图像的灰度化和二值化

2、掌握绘制图像灰度直方图

任务环境

1、jupyter开发环境

2、OpenCv

3、python3.6

任务实施过程

一、图像的灰度化和二值化

1、图像灰度化
import cv2 # 导入opencv
import matplotlib.pyplot as plt # 导入绘图模块
import numpy as np # 导入numpy库
from utils import im_show # 导入显示图像函数
# 绘制图像直接展示,不用调用plt.show()
%matplotlib inline 
# 用来正常显示中文标签
plt.rc('font',family="SimHei")
# 读取图像,这里读取的是彩色图像
img = cv2.imread(r'./experiment/data/Doraemon.jpg')
# 使用图像转换函数将彩色图像转换成灰度图
img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
print('原图图像矩阵形状',img.shape)
print('转换成灰度图后图像矩阵形状',img_gray .shape)

在这里插入图片描述

# 设置绘制图像的画布大小
plt.figure(figsize = (6,6))
# 显示原图
im_show('图像原图',img)

在这里插入图片描述

# 设置绘制图像的画布大小
plt.figure(figsize = (6,6))
# 显示灰度图
im_show('图像灰度图',img_gray)

在这里插入图片描述

2、图像二值化
  • 二值图像,顾名思义就是图像的亮度值只有两个状态:黑(0)和白(255)。
  • 二值化(Image Binarization)就是将灰度图转换成二值图像的一种方法,它将图像中感兴趣物体与背景分离。

ret, dst = cv2.threshold(src, thresh, maxval, type) 图像阈值函数,阈值通俗讲就是分界线,我们可以设置图像灰度大于阈值的,为一个值,低于阈值的,为另一个值。

  • src: 输入图,只能输入单通道图像,通常来说为灰度图
  • dst: 输出图
  • thresh: 阈值
  • maxval: 当像素值超过了阈值(或者小于阈值,根据type来决定),所赋予的值
  • type:二值化操作的类型,包含以下5种类型: cv2.THRESH_BINARY; cv2.THRESH_BINARY_INV; cv2.THRESH_TRUNC; cv2.THRESH_TOZERO;cv2.THRESH_TOZERO_INV
  • cv2.THRESH_BINARY (黑白二值)超过阈值部分取maxval(最大值),否则取0
# 对图像做简单的阈值化,也就是将图像二值化
# 这里设置阈值为127,maxval=255,表示图像灰度值大于127的设为255,小于的设为0
ret,dst = cv2.threshold(img_gray,127,255,cv2.THRESH_BINARY)
# 设置绘制图像的画布大小
plt.figure(figsize = (6,6))
# 显示图像的二值图
im_show('二值图',dst)

在这里插入图片描述

二、图像灰度直方图

灰度直方图是关于灰度级分布的函数,是对图像中灰度级分布的统计。

绘制直方图 plt.hist (x, bins=None, range=None,…)

  • x:需要统计直方图的数据集
  • bins:指定bin(箱子)的个数,也就是总共有几条条状图
  • range:显示的范围
# 设置绘制图像的画布大小
plt.figure(figsize = (12,6))
# 绘制灰度图像直方图
# 可以直接使用plt.hist()函数绘制直方图
# numpy的ravel函数功能是将多维数组降为一维数组
plt.hist(img.ravel(), 256, [0, 256])
plt.title("灰度图像直方图")
plt.show()

在这里插入图片描述

使用opencv绘制直方图
cv2.calcHist(image,channels,mask,hitSize,range[,hist[,accumulate]])

  • image:输入的图像
  • Channels:表示通道,是计算直方图的通道索引。如果输入是灰度图像,则其值为[0],对于彩色图B,G,R分别传入[0],[1],[2]。
  • Mask:要计算的区域ROI,计算整幅图的话,为None。
  • histSize:也叫bins,子区段数目,如果我们统计0-255每个像素值,bins=256;如果划分区间,比如0-15, 16-31…240-255这样16个区间,bins=16
  • Range:要计算的像素值范围,一般为[0,256]
# 绘制彩色图像直方图
# 设置直方图线颜色,这里需要与calcHist函数中Channels参数的值一一对应
color = ('r','g','b')
# 设置绘制图像的画布大小
plt.figure(figsize = (12,6))
for i,col in enumerate(color):
    # 设定坐标系范围,并绘画直方图
    histr = cv2.calcHist([img],[i],None,[256],[0,256])
    plt.plot(histr,color = col)
    # 设置x轴的数值显示范围
    plt.xlim([0,256])
plt.title('彩色图像直方图')
plt.show()

在这里插入图片描述

三、任务小结

本次实验主要完成基于OpenCv的图像二值化和绘制图像灰度直方图。

通过本次实验需要掌握以下内容:

  • 1.掌握图像的灰度化和二值化
  • 2.掌握绘制图像灰度直方图

–end–

说明

本实验(项目)/论文若有需要,请后台私信或【文末】个人微信公众号联系我

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

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

相关文章

Python新手入门基础英文笔记

1、字符串的操作 user:用户 name:名称/姓名 attibute:字段/属性 Value:值 2、重复/转换/替换/原始字符号 upper:上面 lower:下面 capitalize:用大写字母写或印刷 title:标题…

「笔试刷题」:求最小公倍数

一、题目 输入描述: 输入两个正整数A和B。 输出描述: 输出A和B的最小公倍数。 示例1 输入: 5 7 输出: 35 示例2 输入: 2 4输出: 4二、思路解析 这道题,也是模拟实现这一大类的一题…

探索的时光 (整数三分)

本题链接:登录—专业IT笔试面试备考平台_牛客网 题目: 样例: 输入 5 3 2 1 2 3 输出 28 思路: 根据题意,已经给出了运算函数 当我们看到这些函数的时候,联想一下,它们的单调性,以…

Adobe PS 2023、Adobe Photoshop 2023下载教程、安装教程

Adobe Photoshop &#xff08;<-下载连接&#xff09;简介&#xff1a; Adobe Photoshop是一款广泛使用的图像处理软件&#xff0c;由Adobe公司开发。它提供了许多强大的工具和功能&#xff0c;可以用于图像编辑、合成、修饰、设计等各个领域。用户可以使用Photoshop来调整…

HotSpot VM概述

许多技术人员只把JVM当成黑盒&#xff0c;要想改善Java应用的性能和扩展性无疑是一项艰巨的任务。若要提高Java性能调优的能力&#xff0c;就必须对现代JVM有一定的认知。 HotSpot VM是JDK 1.3版本之后默认的虚拟机&#xff0c;目前是使用最广泛的Java虚拟机。本文主要介绍HotS…

行为型设计模式

一、责任链设计模式 &#xff08;一&#xff09;概念 使多个对象都有机会处理同一个请求&#xff0c;从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链&#xff0c;并沿着这条链传递该请求&#xff0c;直到有一个对象处理它为止。 &#xff08;二&#xf…

算法学习Day1——【数据结构】单调栈

1.什么是单调栈以及单调栈的作用 &#xff08;1&#xff09;定义 顾名思义&#xff0c;单调栈是一个有序的栈&#xff0c;可能从栈顶到栈底单调递增&#xff08;单调递增栈&#xff09;&#xff0c;也有可能从栈顶到栈底单调递减&#xff08;单调递减栈&#xff09;。 &…

芯启智行丨基于G32A1445的汽车音乐律动氛围灯解决方案

随着智能汽车技术的深度渗入&#xff0c;汽车照明作为汽车设计的重要组成部分&#xff0c;正在重塑驾驶员与汽车的互动方式&#xff0c;从简单的照明工具优化升级为承载更多丰富功能和不同应用场景的智能化安全装置。现代智能车型广泛配备了前照灯、车内环境氛围灯、尾灯等汽车…

栈和链表的区分

栈&#xff08;Stack&#xff09;&#xff1a; 栈是一种特殊的线性表&#xff0c;遵循“后进先出”&#xff08;Last In First Out, LIFO&#xff09;原则。栈通常用数组或链表来实现&#xff0c;但重点在于其操作的限制而非底层数据结构。无论使用顺序栈&#xff08;基于数组…

读懂一本书笔记

文章目录 引言 我是一个用读书改变自己生活的人01 会读书&#xff0c;更要会讲书复杂时代&#xff0c;阅读是大众反脆弱的武器你焦虑吗&#xff1f;如何从“单向度的人”变为“多向度的人”第一&#xff0c;读书是主动的学习方式第二&#xff0c;读书是有针对性的学习方式 讲书…

kettle下载安装

下载方式&#xff1a; 1.官网下载 kettle下载链接&#xff1a; 老网站下载链接&#xff1a;https://sourceforge.net/projects/pentaho/files/这个网站已经弃用了 新网站地址获取方法&#xff1a;老网站下载链接打开&#xff0c;可以看到一个pdf下载链接&#xff0c;下载pdf 打…

二维码门楼牌管理应用平台建设:共治力量信息管理的革新

文章目录 前言一、二维码门楼牌管理应用平台的建设背景二、共治力量信息管理的重要性三、二维码门楼牌管理应用平台在共治力量信息管理中的应用四、二维码门楼牌管理应用平台的优势与挑战五、结语 前言 随着信息技术的飞速发展&#xff0c;二维码门楼牌管理应用平台的建设已成…

Spark原理之Cache Table的工作原理及实现自动缓存重复表的思考

CACHE TABLE的能力 使用此语法&#xff0c;可以由用户自定义要缓存的结果集&#xff0c;实际上就是一个临时表&#xff0c;不过数据存储在Spark集群内部&#xff0c;由Application所分配的executors管理。 一旦定义了一个缓存表&#xff0c;就可以在SQL脚本中随处引用这个表名…

Android 11 裁剪系统显示区域(适配异形屏)

概述 在显示技术中&#xff0c;"OverScan"&#xff08;超扫描&#xff09;是一种调整显示图像边界的技术。通常情况下&#xff0c;OverScan 会在显示屏的边缘周围裁剪一小部分图像。这种裁剪是为了确保显示内容在屏幕上的完整可见性&#xff0c;尤其是在老式电视或投…

【Qt】QtCreator忽然变得很卡

1. 问题 Qt Creator忽然变得很卡。电脑里两个版本的Qt Creator&#xff0c;老版本的开启就卡死&#xff0c;新版本好一点&#xff0c;但是相比于之前也非常卡&#xff0c;最明显的是在 ctrl鼠标滚轮 放大缩小的时候&#xff0c;要卡好几秒才反应。 2. 解决方案 2.1 方法1 关…

XL520无线接收芯片,2.2ms超低启动时间,-110dBm高接收灵敏度

XL520接收芯片采用SOP8封装&#xff0c;适用于300MHz- 440MHz频率范围&#xff0c;正常工作电压范围2.0~5.5V&#xff0c;工作电流在3.0~3.2mA之间。它具有快速的启动时间&#xff08;2.2ms&#xff09;和高达-110dBm的接收灵敏度&#xff0c;非常适合对低功耗要求严格的设备。…

测试工程师——招聘分析

测试工程师 随着互联网行业的高速发展,快速高质量的产品版本迭代成为企业始终立于不败之地的迫切需求,而在短期迭代的快节奏中,传统测试工作面对更大压力,无法持续提供高效率高质量的人力支撑,所以越来越多的企业需要技术更为全面的测试开发工程师。测试开发 本质上属于测…

Web安全的最后一道防线:细谈Gobuster的目录/文件/Vhost/DNS子域名暴力破解艺术

一、前言 Gobuster是一款用go语言编写的对于网站目录/文件、DNS子域、虚拟主机vhost进行暴力穷举的开源工具&#xff0c;常用于安全领域&#xff0c;其常用的暴力破解模式到目前为止&#xff08;3.6版本&#xff09;有如下几种&#xff1a; 模式含义dir最经典的文件路径/目录破…

深入Rust标准库:必备的Rust语言高级指南

&#x1f482; 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】&#x1f91f; 一站式轻松构建小程序、Web网站、移动应用&#xff1a;&#x1f449;注册地址&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交…

力扣---二叉树的右视图

给定一个二叉树的 根节点 root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序&#xff0c;返回从右侧所能看到的节点值。 示例 1: 输入: [1,2,3,null,5,null,4] 输出: [1,3,4]示例 2: 输入: [1,null,3] 输出: [1,3]示例 3: 输入: [] 输出: []实现方法&…
最新文章