0


基于OpenCV的传统视觉应用 -- OpenCV图像处理 图像模糊处理 图像锐化处理

图像处理

图像处理是用计算机对图像进行分析,以获取所需结果的过程,又称为影像处理。图像处理一般是指数字图像的处理。数字图像是用工业相机、摄像机、扫描仪等设备经过拍摄得到的一个大的二维数组,该数组的元素称为像素,其值称为灰度值。

图像模糊

均值滤波

均值滤波是指任意一点的像素值,都是周围 NxM 个像素值的均值。
指通过将图像与低通滤波器内核进行卷积来实现图像模糊,这对于消除噪声很有用。

OpenCv里可以用cv2.blur(img,(3,3)) 函数实现图像的均值滤波。
第二个参数(3,3)称为滤波核。

中值滤波

在使用邻域平均法去噪的同时也使得边界变得模糊。而中值滤波是非线性的图像处理方法,在去噪的同时可以兼顾到边界信息的保留。选一个含有奇数点的窗口W,将这个窗口在图像上扫描,把窗口中所含的像素点按灰度级的升或降序排列,取位于中间的灰度值来代替该点的灰度值。

OpenCV里可以使用cv2.medianBlur(img,3)函数来实现
3为简写方式 ,与(3,3)是一样的。

高斯滤波

为了克服简单局部平均法的弊端(图像模糊),目前已提出许多保持边缘、细节的局部平滑算法。它们的出发点都集中在如何选择邻域的大小、形状和方向、参数加平均及邻域各店的权重系数等。

图像高斯平滑也是邻域平均的思想对图像进行平滑的一种方法,在图像高斯平滑中,对图像进行平均时,不同位置的像素被赋予了不同的权重。高斯平滑与简单平滑不同,它在对邻域内像素进行平均时,给予不同位置的像素不同的权值

cv2.GaussianBlur(source,(3,3),0)
第一个参数为图像对象
第二个参数为滤波核
第三个参数0为高斯核标准差

实例

import cv2
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.rcParams['font.sans-serif']=['SimHei']# 指定默认字体为黑体
mpl.rcParams['axes.unicode_minus']=False# 正常显示负号# 均值滤波
img = cv2.imread('./dog.jpg',0)# 第二个参数0 是设置为灰度图用的
blur = cv2.blur(img,(5,5))# 显示图像
plt.subplot(1,2,1)
plt.imshow(img,'gray')
plt.title("zaosheng")
plt.subplot(1,2,2)
plt.imshow(blur,'gray')
plt.title("blur")
plt.show()# 中值滤波
img = cv2.imread("./dog.jpg",0)
dst = cv2.medianBlur(img,(5))# 卷积核大小为5# 显示图像
plt.subplot(1,2,1)
plt.imshow(img,"gray")
plt.title("zaosheng")
plt.subplot(1,2,2)
plt.imshow(dst,'gray')
plt.title("medianBlur")
plt.show()# 高斯滤波
img = cv2.imread("./dog.jpg",0)
m_dst = cv2.medianBlur(img,(5))
g_dst = cv2.GaussianBlur(img,(5,5),0)# 高斯核为5*5# 显示图像
plt.subplot(1,3,1), plt.imshow(img,'gray')
plt.title("zaosheng")
plt.subplot(1,3,2), plt.imshow(g_dst,'gray')
plt.title('高斯')
plt.subplot(1,3,3), plt.imshow(m_dst,'gray')
plt.title('medianBlur')
plt.show()

均值滤波

在这里插入图片描述
中值滤波
在这里插入图片描述
高斯滤波:
在这里插入图片描述

图像锐化

图像锐化是补偿图像的轮廓,以及增强图像的边缘和灰度跳变的部分,使图像变得清晰的操作,分为空间域处理和频处理两类。
图像锐化的目的是突出图像地物的边缘、轮廓,或者某些线性目标要素的特征。这邪恶滤波方法增强了地物边缘与周围像元之间的反差,因此也称为边缘增强。

import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.rcParams['font.sans-serif']=['SimHei']
dog = cv.imread("./dog.jpg",0)# plt.imshow(dog, 'gray')# plt.title("灰度图")# plt.show()

dog_f = np.copy(dog)
dog_f = dog_f.astype("float")# plt.imshow(dog_f, "gray")# plt.title('灰度图2')# plt.show()

row, column = dog.shape
gradient = np.zeros((row, column))for x inrange(row-1):for y inrange(column-1):
        gx =abs(dog_f[x+1, y]-dog_f[x, y])# 通过相邻像素相减计算图像梯度
        gy =abs(dog_f[x, y+1]-dog_f[x, y])
        gradient[x, y]= gx + gy

# plt.imshow(gradient, 'gray')# plt.title("梯度图")# plt.show()# 叠加原图和梯度图 就能够实现图像锐化# 将小于0 的像素设置为0 将大于255的像素设置为255

sharp = dog_f + gradient
sharp = np.where(sharp <0,0, np.where(sharp >255,255, sharp))# 显示图像
gradient = gradient.astype("uint8")
sharp = sharp.astype("uint8")

plt.subplot(2,2,1), plt.imshow(dog), plt.title("原图")
plt.subplot(2,2,2), plt.imshow(dog_f,"gray"), plt.title("灰度图")
plt.subplot(2,2,3), plt.imshow(gradient,"gray"), plt.title("梯度图")
plt.subplot(2,2,4), plt.imshow(sharp,"gray"), plt.title("锐化图")
plt.show()

在这里插入图片描述


本文转载自: https://blog.csdn.net/fuhao6363/article/details/129654385
版权归原作者 冲鸭嘟嘟可 所有, 如有侵权,请联系我们删除。

“基于OpenCV的传统视觉应用 -- OpenCV图像处理 图像模糊处理 图像锐化处理”的评论:

还没有评论