OpenCV空间滤波
来源:互联网 发布:mac dns自动获取 编辑:程序博客网 时间:2024/05/22 01:32
滤波是数字图像处理中的基础概念,可以在空间域和频域进行。本文主要讲讲使用OpenCV如何在空间域对图像进行滤波。关于滤波的数学理论,这里不再描述,有很多书籍有详细的介绍。
通俗来讲,滤波就是使用一个滤波器核(就是一个矩阵)对数字图像数据(另一个矩阵)进行处理,处理的过程就是使用滤波器核的中心,分别放在图像的每一个像素上,然后通过中心像素的领域像素,对中心像素进行修改。常见的一种解释,就是把滤波器核当做一块毛玻璃,我们将毛玻璃从图像上滑过,记录下来毛玻璃透过来的图像,这就是我们滤波后的图像。
OpenCV使用filter2D方法对图像进行滤波,为了演示滤波,这里使用三个比较特殊的滤波器核进行实验。还有很多有意思的滤波器,大家可以网上看看。
# use filter2Dimage = cv2.imread(r"pics/lena.png", cv2.IMREAD_GRAYSCALE)kernel1 = np.array([ [-1, -1, -1], [-1, 9, -1], [-1, -1, -1],])image1 = cv2.filter2D(image, -1, kernel1)kernel2 = np.array([ [-1, -1, -1], [-1, 8, -1], [-1, -1, -1],])image2 = cv2.filter2D(image, -1, kernel2)kernel3 = np.array([ [-2, -1, 0], [-1, 1, 1], [0, 1, 2],])image3 = cv2.filter2D(image, -1, kernel3)plt.subplot(232), plt.imshow(image, 'gray'), plt.title('origin')plt.subplot(234), plt.imshow(image1, 'gray'), plt.title('filter1')plt.subplot(235), plt.imshow(image2, 'gray'), plt.title('filter2')plt.subplot(236), plt.imshow(image3, 'gray'), plt.title('filter3')plt.show()
三个滤波器分别如kernel1-3所示,第一个核是锐化核,图像锐化会增强图像的边缘及灰度跳变的部分,第二个核是一个边缘检测核,可以检测图像的边缘,最后一个核会让图像显示出浮雕的效果。
filter2D必须至少传入三个参数,分别代表原图像,结果图像的深度(一个像素数据所占的位数,传递-1表示和原图像采用一样的深度)以及滤波器核。上面的代码运行的结果如图所示:
使用filter2D可以使用任意的核进行滤波,更加灵活。
图像处理领域有一些常用的滤波方式(图像模糊),直接提供了相应的接口。看下面的例子,待处理的图像是Lena图像带有椒盐噪声的图片
# use blur interfaceimage = cv2.imread(r"pics/lena_with_noisy.jpeg", cv2.IMREAD_GRAYSCALE)blur_image = cv2.blur(image, (5, 5))gaussian_image = cv2.GaussianBlur(image, (5, 5), 0.8)median_image = cv2.medianBlur(image, 5)bilateral_image = cv2.bilateralFilter(image, 5, 5, 5)plt.subplot(231), plt.imshow(image, 'gray'), plt.title('lena_with_noisy')plt.subplot(232), plt.imshow(blur_image, 'gray'), plt.title('blur_image')plt.subplot(233), plt.imshow(gaussian_image, 'gray'), plt.title('gaussian_image')plt.subplot(234), plt.imshow(median_image, 'gray'), plt.title('median_image')plt.subplot(235), plt.imshow(bilateral_image, 'gray'), plt.title('bilateral_image')plt.show()
上面的代码分别使用了均值滤波(blur),高斯滤波(GaussianBlur),中值滤波(medianBlur)以及双边滤波(bilateralFilter)。运行效果如图所示:
可以看到,对于去除椒盐噪声,使用均值滤波和中值滤波可以得到比较好的结果,但是高斯滤波和双边滤波则不是很好。
上面接口的参数可以查看OpenCV的接口文档,必须有的参数一般包括原图像和核的尺寸,对于高斯滤波和双边滤波需要添加相应的sigma参数,即标准差,它会直接影响到低通滤波的带宽。
- OpenCV空间滤波
- opencv学习笔记-线性空间滤波
- OpenCV与EmguCV中的空间滤波
- 空间滤波
- 空间滤波
- 空间滤波
- 空间滤波
- 空间滤波
- OPENCV 滤波
- opencv滤波
- opencv 滤波
- OpenCV | 滤波
- opencv滤波
- opencv 滤波
- opencv中值滤波-双边滤波
- OpenCV从入门到放弃(八):空间滤波与边缘检测
- [数字图像处理]空间滤波
- 【matlab】空间滤波
- 《Ruminations on c++》c++ 和 c 的一些区别
- 文件系统
- 数据结构---线性表基本概念
- hdu 1880
- mount一个目录到另外一个目录
- OpenCV空间滤波
- Android之jni解决JNIEnv跨线程问题
- luogu1613 跑路 题解
- 解决Android中getResources().getColor()方法过时的问题
- bat命令中 rem 和 :: 的区别
- map的一个key多个value
- 【leetcode】125. Valid Palindrome(Python & C++)
- ramfs,tmpfs,rootfs,initramfs和romfs
- sizeof有哪些特点以及sizeof的用法