实验二、OpenCV图像滤波
一、题目描述
对下面的图片进行滤波和边缘提取操作,请详细地记录每一步操作的步骤。

滤波操作可以用来过滤噪声,常见噪声有椒盐噪声和高斯噪声,椒盐噪声可以理解为斑点,随机出现在图像中的黑点或白点;高斯噪声可以理解为拍摄图片时由于光照等原因造成的噪声。
二、实现过程
1.加载原图
import cv2
#加载图片
img=cv2.imread("test14.bmp",0)
imgzi = cv2.putText(img, 'original', (40,25),cv2.FONT_HERSHEY_SIMPLEX, 1, (255,0, 0), 2)
#显示图片
cv2.imshow('canny', img)
key = cv2.waitKey(0)
if key==27: #按esc键时,关闭所有窗口
print(key)
cv2.destroyAllWindows()
2.均值滤波
均值滤波是一种最简单的滤波处理,它取的是卷积核区域内元素的均值,用cv2.blur()实现,如3×3的卷积核:
mg=cv2.imread("test14.bmp",0)
blur = cv2.blur(img, (3, 3)) # 均值模糊
imgzi = cv2.putText(img, 'averagefilter ', (40,25),cv2.FONT_HERSHEY_SIMPLEX, 1, (255,0, 0), 2)
3.中值滤波
中值又叫中位数,是所有数排序后取中间的值。中值滤波就是用区域内的中值来代替本像素值,所以那种孤立的斑点,如0或255很容易消除掉,适用于去除椒盐噪声和斑点噪声。中值是一种非线性操作,效率相比前面几种线性滤波要慢。
img = cv2.imread('test14.bmp', 0)
均值滤波vs中值滤波
median = cv2.medianBlur(img, 5) # 中值滤波
imgzi = cv2.putText(img, 'medianfilter ', (40,25),cv2.FONT_HERSHEY_SIMPLEX, 1, (255,0, 0), 2)
4.高斯滤波

OpenCV中对应函数为cv2.GaussianBlur(src,ksize,sigmaX):
img = cv2.imread('test14.bmp')
#高斯滤波
gaussian = cv2.GaussianBlur(img, (5, 5), 1) # 高斯滤波
imgzi = cv2.putText(img, 'gaussfilter ', (40,25),cv2.FONT_HERSHEY_SIMPLEX, 1, (255,0, 0), 2)
5.高斯边缘检测
原理:首先对图像做高斯滤波,然后再求其拉普拉斯(Laplacian)二阶导数。
即图像与 Laplacian of the Gaussian function 进行滤波运算。
最后,通过检测滤波结果的零交叉(Zero crossings)可以获得图像或物体的边缘。
因而,也被简称为Laplacian-of-Gaussian (LoG)算子。
在第一步的基础上,可以通过拉普拉斯边缘检测来实现这一功能。Laplacian函数简介:dst = cv.Laplacian(src, ddepth[, dst[, ksize[, scale[, delta[, borderType]]]]])。
import cv2
import numpy as np # Load the image in greyscale
img = cv2.imread('test14.bmp',0) # Apply Gaussian Blur
blur = cv2.GaussianBlur(img,(3,3),0) # Apply Laplacian operator in some higher datatype
laplacian = cv2.Laplacian(blur,cv2.CV_64F,5)
三、运行结果(效果)




四、问题及解决方法
老师给的第五步gauss边缘检测没有搜索到相关的资料,最后我查阅了官方文档,上面的GAUSS指高斯---拉普拉斯算法。我查阅了资料,完成了此次作业。解决方法:进行laplacian边缘检测得以实现。
Puttext函数不能输出中文,解决方法:使用英文输出
五、实验总结
我们要合理运用网络资源,特别时官方文档,学会查阅资料。
实验二、OpenCV图像滤波的更多相关文章
- CUDA二维纹理内存+OpenCV图像滤波
CUDA和OpenCV混合编程,使用CUDA的纹理内存,实现图像的二值化以及滤波功能. #include <cuda_runtime.h> #include <highgui/hig ...
- OpenCV成长之路:图像滤波
http://ronny.blog.51cto.com/8801997/1394138 OpenCV成长之路:图像滤波 2014-04-11 14:28:44 标签:opencv 边缘检测 sobel ...
- opencv学习之路(12)、图像滤波
一.图像滤波简介 二.方框滤波——boxFilter() #include<opencv2/opencv.hpp> using namespace cv; void main(){ Mat ...
- opencv第三课,图像滤波
1.介绍 OpenCV图像处理技术中比较热门的图像滤波操作主要被分为了两大类:线性邻域滤波和非线性滤波.线性邻域滤波常见的有“方框滤波“,”均值滤波“和”高斯滤波“三种,二常见的非线性滤波主要是中值滤 ...
- 图像滤波与OpenCV中的图像平滑处理
.About图像滤波 频率:可以这样理解图像频率,图像中灰度的分布构成一幅图像的纹理.图像的不同本质上是灰度分布规律的不同.但是诸如"蓝色天空"样的图像有着大面积近似的灰度强度,而 ...
- 第十三节,OPenCV学习(二)图像的简单几何变换
图像的简单几何变换 几何变换不改变图像的像素值,只是在图像平面上进行像素的重新安排 适当的几何变换可以最大程度地消除由于成像角度.透视关系乃至镜头自身原因所造成的几何失真所产生的的负面影响. 一.图像 ...
- CV_图像滤波[转]---python+opencv均值滤波,高斯滤波,中值滤波,双边滤波
1.图像滤波算法(cv2) https://blog.csdn.net/qq_27261889/article/details/80822270 2.
- OpenCV3入门(六)图像滤波
1.图像滤波理论 1.1图像滤波理论 图像滤波即在尽量保留图像细节特征的条件下对目标图像的噪声进行抑制,是图像预处理中不可缺少的操作.消除图像中的噪声又叫做图像滤波或平滑,滤波的目的有两个,一是突出特 ...
- opencv图像特征检测之斑点检测
前面说过,图像特征点检测包括角点和斑点,今天来说说斑点,斑点是指二维图像中和周围颜色有颜色差异和灰度差异的区域,因为斑点代表的是一个区域,所以其相对于单纯的角点,具有更好的稳定性和更好的抗干扰能力. ...
随机推荐
- SaltStack的数据系统
一.SaltStack数据系统的分类 1.Grains(收集的是静态数据) 官方使用文档:https://www.unixhot.com/docs/saltstack/topics/targeting ...
- mac OS 安装破解 Navicat Premium
Navicat Premium for mac V12.0.24 中文破解版 下载地址 https://www.cnblogs.com/huihuizhang/p/9889780.html 由于新版本 ...
- 如何在github上递交高质量的pull request
开源的一大乐趣就是任何人都可以参与其中.试想下一个流行的项目就有你贡献的代码,是一件多么爽的事情!你可以帮助项目健康发展,添加你希望添加的功能,以及修复你发现的BUG. 作为全球最大的开源社区GitH ...
- 前端存储 (5) - service worker 离线存储
service worker 离线存储 简介: 一般的网站 在我们无法访问的 时候 一般 回出现 如下 该网页无法访问 service worker 构建的网站不会出现这个错误,因为所有的 请求都是先 ...
- 数据库SQL语言从入门到精通--Part 2--MySQL安装
数据库从入门到精通合集(超详细,学习数据库必看) 首先给出的简单安装方式,文末给出标准的安装方式. 第一步下载我的压缩包 链接:https://pan.baidu.com/s/1EE40dU0j2U1 ...
- 慎用ToLower和ToUpper,小心把你的系统给拖垮了
不知道何时开始,很多程序员喜欢用ToLower,ToUpper去实现忽略大小写模式的字符串相等性比较,有可能这个习惯是从别的语言引进的,大胆猜测下是JS,为了不引起争论,我指的JS是技师的意思~ 一: ...
- Idea中查看一个类的所有资料及其层级关系
在Idea中直接Ctrl + t 查看类的子类是可以看到,但是他没有那种层级顺序! 我们可以在类中点击顶部菜单Navigate -----> Type Hierarchy
- 微软关于LINQ的101个例子
记录,备查. 101 LINQ Sqmples
- 记录关于Android多线程的一个坑
最近在写项目的时候由于联网用得比较频繁,就简单地封装了一个工具类,省得每次联网得时候都要把联网配置写一遍,代码如下: public class okhttp_plus { public static ...
- scala 中 Any、AnyRef、Object、AnyVal 关系
Any,是 scala 中的抽象类,不能实例化 AnyRef 继承于 Any,它是一个 trait AnyVal 继承于 Any,它是一个抽象类,目的是消除基本类型,scala中只有引用类型,仅此作用 ...