Opencv的使用小教程2——Opencv常用图像处理函数汇总
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常用图像处理函数汇总相关推荐
- Opencv的使用小教程1——Opencv基础函数汇总
Opencv的使用小教程1--Opencv基础函数汇总 1.VideoCapture 2.imread 3.resize 4.clone 5.cvtColor 6.Scalar 7.获取像素点的值 8 ...
- 【Matlab 常用图像处理函数 汇总】
Matlab 常用图像处理函数 汇总 一.图像的读取 二.图像的写入 三.图像的显示 四.创建窗口 五.图像的格式转换 六.灰度直方图 七.伽马变换 八.图像二值化 九.阈值变换 十.直方图均衡化 十 ...
- 数字图像处理,Matlab常用图像处理函数汇总
原文地址:Matlab图像处理函数汇总 作者:mimi 图像的变换 ① fft2:fft2函数用于数字图像的二维傅立叶变换,如:i=imread('104_8.tif'); j=fft2(i); ② ...
- Opencv的使用小教程3——利用轮廓检测实现二维码定位
Opencv的使用小教程3--利用轮廓检测实现二维码定位 二维码具有什么特征 实现效果 识别二维码的流程 1.预处理图像 2.寻找轮廓 3.通过寻找到的轮廓确定"回"的位置 4.创 ...
- Mysql中常用的函数汇总
Mysql中常用的函数汇总: 一.数学函数 abs(x) 返回x的绝对值 bin(x) 返回x的二进制(oct返回八进制,hex返回十六进制) ceiling(x) 返回大于x的最小整数值 exp(x ...
- 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等 目录
- 让你瞬间提高工作效率的常用js函数汇总
让你瞬间提高工作效率的常用js函数汇总(持续更新) 前言 本文总结了项目开发过程中常用的js函数和正则,意在提高大家平时的开发效率,具体内容如下: 常用的正则校验 常用的设备检测方式 常用的日期时间函 ...
- 【JS教程】100+常用JS函数(方法)
为什么80%的码农都做不了架构师?>>> 100+常用JS函数(方法) 1. document.write("");为 输出语句 2. JS中的注释为// ...
- excel中最常用的30个函数_最常用日期函数汇总excel函数大全收藏篇
在我们的实际工作中,经常需要用到日期函数.日期函数那么多,你还只会用函数TODAY吗?那你就OUT了.今天一起来看下常用日期函数的用法! 1.DATE 函数DATE:返回在日期时间代码中代表日期的数字 ...
最新文章
- 从难免的线上bug说起代码的思考
- python官网下载安装教程-Python和Anoconda和Pycharm安装教程
- 华为交换机ACL配置
- Uipath 学习栏目基础教学:6Uipath发送邮件
- python安装时发生严重错误是怎么回事_安装python3.5时出现严重错误无法完成安装,请问这个是什么情况?怎么解决??...
- [HAOI2015]树上操作
- php 代码符号,网站开发编程中的特殊符号处理_php
- SSIS 包部署错误 0xC0010014
- 廖雪峰JS教程--条件判断
- java计算器如何实现运算_用java编写了一个模拟计算器的界面设计,怎么实现运算功能呢...
- 零基础入门专利代理考试需要了解的,持续更新ing
- CVE-2020-16875:Microsoft Exchange RCE复现
- bootstrap-table初始化配置
- php mess,Mess.php
- java之struts2之类型转换
- web应用防火墙和传统防火墙的区别。
- AMD处理器与INTEL的区别
- Java 基础篇:第十九章:多线程
- element-ui MessageBox弹框确定和取消位置(this.$confirm)
- 友盟推送点击行为处理