小言_互联网的博客

在OpenCV里实现灰度直方图3

464人阅读  评论(0)

最后使用OpenCV里的函数来实现灰度直方图的统计,这个函数定义如下:

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

第一个参数必须用方括号括起来。

第二个参数是用于计算直方图的通道,这里使用灰度图计算直方图,所以就直接使用第一个通道;

第三个参数是Mask,这里没有使用,所以用None。

第四个参数是histSize,表示这个直方图分成多少份(即多少个直方柱)。第二个例子将绘出直方图,到时候会清楚一点。

第五个参数是表示直方图中各个像素的值,[0.0, 256.0]表示直方图能表示像素值从0.0到256的像素。

最后是两个可选参数,由于直方图作为函数结果返回了,所以第六个hist就没有意义了(待确定) 最后一个accumulate是一个布尔值,用来表示直方图是否叠加。

 

理解这些参数之后,就可以编写代码来演示这个函数的使用:

#python 3.7.4,opencv4.1
#蔡军生 https://blog.csdn.net/caimouse/article/details/51749579
#
import cv2
import numpy as np
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

#图片的路径
imgname = "img1.jpg"

#读取图片
image = cv2.imread(imgname, cv2.IMREAD_GRAYSCALE)

#图片的高度和宽度
h,w = image.shape[:2]
print(w,h)

#显示原图
cv2.imshow("Image",image)

#显示直方图
hist = cv2.calcHist([image], [0], None, [256], [0, 256])
plt.plot(hist)

plt.xlabel('灰度值')
plt.ylabel('像素个数')
plt.axis([0,255, 0, np.max(hist)])#设置坐标轴范围
plt.show()

cv2.waitKey(0)
cv2.destroyAllWindows()
    

输出结果如下:

不管是通过python自己统计,还是使用matplotlib,还是用opencv的函数,计算出来的直方图都是一样的。

https://blog.csdn.net/caimouse/article/details/51749579

 


转载:https://blog.csdn.net/caimouse/article/details/100511973
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场