opencv-python(10):图像平滑
2017-10-14 16:32
453 查看
学习使用不同的低通滤波器对图像进行模糊
使用自定义的滤波器对图像进行卷积
1、2D卷积
与信号一样,我们可以对2D图像实施低通滤波(LPF),高通滤波(HPF)等。LPF帮助我们去除噪音,模糊图像。HPF帮助我们找到图像的边缘。
OpenCV提供cv2.filter2D()对图像进行卷积操作。下面我们将对一副图像使用平均滤波器。下面是一个5x5的平均滤波器。
操作如下:将核放在图像的一个像素A上,求与核对应的图像上25(5x5)个像素的和,然后取平均值,用这个平均数代替像素A的值。重复以上操作直到将图像的每个像素值都更新一遍。代码如下:
图像模糊(图像平滑)
使用低通滤波器可以达到图像模糊的目的。这对去除噪音有很大帮助。事实上就是去除图像中的高频部分。所以边界也会被模糊一些。opencv提高了四种模糊技术。
2、平均
这是由一个归一化卷积框完成的。他只是用卷积框覆盖区域所有像素的平均值来代替中心元素。可以使用cv2.blur()和cv2.boxFilter()来完成。
代码:
3、高斯模糊
现在把卷积核换成高斯核。实现的函数是cv2.GaussianBlur()。我们需要知道高斯核的宽和高(必须是奇数)。以及高斯函数沿X,Y方向的标准差。如果我们只制定了X方向的标准差,Y方向也会取同样的值。如果两个标准差都是0,那函数会根据核函数的大小自己计算。高斯滤波可以有效的从图像中去除高斯噪音。
代码:
4、中值模糊
顾名思义就是用与卷积框对应像素的中值来代替中心像素的值。这个滤波器经常用来去除椒盐噪声。前面的滤波器都是用计算得到的新值来取代中心像素的值,而中值滤波用中心像素周围的值来取代他,能有效的去除噪声。卷积核的大小应该是一个奇数。
代码:
5、双边滤波
双边滤波cv2.bilaterFilter()能保持边界清晰的情况下有效的去除噪音。但这种操作相对于其他滤波器会比较慢。
代码:
使用自定义的滤波器对图像进行卷积
1、2D卷积
与信号一样,我们可以对2D图像实施低通滤波(LPF),高通滤波(HPF)等。LPF帮助我们去除噪音,模糊图像。HPF帮助我们找到图像的边缘。
OpenCV提供cv2.filter2D()对图像进行卷积操作。下面我们将对一副图像使用平均滤波器。下面是一个5x5的平均滤波器。
操作如下:将核放在图像的一个像素A上,求与核对应的图像上25(5x5)个像素的和,然后取平均值,用这个平均数代替像素A的值。重复以上操作直到将图像的每个像素值都更新一遍。代码如下:
import cv2 import numpy as np from matplotlib import pyplot as plt img=cv2.imread('C:\\Users\\WLX\\Desktop\\9.jpg',cv2.IMREAD_COLOR) kernel=np.ones((5,5),np.float32)/25 dst=cv2.filter2D(img,-1,kernel) plt.subplot(121),plt.imshow(img),plt.title('Original Image') plt.xticks([]),plt.yticks([]) plt.subplot(122),plt.imshow(dst),plt.title('Average') plt.xticks([]),plt.yticks([]) plt.show()结果:
图像模糊(图像平滑)
使用低通滤波器可以达到图像模糊的目的。这对去除噪音有很大帮助。事实上就是去除图像中的高频部分。所以边界也会被模糊一些。opencv提高了四种模糊技术。
2、平均
这是由一个归一化卷积框完成的。他只是用卷积框覆盖区域所有像素的平均值来代替中心元素。可以使用cv2.blur()和cv2.boxFilter()来完成。
代码:
import cv2 import numpy as np from matplotlib import pyplot as plt img=cv2.imread('C:\\Users\\WLX\\Desktop\\9.jpg',cv2.IMREAD_COLOR) blur=cv2.blur(img,(5,5)) blur2=cv2.boxFilter(img,-1,(5,5)) plt.subplot(131),plt.imshow(img),plt.title('Original Image') plt.xticks([]),plt.yticks([]) plt.subplot(132),plt.imshow(blur),plt.title('Blur') plt.xticks([]),plt.yticks([]) plt.subplot(133),plt.imshow(blur2),plt.title('blur2') plt.xticks([]),plt.yticks([]) plt.show()结果:
3、高斯模糊
现在把卷积核换成高斯核。实现的函数是cv2.GaussianBlur()。我们需要知道高斯核的宽和高(必须是奇数)。以及高斯函数沿X,Y方向的标准差。如果我们只制定了X方向的标准差,Y方向也会取同样的值。如果两个标准差都是0,那函数会根据核函数的大小自己计算。高斯滤波可以有效的从图像中去除高斯噪音。
代码:
import cv2 import numpy as np from matplotlib import pyplot as plt img=cv2.imread('C:\\Users\\WLX\\Desktop\\9.jpg',cv2.IMREAD_COLOR) blur=cv2.GaussianBlur(img,(5,5),0) plt.subplot(121),plt.imshow(img),plt.title('Original Image') plt.xticks([]),plt.yticks([]) plt.subplot(122),plt.imshow(blur),plt.title('Gauss') plt.xticks([]),plt.yticks([]) plt.show()结果:
4、中值模糊
顾名思义就是用与卷积框对应像素的中值来代替中心像素的值。这个滤波器经常用来去除椒盐噪声。前面的滤波器都是用计算得到的新值来取代中心像素的值,而中值滤波用中心像素周围的值来取代他,能有效的去除噪声。卷积核的大小应该是一个奇数。
代码:
import cv2 import numpy as np from matplotlib import pyplot as plt img=cv2.imread('C:\\Users\\WLX\\Desktop\\18.jpg',cv2.IMREAD_COLOR) medianblur=cv2.medianBlur(img,5) plt.subplot(121),plt.imshow(img),plt.title('Original Image') plt.xticks([]),plt.yticks([]) plt.subplot(122),plt.imshow(medianblur),plt.title('median blur') plt.xticks([]),plt.yticks([]) plt.show()结果:
5、双边滤波
双边滤波cv2.bilaterFilter()能保持边界清晰的情况下有效的去除噪音。但这种操作相对于其他滤波器会比较慢。
代码:
import cv2 import numpy as np from matplotlib import pyplot as plt img=cv2.imread('C:\\Users\\WLX\\Desktop\\45.jpg',cv2.IMREAD_COLOR) blur=cv2.bilateralFilter(img,9,75,75) #9是邻域直径,第一个75是空间高斯函数标准差,第二个75是灰度值相似性高斯函数标准韩 plt.subplot(121),plt.imshow(img),plt.title('Original Image') plt.xticks([]),plt.yticks([]) plt.subplot(122),plt.imshow(blur),plt.title('双边 blur') plt.xticks([]),plt.yticks([]) plt.show()结果:
相关文章推荐
- python opencv入门 图像阈值(10)
- Python下opencv使用笔记(五)(图像的平滑与滤波)
- Python语言opencv使用笔记(五)(图像的平滑与滤波)
- Python+OpenCV学习(3)---图像平滑滤波
- python opencv入门 图像平滑(12)
- openCV—Python(9)—— 图像平滑与滤波
- python 简单图像处理(10) 空间域图像平滑
- Python opencv(10)图像的加噪
- openCV—Python(10)—— 图像阈值化处理
- openCV—Python(10)—— 图像阈值化处理
- 【Python】opencv显示图像
- Python3与OpenCV3.3 图像处理(五)--图像运算
- python-opencv在有噪音的情况下提取图像的轮廓实例
- Python&OpenCV - 随机生成图像 与 图像的转维(reshape)
- Python3与OpenCV3.3 图像处理(六)--ROI
- opencv实现频域平滑图像
- opencv-python(12):图像梯度(高通滤波)
- 工作环境搭建(10) - CentOS7安装OpenCV(带Python开发环境)
- opencv无法读取视频解决方法&&抽取视频帧存储为图像(python)
- OpenCV与Python之图像的读入与显示以及利用Numpy的图像转换