from matplotlib import pyplot as plt
# cv2.imread()用于读取图片文件
# imread函数有两个参数,第一个参数是图片路径,第二个参数表示读取图片的形式
image = cv2.imread('shengwuxibao.jpg')
# cv2.cvtColor(p1,p2) 是颜色空间转换函数,p1是需要转换的图片,p2是转换成何种格式。
# cv2.COLOR_BGR2GRAY 将BGR格式转换成灰度图片
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
# plt.subplot(131)
# 其中131表示我们整个图是由一行三列的子图构成的
#    cv2.imShow()函数可以在窗口中显示图像
plt.subplot(131),plt.imshow(image,'gray')
# xticks :设置x轴 y轴的位置
plt.title('source image'),plt.xticks([]),plt.yticks([])
# hist:在x轴上绘制定量数据的分布特征(用于连续数据,而柱状图用于离散数据)
# image.ravel():将多为数组降为一维数组。 256是bins 每32为是1bin 总共8个bin
plt.subplot(132),plt.hist(image.ravel(),256)
plt.title('Histogram'),plt.xticks([]),plt.yticks([])
#v2.threshold()函数:在opencv中比较常用,但一开始不是很理解是什么意思。
#Python: cv2.threshold(src, thresh, maxval, type[, dst]) → retval, dst
#src:表示的是图片源
#thresh:表示的是阈值(起始值)
#maxval:表示的是最大值
#type:表示的是这里划分的时候使用的是什么类型的算法**,常用值为0(cv2.THRESH_BINARY)**
# 返回两个参数 ret1 应该是阈值分割点 th1 应该是 经过处理后的图片
#  cv2.THRESH_BINARY(黑白二值)
#  cv2.THRESH_BINARY_INV(黑白二值反转)
ret1,th1 = cv2.threshold(gray,0,255,cv2.THRESH_OTSU)
print('ret1',ret1)
print('th1',th1)
plt.subplot(133),plt.imshow(th1,'gray')
plt.title('OTSU,threshold is'+str(ret1)),plt.xticks([]),plt.yticks([])
plt.show()

截图:

python---简单最大类间方差法(OTSU)算法_柱状图