降噪及opencv图像处理
降噪及opencv图像处理
然前言
前些天帮一个学长做图像降噪,首先想到的是利用MPI和中值滤波对图像进行处理(因为之前在github上闲逛的时候貌似见过这东西)。
然而这种方法效果并不好,还有和很多限制(比如只能处理pgm灰度图),所以就往opencv的方向考虑了。
MPI及中值滤波
这种方法相对简单,完整的代码点击展开
1 |
|
如果没有安装mpi库,可以把下面的精简版库文件直接导入进项目里:
1 |
|
当然,不用MPI直接中值滤波也行:
1 |
|
这种方法的效果图找不到了,我们只需要要知道,这样的处理效果远不及预期就对了。
Opencv
OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,轻量、高效,总之就是肥肠的好用。
人家的官网安装opencv
在官网上下载opencv最新的windows发行版下载exe文件。很不幸的是,它的发行版是在github上的,如果下载的太慢,可以用我上传到onedrive上的发行版(github源文件,无任何修改)。我的onedrive分享。
下载完可以验证一下哈希值bff38466091c313dac21a0b73eea8278316a89c1d434c6f0b10697e087670168
。然后直接安装就行。
配置环境变量
点击展开
打开系统信息
,找到高级系统设置
点击环境变量
在系统变量
里选中path
,点击编辑
选择新建
然后到刚刚opencv的安装目录,找到\bin
文件夹,注意有两个bin文件夹,不要搞错。例如:我将opencv安装在了E盘的名为opencv的文件夹里,那么正确的bin文件夹地址应该是E:\opencv\opencv\build\x64\vc16\bin
。将这个地址填进刚刚新建的环境变量里,确定即可。
最后检验是否安装成功:
在cmd里输入opencv_version
,若输出为版本号,即安装成功。
1 | C:\Users\33167>opencv_version |
Visual Studio里相关配置
点击展开
新建一个需要使用opencv的项目,假如名为opencv。在顶上项目
中找到opencv属性
选择vc++目录
,注意,请确保此时上面两栏分别为release
和x64
选择编辑
右上角文件夹一样的图标可以新增行数,在新增的行里像我这样填就可以,只需要把我的E:\opencv
换成自己的安装目录就行:
库目录同理:
最后,在链接器
-输入
-附加依赖项
里加入如图的东西就大功告成
最后,请确保在项目运行和调试时。顶部始终是release
和x64
可以写一个简单的项目检验opencv是否正常运作:
1 |
|
这个代码的作用是显示一张图像。
opencv图像降噪
opencv高斯模糊
这应该是最简单暴力的降噪方式了……
1 |
|
非常的简单,核心部分就是应用高斯模糊的部分:
1 | cv::GaussianBlur(input_image, output_image, cv::Size(5, 5), 0); |
点击展开效果图
为了让效果更加明显,可以增大高斯核,从原来的5x5改成25x25:
1 | cv::GaussianBlur(input_image, output_image, cv::Size(25, 25), 0); |
点击展开效果图
高斯模糊虽然能有效的降低图像的噪点,但会抹去大量的原图细节。
如果要做到平衡降噪和图片清晰度,单纯的高斯模糊显然不是最优解。
opencv中值滤波
依旧是中值滤波,只不过这次换成了通过opencv来进行这个操作而已。
1 |
|
其中的核心是cv中值滤波函数
1 | void medianFilter(cv::Mat& input, cv::Mat& output) { |
点击展开效果图
中值滤波总体而言表现还不错。
opencv双边滤波
……懒得放图了,反正这个效果是最好的。
基于opencv的运动检测
代码如下:
1 |
|
上述代码实现了简单的运动检测功能,能将运动物体的轮廓在另一个窗口中显示出来。
其中VideoCapture cap(0);
调用的是电脑自带的默认摄像头,如果希望使用usb摄像头,可以改为VideoCapture cap(1)
或者VideoCapture cap(2)
.