21图像直方图

图像直方图函数

calcHist(images, channels, mask,histSize, ranges[,hist[, accumulate]]) ->hist

images表示图像

channels表示通道

mask 默认None

histSzie表示bin的个数,灰度等级

ranges表示通道的取值范围

函数返回的直方图数据类型为np.float32

1
2
3
4
5
6
7
8
9
10
11
12
13
#21图像直方图
def image_hist():
image = cv.imread("123.jpg")
cv.imshow("input", image)
color = ('blue', 'green', 'red')
for i,color in enumerate(color):
hist = cv.calcHist([image], [i], None, [32], [0,256])
print(hist.dtype)
plt.plot(hist,color = color)
plt.xlim([0,32])
plt.show()
cv.waitKey(0)
cv.destroyAllWindows()

22直方图均衡化

均衡化作用

​ •提升对比度

​ •灰度图象支持

所谓均衡化就是减少Bin数量进而扩大各范围的差距

直方图均衡化函数

cv.equalizeHist(src[, dst]) ->dst

src必须是八位单通道图像*

dst返回结果图像,类型与src保持一致

彩色直方图均衡化可以先转换到HSV空间然后对V通道均衡化(只对亮度通道增强)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#22直方图均衡化
def hist_equ():
image = cv.imread("123.jpg",cv.IMREAD_GRAYSCALE)
cv.imshow("input",image)
hist = cv.calcHist([image], [0], None, [32], [0,256])
print(hist.dtype)
plt.plot(hist,color = "gray")
plt.xlim([0,32])
plt.show()
cv.waitKey(0)

eqimg = cv.equalizeHist(image)
hist = cv.calcHist([eqimg], [0], None, [32], [0,256])
print(hist.dtype)
plt.plot(hist, color = "gray")
plt.xlim([0,32])
plt.show()
cv.waitKey(0)
cv.destroyAllWindows()

23图像卷积操作

卷积的本质是线性组合。

图像卷积定义

卷积的边缘填充

•边缘处理,边缘填充的方式

•(1)cv.BORDER_DEFAULT gfedcb|abcdefgh|gfedcba

•(2)cv.BORDER_WRAP cdefgh|abcdefgh|abcdefg

•(3)cv.BORDER_CONSTANT iiiiii|abcdefgh|iiiiiii

卷积模糊函数

cv.blur( src,ksize[, dst[, anchor[,borderType]]]) ->*dst

​ •src表示输入图像 CV_8U, CV_32F or CV_64F*

​ •Ksize卷积核大小

​ •Anchor锚定位置(被平滑的点),默认值(-1,-1),如果这个点坐标是负值的话,就表示取核的中心为锚点

​ •borderType边缘处理方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#23图像卷积操作
def conv_demo():
image = cv.imread("123.jpg")
dst = np.copy(image)
cv.imshow("input",image)
h, w, c = image.shape
for row in range(1, h-1, 1):
for col in range(1, w-1, 1):
m = cv.mean(image[row-2:row+2, col-2:col+2])
dst[row, col] = (int(m[0]), int(m[1]), int(m[2]))
cv.imshow("convolution-demo", dst)

# blured = cv.blur(image, (5,5), anchor=(-1, -1)) #修改Ksize数值调整模糊程度
# cv.imshow("blur-demo", blured)

cv.waitKey(0)
cv.destroyAllWindows()

24高斯模糊

用高斯公式产生高斯卷积核

卷积核根据高斯函数生成,权重系数不同

高斯函数

cv.GaussianBlur(src, ksize, sigmaX[, dst[, sigmaY[, borderType]]]) ->dst

​ •ksize必须是正数而且是奇数(中心对称)

​ •sigmaX高斯核函数X方向标准方差

​ •sigmaY高斯核函数Y方向标准方差,默认0,表示跟sigmaX相同

​ •ksize==0表示从sigmaX计算生成ksize

​ •ksize >0 表示从ksize计算生成sigmaX,此时无视signaX所给的值

1
2
3
4
5
6
7
8
9
10
11
#24高斯模糊
def gaussian_blur_demo():
image = cv.imread("123.jpg")
cv.imshow("input",image)
g1 = cv.GaussianBlur(image, (0, 0), 15)
g2 = cv.GaussianBlur(image, (15, 15), 15)
cv.imshow("GaussianBlur-demo1", g1)
cv.imshow("GaussianBlur-demo2", g2)

cv.waitKey(0)
cv.destroyAllWindows()