OpenCV---直方图的应用(均衡化和图像比较)
2024-09-19 18:18:46
一:全局直方图均衡化(对比度增强)equalizeHist
def equalHist_demo(image): #OpenCV直方图均衡化都是基于灰度图像
gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
dst = cv.equalizeHist(gray) #直方图均衡化,对比度增强
cv.imshow("equalHist_demo",dst)
.cv2.equalizeHist函数原型:equalizeHist(src[, dst]) -> dst。函数equalizeHist的作用:直方图均衡化,提高图像质量。
.直方图均衡化:如果一副图像的像素占有很多的灰度级而且分布均匀,那么这样的图像往往有高对比度和多变的灰度色调。直方图均衡化就是一种能仅靠输入图像直方图信息自动达到这种效果的变换函数。
它的基本思想是对图像中像素个数多的灰度级进行展宽,而对图像中像素个数少的灰度进行压缩,从而扩展像元取值的动态范围,提高了对比度和灰度色调的变化,使图像更加清晰。
.全局直方图均衡化可能得到是一种全局意义上的均衡化,但是有的时候这种操作并不是很好,会把某些不该调整的部分给调整了。
Opencv中还有一种直方图均衡化,它是一种局部直方图均衡化,也就是是说把整个图像分成许多小块(比如按10*10作为一个小块),那么对每个小块进行均衡化。
全局的对比度太强
二:自适应的局部的直方图均衡化createCLAHE
def clahe_demo(image): #OpenCV直方图均衡化都是基于灰度图像
gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY)
clahe = cv.createCLAHE(clipLimit=2.0,tileGridSize=(,))
dst = clahe.apply(gray) #将灰度图像和局部直方图相关联
cv.imshow("clahe_demo",dst)
.createCLAHE函数原型:createCLAHE([, clipLimit[, tileGridSize]]) -> retval
clipLimit参数表示对比度的大小。
tileGridSize参数表示每次处理块的大小 。
三:直方图的比较
def create_rag_hist(image):
h,w,c = image.shape
rgbHist = np.zeros([**,],np.float32)
bsize = / #间隔是16
for row in range(h):
for col in range(w):
b = image[row,col,]
g = image[row,col,]
r = image[row,col,]
index = np.int(b/bsize)** + np.int(g/bsize)* + np.int(r/bsize)
rgbHist[np.int(index),] = rgbHist[np.int(index),] +
return rgbHist def hist_compare(image1,image2):
hist1 = create_rag_hist(image1)
hist2 = create_rag_hist(image2)
match1 = cv.compareHist(hist1,hist2,cv.HISTCMP_BHATTACHARYYA) #巴氏距离比较,越小越相似
match2 = cv.compareHist(hist1,hist2,cv.HISTCMP_CORREL) #相关性比较(最大为1):越接近1越相似
match3 = cv.compareHist(hist1,hist2,cv.HISTCMP_CHISQR) #卡方比较,越小越相似
print("巴氏:%s 相关性:%s 卡方:%s"%(match1,match2,match3))
hist_compare(src,src) #当我们使用两张一样的图像比较
巴氏:0.0 相关性:1.0 卡方:0.0
最新文章
- ASP.NET Core 中文文档 第二章 指南(4.7)添加搜索
- Spring学习记录(八)---Bean的生命周期
- 关于在linux中使用图形界面的网络管理工具
- mysql ---复制表结构---创建新表
- TinyFrame框架中的UOW使用方式纠正
- linux下常见的文件夹含义
- python metaclass 入门简介
- 第一个C语言代码
- Appium 解决中文输入问题
- linux之vim配置
- Got a packet bigger than ‘max_allowed_packet’ bytes的解决方法
- 流畅的python学习笔记:第一章
- Yii2之事件
- AI adanet
- luogu P5234 [JSOI2012]越狱老虎桥
- NET设计模式 第三部分 结构型模式(7):适配器模式(Adapter Pattern)
- Reg命令使用详解 批处理操作注册表必备
- 设计模式之模版方法模式(Template Method Pattern)
- 页码插入JS脚本
- Unity如何判断网络状态?
热门文章
- 第10次Scrum会议(10/22)【欢迎来怼】
- [CF] Sasha and One More Name
- 404 Note Found -(课堂实战)- 项目UML设计(团队)
- myeclipse和ecplise中安装git插件的问题
- 6/3 sprint2 看板和燃尽图的更新
- 10个linux网络和监控命令
- 如何在DBGrid里实现Shift+“选择行”区间多选的功能!
- Java知识点整理(一)
- 【.Net】HttpClient 的使用
- UVA12585_Poker End Games