直方图的一些术语和细节:
cv2.calcHist(images,channels,mask,histsize,ranges[,hist [accumulate]])
import matplotlib.pyplot as plt
import cv2 as cv
img = cv.imread("/Users/liruiyan/Downloads/IMG_9502.JPG", 0)
hstr = cv.calcHist(img, [0], None, [256], [0, 256])
print(hstr.shape)
# 返回一个矩阵256*1 包含每个灰度值的个数
# 绘制
plt.figure(figsize=(10, 6), dpi=100) # figsize指定宽和高,dpi指定分辨率
plt.plot(hstr) # plot(x, y)y返回一个数组 包含每个点的
plt.grid() # 绘制刻度网格线
plt.show() # 显示
为了得到感兴趣区域
创建合适大小的全黑图像mask = np.zeros(img.shape[:2], np.uint8)
感兴趣区域设置为1(用灰度打开即可),mask[750:2000,750:1400] = 1
与操作并设置掩膜覆盖原图 msk_img = cv.bitwise_and(img, img, mask=mask)
import matplotlib.pyplot as plt
import cv2 as cv
import numpy as np
img = cv.imread("/Users/liruiyan/Downloads/IMG_9502.JPG", 0)
mask = np.zeros(img.shape[:2], np.uint8)
mask[750:2000,750:1400] = 1 # 制作掩膜,y的范围,x的范围
plt.imshow(mask, cmap=plt.cm.gray) # 以灰度方式显示图片
plt.show()
plt.imshow(img,cmap=plt.cm.gray)
plt.show()
msk_img = cv.bitwise_and(img, img, mask=mask) # 与操作,然后设置掩膜 得到目标图片
plt.imshow(msk_img,cmap=plt.cm.gray)
plt.show()
# 返回一个矩阵256*1 包含每个灰度值的个数
# 绘制
hstr = cv.calcHist([msk_img], [0], mask, [255], [0,256])
plt.figure(figsize=(10, 6), dpi=100) # figsize指定宽和高,dpi指定分辨率
plt.plot(hstr) # plot(x, y)y返回一个数组 包含每个点的
plt.grid() # 绘制刻度网格线
plt.show() # 显示
dst = cv.equalizeHist(img)
直方图归一化是让直方图平坦化,与均衡化不同
cv.normalize(src, dst, alpha, beta, norm_type, dtype, mask)
图像分块,然后对每个块儿进行直方图均衡化,如果每块儿的对比度超过预定限制,则将该块儿分配到其他块儿中进行均衡化,随后用双线性插值将块儿与块儿进行拼接
clahe = cv.createCLAHE(clipLimit, tileGridSize)
返回自适应均衡化对象clahe = cv.createCLAHE(clipLimit, tileGridSize)
将对象应用到图片上clahe.apply(img)
img = cv.imread("/Users/liruiyan/Downloads/IMG_9502.JPG", 0)
clahe = cv.createCLAHE(3.0, (8,8))
clahe.apply(img)