Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
opencv-doc-zh
提交
da74b7d8
O
opencv-doc-zh
项目概览
OpenDocCN
/
opencv-doc-zh
通知
182
Star
2
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
opencv-doc-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
da74b7d8
编写于
2月 09, 2020
作者:
B
buaazhangqi
提交者:
GitHub
2月 09, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Update 4.5-tutorial_py_morphological_ops.md
上级
69886c6c
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
13 addition
and
13 deletion
+13
-13
docs/4.0.0/4.5-tutorial_py_morphological_ops.md
docs/4.0.0/4.5-tutorial_py_morphological_ops.md
+13
-13
未找到文件。
docs/4.0.0/4.5-tutorial_py_morphological_ops.md
浏览文件 @
da74b7d8
...
@@ -2,22 +2,22 @@
...
@@ -2,22 +2,22 @@
在本教程中:
在本教程中:
*
我们将学习不同的形态操作,如腐蚀、
扩张
、开、闭等。
*
我们将学习不同的形态操作,如腐蚀、
膨胀
、开、闭等。
*
我们将看到不同的函数,如:
**[cv.erode()](https://docs.opencv.org/4.0.0/d4/d86/group__imgproc__filter.html#gaeb1e0c1033e3f6b891a25d0511362aeb)**
、
**[cv.dilate()](https://docs.opencv.org/4.0.0/d4/d86/group__imgproc__filter.html#ga4ff0f3318642c4f469d0e11f242f3b6c)**
、
**[cv.morphologyEx()](https://docs.opencv.org/4.0.0/d4/d86/group__imgproc__filter.html#ga67493776e3ad1a3df63883829375201f)**
等。
*
我们将看到不同的函数,如:
**[cv.erode()](https://docs.opencv.org/4.0.0/d4/d86/group__imgproc__filter.html#gaeb1e0c1033e3f6b891a25d0511362aeb)**
、
**[cv.dilate()](https://docs.opencv.org/4.0.0/d4/d86/group__imgproc__filter.html#ga4ff0f3318642c4f469d0e11f242f3b6c)**
、
**[cv.morphologyEx()](https://docs.opencv.org/4.0.0/d4/d86/group__imgproc__filter.html#ga67493776e3ad1a3df63883829375201f)**
等。
## 理论
## 理论
形态
转换是基于图像形状的一些简单操作。它通常在二进制图像上执行。它需要两个输入,一个是我们的原始图像,第二个是决定操作性质的结构元素或内核。两个基本的形态学操作是腐蚀和扩张
。接下来如开,闭,梯度等也会介绍。在下图的帮助下,我们将逐一看到它们:
形态
学变换是基于图像形状的一些简单操作。它通常在二值图像上执行。它需要两个输入,一个是我们的原始图像,第二个是决定操作性质的结构元素或内核。两个基本的形态学操作是腐蚀和膨胀
。接下来如开,闭,梯度等也会介绍。在下图的帮助下,我们将逐一看到它们:
![
图片
](
./img/Morphological_Transformations_1.png
)
![
图片
](
./img/Morphological_Transformations_1.png
)
### 1、腐蚀
### 1、腐蚀
侵
蚀的基本概念就像土壤侵蚀一样,只侵蚀前景对象的边界(总是尽量保持前景为白色)。那它有什么作用呢?内核在图像中滑动(如二维卷积)。只有当内核下的所有像素都为 1 时,原始图像中的像素(1 或 0)才会被视为 1,否则会被侵蚀(变为零)。
腐
蚀的基本概念就像土壤侵蚀一样,只侵蚀前景对象的边界(总是尽量保持前景为白色)。那它有什么作用呢?内核在图像中滑动(如二维卷积)。只有当内核下的所有像素都为 1 时,原始图像中的像素(1 或 0)才会被视为 1,否则会被侵蚀(变为零)。
所以根据内核的大小,边界附近的所有像素都将被丢弃。因此,前景对象的厚度或大小在图像中减少或只是白色区域减少。它有助于消除小的白色噪音(如我们在“颜色空间”一章中所看到的),分离两个连接的对象等。
所以根据内核的大小,边界附近的所有像素都将被丢弃。因此,前景对象的厚度或大小在图像中减少或只是白色区域减少。它有助于消除小的白色噪音(如我们在“颜色空间”一章中所看到的),分离两个连接的对象等。
作为一个例子,我将使用一个 5x5 内核,
里面有很多内核
。让我们看看它是如何工作的:
作为一个例子,我将使用一个 5x5 内核,
内核元素均为1
。让我们看看它是如何工作的:
```
python
```
python
mport
cv2
as
cv
mport
cv2
as
cv
...
@@ -36,9 +36,9 @@ plt.show()
...
@@ -36,9 +36,9 @@ plt.show()
![
图片
](
./img/Morphological_Transformations_2.png
)
![
图片
](
./img/Morphological_Transformations_2.png
)
### 2、
扩张
### 2、
膨胀
它与
侵蚀正好相反。这里,如果内核下至少有一个像素为“1”,则像素元素为“1”。所以它会增加图像中的白色区域,或者增加前景对象的大小。通常情况下,在去除噪音的情况下,腐蚀后会膨胀。因为,腐蚀消除了白噪声,但它也缩小了我们的对象。所以我们扩大它。由于噪音消失了,它们不会再回来,但我们的目标区域会增加
。它还可用于连接对象的断开部分。
它与
腐蚀正好相反。这里,如果内核下至少有一个像素为“1”,则像素元素为“1”。所以它会增加图像中的白色区域,或者增加前景对象的大小。通常情况下,在去除噪音的情况下,腐蚀后会膨胀。因为,腐蚀消除了白噪声,但它也缩小了我们的对象。所以我们扩大它。由于噪音消失了,它们不会再回来,但我们的目标区域会增加到腐蚀之前的状态
。它还可用于连接对象的断开部分。
```
python
```
python
dilation
=
cv
.
dilate
(
img
,
kernel
,
iterations
=
1
)
dilation
=
cv
.
dilate
(
img
,
kernel
,
iterations
=
1
)
...
@@ -48,7 +48,7 @@ dilation = cv.dilate(img,kernel,iterations = 1)
...
@@ -48,7 +48,7 @@ dilation = cv.dilate(img,kernel,iterations = 1)
![
图片
](
./img/Morphological_Transformations_3.png
)
![
图片
](
./img/Morphological_Transformations_3.png
)
### 3、开
### 3、开
运算
开只是腐蚀的另一个名称,随后是膨胀。正如我们上面所解释的,它对消除噪音很有用。在这里,我们使用
**[cv.morphologyEx()](https://docs.opencv.org/4.0.0/d4/d86/group__imgproc__filter.html#ga67493776e3ad1a3df63883829375201f)**
。
开只是腐蚀的另一个名称,随后是膨胀。正如我们上面所解释的,它对消除噪音很有用。在这里,我们使用
**[cv.morphologyEx()](https://docs.opencv.org/4.0.0/d4/d86/group__imgproc__filter.html#ga67493776e3ad1a3df63883829375201f)**
。
...
@@ -61,9 +61,9 @@ opening = cv.morphologyEx(img, cv.MORPH_OPEN, kernel)
...
@@ -61,9 +61,9 @@ opening = cv.morphologyEx(img, cv.MORPH_OPEN, kernel)
![
图片
](
./img/Morphological_Transformations_4.png
)
![
图片
](
./img/Morphological_Transformations_4.png
)
### 4、闭
### 4、闭
运算
关闭与打开相反,膨胀后腐蚀。它在
关闭
前景对象内的小孔或对象上的小黑点时很有用。
关闭与打开相反,膨胀后腐蚀。它在
填充
前景对象内的小孔或对象上的小黑点时很有用。
```
python
```
python
closing
=
cv
.
morphologyEx
(
img
,
cv
.
MORPH_CLOSE
,
kernel
)
closing
=
cv
.
morphologyEx
(
img
,
cv
.
MORPH_CLOSE
,
kernel
)
...
@@ -75,7 +75,7 @@ closing = cv.morphologyEx(img, cv.MORPH_CLOSE, kernel)
...
@@ -75,7 +75,7 @@ closing = cv.morphologyEx(img, cv.MORPH_CLOSE, kernel)
### 5、形态梯度
### 5、形态梯度
它
与图像的膨胀和腐蚀相反
。
它
是图像的膨胀和腐蚀之间的差值
。
结果将类似于对象的轮廓。
结果将类似于对象的轮廓。
...
@@ -89,7 +89,7 @@ gradient = cv.morphologyEx(img, cv.MORPH_GRADIENT, kernel)
...
@@ -89,7 +89,7 @@ gradient = cv.morphologyEx(img, cv.MORPH_GRADIENT, kernel)
### 6、顶帽
### 6、顶帽
它
与原图像和原图像的开相反。下面是 9
*
9 核的例子。
它
是原图像和原图像开运算结果的差值。下面是 9x
9 核的例子。
```
python
```
python
tophat
=
cv
.
morphologyEx
(
img
,
cv
.
MORPH_TOPHAT
,
kernel
)
tophat
=
cv
.
morphologyEx
(
img
,
cv
.
MORPH_TOPHAT
,
kernel
)
...
@@ -101,7 +101,7 @@ tophat = cv.morphologyEx(img, cv.MORPH_TOPHAT, kernel)
...
@@ -101,7 +101,7 @@ tophat = cv.morphologyEx(img, cv.MORPH_TOPHAT, kernel)
### 7、黑帽
### 7、黑帽
它
与原图像和原图像的闭相反
。
它
是原图像和原图像的闭的差值
。
```
python
```
python
blackhat
=
cv
.
morphologyEx
(
img
,
cv
.
MORPH_BLACKHAT
,
kernel
)
blackhat
=
cv
.
morphologyEx
(
img
,
cv
.
MORPH_BLACKHAT
,
kernel
)
...
@@ -111,7 +111,7 @@ blackhat = cv.morphologyEx(img, cv.MORPH_BLACKHAT, kernel)
...
@@ -111,7 +111,7 @@ blackhat = cv.morphologyEx(img, cv.MORPH_BLACKHAT, kernel)
![
图片
](
./img/Morphological_Transformations_8.png
)
![
图片
](
./img/Morphological_Transformations_8.png
)
## 结构
参量
## 结构
元素
在前面的例子中,我们在 numpy 的帮助下手工创建了一个结构参量。它是长方形的。但在某些情况下,您可能需要椭圆/圆形的内核。因此,opencv 有一个函数,
**[cv.getStructuringElement()](https://docs.opencv.org/4.0.0/d4/d86/group__imgproc__filter.html#gac342a1bb6eabf6f55c803b09268e36dc)**
。只要传递内核的形状和大小,就可以得到所需的内核。
在前面的例子中,我们在 numpy 的帮助下手工创建了一个结构参量。它是长方形的。但在某些情况下,您可能需要椭圆/圆形的内核。因此,opencv 有一个函数,
**[cv.getStructuringElement()](https://docs.opencv.org/4.0.0/d4/d86/group__imgproc__filter.html#gac342a1bb6eabf6f55c803b09268e36dc)**
。只要传递内核的形状和大小,就可以得到所需的内核。
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录