Opencv的使用小教程2——Opencv常用图像处理函数汇总

  • 1、blur
  • 2、GaussianBlur
  • 3、medianBlur
  • 4、bilateralFilter
  • 5、腐蚀和膨胀
  • 6、morphologyEx高级形态学变换
  • 7、convertScaleAbs图像增强
  • 8、Sobel
  • 9、Laplacian
  • 10、Scharr
  • 11、Canny

好好学习噢!

该部分主要提到的函数包括各种滤波、膨胀、腐蚀、开运算、闭运算等。
本次博文将以Lena图作为使用例子进行演示。

1、blur

blur用于图像的均值滤波,调用方式如下:

blur(src, dst, Size(3, 3));

其中,src为源图,dst为目标图,Size(3, 3)表示每个滤波器窗口的大小。
具体应用方式如下:

int main() {Mat src = imread("./Lena.jpg");imshow("before", src);Mat dst;blur(src, dst, Size(3, 3));imshow("blur", dst);imwrite("after.jpg", dst);while (waitKey(1) != '1') {}
}

应用结果为:

2、GaussianBlur

GaussianBlur用于图像的高斯滤波,调用方式如下:

GaussianBlur(src, dst, Size(5, 5), 3, 3);

其中,src为源图,dst为目标图,Size(5, 5)表示每个滤波器窗口的大小。两个3分别代表X方向和Y方向的标准差。
具体应用方式如下:

int main() {Mat src = imread("./Lena.jpg");imshow("before", src);Mat dst;GaussianBlur(src, dst, Size(5, 5), 3, 3);imshow("blur", dst);imwrite("./after.jpg", dst);while (waitKey(1) != '1') {}
}

应用结果为:

3、medianBlur

medianBlur用于图像的中值滤波,基本思想是用像素点邻域灰度值的中值来代替该像素点的灰度值,让周围的像素值接近真实的值从而消除孤立的噪声点。该方法对于脉冲噪声、椒盐噪声效果良好。调用方式如下:

medianBlur(src, dst, ksize);

其中,src为源图,dst为目标图,ksize是滤波模板的尺寸大小,必须是大于1的奇数。
具体应用方式如下:

int main() {Mat src = imread("./Lena.jpg");imshow("before", src);Mat dst;int ksize = 5;medianBlur(src, dst, ksize);imshow("blur", dst);imwrite("./after.jpg", dst);while (waitKey(1) != '1') {}
}

应用结果为:

4、bilateralFilter

bilateralFilter用于图像的双边滤波,双边滤波器可以很好的边缘保护,即可以在去噪的同时,保护图像的边缘特性,调用方式如下:

bilateralFilter(src, dst, d, sigmaColor, sigmaSpace);

其中:
src为源图;
dst为目标图;
d为过滤过程中每个像素邻域的直径范围;
double sigmaColor:颜色空间过滤器的sigma值,这个参数的值越大,表明该像素邻域内有越宽广的颜色会被混合到一起,产生较大的半相等颜色区域。
double sigmaSpace:坐标空间中滤波器的sigma值,如果该值较大,则意味着越远的像素将相互影响,从而使更大的区域中足够相似的颜色获取相同的颜色。

具体应用方式如下:

int main() {Mat src = imread("./Lena.jpg");imshow("before", src); Mat dst;int d = 50;int sigmaColor = 50;int sigmaSpace = 50;bilateralFilter(src, dst, d, sigmaColor, sigmaSpace);imshow("blur", dst);imwrite("./after.jpg", dst);while (waitKey(1) != '1') {}
}

应用结果为(磨皮了):

5、腐蚀和膨胀

膨胀与服饰是相对于亮部分而言的,不是暗部分。
膨胀就是图像中的高亮部分进行膨胀,效果图拥有比原图更大的亮区域。
腐蚀就是原图中的高亮部分被腐蚀,效果图拥有比原图更小的亮区域。
调用方式如下:

// 膨胀
dilate(src, dst, erodeStruct);
// 腐蚀
erode(src, dst, erodeStruct);

其中,src为源图,dst为目标图,erodeStruct是用于膨胀操作和腐蚀操作的结构元素,越大则膨胀与腐蚀的效果越明显。
具体应用方式如下:

int main() {Mat src = imread("./Lena.jpg");imshow("before", src); Mat dst;Mat erodeStruct = getStructuringElement(MORPH_RECT, Size(5, 5));erode(src, dst, erodeStruct);//dilate(src, dst, erodeStruct);imshow("blur", dst);imwrite("./after.jpg", dst);while (waitKey(1) != '1') {}
}

应用效果如下:(第一张为膨胀,第二张为腐蚀)

6、morphologyEx高级形态学变换

morphologyEx用于完成高级形态学变换,所谓高级形态学变换相当于一些比较简单的形态学变换的结合。
常见的高级形态学变换方式如下:
1、开运算:腐蚀->膨胀,其主要作用为去除图像中较小区域
2、闭运算:膨胀->腐蚀,可以去除掉小型黑洞
3、顶帽:原图-开运算,用于突出比原图轮廓周围的区域更明亮的区域,用来分离比临近点亮一些的斑块
4、黑帽:闭运算-原图,用于突出比原图轮廓周围的区域更暗的区域,用来分离比临近点暗一些的斑块
5、形态学梯度:膨胀-腐蚀,对二值图操作可以将团块的边缘突出,用来保留物体的边缘轮廓。
调用方式如下:

// 以形态学梯度为例,调用方式如下
morphologyEx(src, dst, MORPH_GRADIENT,erodeStruct);

其中,src为源图,dst为目标图,erodeStruct是结构元素,越大则处理的效果越明显,第三个参数为表示使用的高级形态学变换是什么,可选择的参数如下:
MORPH_OPEN 开运算
MORPH_CLOSE 闭运算
MORPH_GRADIENT 形态学梯度
MORPH_TOPHAT 顶帽
MORPH_BLACKHAT 黑帽
MORPH_ERODE 腐蚀
MORPH_DILATE 膨胀

具体应用方式如下:

int main() {Mat src = imread("./Lena.jpg");imshow("before", src); Mat dst;Mat erodeStruct = getStructuringElement(MORPH_RECT, Size(3, 3));morphologyEx(src, dst, MORPH_GRADIENT,erodeStruct);imshow("blur", dst);imwrite("./after.jpg", dst);while (waitKey(1) != '1') {}
}

应用效果如下:

7、convertScaleAbs图像增强

convertScaleAbs可以用于快速的图像增强,可以为图片中的每个点进行线性运算。
调用方式如下:

convertScaleAbs(src, dst, theta, b);

其中,src为源图,dst为目标图,图片中所有点的值都会*theta+b。
具体应用方式如下:

int main() {Mat src = imread("./Lena.jpg");imshow("before", src); Mat dst;double theta = 1.5;double b = 10;convertScaleAbs(src, dst, theta, b);imshow("blur", dst);imwrite("./after.jpg", dst);while (waitKey(1) != '1') {}
}

应用结果为:

8、Sobel

Sobel算子是像素图像边缘检测中最重要的算子之一,具有非常重要的作用。
调用方式如下:

Sobel(src,dst,CV_16U, 1, 1, 5);

其中,src为源图,dst为目标图
第三个参数为输出图像的深度,可选参数为:CV_8U,CV_16U,CV_16S,CV_32F,CV_64F,其选择结果根据输入图像决定,在不确定的情况下可以使用-1。
第四个和第五个参数可以取0或者1,代表x方向和y方向上的差分阶数,0代表该方向不取。
第六个参数为ksize的大小,表示sobel器的大小。

具体应用方式如下:

int main() {Mat src = imread("./Lena.jpg");imshow("before", src); Mat dst;cvtColor(src, src, COLOR_RGB2GRAY);GaussianBlur(src, src, Size(3, 3),0.5, 0.5);Sobel(src, dst, CV_16U, 1, 1, 5);convertScaleAbs(dst, dst);imshow("blur", dst);imwrite("./after.jpg", dst);while (waitKey(1) != '1') {}
}

应用结果为:

9、Laplacian

Laplacian算子是像素图像边缘检测中最重要的算子之一,具有非常重要的作用。
调用方式如下:

Laplacian(src, dst, CV_16U, 3);

其中,src为源图,dst为目标图
第三个参数为输出图像的深度,可选参数为:CV_8U,CV_16U,CV_16S,CV_32F,CV_64F,其选择结果根据输入图像决定,在不确定的情况下可以使用-1。
第四个参数为ksize的大小,表示Laplacian器的大小。

具体应用方式如下:

int main() {Mat src = imread("./Lena.jpg");imshow("before", src); Mat dst;cvtColor(src, src, COLOR_RGB2GRAY);GaussianBlur(src, src, Size(3, 3),1, 1);Laplacian(src, dst, CV_16U, 3);convertScaleAbs(dst, dst);imshow("blur", dst);imwrite("./after.jpg", dst);while (waitKey(1) != '1') {}
}

应用结果为:

10、Scharr

Scharr算子也是一种常见的边缘检测算子,与sobel的参数类似,但是仅作用于大小为3的内核,同时。
调用方式如下:

Scharr(src, dst, CV_16U, 1, 0);
//或者
Scharr(src, dst, CV_16U, 0, 1);

其中,src为源图,dst为目标图
第三个参数为输出图像的深度,可选参数为:CV_8U,CV_16U,CV_16S,CV_32F,CV_64F,其选择结果根据输入图像决定,在不确定的情况下可以使用-1。
第四个和第五个参数可以取0或者1,代表x方向和y方向上的差分阶数,0代表该方向不取。Scharr不可以同时取1。

具体应用方式如下:

int main() {Mat src = imread("./Lena.jpg");imshow("before", src);Mat dst;cvtColor(src, src, COLOR_RGB2GRAY);GaussianBlur(src, src, Size(3, 3), 0.5, 0.5);Scharr(src, dst, CV_16U, 1, 0);convertScaleAbs(dst, dst);imshow("blur", dst);imwrite("./after.jpg", dst);while (waitKey(1) != '1') {}
}

应用结果为:

11、Canny

Canny算法就是首先对图像选择一定的Gauss滤波器进行平滑滤波,然后采用非极值抑制技术进行处理得到最后的边缘图像。
调用方式如下:

Canny(src, dst, 50, 150, 3);

其中,src为源图,dst为目标图。
第三个参数为低阈值,值越大,找到的边缘越少。
第四个参数为高阈值,值越大,找到的边缘越少。
第五个参数为Canny算子的大小。

具体应用方式如下:

int main() {Mat src = imread("./Lena.jpg");imshow("before", src);Mat dst;cvtColor(src, src, COLOR_RGB2GRAY);GaussianBlur(src, src, Size(3, 3), 0.5, 0.5);Canny(src, dst, 50, 150, 3);convertScaleAbs(dst, dst);imshow("blur", dst);imwrite("./after.jpg", dst);while (waitKey(1) != '1') {}
}

应用结果为:

Opencv的使用小教程2——Opencv常用图像处理函数汇总相关推荐

  1. Opencv的使用小教程1——Opencv基础函数汇总

    Opencv的使用小教程1--Opencv基础函数汇总 1.VideoCapture 2.imread 3.resize 4.clone 5.cvtColor 6.Scalar 7.获取像素点的值 8 ...

  2. 【Matlab 常用图像处理函数 汇总】

    Matlab 常用图像处理函数 汇总 一.图像的读取 二.图像的写入 三.图像的显示 四.创建窗口 五.图像的格式转换 六.灰度直方图 七.伽马变换 八.图像二值化 九.阈值变换 十.直方图均衡化 十 ...

  3. 数字图像处理,Matlab常用图像处理函数汇总

    原文地址:Matlab图像处理函数汇总 作者:mimi 图像的变换  ① fft2:fft2函数用于数字图像的二维傅立叶变换,如:i=imread('104_8.tif'); j=fft2(i); ② ...

  4. Opencv的使用小教程3——利用轮廓检测实现二维码定位

    Opencv的使用小教程3--利用轮廓检测实现二维码定位 二维码具有什么特征 实现效果 识别二维码的流程 1.预处理图像 2.寻找轮廓 3.通过寻找到的轮廓确定"回"的位置 4.创 ...

  5. Mysql中常用的函数汇总

    Mysql中常用的函数汇总: 一.数学函数 abs(x) 返回x的绝对值 bin(x) 返回x的二进制(oct返回八进制,hex返回十六进制) ceiling(x) 返回大于x的最小整数值 exp(x ...

  6. R语言常用sys函数汇总:sys.chmod、Sys.Date、Sys.time、Sys.getenv、Sys.getlocale、sys.getpid、sys.glob、sys.info等

    R语言常用sys函数汇总:sys.chmod.Sys.Date.Sys.time.Sys.getenv.Sys.getlocale.sys.getpid.sys.glob.sys.info等 目录

  7. 让你瞬间提高工作效率的常用js函数汇总

    让你瞬间提高工作效率的常用js函数汇总(持续更新) 前言 本文总结了项目开发过程中常用的js函数和正则,意在提高大家平时的开发效率,具体内容如下: 常用的正则校验 常用的设备检测方式 常用的日期时间函 ...

  8. 【JS教程】100+常用JS函数(方法)

    为什么80%的码农都做不了架构师?>>>    100+常用JS函数(方法) 1. document.write("");为 输出语句 2. JS中的注释为// ...

  9. excel中最常用的30个函数_最常用日期函数汇总excel函数大全收藏篇

    在我们的实际工作中,经常需要用到日期函数.日期函数那么多,你还只会用函数TODAY吗?那你就OUT了.今天一起来看下常用日期函数的用法! 1.DATE 函数DATE:返回在日期时间代码中代表日期的数字 ...

最新文章

  1. 从难免的线上bug说起代码的思考
  2. python官网下载安装教程-Python和Anoconda和Pycharm安装教程
  3. 华为交换机ACL配置
  4. Uipath 学习栏目基础教学:6Uipath发送邮件
  5. python安装时发生严重错误是怎么回事_安装python3.5时出现严重错误无法完成安装,请问这个是什么情况?怎么解决??...
  6. [HAOI2015]树上操作
  7. php 代码符号,网站开发编程中的特殊符号处理_php
  8. SSIS 包部署错误 0xC0010014
  9. 廖雪峰JS教程--条件判断
  10. java计算器如何实现运算_用java编写了一个模拟计算器的界面设计,怎么实现运算功能呢...
  11. 零基础入门专利代理考试需要了解的,持续更新ing
  12. CVE-2020-16875:Microsoft Exchange RCE复现
  13. bootstrap-table初始化配置
  14. php mess,Mess.php
  15. java之struts2之类型转换
  16. web应用防火墙和传统防火墙的区别。
  17. AMD处理器与INTEL的区别
  18. Java 基础篇:第十九章:多线程
  19. element-ui MessageBox弹框确定和取消位置(this.$confirm)
  20. 友盟推送点击行为处理

热门文章

  1. 快速排序之JavaScript版
  2. 华为防火墙双机热备学习笔记(V500)
  3. SVM支持向量机一(入门)
  4. jQuery常见事件
  5. android之静默更新
  6. html搭建工具,DA-FormMaker(html表单快速创建工具) V4.8.1 免费版
  7. emwin的模拟器配置
  8. Ignite能替代mysql吗_IGNITE应用实践
  9. springmvc--入门教程
  10. python __slots__ 详解(上篇)