OpenCV图像处理——直方图

news2024/11/13 9:24:42

总目录

图像处理总目录←点击这里

十二、直方图

12.1、原理

在这里插入图片描述

cv2.calcHist(images,channels,mask,histSize,ranges)

  • images: 原图像图像格式为 uint8 或 float32。当传入函数时应 用中括号 [] 括来例如[img]
  • channels: 同样用中括号括来它会告函数我们统幅图 像的直方图。如果入图像是灰度图它的值就是 [0]如果是彩色图像 的传入的参数可以是 [0][1][2] 它们分别对应着 BGR。
  • mask: 掩模图像。统整幅图像的直方图就把它为 None。但是如 果你想统图像某一分的直方图的你就制作一个掩模图像并 使用它。
  • histSize:BIN 的数目。也应用中括号括来
  • ranges: 像素值范围常为 [0256]

12.2、灰度图

img = cv2.imread('cat.jpg',0) #0表示灰度图
hist = cv2.calcHist([img],[0],None,[256],[0,256])
plt.hist(img.ravel(),256)
plt.show()

在这里插入图片描述

12.3、彩色图


img = cv2.imread('cat.jpg') 
color = ('b','g','r')
for i,col in enumerate(color): 
    histr = cv2.calcHist([img],[i],None,[256],[0,256]) 
    plt.plot(histr,color = col) 
    plt.xlim([0,256]) 

在这里插入图片描述

12.4、掩膜(mask)操作

12.4.1、原理

用选定的图像,图形或物体,对处理的图像(全部或局部)进行遮挡。

cv2.bitwise_and(src1, src2, mask=mask)

对图像每个像素值进行二进制“与”操作,1&1=1,1&0=0,0&1=0,0&0=0

利用掩膜(mask)进行“与”操作,即掩膜图像白色区域是对需要处理图像像素的保留,黑色区域是对需要处理图像像素的剔除

12.4.2、实例展示

def cv_show(img,name):
    cv2.imshow(name,img)
    cv2.waitKey()
    cv2.destroyAllWindows()


# 创建mask
mask = np.zeros(img.shape[:2], np.uint8)
mask[100:300, 100:400] = 255
cv_show(mask,'mask')

img = cv2.imread('cat.jpg', 0)
masked_img = cv2.bitwise_and(img, img, mask=mask)#与操作
cv_show(masked_img,'masked_img')

掩膜(mask)区域

在这里插入图片描述
掩膜(mask)参与 “与” 运算

在这里插入图片描述

12.4.3、对比效果

img = cv2.imread('cat.jpg', 0)
mask = np.zeros(img.shape[:2], np.uint8)
mask[100:300, 100:400] = 255
masked_img = cv2.bitwise_and(img, img, mask=mask)#与操作

hist_full = cv2.calcHist([img], [0], None, [256], [0, 256])
hist_mask = cv2.calcHist([img], [0], mask, [256], [0, 256])

plt.subplot(221), plt.imshow(img, 'gray')
plt.subplot(222), plt.imshow(mask, 'gray')
plt.subplot(223), plt.imshow(masked_img, 'gray')
plt.subplot(224), plt.plot(hist_full), plt.plot(hist_mask)
plt.xlim([0, 256])
plt.show()

在这里插入图片描述

12.5、直方图均衡化

12.5.1、原理

  • 调用方法:cv2.equalizeHist(src)
  • 直方图均衡化是一种简单有效的图像增强技术
  • 通过改变图像的直方图来改变图像中各像素的灰度
    • 对在图像中像素个数多的灰度值进行展宽
    • 而对像素个数少的灰度值进行归并
    • 增大对比度,使图像清晰,达到增强的目的
  • 主要用于增强动态范围偏小的图像的对比度

在这里插入图片描述
上图中左边为原始的灰度值,右边为均衡化之后的灰度值

主要处理灰度值

12.5.2、案例一

# 原图的直方图
img = cv2.imread('cat.jpg',0) #0表示灰度图 #clahe
plt.hist(img.ravel(),256)
plt.show()
# 均衡化的直方图
equ = cv2.equalizeHist(img) 
plt.hist(equ.ravel(),256)
plt.show()

res = np.hstack((img,equ))
cv_show(res,'res')

在这里插入图片描述

在这里插入图片描述

12.5.3、案例二

将案例一种的图片切换lena.jpg,重新运行

在这里插入图片描述

在这里插入图片描述

12.5.4、案例三

将案例一种的图片切换clahe.jpg,重新运行

在这里插入图片描述

在这里插入图片描述

12.5.5、对比

  • 案例一和案例二效果变得更好一点
  • 案例三却将雕塑面部特征给模糊化了
  • 引出了下一部分——自适应直方图均衡化

12.6、自适应直方图均衡化

cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8))

  • clipLimit:颜色对比度的阈值,可选项,默认值 8
  • titleGridSize:局部直方图均衡化的模板(邻域)大小,可选项,默认值 (8,8)

实现局部直方图处理

img = cv2.imread('clahe.jpg',0)
equ = cv2.equalizeHist(img) 
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8)) 
res_clahe = clahe.apply(img)
res = np.hstack((img,equ,res_clahe))
cv_show(res,'res')

在这里插入图片描述

原图

cat.jpg

cat
lena.jpg
在这里插入图片描述
clahe.jpg
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电容笔哪个品牌好?十大电容笔知名品牌

如今,电容笔越来越受欢迎,性能也越来越好。如何挑选出一款物美价廉的电容笔,就成了一件非常头疼的事情。许多人将其用于日常生活,所以人们都在寻找更好、更经济的电容笔。那么,电容笔的牌子是最便宜、最值得我们入手呢…

骁龙AR2平台解析:分布式架构开启轻量化AR眼镜新时代

在今天的骁龙峰会2022上,高通面向轻量化AR眼镜推出了专属SoC:第一代骁龙AR2平台,这套方案将骁龙XR1、骁龙XR2的单片式方案,改为多芯片分布式SoC方案,同时融合了分离式渲染,实现一整套的AR/VR与智能手机、PC…

Leetcode 学习记录 数组和字符串 习题2

搜索插入位置 给定一个有序数组nums,数组中没有重复元素。搜索指定元素target在数组中插入位置。题目说如果target存在于数组中,直接返回index,如果不在返回应该插入的位置。要求在O(logn)的时间复杂度内完成。 因为…

DevOps Master课程总结:学习没有捷径(送DevOps安灯正确方法)

​1.摆正学习态度 “活到老,学到老”,学习是贯穿所有人一生的一件事情 。俗话说:“师傅领进门,修行在个人。”的意思是:有了师傅的指教,学生的技艺可以进步很快,但是,单单靠师傅是不够的&#x…

【线程】多线程编程

目录 一、概念 二、线程函数 1.pthread_create 2.pthread_exit 3.pthread_join 4.pthread_cancel 三、线程的使用 1.线程的基本操作 2.理解并发运行 一、概念 线程是程序中完成一个独立任务的完整执行序列,即一个可调度的实体。根据运行环境和调度者的身…

Maven基础概念【仓库和坐标】这篇看完懂了

Maven下载 官网: Welcome to Apache Maven 下载地址: Maven – Download Apache Maven 01 仓库: 仓库:用于存储资源,包含各种jar包 ​ ​ 仓库:用于存储资源,包含各种jar包 仓库分类: ♦ 本地仓库:自己电…

4_Git

一、Git学习网站 廖雪峰大神 Git 教程Git-flow 包教不包会阮一峰-常用 Git 命令清单 二、Git简介 1.Git是什么 分布式版本控制系统 2.版本控制 3.集中式 vs 分布式 4.Git简史 5.工作区、暂存区、版本库 流程 工作区:写代码 --> git add --> 暂存区 --…

uniapp项目搭建 请求配置

uniapp项目搭建 请求配置请求配置utils/request/index.js代码分析几个常用的方法配置文件的引入编写接口,并测试调用每个人项目用的请求接口不一样,这里就看下实现思路就好了 请求配置 在 uniapp 当中有封装好的 request 插件, request插件地址 在项目的 utils/request/index.…

【华为设备命令最全大合集,快快收藏】

01 华为交换机基础配置命令 01 常用命令视图 02 创建VLAN //用户视图,一般display命令查看信息比较多。 system-view //准备进入系统视图。 [Huawei]vlan 100 //创建vlan 100。 [Huawei-vlan100]quit //退回系统视图。 03 将端口加入到vlan中 [Huawei] interf…

数字源表如何助力miniled光电性能测试

概述 LED在光电子领域中是一种能将电能转化为光能的半导体二极管,包括砷化镓LED(红光)、磷化镓LED(绿光)、氮化镓LED(蓝光)等。Mini LED,则是指尺寸为50-200微米的LED芯片(参照《Mini LED商用显示屏通用技术规范》的定义),介于小间距LED和Mic…

软件配置 | mac M1 上 imagemagick 的安装

本文简单记录在 mac M1 上安装 Imagemagick 的过程及其简单使用。 2022 / 11 / 16 软件配置 | mac M1 上 imagemagick 的安装安装brew1.2.make参考链接ImageMagick 是免费软件,以随时可用的二进制分发版或源代码形式提供,您可以在开放和专有应用程序中使…

02-Linux

1 Linux文件管理 1.1 touch命令 在Windows系统中,我们如果想创建一个文本文档或者word文件的时候,通常的做法是 鼠标右键---新建---文本文档,这样的话,我们就成功的创建了一个文件,而在Linux中,我们可以通…

好代码 ,坏代码:你的代码和其他工程师的代码

如果你以团队一员的身份编写代码,你所编写的代码很可能建立在其他工程师编写的代码层次的基础上,其他人也可能以你的代码为基础构建新的代码层次。如果你在工作期间解决了各种各样的子问题,并将其分解为清晰的抽象层次,其他工程师…

WebDAV之葫芦儿·派盘+百灵创作

百灵创作 支持webdav方式连接葫芦儿派盘。 心血来潮想写故事,于是进入了创作、码字状态,不写不知道一码吓一跳,这也太累了吧。 基于创作不易,码字辛苦。对文字,我始终怀有尊重与敬畏之心。不知有什么创作码字软件可以解决这些问题,提高写作效率呢?并且防止写好的文章…

spring框架源码十六、BeanDefinition加载注册子流程

BeanDefinition加载注册子流程时序图时序图1step0、new ClassPathXmlApplicationContextstep1、ClassPathXmlApplicationContext#ClassPathXmlApplicationContext(java.lang.String)step2、ClassPathXmlApplicationContext#ClassPathXmlApplicationContext(java.lang.String[],…

初识类和对象

即使是初学者应该对类和对象也不算陌生吧,是不是因为老有些人动不动就:你知道伐,Java是一款面向对象的语言……阿巴阿巴……我的老师告诉我Java难的一部分就是如何把一个对象给抽象出来,那阿涛不才,今天就先来会一会这…

超市售货统计程序

代码price{"牛奶":5.5,"可乐":6.7,"饼干":10,"糖果":10} day1{"day":"11.23","牛奶":10,"可乐":10,"饼干":10,"糖果":10} day2{"day":"11.24",&quo…

机器学习笔记之条件随机场(六)学习任务介绍(Learning)

机器学习笔记之条件随机场——学习任务介绍引言回顾:条件随机场求解边缘概率分布场景设计前向后向算法关于条件随机场的学习任务关于模型参数λ\lambdaλ求解梯度梯度求解梯度的简化过程总结引言 上一节介绍了使用前向后向算法求解基于链式条件随机场中某隐状态的边…

MySQL—优化数据库

优化MySQL数据库是数据库管理员的必备技能,通过不同的优化方式达到提高MySQL数据库性能的目的。本节将介绍优化的基本知识。 MySQL数据库的用户和数据非常少的时候,很难判断一个MySQL数据库性能的好坏。只有当长时间运行,并且有大量用户进行…

GoogLenet网络详解

GoogLenet VGG在2014年由牛津大学著名研究组vGG (Visual Geometry Group)提出,斩获该年lmageNet竞赛中Localization Task (定位任务)第一名和 Classification Task (分类任务)第二名。Classification Task (分类任务)的第一名则是GoogleNet 。GoogleNet是Google研发…