opencv十四天入门学习——task6

前言

本次学习我学习了解了图像直方图、直方图均衡化操作、图像卷积、均值模糊高斯模糊相关知识点,初步了解了原理后,我熟悉opencv的库函数然后进行了实践,对这些知识有了更加直观的认识,通过本次学习我对于opencv图像相关知识有了更多的了解。

1、图像直方图

图像直方图是描述图像的各个灰度级的统计特性,它是图像灰度值的函数,统计图像中各个灰度级出现的次数。

图像直方图函数:calcHist(images, channels, mask, histSize, ranges[, hist[, accumulate]]) -> hist
images表示图像,channels表示通道,mask 默认None,histSzie表示bin的个数,ranges表示通道的取值范围。

实验代码:

import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt

image = cv.imread("apple.jpg")
image = cv.cvtColor(image, cv.COLOR_BGR2HSV)
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()

实验结果:
在这里插入图片描述

2、图像直方图均衡化

直方图均衡化是一种简单有效的图像增强技术,通过改变图像的直方图来改变图像中各像素的灰度,主要用于增强动态范围偏小的图像的对比度。直方图均衡化处理的中心思想是把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。直方图均衡化原理计算有一篇讲的不错的博客: https://blog.csdn.net/qq_42593220/article/details/103227609

直方图均衡化函数:cv.equalizeHist(src[, dst]) -> dst
src必须是八位单通道图像
dst返回结果图像,类型与src保持一致

实验代码:

import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt

image = cv.imread("apple.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)
cv.imshow("eq", eqimg)
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)
cv.destroyAllWindows()

实验结果:
在这里插入图片描述

3、图像卷积

图像的卷积过程可以看成一个卷积模板在一幅的图像上移动,然后对每个卷积模板覆盖的区域对应位乘积并求和,以得到中心像素的输出值。本质是线性组合,卷积核指系数跟窗口大小,锚定位置指锚定输出像素点。
在这里插入图片描述

卷积模糊函数:
cv.blur( src, ksize[, dst[, anchor[, borderType]]]) -> dst
src表示输入图像 CV_8U, CV_32F or CV_64F
Ksize卷积核大小
Anchor锚定位置
borderType边缘处理方式

实验代码:

import cv2 as cv
import numpy as np

image = cv.imread("apple.jpg")
cv.imshow("apple",image)
dst = np.copy(image)
h, w, c = image.shape
for row in range(1, h-1, 1):
    for col in range(2, 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))
cv.imshow("blur-demo", blured)
cv.waitKey(0)
cv.destroyAllWindows()

实验结果:
在这里插入图片描述

4、高斯模糊

高斯模糊常用来减少图像噪声以及降低细节层次,相比于均值模糊, 高斯模糊根据高斯函数来分配卷积系数的权重。
在这里插入图片描述
高斯函数:
cv.GaussianBlur(src, ksize, sigmaX[, dst[, sigmaY[, borderType]]]) ->dst
ksize必须是正数而且是奇数
sigmaX高斯核函数X方向标准方差
sigmaY高斯核函数Y方向标准方差,默认0,表示跟sigmaX相同,
ksize为0表示从sigmaX计算生成ksize,
ksize大于0表示从ksize计算生成sigmaX,

实验代码:

import cv2 as cv
import numpy as np

image = cv.imread("apple.jpg")
cv.imshow("apple", 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()

实验结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

独孤西

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值