opencv3/C++图像滤波实现方式
图像滤波在opencv中可以有多种实现形式
自定义滤波
如使用3×3的掩模:
对图像进行处理.
使用函数filter2D()实现
#include<opencv2/opencv.hpp> using namespace cv; int main() { //函数调用filter2D功能 Mat src,dst; src = imread("E:/image/image/daibola.jpg"); if(!src.data) { printf("can not load image \n"); return -1; } namedWindow("input", CV_WINDOW_AUTOSIZE); imshow("input", src); src.copyTo(dst); Mat kernel = (Mat_<int>(3,3)<<1,1,1,1,1,-1,-1,-1,-1); double t = (double)getTickCount(); filter2D(src, dst, src.depth(), kernel); std::cout<<((double)getTickCount()-t)/getTickFrequency()<<std::endl; namedWindow("output", CV_WINDOW_AUTOSIZE); imshow("output", dst); printf("%d",src.channels()); waitKey(); return 0; }
通过像素点操作实现
#include<opencv2/opencv.hpp> using namespace cv; int main() { Mat src, dst; src = imread("E:/image/image/daibola.jpg"); CV_Assert(src.depth() == CV_8U); if(!src.data) { printf("can not load image \n"); return -1; } namedWindow("input", CV_WINDOW_AUTOSIZE); imshow("input",src); src.copyTo(dst); for(int row = 1; row<(src.rows - 1); row++) { const uchar* previous = src.ptr<uchar>(row - 1); const uchar* current = src.ptr<uchar>(row); const uchar* next = src.ptr<uchar>(row + 1); uchar* output = dst.ptr<uchar>(row); for(int col = src.channels(); col < (src.cols - 1)*src.channels(); col++) { *output = saturate_cast<uchar>(1 * current[col] + previous[col] - next[col] + current[col - src.channels()] - current[col + src.channels()]); output++; } } namedWindow("output", CV_WINDOW_AUTOSIZE); imshow("output",dst); waitKey(); return 0; }
特定形式滤波
常用的有:
blur(src,dst,Size(5,5));均值滤波
GaussianBlur(src,dst,Size(5,5),11,11);高斯滤波
medianBlur(src,dst,5);中值滤波(应对椒盐噪声)
bilateralFilter(src,dst,2,0.5,2,4);双边滤波(保留边缘)
#include<opencv2/opencv.hpp> using namespace cv; int main() { Mat src, dst; src = imread("E:/image/image/daibola.jpg"); CV_Assert(src.depth() == CV_8U); if(!src.data) { printf("can not load image \n"); return -1; } namedWindow("input", CV_WINDOW_AUTOSIZE); imshow("input",src); src.copyTo(dst); //均值滤波 blur(src,dst,Size(5,5)); //中值滤波 //medianBlur(src,dst,5); namedWindow("output", CV_WINDOW_AUTOSIZE); imshow("output",dst); waitKey(); return 0; }
以上这篇opencv3/C++图像滤波实现方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。
您可能感兴趣的文章
- 04-02c语言没有round函数 round c语言
- 01-10深入理解C++中常见的关键字含义
- 01-10使用C++实现全排列算法的方法详解
- 01-10c++中inline的用法分析
- 01-10用C++实现DBSCAN聚类算法
- 01-10全排列算法的非递归实现与递归实现的方法(C++)
- 01-10C++大数模板(推荐)
- 01-10浅谈C/C++中的static与extern关键字的使用详解
- 01-10深入C/C++浮点数在内存中的存储方式详解
- 01-10深入理解C/C++混合编程
阅读排行
本栏相关
- 04-02c语言函数调用后清空内存 c语言调用
- 04-02func函数+在C语言 func函数在c语言中
- 04-02c语言的正则匹配函数 c语言正则表达
- 04-02c语言用函数写分段 用c语言表示分段
- 04-02c语言中对数函数的表达式 c语言中对
- 04-02c语言编写函数冒泡排序 c语言冒泡排
- 04-02c语言没有round函数 round c语言
- 04-02c语言分段函数怎么求 用c语言求分段
- 04-02C语言中怎么打出三角函数 c语言中怎
- 04-02c语言调用函数求fibo C语言调用函数求
随机阅读
- 01-10使用C语言求解扑克牌的顺子及n个骰子
- 08-05DEDE织梦data目录下的sessions文件夹有什
- 08-05织梦dedecms什么时候用栏目交叉功能?
- 01-10C#中split用法实例总结
- 08-05dedecms(织梦)副栏目数量限制代码修改
- 01-10SublimeText编译C开发环境设置
- 01-10delphi制作wav文件的方法
- 04-02jquery与jsp,用jquery
- 01-11Mac OSX 打开原生自带读写NTFS功能(图文
- 01-11ajax实现页面的局部加载