《计算机视觉技术与应用》-----第六章 直方图

news2024/11/13 8:38:26

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 Python 机器学习入门之pandas的使用


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 系列文章目录
  • 前言
  • 一、遇到的问题
  • 二、使用hist()函数绘制直方图
  • 三、用calcHist()函数查找直方图
  • 3、应用掩模的直方图
  • 四、NumPy中的直方图
  • 五、直方图均衡化
  • 六、限制对比度自适应直方图均衡化
  • 七、二维直方图
  • 八、实验一 使用Numpy函数计算直方图
  • 九、实验2 使用OpenCV函数计算直方图
  • 总结


前言

提示:这里可以添加本文要记录的大概内容:

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、遇到的问题

在做第一个实验室,遇到一个问题:plt.show()无法输出直方图,都没有一闪而过,直接就输出不了图。
在这里插入图片描述
后来经过我排查后,发现是环境的问题,我装的是anaconda,然后在base环境里面出现这个问题,由于之前在这个环境里面跑了许多实验,有删除matplotlib依赖项的嫌疑。后来我重新创建了一个虚拟环境解决该问题。

conda create -n CV python=3.9  #在conda里面创环境命令格式是这样的,conda create -n 环境名 python=版本号

另外,当conda isntall 包名 太慢时,可以用pip install 包名来下载。

二、使用hist()函数绘制直方图

BINS=16
在这里插入图片描述
BINS=256
在这里插入图片描述

#test6-1.py:使用hist()函数绘制直方图
""" 函数说明
 matplotlib.pyplot.hist(src,bins)
 src为绘制直方图的图像数据,必须是一维数组。一般OpenCV中的BGR图像是三维数组,所以需要用ravel()函数转换为一维数组
 bins为灰度级分组数量,将灰度级按一定范围进行划分得到的子集数量为BINS。灰度图像灰度级范围[0,255],
 按16个灰度级分为一组,可以分成16个子集,则BINS为16
"""
import cv2
import matplotlib.pyplot as plt 
img=cv2.imread('gate.jpg')  		     #读取图像
cv2.imshow('original',img)  	        #显示原图像
plt.hist(img.ravel(),16)               #绘制直方图
plt.show()                              #显示直方图


三、用calcHist()函数查找直方图

在这里插入图片描述

#test6-2.py:查找和绘制直方图
""" 
    函数说明
    hist = cv2.calcHist(image,channels,mask,histSize,ranges)
    hist是返回的直方图,是一个一维数组,其大小为256,保存了原图像中各个灰度级数量
    image为原图,实际参数需要用方括号括起来
    channels为通道编号,灰度图像的通道编号为[0],BGR图像的通道编号为[0][1][2]

 """
import cv2
import matplotlib.pyplot as plt
img=cv2.imread('gate.jpg')  		     			#读取图像
cv2.imshow('original',img)  	        				#显示原图像
histb=cv2.calcHist([img],[0],None,[256],[0,255])	#计算B通道直方图 返回值是一维数组
histg=cv2.calcHist([img],[1],None,[256],[0,255])	#计算G通道直方图
histr=cv2.calcHist([img],[2],None,[256],[0,255])	#计算R通道直方图
plt.plot(histb,color='b')               			#绘制B通道直方图,蓝色
plt.plot(histg,color='g')               			#绘制G通道直方图,绿色
plt.plot(histr,color='r')               			#绘制R通道直方图,红色
plt.show()                              				#显示直方图
 

3、应用掩模的直方图

在这里插入图片描述

#test6-3.py:掩模中的直方图
import cv2
import numpy as np
import matplotlib.pyplot as plt
img=cv2.imread('gate.jpg')  		     #读取图像
cv2.imshow('original',img)  	        #显示原图像
w,h,d=img.shape
mask=np.zeros((w,h), np.uint8)#按原图大小创建一幅黑色图像
w1=np.int0(w*0.25)  #宽度等分成四份,此处等效于w/4
w2=np.int0(w*0.75)
h1=np.int0(h*0.25)
h2=np.int0(h*0.75)
mask[w1:w2,h1:h2]=255               #设置掩模白色区域
cv2.imshow('mask',mask)  	        #显示掩模图像
histb=cv2.calcHist([img],[0],mask,[256],[0,255])#计算B通道直方图 这里没有写None,表明只需要统计部分图像
histg=cv2.calcHist([img],[1],mask,[256],[0,255])#计算G通道直方图
histr=cv2.calcHist([img],[2],mask,[256],[0,255])#计算R通道直方图
plt.plot(histb,color='b')               #绘制B通道直方图,蓝色
plt.plot(histg,color='g')               #绘制G通道直方图,绿色
plt.plot(histr,color='r')               #绘制R通道直方图,红色
plt.show()                              #显示直方图

四、NumPy中的直方图

在这里插入图片描述

#test6-4.py:Numpy中的直方图
import cv2
import numpy as np
import matplotlib.pyplot as plt
img=cv2.imread('gate.jpg')  		     #读取图像
cv2.imshow('original',img)  	        #显示原图像
histb,e1=np.histogram(img[0].ravel(),256,[0,256])#计算B通道直方图
histg,e2=np.histogram(img[1].ravel(),256,[0,256])#计算G通道直方图
histr,e3=np.histogram(img[2].ravel(),256,[0,256])#计算R通道直方图
plt.plot(histb,color='b')               			#绘制B通道直方图,蓝色
plt.plot(histg,color='g')               			#绘制G通道直方图,绿色
plt.plot(histr,color='r')               			#绘制R通道直方图,红色
plt.show()                                          #显示直方图

五、直方图均衡化

在这里插入图片描述

#test6-5.py:直方图均衡化
import cv2
import matplotlib.pyplot as plt
img=cv2.imread('bee.jpg',0) 	        #显示原图像 flags = 0, 8位深度,1通道
cv2.imshow('original',img)  	        #显示原图像
plt.figure('原图的直方图')
plt.hist(img.ravel(),256)               #绘制原直方图
img2=cv2.equalizeHist(img)
cv2.imshow('equalizeHist',img2)  	      #显示均衡化后的图像
plt.figure('均衡化后的直方图')
plt.hist(img2.ravel(),256)               #绘制均衡化后图像的直方图
plt.show()                              #显示直方图

六、限制对比度自适应直方图均衡化

在这里插入图片描述

#test6-6.py:限制对比度自适应直方图均衡
import cv2
import matplotlib.pyplot as plt
img=cv2.imread('clahe.jpg',0) 	            #打开图像,0表示单通道灰度图
cv2.imshow('original',img)  	            #显示原图像
img2=cv2.equalizeHist(img)
cv2.imshow('equalizeHist 直方图均衡化后的图像',img2)  	        #显示直方图均衡化后的图像
clahe=cv2.createCLAHE(clipLimit=5)          #创建CLAHE  clipLimit=5 对比度受限的阈值是5,默认值是40 
                                            #tileGridSize是直方图均衡化的网格大小,默认值是(8,8)
img3 = clahe.apply(img)                     #应用CLAHE
cv2.imshow('CLAHE 应用限制对比度自适应直方图均衡化后的图像',img3)  	                #显示应用LCAHE后的图像
cv2.waitKey(0)

七、二维直方图

在这里插入图片描述

#test6-7.py:OpenCV中的二维直方图
import cv2
img=cv2.imread('building.jpg') 	                #打开图像
cv2.imshow('original',img)  	            #显示原图像
img2=cv2.cvtColor(img,cv2.COLOR_BGR2HSV) 	#转换色彩空间为HSV
hist = cv2.calcHist([img2], [0, 1], None, 
        [180, 256], [0, 180, 0, 256])       #计算颜色直方图
cv2.imshow('2Dhist',hist)  	                #显示颜色直方图
import matplotlib.pyplot as plt
plt.imshow(hist,interpolation = 'nearest')  #绘制颜色直方图
plt.show()                                  #显示颜色直方图
cv2.waitKey(0)
#test6-8.py:Numpy中的二维直方图
import cv2
import numpy as np
img=cv2.imread('building.jpg') 	                #打开图像
cv2.imshow('original',img)  	            #显示原图像
img2=cv2.cvtColor(img,cv2.COLOR_BGR2HSV) 	#转换色彩空间为HSV
h,s,v=cv2.split(img2)
hist,x,y=np.histogram2d(h.ravel(),s.ravel(),
                [180,256],[[0,180],[0,256]])#计算颜色直方图
cv2.imshow('2Dhist',hist)  	                #显示灰度颜色直方图
import matplotlib.pyplot as plt
plt.imshow(hist,interpolation = 'nearest')  #绘制颜色直方图
plt.show()                                  #显示颜色直方图
cv2.waitKey(0)

八、实验一 使用Numpy函数计算直方图

在这里插入图片描述

#test6-9.py:使用Numpy函数计算直方图
import cv2
import numpy as np
import matplotlib.pyplot as plt
img=cv2.imread('home.jpg') 	                        #打开图像
plt.figure('程序运行结果')                                  #设置窗口标题
imgrgb=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)          #BGR转换为RGB
plt.subplot(2,2,1)                                  #添加子图窗口
plt.imshow(imgrgb)   	                            #显示原图像,默认为RGB
plt.title('original')                               #设置子图窗口标题
plt.axis('off')                                     #不显示坐标轴
histb,e1=np.histogram(img[0].ravel(),256,[0,256])   #计算B通道直方图
histg,e2=np.histogram(img[1].ravel(),256,[0,256])   #计算G通道直方图
histr,e3=np.histogram(img[2].ravel(),256,[0,256])   #计算R通道直方图
plt.subplot(2,2,2)
plt.plot(histb,color='b')               			#绘制B通道直方图,蓝色
plt.plot(histg,color='g')               			#绘制G通道直方图,绿色
plt.plot(histr,color='r')               			#绘制R通道直方图,红色
plt.title('hist')                                   #设置子图窗口标题
img2=cv2.cvtColor(img,cv2.COLOR_BGR2HSV) 	        #转换色彩空间为HSV
h,s,v=cv2.split(img2)
hist,x,y=np.histogram2d(h.ravel(),s.ravel(),
                [180,256],[[0,180],[0,256]])        #计算颜色直方图
plt.subplot(2,1,2)
plt.title('2Dhist')                                 #设置子图窗口标题
plt.imshow(hist)                                    #绘制颜色直方图
plt.show()                                          #显示颜色直方图

九、实验2 使用OpenCV函数计算直方图

在这里插入图片描述

#test6-9.py:使用OpenCV函数计算直方图
import cv2
import numpy as np
import matplotlib.pyplot as plt
img=cv2.imread('flower.jpg') 	                        #打开图像
plt.figure('程序运行结果')                                  #设置窗口标题
imgrgb=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)          #BGR转换为RGB
plt.subplot(2,2,1)                                  #添加子图窗口
plt.imshow(imgrgb)   	                            #显示原图像,默认为RGB
plt.title('original')                               #设置子图窗口标题
plt.axis('off')                                     #不显示坐标轴
histb=cv2.calcHist([img],[0],None,[256],[0,255])	#计算B通道直方图
histg=cv2.calcHist([img],[1],None,[256],[0,255])	#计算G通道直方图
histr=cv2.calcHist([img],[2],None,[256],[0,255])	#计算R通道直方图
plt.subplot(2,2,2)
plt.plot(histb,color='b')               			#绘制B通道直方图,蓝色
plt.plot(histg,color='g')               			#绘制G通道直方图,绿色
plt.plot(histr,color='r')               			#绘制R通道直方图,红色
plt.title('hist')                                   #设置子图窗口标题
img2=cv2.cvtColor(img,cv2.COLOR_BGR2HSV) 	        #转换色彩空间为HSV
hist = cv2.calcHist([img2], [0, 1], None, 
        [180, 256], [0, 180, 0, 256])               #计算颜色直方图
plt.subplot(2,1,2)
plt.title('2Dhist')                                 #设置子图窗口标题
plt.imshow(hist)                                    #绘制颜色直方图
plt.show()                                          #显示颜色直方图

总结

提示:这里对文章进行总结:

例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

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

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

相关文章

软件过程模型

软件过程软件过程:获得高质量软件的一系列任务框架瀑布模型:特点:顺序,依赖,推迟实现,质量保证优点:规范方法,规定文档,阶段质量验证缺点:开发初期困难,需求验证困难,难以维护快速原型优点:满足需求,线性过程缺点:设计困难,原型理解不同,不利于创新增量模型:优点:短时间可完成部…

[附源码]Python计算机毕业设计SSM健身房管理系统设计(程序+LW)

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

[附源码]Python计算机毕业设计Django体育馆场地预约管理系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

VSCode 配置C语言环境 全程记录 ,配置成功

目录 1.vscode介绍: 1.1 卸载干净VSCode 1.2安装VSCode 1.2.1 下载安装 1.2.2 vscode 小插件安装 2. 配置vscode 编译器 2.1 下载编译器资源文件: 2.2 配置环境变量 2.3 vscode项目文件配置 1. 首先新建一个.c文件,命名为英文哦 2. 然后…

含有DBCO和马来酰亚胺基团Mal-PEG2-DBCO,2698339-31-8,DBCO-PEG2-Maleimide

中英文别名: CAS号:2698339-31-8 | 英文名:DBCO-PEG2-Maleimide,Mal-PEG2-DBCO |中文名:二苯并环辛炔-二聚乙二醇-马来酰亚胺物理参数: CASNumber:2698339-31-8 Molecular formula:C…

工业和信息化部公布45个国家先进制造业集群名单

近日,工业和信息化部正式公布45个国家先进制造业集群的名单。 45个国家级集群2021年主导产业产值达19万亿元,布局建设了18家国家制造业创新中心,占全部国家级创新中心数量的70%,拥有国家级技术创新载体1700余家,培育创…

【苹果相册推iMessage】软件安装Websocket可以在浏览器顶用于支持两个通讯并使用它

推荐内容IMESSGAE相关 作者推荐内容iMessage苹果推软件 *** 点击即可查看作者要求内容信息作者推荐内容1.家庭推内容 *** 点击即可查看作者要求内容信息作者推荐内容2.相册推 *** 点击即可查看作者要求内容信息作者推荐内容3.日历推 *** 点击即可查看作者要求内容信息作者推荐…

Python3,9行代码,对比两个Excel数据差异,并把差异结果重新保存。

Excel数据差异对比1、引言2、代码实战3、总结1、引言 小屌丝:鱼哥,还记得上次写的把数据库的查询结果写入到excel这个脚本不。 小鱼:嗯… 可以说不记得吗 小屌丝:我猜你就记得。 小鱼:你…说…啥?&#xf…

画布的使用方式

一、’注册—登录—主页’作业中的技术点: 1、前端: ​ (1)input file标签的样式处理 ​ (2)文件类型的设置:accept属性来指定 ​ (3)input file选择的图片立即显示出…

搭建K8s集群

前言:本次将通过kubeadm部署1个master节点,2个worker节点K8s集群,本次集群使用的容器运行工具为docker(题外话:K8s的容器运行工具也可以用docker、containerd、cio等等,其中containerd是一个轻量级、工业级的容器运行工…

aws eks 使用paker构建自定义ami

资料 如何创建用于 Amazon EKS 的自定义 Amazon Linux AMI? 构建预置容器镜像的EKS自定义AMI解决方案 https://github.com/awslabs/amazon-eks-ami https://github.com/awslabs/amazon-eks-ami/blob/master/doc/USER_GUIDE.md https://developer.hashicorp.com/…

[Cortex-M3]-3-分散加载文件解析(.sct)

目录 1 分散加载文件.sct 2 如何生成.sct文件 3 *(InRoot$$Sections) 说明 4 如何修改分散加载文件 5 已经初始化变量的初值,存储位置 6 RW ZI和RO如何执行 1 分散加载文件.sct MDK的分散加载主要是通过.sct文件实现的,链接器根据.sct…

黄菊华老师,Python毕业设计毕设辅导教程(2):Python开发准备,Window 平台安装 Python

Python3 开发准备 Python3 可应用于多平台包括 Windows、Linux 和 Mac OS X。 Unix (Solaris, Linux, FreeBSD, AIX, HP/UX, SunOS, IRIX, 等等。)Win 9x/NT/2000Macintosh (Intel, PPC, 68K)OS/2DOS (多个DOS版本)PalmOSNokia 移动手机Windows CEAcorn/RISC OSBeOSAmigaVMS/…

网络安全专业学习路线

​最专业、全面的网络安全学习路线来咯~(虽然是网络安全学习路线,但重心还是在Web安全上) 展示学习路线之前,建议大家先了解一下这几个问题,既是认清形势,也是认清自我: 为什么要学网络安全&a…

二 TypeScript 基础(初识和语法)

变量 什么是变量 变量是存储信息的容器,其中的值(内容)是可变的。 变量的声明 我们使用var关键字来声明变量,新的关键字let来声明带有(块级作用域)属性的变量。 var a 或者 let a 使用 来赋值 var a 1; //如果只声明变量,井没有赋值的话,该变量的值为 undef…

初识TypeScript编译器(tsc)

须知少时凌云志, 曾许人间第一流。 哪晓岁月蹉跎过, 依旧名利俩无收。 文章目录1. 安装 TypeScript2. 熟悉tsc的编译选项3. 编译.ts文件4. TS报错后那JS呢4.1 通过noEmitOnError禁止在出错的情况下编译出JS目标文件5. 查看编译生成的JS文件5.1 通过targe…

数据库分库分表方案

一、数据库瓶颈 不管是IO瓶颈,还是CPU瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载活跃连接数的阈值。在业务Service来看就是,可用数据库连接少甚至无连接可用。接下来就可以想象了吧(并发…

文华财经期货量化短线策略支撑压力指标公式,短线行情无未来函数多空均线红涨绿跌信号

很多人从行情历史走势图发现,金叉行情上涨,死叉行情下跌的规律,告诉大家那些完美冬形只是过去式而已,行情震荡时,指标失灵可以把你震荡到爆仓。我们也会经常发现不好的指标在很多情况下会相互矛盾,这个指标…

[程序人生] [世界杯] 程序员世界杯的熬夜调节套餐 - 茶叶篇

🍁简介 最近看世界杯熬夜,搞点小酒(百威/威士忌/各种洋酒) 配花生米,再搞点串 简直人生不要太爽, 但是!!! 问题来了,几天下来 喉咙不适,肺部不适觉得痰多, 查了一下是酒辛辣食品太多了!早上萎靡不振咖啡提神…

车载诊断新驱动——远程诊断

文章目录 前言一、远程诊断作用二、解决方案三、现状和趋势总结前言 今天是2022年12月5日,终于迎来了疫情尾声的消息。 分享一段喜欢的文字,避免自己成为高知识低文化的工科男: 与其热闹着引人注目,步步紧逼,不如趋向…