python+opencv图像处理(十四)
完整代码如下:
import cv2 as cv
import matplotlib.pyplot as plt
def his(img,b):#用matplotlib画图
plt.figure("histogram")
plt.title("histogram of lena")
plt.hist(img.ravel(),bins=b)
plt.show()
imge=cv.imread(r'E:\\image\\lenagray.jpg')
img=cv.cvtColor(imge,cv.COLOR_RGB2GRAY)
cv.imshow('lena',img)
his(img,256)
cv.waitKey(0)
cv.destroyAllWindows()
def his(img,bin):#基于opencv API画
hist = cv.calcHist([img],[0],None,[256],[0,255])
plt.plot(hist,'r')
plt.show()
------------------------------代码理解了吗,休息一下吧
------------------------------我是广告开始的分隔线
--------------------------------我是广告结束的分隔线
import cv2 as cv
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.rcParams['font.sans-serif']=['SimHei'] #指定默认字体 SimHei为黑体
mpl.rcParams['axes.unicode_minus']=False #用来正常显示负号
def image_hist(image): #画三通道图像的直方图
color = ('b', 'g', 'r') #这里画笔颜色的值可以为大写或小写或只写首字母或大小写混合
for i , color in enumerate(color):
hist = cv.calcHist([image], [i], None, [256], [0, 256]) #计算直方图
plt.plot(hist, color)
plt.xlim([0, 256])
plt.title("lena的直方图,不同颜色是不同通道")
plt.show()
img=cv.imread(r'E:\\image\\lena.jpg')
cv.imshow('image',img)
image_hist(img)
cv.waitKey(0)
cv.destroyAllWindows()
其完整代码如下:
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.rcParams['font.sans-serif']=['SimHei'] #指定默认字体 SimHei为黑体
mpl.rcParams['axes.unicode_minus']=False #用来正常显示负号
img = cv.imread('E:\\image\\lena.jpg', 0)
# create a mask 应用掩膜
mask = np.zeros(img.shape[:2], np.uint8)#与img大小相同
mask[100:300, 100:400] = 255#部分位置全黑
masked_img = cv.bitwise_and(img, img, mask=mask)#掩膜后的图像,由原图与掩膜相与得到
hist_full = cv.calcHist([img], [0], None, [256], [0,256])#画原图的直方图
hist_mask = cv.calcHist([img], [0], mask, [256], [0,256])#画掩膜的直方图
plt.subplot(221), plt.imshow(img, 'gray'),plt.title("原图")
plt.subplot(222), plt.imshow(mask,'gray'),plt.title("掩膜")
plt.subplot(223), plt.imshow(masked_img, 'gray'),plt.title("掩膜后的图")
plt.subplot(224), plt.plot(hist_full, color='r'), plt.plot(hist_mask, color='b')
plt.title("红色为原图直方图,蓝色为掩膜的直方图")
plt.xlim([0,256])
plt.tight_layout()
plt.show()