#绘制直方图
#(1)使用Numpy绘制直方图
#使用hist()函数绘制一幅图像的直方图
import cv2
import matplotlib.pyplot as plt
img=cv2.imread('./image/iu.jpeg')
cv2.imshow('original',img)
plt.hist(img.ravel(),256)
plt.show()
cv2.waitKey()
cv2.destroyWindow()
输出:
#使用hist()将一幅图像的灰度级划分为16组后,
#绘制该图像的直方图
import cv2
import matplotlib.pyplot as plt
img=cv2.imread('./image/iu.jpeg')
plt.hist(img.ravel(),16)
plt.show()
输出:
#plot()函数的使用
#例一
import matplotlib.pyplot as plt
x=[0,1,2,3,4,5,6]
y=[0.3,0.4,2,5,3,4.5,4]
plt.plot(x,y)
plt.show()
输出:
#给定y轴的值,使用plot()函数绘制出来
import matplotlib.pyplot as plt
y = [0.3, 0.4, 2, 5, 3, 4.5, 4]
plt.plot(y)
plt.show()
输出:
#将两组不同的值以不同的颜色表示出来
import matplotlib.pyplot as plt
import numpy as np
a=[1,2,3,4,5]
b=[21,32,43,21,41]
plt.plot(a,color='red')
plt.plot(b,color='green')
plt.show()
输出:
#使用plot()将函数cv2.calcHist()的返回值绘制为直方图
import cv2
import matplotlib.pyplot as plt
img=cv2.imread('./image/iu.jpeg')
hisb=cv2.calcHist([img],[0],None,[256],[0,255])
plt.plot(hisb,color='b')
plt.show()
输出:
#使用plot()和cv2.calcHist(),将彩色图像的各个通道的直方图
#绘制在一个窗口内
import cv2
import matplotlib.pyplot as plt
img=cv2.imread('./image/iu.jpeg')
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')
plt.show()
输出:
#如何构造一个中间是白色图像,掩模图像
import cv2
import numpy as np
mask=np.zeros([600,600],np.uint8)
mask[200:400,200:400]=255
cv2.imshow('mask',mask)
cv2.waitKey()
cv2.destroyWindow()
输出:
#绘制掩模结果图像的直方图
import cv2
import numpy as np
import matplotlib.pyplot as plt
image=cv2.imread('image/iu.jpeg',0)
mask=np.zeros(image.shape,np.uint8)
mask[200:400,200:400]=255
histImage=cv2.calcHist([image],[0],None,[256],[0,255])
histMI=cv2.calcHist([image],[0],mask,[256],[0,255])
plt.plot(histMI)
plt.plot(histImage,color='y')
plt.show()
输出:
在这里插入#直方图均衡化处理
#OpenCV使用函数cv2.equalizeHist()实现直方图均衡化
#------------------导入使用的模块--------------
import cv2
import matplotlib.pyplot as plt
#------------------读取原始图像------------
img=cv2.imread('image/physical.jpeg',0)
#-----------------直方图均衡化处理--------------
equ=cv2.equalizeHist(img)
#----------------显示均衡化前后的图像---------------
cv2.imshow('original',img)
cv2.imshow('result',equ)
#---------------显示均衡化前后的直方图------------
plt.figure('原始图像直方图')#构建窗口
plt.hist(img.ravel(),256)
plt.figure('均衡化结果直方图')#构建新窗口
plt.hist(equ.ravel(),256)
#--------------等待释放窗口------------
cv2.waitKey()
cv2.destroyWindow()代码片
输出:
#编写程序演示函数subplot()的使用
import cv2
import matplotlib.pyplot as plt
img=cv2.imread('image/physical.jpeg',0)
# print(img)
equ=cv2.equalizeHist(img)
plt.figure('subplot示例')
plt.subplot(121),plt.hist(img.ravel(),256)
plt.subplot(122),plt.hist(equ.ravel(),256)
plt.show()
输出:
#使用matplotlib.pyplot.imshow()来显示彩色图像
import cv2
import matplotlib.pyplot as plt
img=cv2.imread('./image/iu.jpeg')
imgRGB=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
plt.figure('显示结果')
plt.subplot(121)
plt.imshow(img),plt.axis('off')
plt.subplot(122)
plt.imshow(imgRGB),plt.axis('off')
plt.show()
#可以看到如下的显示结果,左边是原始图像,,在plt.imshow中默认显示图像的顺序是RGB,所以需要转换BGR为RGB
输出:
#使用函数matplotlib.pyplot.imshow()显示灰度图像
#本例中,尝试使用不同的形式显示灰度图像,观察是否能够正常显示
import cv2
import matplotlib.pyplot as plt
img=cv2.imread('./image/iu.jpeg')
g=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
plt.figure('灰度图像显示演示')
plt.subplot(221)
plt.imshow(img),plt.axis('off')
plt.subplot(222)
plt.imshow(img,cmap=plt.cm.gray),plt.axis('off')
plt.subplot(223)
plt.imshow(g),plt.axis('off')
plt.subplot(224)
plt.imshow(g,cmap=plt.cm.gray),plt.axis('off')
plt.show()
输出:
#使用函数plt.imshow()以不同的参数形式显示灰度图像
import cv2
import matplotlib.pyplot as plt
img=cv2.imread('./image/iu.jpeg')
g=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
plt.figure('灰度图像显示演示')
plt.subplot(221);plt.imshow(g,cmap=plt.cm.gray)
plt.subplot(222);plt.imshow(g,cmap=plt.cm.gray_r)
plt.subplot(223);plt.imshow(g,cmap='gray')
plt.subplot(224);plt.imshow(g,cmap='gray_r')
plt.show()
输出: