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()
|