python-opencv(15):直方图(2)

1.掩膜直方图

首先生成掩膜图像:

mask=np.zeros(images.shape,np.uint8)
mask[200:400,200:400]=255
dst=cv2bitwise_and(img,mask)

程序示例:

import cv2
import numpy as np
import matplotlib.pyplot as plt

img=cv2.imread("lena.bmp",cv2.IMREAD_UNCHANGED)
m=np.zeros(img.shape,np.uint8)
m[200:400,200:400]=255
hist0=cv2.calcHist([img],[0],m,[256],[0,255])
hist1=cv2.calcHist([img],[0],None,[256],[0,255])
plt.plot(hist0,color='r')
plt.plot(hist1,color='b')
plt.show()

结果:

2. 直方图均衡化

语法:

dst=cv2.equalizeHist(src)

程序示例:

import numpy as np
import matplotlib.pyplot as plt
import cv2
img=cv2.imread("boat.bmp",cv2.IMREAD_UNCHANGED)
result=cv2.equalizeHist(img)
hist0=cv2.calcHist([img],[0],None,[256],[0,255])
hist1=cv2.calcHist([result],[0],None,[256],[0,255])
cv2.imshow("original",img)
cv2.imshow("result",result)
plt.plot(hist0,color='r')
plt.plot(hist1,color='b')
plt.show()
cv2.waitKey()
cv2.destroyAllWindows()

结果:

3.subplot函数使用

plt.subplot(nrows,ncols,plot_number)
plot_number:当前窗口序号

程序示例:

import numpy as np
import matplotlib.pyplot as plt
import cv2
img=cv2.imread("boat.bmp",cv2.IMREAD_UNCHANGED)
result=cv2.equalizeHist(img)
hist0=cv2.calcHist([img],[0],None,[256],[0,255])
hist1=cv2.calcHist([result],[0],None,[256],[0,255])
plt.subplot(1,2,1),plt.plot(hist0,color='r')
plt.subplot(1,2,2),plt.plot(hist1,color='b')
plt.show()
cv2.waitKey()
cv2.destroyAllWindows()

 结果:

 4.matplotlib.pyplot.imshow

(1)imshow显示灰度图

import numpy as np
import matplotlib.pyplot as plt
import cv2
img=cv2.imread("1.png",cv2.IMREAD_UNCHANGED)
result=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
#错误示例
plt.subplot(2,2,1)
plt.imshow(img),plt.axis('off')
plt.subplot(2,2,2)
plt.imshow(img,cmap=plt.cm.gray),plt.axis('off')
plt.subplot(2,2,3)
plt.imshow(result),plt.axis('off')
#正确示例
plt.subplot(2,2,4)
plt.imshow(result,cmap=plt.cm.gray),plt.axis('off')
plt.show()

结果:

(2)显示彩色图像

import numpy as np
import matplotlib.pyplot as plt
import cv2
img=cv2.imread("1.png",cv2.IMREAD_UNCHANGED)
b,g,r=cv2.split(img)
img2=cv2.merge([r,g,b])
plt.subplot(1,2,1)
plt.imshow(img),plt.axis('off')
plt.subplot(1,2,2)
plt.imshow(img2),plt.axis('off')
plt.show()

 结果:

5.复习代码

import numpy as np
import matplotlib.pyplot as plt
import cv2
img=cv2.imread("boat.bmp",cv2.IMREAD_UNCHANGED)
equ=cv2.equalizeHist(img)
plt.subplot(2,2,1),plt.imshow(img,cmap=plt.cm.gray),plt.axis('off')
plt.subplot(2,2,2),plt.imshow(equ,cmap=plt.cm.gray),plt.axis('off')
hist0=cv2.calcHist([img],[0],None,[256],[0,255])
hist1=cv2.calcHist([equ],[0],None,[256],[0,255])
plt.subplot(2,2,3),plt.plot(hist0,color='r')
plt.subplot(2,2,4),plt.plot(hist1,color='r')
plt.show()

猜你喜欢

转载自blog.csdn.net/Mr_zhuzj/article/details/82228834