目录:

(一)调节图片对比度(均衡化)

(1)全局直方图均衡化------equalizeHist

(2)自适应的局部的直方图均衡化------createCLAHE

(二)图片的相似度比较

(三)直方图反向投影(实现对有颜色物体的跟踪)

(1)原理

(2)二维直方图的表示

A.直接显示

B.使用matplotlib

(3)直方图反向映射

A. def calcHist函数

B.roihist函数

C.归一化函数normalize详解

正文:

(一)调节图片对比度(均衡化)

(1)全局直方图均衡化------equalizeHist

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

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

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

1 def equalHist_demo(image): #OpenCV直方图均衡化都是基于灰度图像

2 gray =cv.cvtColor(image,cv.COLOR_BGR2GRAY)3 dst = cv.equalizeHist(gray) #直方图均衡化,对比度增强

4 cv.imshow("equalHist_demo",dst)

缺点:对比度太明显了!

(2)自适应的局部的直方图均衡化------createCLAHE

1.createCLAHE函数原型:createCLAHE([, clipLimit[, tileGridSize]]) -> retval clipLimit参数表示对比度的大小。 tileGridSize参数表示每次处理块的大小 。

1 def clahe_demo(image): #OpenCV直方图均衡化都是基于灰度图像

2 gray =cv.cvtColor(image,cv.COLOR_BGR2GRAY)3 clahe = cv.createCLAHE(clipLimit=2.0,tileGridSize=(8,8))4 dst = clahe.apply(gray)  #将灰度图像和局部直方图相关联

5 cv.imshow("clahe_demo",dst)

(二)图片的相似度比较

1 defcreate_rag_hist(image):2 h,w,c =image.shape3 rgbHist = np.zeros([16*16*16,1],np.float32)4 bsize = 256/16 #间隔是16

5 for row inrange(h):6 for col inrange(w):7 b =image[row,col,0]8 g = image[row,col,1]9 r = image[row,col,2]10 index = np.int(b/bsize)*16*16 + np.int(g/bsize)*16 + np.int(r/bsize)11 rgbHist[np.int(index),0] = rgbHist[np.int(index),0] + 1

12 returnrgbHist13

14 defhist_compare(image1,image2):15 hist1 =create_rag_hist(image1)16 hist2 =create_rag_hist(image2)17 match1 = cv.compareHist(hist1,hist2,cv.HISTCMP_BHATTACHARYYA) #巴氏距离比较,越小越相似

18 match2 = cv.compareHist(hist1,hist2,cv.HISTCMP_CORREL) #相关性比较(最大为1):越接近1越相似

19 match3 = cv.compareHist(hist1,hist2,cv.HISTCMP_CHISQR) #卡方比较,越小越相似

20 print("巴氏:%s 相关性:%s 卡方:%s"%(match1,match2,match3))

(三)直方图反向投影(实现对有颜色物体的跟踪)

(1)原理

(2)二维直方图的表示

A.直接显示

1 defhist2D_demo(image):2 hsv =cv.cvtColor(image,cv.COLOR_BGR2HSV)3 hist = cv.calcHist([image],[0,1],None,[289,286],[0,289,0,286])4 cv.imshow("hist2D",hist)

B.使用matplotlib

1 defhist2D_demo(image):2 hsv =cv.cvtColor(image,cv.COLOR_BGR2HSV)3 hist = cv.calcHist([image],[0,1],None,[289,286],[0,289,0,286])4 plt.imshow(hist,interpolation="nearest")5 plt.title("2D Histogram")6 plt.show()

(3)直方图反向映射

A. def calcHist(images, channels, mask, histSize, ranges, hist=None, accumulate=None): # real signature unknown; restored from __doc__

images:输入图像

channels:需要统计直方图的第几通道

mask:掩膜,,计算掩膜内的直方图 ...Mat()

histSize:指的是直方图分成多少个区间,就是 bin的个数

ranges: 统计像素值得区间

hist:输出的直方图数组

accumulate=false:在多个图像时,是否累计计算像素值得个数

1 defback_projection_demo():2 sample = cv.imread("./s2.png")3 target = cv.imread("./b.png")4 roi_hsv =cv.cvtColor(sample,cv.COLOR_BGR2HSV)5 tar_hsv =cv.cvtColor(target,cv.COLOR_BGR2HSV)6

7 cv.imshow("sample",sample)8 cv.imshow("target",target)9

10 roihist = cv.calcHist([roi_hsv], [0, 1], None, [324, 356], [0, 324, 0, 356])  #加红部分越小,匹配越放松,匹配越全面,若是bsize值越大,则要求得越精细,越不易匹配,所以导致匹配出来的比较小

11 cv.normalize(roihist,roihist,0,255,cv.NORM_MINMAX)  #规划到0-255之间

12 dst = cv.calcBackProject([tar_hsv],[0,1],roihist,[0,324,0,356],1) #直方图反向投影

13 cv.imshow("back_projection_demo",dst)

B.roihist = cv.calcHist([roi_hsv], [0, 1], None, [32, 46], [0, 324, 0, 356])  #这是两个通道,bsize变少了,但是他的匹配更加广了(对于匹配的局限放宽了)

C.归一化函数normalize详解

1. 归一化就是要把需要处理的数据经过处理后(通过某种算法)限制在你需要的一定范围内。

归一化函数cv2.normalize原型:normalize(src, dst[, alpha[, beta[, norm_type[, dtype[, mask]]]]])->dst

src参数表示输入数组。

dst参数表示输出与src相同大小的数组,支持原地运算。

alpha参数表示range normalization模式的最小值。

beta参数表示range normalization模式的最大值,不用于norm normalization(范数归一化)模式。

norm_type参数表示归一化的类型。

norm_type参数可以有以下的取值:

NORM_MINMAX:数组的数值被平移或缩放到一个指定的范围,线性归一化,一般较常用。

NORM_INF:归一化数组的C-范数(绝对值的最大值)。

NORM_L1 :归一化数组的L1-范数(绝对值的和)。

NORM_L2 :归一化数组的(欧几里德)L2-范数。

2.反向投影用于在输入图像(通常较大)中查找特定图像(通常较小或者仅1个像素,以下将其称为模板图像)最匹配的点或者区域,也就是定位模板图像出现在输入图像的位置。

函数cv2.calcBackProject用来计算直方图反向投影。

函数原型:calcBackProject(images, channels, hist, ranges, scale[, dst])->dst

images参数表示输入图像(是HSV图像)。传入时应该用中括号[ ]括起来。

channels参数表示用于计算反向投影的通道列表,通道数必须与直方图维度相匹配。

hist参数表示输入的模板图像直方图。

ranges参数表示直方图中每个维度bin的取值范围 (即每个维度有多少个bin)。

scale参数表示可选输出反向投影的比例因子,一般取1。

参考:

https://www.cnblogs.com/ssyfj/p/9270608.html

https://www.cnblogs.com/ssyfj/p/9271327.html

python做直方图-python实现直方图的应用相关推荐

  1. python做硬件自动化测试-用python做自动化测试--Python实现远程性能监控

    http://blog.csdn.net/powerccna/article/details/8044222 在性能测试中,监控被测试服务器的性能指标是个重要的工作,包括CPU/Memory/IO/N ...

  2. python做图片-python做图

    在前面的几篇文章中,我们分享了一些用PyGame制作小游戏的教程.我们今天的分享使用的仍然是PyGame,只不过这次不是写游戏啦-我们要用PyGame制作一张马赛克版的蒙娜丽莎. 下载图片 下载蒙娜丽 ...

  3. python做平面设计-Python系列干货之——Python与设计模式

    原标题:Python系列干货之--Python与设计模式 一.创建类设计模式 前言: 什么样的程序员是一个好的程序员?学会很多门编程语言,就是一个好的程序员了么?事实上,学会一门编程语言不是一件很难的 ...

  4. 用python做炒股软件-python程序源码_基于python的炒股软件

    股票模拟交易系统设计与实现 不但能够进行界面的设计,还可以实现各个窗口的关联,通过WPF实现和其余窗口的关联,而且WPF中的类不但能够和其中一个窗口进行关联,还可以跟许多功能操作接口,WPF在对窗口对 ...

  5. 学python有前途吗-我们能用Python做什么?学Python有前途吗?

    我们能用Python做什么? 目前流行的大数据分析.数据科学.机器学习等行业,Python长期稳固第一阵营,甚至就是第一语言.不管从哪个方面来考虑,都应该选择 Python. 在安全渗透行业,大量的攻 ...

  6. python绘制简单直方图-python plotly绘制直方图实例详解

    python plt怎么绘制直方图 # /usr/bin/python# -*- coding: utf-8 -*-import numpy as npfrom matplotlib import p ...

  7. python opencv 直方图均衡_详解python OpenCV学习笔记之直方图均衡化

    本文介绍了python OpenCV学习笔记之直方图均衡化,分享给大家,具体如下: 官方文档 – https://docs.opencv.org/3.4.0/d5/daf/tutorial_py_hi ...

  8. 基于python的对比度增强(线性变换、直方图正规化、直方图均衡化、CLAHE)

    线性变换 假设输入图像为I,宽为W,高为H,输出图像为O,图像的线性变换可以用以下公式定义: O(r,c)=a×I(r,c)+b,0≤r<H,0≤c<WO(r, c) = a × I(r, ...

  9. python读取csv数据画直方图_用python绘制直方图

    其实,学习数据分析,excel可以完成绝大多数的工作,只是课程中@tiger是用python做的,而且最近自己也在学习编程,所以就挑战一下新东西,学学用python做作业,感谢@余欣 的教程,让我一个 ...

  10. 使用Python,OpenCV计算图像直方图(cv2.calcHist)

    使用Python,OpenCV计算图像直方图(cv2.calcHist 1. 效果图 2. 原理 2.1 什么是图像直方图? 2.2 计算直方图 2.3 可视化蒙版区域 3. 源码 参考 这篇博客将介 ...

最新文章

  1. 开源 RPC 框架有哪些呢?
  2. variable与get_variable
  3. win10怎么共享打印机_共享打印机添加不上怎么办?建议收藏备用
  4. jvm高并发_在JVM上对高并发HTTP服务器进行基准测试
  5. Java 8仍然需要LINQ吗? 还是比LINQ更好?
  6. Hbase 二级索引 Solr int字段排序问题 can not sort on multivalued field
  7. Div+CSS布局居中
  8. infor wms 中英文对照_为什么要wms?_wms吧
  9. c#读取csv文件成DataTable,将DataTable数据存储为csv格式文件
  10. 查看S/N提示'wmic' 不是内部或外部命令,也不是可运行的程序 或批处理文件。的解决办法(不添加环境变量版
  11. C/C++(变量作用域)
  12. 测试9年,面试华为要薪1万,华为员工:公司没这么低工资的岗
  13. 双线macd指标参数最佳设置_经典实用的双线MACD指标
  14. Win10系统默认Administrator账号没有管理员权限的解决方案(win10专业版亲测)
  15. 网页录屏(帧记录)调研总结
  16. java程序求内切圆_JAVA求正方形边长,圆内切正方形,圆的直径为8,求正方形边长和面积!...
  17. 异常(Exceptions)
  18. OOA/OOD/OOP细讲
  19. 汇编语言基本概念汇总
  20. 阿里妈妈技术:广告间排序和广告内创意优选联合优化(CACS)

热门文章

  1. 2021-09-27 杂想
  2. vim下自动排版命令
  3. 时间序列预测——深度好文,ARIMA是最难用的(数据预处理过程不适合工业应用),线性回归模型简单适用,预测趋势很不错,xgboost的话,不太适合趋势预测,如果数据平稳也可以使用。...
  4. Dlib——C++机器学习库,有传统机器学习的,也有深度学习的
  5. 动态DNS——本质上是IP变化,将任意变换的IP地址绑定给一个固定的二级域名。不管这个线路的IP地址怎样变化,因特网用户还是可以使用这个固定的域名 这样看的话,p2p可以用哇...
  6. elasticsearch index 之 put mapping
  7. linux编程 fmemopen函数打开一个内存流 使用FILE指针进行读写访问
  8. CSS样式:position: absolute
  9. dom定位的三种元素
  10. POJ3714 Raid 平面最近点对