【python】OpenCV—Histogram(9)

在这里插入图片描述

学习参考来自

  • Python下opencv使用笔记(九)(图像直方图)

更多学习笔记可以参考

  • 【python】OpenCV—RGB(1)
  • 【python】OpenCV—Rectangle, Circle, Selective Search(1.2)
  • 【python】OpenCV—Blur, Threshold, Gradient, Morphology(2)
  • 【python】OpenCV—Edge, Corner, Face Detection(3)
  • 【python】OpenCV—findContours(4)
  • 【python】OpenCV—Video to Imag / Image to Video(5)
  • 【python】OpenCV—Brightness and Contrast adjustments(6)
  • 【python】OpenCV—Data Augmentation(7)
  • 【python】OpenCV—Image Pyramid(8)

文章目录

  • 1 直方图
  • 2 局部图片区域的直方图
  • 3 全局直方图均衡化
  • 4 局部直方图均衡化


1 直方图

直方图可以清晰了解图像的整体灰度分布,先看看 opencv 中的接口

cv2.calcHist()
- image输入图像,传入时应该用中括号[]括起来
- channels::传入图像的通道,如果是灰度图像,那就不用说了,只有一个通道,值为0,如果是彩色图像(有3个通道),那么值为0,1,2,中选择一个,对应着BGR各个通道。这个值也得用[]传入。
- mask:掩膜图像。如果统计整幅图,那么为none。主要是如果要统计部分图的直方图,就得构造相应的炎掩膜来计算。
- histSize:灰度级的个数,需要中括号,比如[256]
- ranges:像素值的范围,通常[0,256],有的图像如果不是0-256,比如说你来回各种变换导致像素值负值、很大,则需要调整后才可以。
import cv2
import numpy as np
import matplotlib.pyplot as pltimg = cv2.imread('2.jpg', 0)  #直接读为灰度图像# 法一:opencv方法读取-cv2.calcHist(速度最快)
hist_cv = cv2.calcHist([img], [0], None, [256], [0, 256])# 法二:numpy方法读取-np.histogram()
hist_np, bins = np.histogram(img.ravel(), 256, [0, 256])# 法三:numpy的另一种方法读取-np.bincount()(速度=10倍法2)
hist_np2 = np.bincount(img.ravel(), minlength=256)plt.subplot(221), plt.imshow(img, 'gray')
plt.subplot(222), plt.plot(hist_cv), plt.title("cv2.calcHist")
plt.subplot(223), plt.plot(hist_np), plt.title("np.histogram")
plt.subplot(224), plt.plot(hist_np2), plt.title("np.bincount")
plt.show()

原图

请添加图片描述

不同接口计算得到的直方图

在这里插入图片描述

2 局部图片区域的直方图

加个 mask 对比看看

import cv2
import numpy as np
import matplotlib.pyplot as pltimg = cv2.imread('2.jpg', 0)
mask = np.zeros(img.shape[:2], np.uint8)
mask[25:185, 265:412] = 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.show()

在这里插入图片描述

蓝色是全图的,黄色是 mask 后的

3 全局直方图均衡化

直方图是对图像对比度效果上的一种处理,旨在使得图像整体效果均匀,黑与白之间的各个像素级之间的点更均匀一点。

import cv2
import matplotlib.pyplot as pltimg = cv2.imread('2.jpg', 0)
res = cv2.equalizeHist(img)plt.subplot(121), plt.imshow(img, 'gray')
plt.subplot(122), plt.imshow(res, 'gray')
plt.show()

在这里插入图片描述

上述的直方图均衡化是一种全局意义上的均衡化

4 局部直方图均衡化

下面看看局部均衡化

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

消融下 titleGridSize, 10,20,50

import cv2
import matplotlib.pyplot as pltimg = cv2.imread('2.jpg', 0)
cl0 = cv2.createCLAHE(clipLimit=2, tileGridSize=(10, 10)).apply(img)
c20 = cv2.createCLAHE(clipLimit=2, tileGridSize=(20, 20)).apply(img)
c50 = cv2.createCLAHE(clipLimit=2, tileGridSize=(50, 50)).apply(img)plt.subplot(221), plt.imshow(img, 'gray'), plt.title("ori")
plt.subplot(222), plt.imshow(cl0, 'gray'), plt.title("CLAHE 10")
plt.subplot(223), plt.imshow(c20, 'gray'), plt.title("CLAHE 20")
plt.subplot(224), plt.imshow(c50, 'gray'), plt.title("CLAHE 50")
plt.show()

在这里插入图片描述
消融下 clipLimit, 2, 4,6

import cv2
import matplotlib.pyplot as pltimg = cv2.imread('2.jpg', 0)
c2 = cv2.createCLAHE(clipLimit=2, tileGridSize=(10, 10)).apply(img)
c4 = cv2.createCLAHE(clipLimit=4, tileGridSize=(10, 10)).apply(img)
c6 = cv2.createCLAHE(clipLimit=6, tileGridSize=(10, 10)).apply(img)plt.subplot(221), plt.imshow(img, 'gray'), plt.title("ori")
plt.subplot(222), plt.imshow(c2, 'gray'), plt.title("clipLimit 2")
plt.subplot(223), plt.imshow(c4, 'gray'), plt.title("clipLimit 4")
plt.subplot(224), plt.imshow(c6, 'gray'), plt.title("clipLimit 6")
plt.show()

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

精品基于Uniapp+springboot车辆充电桩缴费管理系统管理系统App-地图

《[含文档PPT源码等]精品基于Uniappspringboot充电桩管理系统App》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功! 软件开发环境及开发工具: 开发语言:Java 后台框架:springboot、ssm 安…

uniapp微信小程序投票系统实战 (SpringBoot2+vue3.2+element plus ) -用户投票实现

锋哥原创的uniapp微信小程序投票系统实战: uniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )_哔哩哔哩_bilibiliuniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )共计21条视频…

银河麒麟v10安装前端环境(Node、vue、Electron+vite)

此帖子所提到的所有依赖包都是基于银河麒麟v10真机的arm架构包,如果是在windows上的虚拟机上 把依赖包换成x64的包即可,方法步骤都是一样 一.node安装 原始方法安装(建议用第二种nvm方法,因为更简单): 1…

架构简介,到底什么是架构?

1. 前言 对技术人员来说,“架构”是一个再常见不过的词儿了。我们经常对新员工培训整个系统的架构,参加架构设计评审,学习业界开源系统(例如,MySQL、Hadoop)的架构,研究大公司的架构实现&#…

“确定要在不复制其属性的情况下复制此文件?”解决方案(将U盘格式由FAT格式转换为NTFS格式)

文章目录 1.问题描述2.问题分析3.问题解决3.1 方法一3.2 方法二3.3 方法三 1.问题描述 从电脑上复制文件到U盘里会出现“确定要在不复制其属性的情况下复制此文件?”提示。 2.问题分析 如果这个文件在NTFS分区上,且存在特殊的安全属性。那么把它从NT…

L1-025 正整数A+B(Java)

题的目标很简单,就是求两个正整数A和B的和,其中A和B都在区间[1,1000]。稍微有点麻烦的是,输入并不保证是两个正整数。 输入格式: 输入在一行给出A和B,其间以空格分开。问题是A和B不一定是满足要求的正整数&#xff0…

Mac 环境多JDK安装与切换

一、下载jdk 去Oracle官网上下载想要安装的jdk版本,M芯片选择arm架构的.bmg格式的文件。 https://www.oracle.com/java/technologies/downloads/。 二、安装jdk 2.1 双击下载的文件,安装步骤一步步点继续就好。 2.2 安装完成后会在/Library/Java/JavaV…

【Azure 架构师学习笔记】- Azure Databricks (5) - Unity Catalog 简介

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Databricks】系列。 接上文 【Azure 架构师学习笔记】- Azure Databricks (4) - 使用Azure Key Vault 管理ADB Secret 前言 DataBricks Unity Catalog(UC)是一个统一的对数据资产治理的解决方案…

探索FTP:原理、实践与安全优化

引言 在正式开始讲解之前,首先来了解一下文件存储的类型有哪些。 DAS、SAN和NAS是三种不同的存储架构,分别用于解决不同场景下的数据存储需求。 DAS (Direct Attached Storage 直接附加存储):DAS 是指将存储设备(如硬盘&#x…

如何在电脑上建立待办事项列表,高效管理每日待办事项?

很多人在日常工作中都面临着诸多待办的任务,确保这些任务按时、高效地完成对工作效率至关重要。想象一下:你是一名项目经理,每天需要跟进各个项目的进展情况,安排会议、协调团队工作、处理突发问题等,这些需要严格按时…

分布式架构理论:从头梳理分布式架构的重难点

文章目录 一、分布式架构 - 系统理论1、分布式一致性与CAP理论2、BASE理论3、分布式一致性算法:Raft(1)Paxos算法(2)Raft算法(3)共识算法:拜占庭将军问题 4、脑裂现象和Lease机制&am…

【ceph】在虚拟环境中需要给osd所在的虚拟盘扩容操作

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》:python零基础入门学习 《python运维脚本》: python运维脚本实践 《shell》:shell学习 《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战 《k8…

Java_线程通信

一、线程通信 首先,什么是线程通信呢? 当多个线程共同操作共享资源时,线程间通过某种方式互相告知自己的状态,以相互协调,避免无效的资源挣抢。 线程通信的常见模式:是生产者与消费者模型 生产者线程负…

Vue 中修改 Element 组件的 下拉菜单(Dropdown) 的样式

Vue 中修改 Element 组件的 下拉菜单(Dropdown) 的样式 今天在项目中碰到一个 UI 改造的需求,需要根据设计图把页面升级成 UI 设计师提供的设计图样式。 到最后页面改造完了,但是 UI 提供的下拉菜单样式全部是黑色半透明的,只能硬着头皮改了。…

【LeetCode】组合两个表(mysql)

题目 编写解决方案,报告 Person 表中每个人的姓、名、城市和州。如果 personId 的地址不在 Address 表中,则报告为 null 。 以 任意顺序 返回结果表。 结果格式如下所示。 答 select firstName ,lastName,city,state from Person left join Address …

[渗透测试学习] Hospital - HackTheBox

文章目录 信息搜集getshell提权信息搜集 nmap扫描一下端口 发现8080端口和443端口有http服务 然后发现3389端口是启用了ms-wbt-server服务 在对443端口的扫描没有收获,并且只有邮箱登录界面无法注册 接着看向8080端口,我们随便注册用户登录后发现有文件上传功能 getshell …

git撤销提交到本地的commit

有些时候,当我们提交代码到本地后,突然发现因为某些原因需要撤销提交本地的代码。 就比如我,因为代码写错了分支,已经提交到本地了,而我需要取消,并且还要把代码搞得另外的分支上。 提交前: …

放空一下自我 free

文章目录 放空一下自我 free默认的效果使用易读的参数间隔显示内存状态查看meminfo文件更多信息 放空一下自我 free **free**这个命令在Linux系统监控的工具里面,算是使用的比较多的一个。 使用_man_查看可知,官方含义为: Display amount o…

基于Spring Boot+vue的云上新鲜水果超市商城系统

本云上水果超市是为了提高用户查阅信息的效率和管理人员管理信息的工作效率,可以快速存储大量数据,还有信息检索功能,这大大的满足了用户、员工信息和管理员这三者的需求。操作简单易懂,合理分析各个模块的功能,尽可能…

SpringMVC-异常处理及常用组件

异常处理器 1.基于配置的异常处理 springmvc提供了一个处理控制器方法执行过程中所出现的异常的接口: HandlerExceptionResolver HandlerExceptionResolver接口的实现类有: DefaultHandlerExceptionResolver和SimpleMappingExceptionResolver springmvc提供了自定义的异常处…