Qt加OpenCV构建二维图像处理界面(3)
均值滤波
今天终于搞完了实验室老板分配给我的相机任务,剩下的就只需要写写技术文档喝喝茶了。爽。
今天要写的一个算法是均值滤波
原理
在vs上面测试代码
测试结果
当选择3*3的滤波模板时:
这是原图:
这是滤波后的图:
这是运行时间:
当选择7*7的滤波模板时:
这是原图:
这是滤波后的图:
这是运行时间:
既然在vs下面测试好了,那么接下来就是怎么在Qt里面写了。这个跟之前写的有些不同。之前的算法大家看到了都是只有一个输入跟一个输出,换句话说就是给一个原图src,经过算法处理后得到结果图dst。但是均值滤波里面有两个输入,一个是原图src,另外一个是滤波核的大小。而且这个滤波核的大小是可变的。那么如何实现这个功能呢?通过改变不同的滤波核的大小,来改变均值滤波后的效果。在参考了一去二三里大佬的博客后,博客链接为:https://blog.****.net/liang19890820/article/details/52299600
我觉得可以用Qt中的QSlider来实现,具体来说就是QSlider每次变动,我都发射一个信号,让主界面的ShowMeanFilter()函数响应,来动态刷新实现上面说的这个功能。
那么具体该怎么操作呢?
先建立一个对话框类
接下来是meanfilterdlg.h跟meanfilterdlg.cpp的代码了。如下:
这就是Qt在窗体间传值或者传信号,应该没有什么好讲的,Test()这个槽函数是为了当改变slider的值的时候,发射Signal1()函数让主界面的槽函数ShowMeanFilterPic()响应显示滤波后的图像。
然后是mainwindow.h跟.cpp了:
这是菜单栏的槽函数(目的是打开一个对话框):
这是响应对话框slider改变的槽函数:
好,到此为止大功告成!
下面来测试: