OpenCV图像处理技术(Python)——图像直方图

本文介绍了图像直方图的含义,并详细讲解了如何使用Python的Numpy和OpenCV绘制直方图,包括使用掩码、直方图均衡化、比较及阈值法。重点介绍了OpenCV的cv2.calcHist()函数和cv2.equalizeHist()函数的应用。
摘要由CSDN通过智能技术生成

© Fu Xianjun. All Rights Reserved

一、直方图的含义

从统计的角度讲,直方图是图像内灰度值的统计特性与图像灰度值之间的函数,直方图统计图像内各个灰度级的次数。从直方图的图形上观察,横坐标是图像中各像素点的灰度级,纵坐标是具有该灰度级(像素值)的像素个数.

二、绘制直方图

Python的模块matplotlib.pyplot中的hist()函数能够方便地绘制直方图,我们通常采用该函数直接绘制直方图。除次之外,OpenCV中的cv2.calcHist()函数能够计算统计直方图,还可以在此基础上绘制图像的直方图。

1.使用Numpy绘制直方图

语法格式: matplotlib.pyplot.hist(X,BINS)

·X: 数据源,必须是一维的。图像通常是二维的,需要使用ravel()函数(b = a.ravel)将图像处理为一维数据源以后,再作为参数使用。
·BINS: BINS的具体值,表示灰度级的分组情况。
代码如下:

import cv2
import matplotlib.pyplot as plt
img1=cv2.imread("hj.jpg",0)
cv2.imshow("img1",img1)
plt.hist(img1.ravel(),256,facecolor='yellowgreen')
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

2.使用OpenCV绘制直方图

2.1使用cv2.calcHist()函数统计图像直方图

语法格式:

hist = cv2.calcHist(image,channels,mask,histSize,ranges,accumulate)

·image: 原始图像,该图像需要使用“ [ ] ”括起来。
·channels: 指定通道编号。通道编号需要用“ [ ] ”括起来,如果输入图像是单通道灰度图像,该参数的值就是[0]。对于彩色图像,它的值可以是[0]、[1]、[2],分别对应通道B、G、R。
·mask: 掩码图像,当统计整幅图像的直方图时,将这个值设置为None。当统计图像某一部分的直方图时,需要用到掩码图像。
·histSize: BINS的值,该值需要用“ [ ] ”括起来。
·ranges: 即像素范围。
·accumulate: 累积标识,默认值为False。
代码如下:

import cv2
import numpy as np
import matplotlib.pyplot as plt
img=cv2.imread("bd.jpg")
hist = cv2.calcHist([img],[0],None,[256],[0,255])
plt.plot(hist,color='b')

在这里插入图片描述

2.2绘制彩色直方图
代码如下:

import cv2
import numpy as np
import matplotlib.pyplot as plt
img=cv2.imread("bd.jpg")
histb = cv2.calcHist([img],[0],None,[256],[0,255])
histg = cv2.calcHist([img],[1],None,[256],[0,255])
histr = cv2.calcHist([img],[2],None,[256],[0,255])
plt.plot(histb,color='b')
plt.plot(histg,color='g')
plt.plot(histr,color='r')

在这里插入图片描述
2.3彩色直方图封装
代码如下:

import cv2
import numpy as np
from matplotlib import pyplot as plt
def image_hist(image):
    color = ('blue', 'green', 'red')
    for i, color in enumerate(color):
        hist = cv2.calcHist([image], [i], None, [256], [0, 256])
        plt.plot(hist, color=color)
        plt.xlim([0, 256])
    plt.show()
img=cv2.imread
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值