Python-OpenCV图像处理-10-直方图的操作

简介: Python-OpenCV图像处理-10-直方图的操作

均值化:


importcv2ascvimportnumpyasnp# 均衡化(灰度图像)  增强了对比度defequalHist_demo(image):
gray=cv.cvtColor(image,cv.COLOR_BGR2GRAY)
dst=cv.equalizeHist(gray)
cv.imshow("equalHist_demo",dst)

因为这里的直方图均衡化只可用灰度图像。

cv2.equalizeHist函数原型:equalizeHist(src[, dst]) 。函数equalizeHist的作用:直方图均衡化,提高图像质量。

直方图均衡化:如果一副图像的像素占有很多的灰度级而且分布均匀,那么这样的图像往往有高对比度和多变的灰度色调。直方图均衡化就是一种能仅靠输入图像直方图信息自动达到这种效果的变换函数。它的基本思想是对图像中像素个数多的灰度级进行展宽,而对图像中像素个数少的灰度进行压缩,从而扩展像元取值的动态范围,提高了对比度和灰度色调的变化,使图像更加清晰。

局部增强:


#局部增强defclahe_demo(image):
gray=cv.cvtColor(image,cv.COLOR_BGR2GRAY)
clahe=cv.createCLAHE(clipLimit=5.0,tileGridSize=(8,8))
dst=clahe.apply(gray)
cv.imshow("clahe_demo",dst)

全局直方图均衡化可能得到是一种全局意义上的均衡化,但是有的时候这种操作并不是很好,会把某些不该调整的部分给调整了。Opencv中还有一种直方图均衡化,它是一种局部直方图均衡化,也就是是说把整个图像分成许多小块(比如按10*10作为一个小块),那么对每个小块进行均衡化。

createCLAHE函数原型:createCLAHE([, clipLimit[, tileGridSize]])

clipLimit参数表示对比度的大小。

tileGridSize参数表示每次处理块的大小 。

clahe = cv.createCLAHE(clipLimit=5, tileGridSize=(8, 8))

dst = clahe.apply(gray) 把clahe这种局部直方图均衡化应用到灰度图gray

直方图的比较:


#直方图的比较defcreate_rgb_hist(image):
h,w,c=image.shapergbHist=np.zeros([16*16*16,1],np.float32)
bsize=256/16forrowinrange(h):
forcolinrange(w):
b=image[row, col, 0]
g=image[row, col, 1]
r=image[row, col, 2]
index=np.int(b/bsize)*16*16+np.int(g/bsize)*16+np.int(r/bsize)
rgbHist[np.int(index),0] =rgbHist[np.int(index),0] +1returnrgbHistdefhist_compare(image1,image2):
hist1=create_rgb_hist(image1)
hist2=create_rgb_hist(image2)
match1=cv.compareHist(hist1, hist2, cv.HISTCMP_BHATTACHARYYA)
match2=cv.compareHist(hist1, hist2, cv.HISTCMP_CORREL)
match3=cv.compareHist(hist1, hist2, cv.HISTCMP_CHISQR)
print("巴氏距离:%s相关性:%s卡方:%s"%(match1,match2,match3))

巴氏距离:越小越相似

相关性:越接近于1越相似

卡方:越小越相似

测试demo:


src=cv.imread("C:\\Users\\william\\Pictures\\go.jpg")
cv.namedWindow("input image",cv.WINDOW_AUTOSIZE)
cv.imshow("input image",src)
clahe_demo(src)
image1=cv.imread("C:\\Users\\william\\Pictures\\go.jpg")
image2=cv.imread("C:\\Users\\william\\Pictures\\demo.jpg")
hist_compare(image1,image2)
cv.waitKey(0)
cv.destroyAllWindows()
目录
相关文章
|
4月前
|
算法 计算机视觉
基于qt的opencv实时图像处理框架FastCvLearn实战
本文介绍了一个基于Qt的OpenCV实时图像处理框架FastCvLearn,通过手撕代码的方式详细讲解了如何实现实时人脸马赛克等功能,并提供了结果展示和基础知识回顾。
164 7
|
4天前
|
机器学习/深度学习 算法 数据可视化
Python的计算机视觉与图像处理
本文介绍了Python在计算机视觉和图像处理领域的应用,涵盖核心概念、算法原理、最佳实践及应用场景。重点讲解了OpenCV、NumPy、Pillow和Matplotlib等工具的使用,并通过代码实例展示了图像读写、处理和可视化的方法。实际应用包括自动驾驶、人脸识别、物体检测等。未来趋势涉及深度学习、边缘计算和量子计算,同时也讨论了数据不足、模型解释性和计算资源等挑战。
|
2月前
|
计算机视觉 开发者 Python
利用Python进行简单的图像处理
【10月更文挑战第36天】本文将引导读者理解如何使用Python编程语言和其强大的库,如PIL和OpenCV,进行图像处理。我们将从基本的图像操作开始,然后逐步深入到更复杂的技术,如滤波器和边缘检测。无论你是编程新手还是有经验的开发者,这篇文章都将为你提供新的视角和技能,让你能够更好地理解和操作图像数据。
|
3月前
|
机器学习/深度学习 算法 计算机视觉
【Python篇】Python + OpenCV 全面实战:解锁图像处理与视觉智能的核心技能
【Python篇】Python + OpenCV 全面实战:解锁图像处理与视觉智能的核心技能
132 2
|
3月前
|
算法 数据可视化 计算机视觉
Python中医学图像处理常用的库
在Python中,医学图像处理常用的库包括:ITK(及其简化版SimpleITK)、3D Slicer、Pydicom、Nibabel、MedPy、OpenCV、Pillow和Scikit-Image。这些库分别擅长图像分割、配准、处理DICOM和NIfTI格式文件、图像增强及基础图像处理等任务。选择合适的库需根据具体需求和项目要求。
119 0
|
3月前
|
数据挖掘 计算机视觉 Python
基于Python的简单图像处理技术
【10月更文挑战第4天】在数字时代,图像处理已成为不可或缺的技能。本文通过Python语言,介绍了图像处理的基本方法,包括图像读取、显示、编辑和保存。我们将一起探索如何使用PIL库进行图像操作,并通过实际代码示例加深理解。无论你是编程新手还是图像处理爱好者,这篇文章都将为你打开一扇新窗,让你看到编程与创意结合的无限可能。
WK
|
5月前
|
计算机视觉 Python
如何使用OpenCV进行基本图像处理
使用OpenCV进行基本图像处理包括安装OpenCV,读取与显示图像,转换图像颜色空间(如从BGR到RGB),调整图像大小,裁剪特定区域,旋转图像,以及应用图像滤镜如高斯模糊等效果。这些基础操作是进行更复杂图像处理任务的前提。OpenCV还支持特征检测、图像分割及对象识别等高级功能。
WK
57 4
|
5月前
|
计算机视觉 开发者 Python
使用Python进行简单图像处理
【8月更文挑战第31天】 本文将介绍如何使用Python编程语言来处理图像。我们将通过代码示例来展示如何读取、显示、编辑和保存图像文件。无论你是编程新手还是有一定经验的开发者,这篇文章都将为你提供一个清晰的指引,帮助你开始自己的图像处理项目。
|
7月前
|
算法 计算机视觉
【Qt&OpenCV 直方图计算 split/calcHist/normalize】
【Qt&OpenCV 直方图计算 split/calcHist/normalize】
61 0
|
7月前
|
Python
Python学习笔记之Matplotlib模块入门(直线图、折线图、曲线图、散点图、柱状图、饼状图、直方图、等高线图和三维图的绘制)-2
Python学习笔记之Matplotlib模块入门(直线图、折线图、曲线图、散点图、柱状图、饼状图、直方图、等高线图和三维图的绘制)