OpenCV形态学操作
- 腐蚀
-
- 概念解释
- 示例
- 膨胀
-
- 概念解释
- 示例
- 开运算
-
- 概念解释
- 示例
- 闭运算
-
- 概念解释
- 示例
- 顶帽
-
- 概念解释
- 示例
- 黑帽
-
- 概念解释
- 示例
- 形态学梯度
-
- 概念解释
- 示例
本文采用JavaOpenCV进行OpenCV形态学操作(腐蚀、膨胀、开运算、闭运算、顶帽、黑帽、形态学梯度)示例的演示。
腐蚀 概念解释 假设有图像A和结构元素B,结构元素B在A上移动,其中B定义>中心为锚点,计算B覆盖下A的最小像素值用来替换锚点的像素,其中B作为结构体可以是任意形状。
【javaOpenCV|OpenCV形态学操作(腐蚀、膨胀、开运算、闭运算、顶帽、黑帽、形态学梯度)】作用:腐蚀可以用于滤波,选择适当的结构元素,可以滤掉所有不能完全包含结构元素的噪声点。但是在滤除噪声的时候,对前景图像的形状也会产生影响,尤其是形状边缘,但是当只关心物体的位置和个数时,就不用太考虑形状边缘的变化,可以使用腐蚀来滤除噪声。 (去除细小的不必要的“杂质”,但也影响到了原图)
以下图来理解上述概念。
下图为结构元素是3×3的矩形,图像是9×9且通道类型为单通道。
文章图片
上图应该用0替换锚点的1。
示例 原图
文章图片
代码
相关API
Imgproc.erode(src,dst,s);
src:需要处理的图像。
dst:处理结果。
s:结构元素。
获取结构元素函数
Imgproc.getStructuringElement(参数1,参数2,参数3);
参数1:结构元素形状
参数2:确定结构元素大小
参数3:确定锚点(-1,-1)默认为最中间
public class DemoMat {
static{
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
}
public static void main(String[] args) {
//读取图片
Mat src=https://www.it610.com/article/Imgcodecs.imread("img_1.png");
//创建结构元素(形状、大小、中心点)
Mat s=Imgproc.getStructuringElement(Imgproc.MORPH_RECT,new Size(3,3),new Point(-1,-1));
//目标容器
Mat dst=new Mat();
//腐蚀
Imgproc.erode(src,dst,s);
//展示图片
HighGui.imshow("标题",dst);
HighGui.waitKey(0);
}
}
执行结果
文章图片
膨胀 概念解释 假设有图像A和结构元素B,结构元素B在A上移动,其中B定义>中心为锚点,计算B覆盖下A的最大像素值用来替换锚点的像素,其中B作为结构体可以是任意形状。
作用:膨胀 类似与 ’ 领域扩张 ’ ,将图像的高亮区域或白色部分进行扩张,其运行结果图比原图的高亮区域更大。
以下图来理解上述概念。
下图为结构元素是3×3的矩形,图像是9×9且通道类型为单通道。
文章图片
上图应该膨胀后应该用9替换锚点的1。
示例 原图
文章图片
代码
相关API
膨胀函数
Imgproc.dilate(src,dst,s);
src:需要处理的图像。
dst:处理结果。
s:结构元素。
获取结构元素函数
Imgproc.getStructuringElement(参数1,参数2,参数3);
参数1:结构元素形状
参数2:确定结构元素大小
参数3:确定锚点(-1,-1)默认为最中间
public class DemoMat {
static{
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
}
public static void main(String[] args) {
//读取图片
Mat src=https://www.it610.com/article/Imgcodecs.imread("img_1.png");
//创建结构元素(形状、大小、中心点)
Mat s=Imgproc.getStructuringElement(Imgproc.MORPH_RECT,new Size(9,9),new Point(-1,-1));
//目标容器
Mat dst=new Mat();
//膨胀
Imgproc.dilate(src,dst,s);
//展示图片
HighGui.imshow("标题",dst);
HighGui.waitKey(0);
}
}
执行结果
文章图片
开运算 概念解释 先腐蚀后膨胀。可以去除小颗粒噪声,断开物体之间的粘连。.
作用: 用来填充物体内的小空洞,连接邻近的物体,连接断开的轮廓线,平滑其边界的同时不改变面积。.
示例 原图
文章图片
代码
相关API
开运算函数
Imgproc.morphologyEx(src,dst,Imgproc.MORPH_OPEN,s);
src:需要处理的图像。
dst:处理结果。
Imgproc.MORPH_OPEN:开运算的标识。
s:结构元素。
获取结构元素函数
Imgproc.getStructuringElement(参数1,参数2,参数3);
参数1:结构元素形状
参数2:确定结构元素大小
参数3:确定锚点(-1,-1)默认为最中间
public class DemoMat {
static{
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
}
public static void main(String[] args) {
//读取图片
Mat src=https://www.it610.com/article/Imgcodecs.imread("img_1.png");
//创建结构元素(形状、大小、中心点)
Mat s=Imgproc.getStructuringElement(Imgproc.MORPH_RECT,new Size(3,3),new Point(-1,-1));
//目标容器
Mat dst=new Mat();
//开运算
Imgproc.morphologyEx(src,dst,Imgproc.MORPH_OPEN,s);
//展示图片
HighGui.imshow("标题",dst);
HighGui.waitKey(0);
}
}
执行结果
文章图片
闭运算 概念解释 先膨胀后腐蚀。
作用:闭运算与开运算相反,能够填平前景物体内的小裂缝、间断和小孔,而总的位置和形状不变。
示例 原图
文章图片
代码
相关API
闭运算函数
Imgproc.morphologyEx(src,dst,Imgproc.MORPH_CLOSE,s);
src:需要处理的图像。
dst:处理结果。
Imgproc.MORPH_CLOSE:闭运算的标识。
s:结构元素。
获取结构元素函数
Imgproc.getStructuringElement(参数1,参数2,参数3);
参数1:结构元素形状
参数2:确定结构元素大小
参数3:确定锚点(-1,-1)默认为最中间
public class DemoMat {
static{
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
}
public static void main(String[] args) {
//读取图片
Mat src=https://www.it610.com/article/Imgcodecs.imread("img_4.png");
//创建结构元素(形状、大小、中心点)
Mat s=Imgproc.getStructuringElement(Imgproc.MORPH_RECT,new Size(3,3),new Point(-1,-1));
//目标容器
Mat dst=new Mat();
//闭运算
Imgproc.morphologyEx(src,dst,Imgproc.MORPH_CLOSE,s);
//展示图片
HighGui.imshow("标题",dst);
HighGui.waitKey(0);
}
}
执行结果
文章图片
顶帽 概念解释 顶帽是原图像与开操作之间的差值图像。(结果相当于执行开操作后剩下的)
示例 原图
文章图片
代码
相关API
顶帽函数
Imgproc.morphologyEx(src,dst,Imgproc.MORPH_TOPHAT,s);
src:需要处理的图像。
dst:处理结果。
Imgproc.MORPH_TOPHAT:顶帽运算的标识。
s:结构元素。
获取结构元素函数
Imgproc.getStructuringElement(参数1,参数2,参数3);
参数1:结构元素形状
参数2:确定结构元素大小
参数3:确定锚点(-1,-1)默认为最中间
public class DemoMat {
static{
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
}
public static void main(String[] args) {
//读取图片
Mat src=https://www.it610.com/article/Imgcodecs.imread("img_4.png");
//创建结构元素(形状、大小、中心点)
Mat s=Imgproc.getStructuringElement(Imgproc.MORPH_RECT,new Size(3,3),new Point(-1,-1));
//目标容器
Mat dst=new Mat();
//顶帽运算
Imgproc.morphologyEx(src,dst,Imgproc.MORPH_TOPHAT,s);
//展示图片
HighGui.imshow("标题",dst);
HighGui.waitKey(0);
}
}
执行结果
文章图片
黑帽 概念解释 黑帽是闭操作图像与源图像的差值图像。(结果相当于被闭运算执行去除的)
示例 原图
文章图片
代码
相关API
黑帽函数
Imgproc.morphologyEx(src,dst,Imgproc.MORPH_BLACKHAT,s);
src:需要处理的图像。
dst:处理结果。
Imgproc.MORPH_BLACKHAT:黑帽运算的标识。
s:结构元素。
获取结构元素函数
Imgproc.getStructuringElement(参数1,参数2,参数3);
参数1:结构元素形状
参数2:确定结构元素大小
参数3:确定锚点(-1,-1)默认为最中间
public class DemoMat {
static{
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
}
public static void main(String[] args) {
//读取图片
Mat src=https://www.it610.com/article/Imgcodecs.imread("img_4.png");
//创建结构元素(形状、大小、中心点)
Mat s=Imgproc.getStructuringElement(Imgproc.MORPH_RECT,new Size(3,3),new Point(-1,-1));
//目标容器
Mat dst=new Mat();
//黑帽运算
Imgproc.morphologyEx(src,dst,Imgproc.MORPH_BLACKHAT,s);
//展示图片
HighGui.imshow("标题",dst);
HighGui.waitKey(0);
}
}
执行结果
文章图片
形态学梯度 概念解释 膨胀减去腐蚀(相当于大的减去小的,最后剩下边)
示例 原图
文章图片
代码
相关API
梯度函数
Imgproc.morphologyEx(src,dst,Imgproc.MORPH_GRADIENT,s);
src:需要处理的图像。
dst:处理结果。
Imgproc.MORPH_GRADIENT:梯度运算的标识。
s:结构元素。
获取结构元素函数
Imgproc.getStructuringElement(参数1,参数2,参数3);
参数1:结构元素形状
参数2:确定结构元素大小
参数3:确定锚点(-1,-1)默认为最中间
public class DemoMat {
static{
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
}
public static void main(String[] args) {
//读取图片
Mat src=https://www.it610.com/article/Imgcodecs.imread("img_5.png");
//创建结构元素(形状、大小、中心点)
Mat s=Imgproc.getStructuringElement(Imgproc.MORPH_RECT,new Size(3,3),new Point(-1,-1));
//目标容器
Mat dst=new Mat();
//形态学梯度运算
Imgproc.morphologyEx(src,dst,Imgproc.MORPH_GRADIENT,s);
//展示图片
HighGui.imshow("标题",dst);
HighGui.waitKey(0);
}
}
执行结果
文章图片
推荐阅读
- 深度学习|掌握神经网络的法宝(一)
- 算法|近似算法的近似率_选择最佳近似最近算法的数据科学家指南
- 全面公测 | 百度智能云CCE在离线混部功能
- 游戏|2022年的GameFi会有什么变化()
- 财经|复盘2021年国内手游出海(大厂“吃饱”,中小厂商顺势“带跑”)
- 人工智能|2022年值得关注的22项新兴技术
- 人工智能|《经济学人》(2022年值得关注的22项新兴技术)
- 人工智能|下一个是什么(2022年值得关注的22项新兴技术)
- 大数据|气候科技冠上‘低碳’,泡沫就来了