计算机视觉(一)

文章目录

    • 一、安装和配置Python+opencv
    • 二、 直方图
      • 2.1 基本原理
      • 2.2 代码实现
    • 三、高斯滤波
      • 3.1 基本原理
      • 3.2 代码实现
    • 四、直方图均衡化
      • 4.1 基本原理
      • 4.2 代码实现
    • 五、总结

一、安装和配置Python+opencv

具体方式网上都有,因此不在此做过多描述。
通过使用opencv,验证配置成功。
计算机视觉(一)_第1张图片

二、 直方图

2.1 基本原理

图像直方图是用一表示数字图像中亮度分布的直方图,标绘了图像中每个亮度值的像素数。这种直方图中,横坐标的左侧为纯黑、较暗的区域,而右侧为较亮、纯白的区域。
而灰度直方图则是表示不同灰度值在该图像里的分布,以横轴表示像素值,纵轴表示对应像素值的数量
直方图失去图像的坐标信息。

2.2 代码实现

使用matplotlib绘制直方图

import cv2
import matplotlib.pyplot as plt

img = cv2.imread("E://img1.jpg")
reim = cv2.resize(img,dsize=(600,480))

cv2.imshow("test",reim)

plt.hist(reim.ravel(), 256)  # ravel()是numpy里的函数,将多维数组转换为一维数组

plt.show()
cv2.waitKey()

计算机视觉(一)_第2张图片

三、高斯滤波

3.1 基本原理

高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。因此虽然能消除噪声,但也不可避免的产生了图像模糊的后果。二维高斯分布如下:
在这里插入图片描述

3.2 代码实现

使用opencv的函数cv2.GaussianBlur,并设置模板大小

gsim = cv2.GaussianBlur(reim, (5, 5), 0)
plt.subplot(1,2,1)
reim=cv2.cvtColor(reim,cv2.COLOR_BGR2RGB)
plt.title("origin")
plt.imshow(reim)
plt.subplot(1,2,2)
gsim=cv2.cvtColor(gsim,cv2.COLOR_BGR2RGB)
plt.title("gaussian")
plt.imshow(gsim)

将其输出,发现确实经过滤波后变得模糊
计算机视觉(一)_第3张图片

四、直方图均衡化

4.1 基本原理

直方图均衡化就是对图像进行非线性拉伸,重新分配图像像素值,使一定灰度范围内的像素数量大致相同。其定义与实现效果见下图:
计算机视觉(一)_第4张图片

4.2 代码实现

在此主要展示灰度图像的直方图均衡化,使用函数cv2.equalizeHist 即可。对于彩色图像,将彩色图像先用split()方法,将三个通道拆分,然后分别进行均衡化.最后使用merge()方法将均衡化之后的三个通道进行合并,原理同灰度相同,故不过多展示。

gray=cv2.cvtColor(reim,cv2.COLOR_BGR2GRAY)

plt.subplot(2,2,1)
gray1=cv2.cvtColor(gray, cv2.COLOR_BGRA2RGB)
plt.imshow(gray1)
plt.subplot(2,2,2)
plt.hist(gray1.ravel(),256)
plt.subplot(2,2,3)
equal = cv2.equalizeHist(gray)
equal1=cv2.cvtColor(equal, cv2.COLOR_BGRA2RGB)
plt.imshow(equal1)
plt.subplot(2,2,4)
plt.hist(equal1.ravel(), 256)

结果如下。对比图像直方图可以看到,经过直方图均衡化后直方图分布更均匀,图像也更加的明亮
计算机视觉(一)_第5张图片

五、总结

本次实验内容与上学去所学的数字图像处理内容相似,且opencv之前在C++中也使用过,函数比较熟悉。但是在python中用matplotlib输出BGR图像还是有一番费劲的。这是本课程第一次实验,后续继续加油吧。

你可能感兴趣的:(计算机视觉,计算机视觉,opencv,python)