给定一幅彩色图片,画出三个通道的直方图。做出对比。

一、学习要点:

1)cv2.calcHist直方图产生函数

cv2.calcHist( images, channels, mask, histSize, ranges[, hist[, accumulate ]])

#计算直方图函数参数

  • 第一个参数必须用方括号括起来,表示被计算的图像,可以是多幅。
  • 第二个参数是用于计算直方图的通道,这里使用灰度图计算直方图,所以就直接使用第一个通道,多幅图像相当于多通道;
  • 第三个参数是Mask,与原图维度相同,被计算的区域,1计算,0不计算,这里没有使用,所以用None。
  • 第四个参数是histSize,表示这个直方图分成多少份(即多少个直方柱的数量)。
  • 第五个参数是表示直方图中各个像素的值,[0.0, 256.0]表示直方图能表示像素值从0.0到256的像素。

2)cv2.normalize归一化函数

# Normalize the value to fall below 255, to fit in image 'h'

cv2.normalize(source_array, destination_array, alpha, beta, normalization_type)

  • source_array 是要归一化的输入图像对应的数组,
  • destination_array 是归一化的输出图像对应的数组,
  • alpha 表示下限边界值,
  • beta 表示上限边界值,并且
  • normalization_type 表示规范化的类型【 cv2.NORM_MINMAX,】。

3) pts = np.column_stack函数

np.column_stack((bins, hist))

将两个列向量合并后,拼成矩阵。

pts = np.column_stack((bins, hist))

4) cv2.polylines函数

cv.polylines(img,pts=pts,isClosed=True, color=(255, 255, 255), thickness=3)

参数如下:

img:要在上面画多边形的图像
pts:包含多边形上顶点的数组
isClosed:标志,决定所绘制的多边形是否闭合。若为 True ,则画若干个闭合多边形;若为 False ,则画一条连接所有点的折线
color:多边形颜色
thickness:多边形线的粗细
lineType:多边形线的类型
shift:坐标精确到小数点后第几位

二、代码部分

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# .Data:.2019/3/24
import cv2
import numpy as npimg = cv2.imread('D001.jpg')
h = np.zeros((300, 256, 3))  # image to draw histogrambins = np.arange(256).reshape(256, 1)  # Number of bins, since 256 colors, we need 256 bins
color = [(255, 0, 0), (0, 255, 0), (0, 0, 255)]for ch, col in enumerate(color):hist_item = cv2.calcHist([img], [ch], None, [256], [0, 256])  # Calculates the histogramcv2.normalize(hist_item, hist_item, 0, 255,cv2.NORM_MINMAX)  # Normalize the value to fall below 255, to fit in image 'h'hist = np.int32(np.around(hist_item))pts = np.column_stack((bins, hist))  # stack bins and hist, ie [[0,h0],[1,h1]....,[255,h255]]cv2.polylines(h, [pts], False, col)h = np.flipud(h)  # You will need to flip the image verticallycv2.imshow('colorhist', h)
cv2.waitKey(0)
cv2.destroyAllWindows()

三、结果输出

输出BGR的三个通道直方图。

Python知识:opencv实现的直方图相关推荐

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

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

  2. Python,OpenCV进行直方图反投影

    Python,OpenCV进行直方图反投影 1. 效果图 2. 源码 参考 这篇博客将介绍Python,OpenCV中的直方图反投影.直方图反投影用于图像分割或在图像中查找感兴趣的对象. 简单地说,它 ...

  3. 使用Python,Opencv进行二维直方图的计算及绘制

    使用Python,Opencv进行二维直方图的计算及绘制 1. 效果图 2. 源码 参考 这篇博客将介绍如何使用Python,Opencv进行二维直方图的计算及绘制(分别用Opencv和Numpy计算 ...

  4. opencv python 直方图反向投影_python OpenCV学习笔记直方图反向投影的实现

    本文介绍了python OpenCV学习笔记直方图反向投影的实现,分享给大家,具体如下: 它用于图像分割或寻找图像中感兴趣的对象.简单地说,它创建一个与我们的输入图像相同大小(但单通道)的图像,其中每 ...

  5. python 灰度直方图_python3+opencv 使用灰度直方图来判断图片的亮暗操作

    1.如何让计算机自动判断一张图是否偏暗?或是判断一张图是否是处于夜晚?我们可以先把图片转换为灰度图,然后根据灰度值的分布来判断,如: 我们可以从上图看到,晚上的图片的灰度值是集中在前段的,如0~30多 ...

  6. 【Python OpenCV】图像直方图 calcHist方法 equalizeHist方法

    [Python OpenCV]图像直方图 calcHist方法 equalizeHist方法 (一)图像直方图 图像的构成是有像素点构成的,每个像素点的值代表着该点的颜色(灰度图或者彩色图).所谓直方 ...

  7. Python,OpenCV直方图均衡化以提高图像对比度

    Python,OpenCV直方图均衡化以提高图像对比度 1. 效果图 2. 原理 2.1 直方图均衡化应用 2.2 直方图均衡化分类 3. 源代码 参考 这篇博客将介绍直方图均衡化(全局 & ...

  8. 使用Python,OpenCV,本地二进制模式(LBP)进行人脸识别

    使用Python,OpenCV与本地二进制模式(LBP)进行人脸识别 1. 效果图 2. 原理及步骤 2.1 原理 2.2 步骤 3. 源码 参考 在深度学习和暹罗网络之前,面部识别算法依赖于特征提取 ...

  9. Python,OpenCV基于支持向量机SVM的手写数字OCR

    Python,OpenCV基于支持向量机SVM的手写数字OCR 1. 效果图 2. SVM及原理 2. 源码 2.1 SVM的手写数字OCR 2.2 非线性SVM 参考 上一节介绍了基于KNN的手写数 ...

  10. 使用Python,OpenCV和Scikit-Image检测低对比度图像

    使用Python,OpenCV和Scikit-Image检测低对比度图像 1. 效果图 2. 原理 3. 源码 参考 这篇博客将介绍如何使用Python,OpenCV和Scikit-Image检测低对 ...

最新文章

  1. 图论 ---- CF1495D .BFS Trees(图论最短路生成树+枚举计数+树的层次性)
  2. 打马赛克就安全了吗?AI消除马赛克,GitHub开源项目上线三天收获近7000星
  3. PyQt5 笔记6 -- 对话框(QDialog)
  4. Hasor【付诸实践 01】低代码框架 DataQL 聚合查询引擎 SQL执行器报错 Query dialect missing 原因分析及解决(针对GreenPlum数据库)
  5. c++ 多线程 垃圾回收器_JavaSE基础代码(3)--JavaSE程序入口,JDK,JRE,JVM垃圾回收器的关系与作用...
  6. c语言 统计数量用count_c语言中统计重复数字次数 c语言问题 统计不同数字的个数...
  7. python input函数无法输入字符串_python input输入函数
  8. SSH框架下 Proxool 连接池配置
  9. 【笔记】MySQL 根据出生日期计算当前年龄
  10. 爬虫中proxies小分享
  11. 【Redis 系列】redis 学习十五,redis sds数据结构和底层设计原理
  12. excel按条件选择工作表_在Excel工作表中选择“实际使用范围”
  13. jQuery的jsTree入门使用
  14. 黑科技时代,不了解这些你就OUT了
  15. python选择哪个版本-Python下载哪个版本比较好?
  16. DCS是分布式控制系统的英文缩写(Distributed Control System)
  17. windows 防止屏保锁屏脚本工具
  18. 什么是智慧社区 智慧社区解决方案概括
  19. Python调用淘宝ip库API实现地址显示
  20. 捷信消费金融十年:巨轮转向,海阔天空

热门文章

  1. 背景和文字分离的matlab实现
  2. chapter15 机器学习之大数据与mapreduce
  3. 云端大数据实战记录-大数据推荐
  4. 苏宁易购Android架构演进史
  5. 技术高手如何炼成?--转自知乎
  6. 从生命周期去看互联网金融产品的风险管理框架
  7. EMQ服务器问题处理及分析
  8. 神经网络有什么理论支持? 本文作者:AI研习社 2017-11-08 18:30 导语:问:神经网络有什么理论支持? 答:目前为止(2017 年)没有什么特别靠谱的。 雷锋网按:本文原作者袁洋
  9. MAP(Mean Average Precision):
  10. Java 8 - 自定义Collector