Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
opencv-doc-zh
提交
9a5038c8
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,体验更适合开发者的 AI 搜索 >>
提交
9a5038c8
编写于
12月 28, 2021
作者:
片刻小哥哥
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
更新链接
上级
bfdaf646
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
27 addition
and
27 deletion
+27
-27
docs/4.0.0/3.1-tutorial_py_basic_ops.md
docs/4.0.0/3.1-tutorial_py_basic_ops.md
+2
-2
docs/4.0.0/3.2-tutorial_py_image_arithmetics.md
docs/4.0.0/3.2-tutorial_py_image_arithmetics.md
+4
-4
docs/4.0.0/8.2.1-tutorial_py_svm_basics.md
docs/4.0.0/8.2.1-tutorial_py_svm_basics.md
+8
-8
docs/4.0.0/8.2.2-tutorial_py_svm_opencv.md
docs/4.0.0/8.2.2-tutorial_py_svm_opencv.md
+1
-1
docs/4.0.0/8.3.1-tutorial_py_kmeans_understanding.md
docs/4.0.0/8.3.1-tutorial_py_kmeans_understanding.md
+7
-7
docs/4.0.0/8.3.2-tutorial_py_kmeans_opencv.md
docs/4.0.0/8.3.2-tutorial_py_kmeans_opencv.md
+5
-5
未找到文件。
docs/4.0.0/3.1-tutorial_py_basic_ops.md
浏览文件 @
9a5038c8
...
...
@@ -119,7 +119,7 @@ UINT8
检查以下结果:
<div
align=
center
>
<img
src=
"img/roi.jpg"
>
<img
src=
"
https://opencv.apachecn.org/docs/4.0.0/
img/roi.jpg"
>
</div>
## 拆分和合并图像通道
...
...
@@ -184,7 +184,7 @@ plt.show()
请参阅下面的结果。(图像是通过 matplotlib 展示的。因此红色和蓝色通道将互换):
<div
align=
center
>
<img
src=
"img/border.jpg"
>
<img
src=
"
https://opencv.apachecn.org/docs/4.0.0/
img/border.jpg"
>
</div>
## 其他资源
...
...
docs/4.0.0/3.2-tutorial_py_image_arithmetics.md
浏览文件 @
9a5038c8
...
...
@@ -30,7 +30,7 @@ OpenCV 相加操作和 Numpy 相加操作之间存在差异。OpenCV 添加是
这也是将图像相加,但是对图像赋予不同的权重,从而给出混合感或透明感。图像按以下等式添加:
<div
align=
center
>
<img
src=
"img/blending_equation.gif"
>
<img
src=
"
https://opencv.apachecn.org/docs/4.0.0/
img/blending_equation.gif"
>
</div>
通过在(0,1)之间改变!
[](
https://github.com/zhangqizky/opencv-doc-zh/blob/master/docs/4.0.0/img/alpha.gif
)
的值, 可以用来对两幅图像或两段视频产生时间上的
*画面叠化*
(cross-dissolve)效果,就像在幻灯片放映和电影制作中那样(很酷吧?)(译者注:在幻灯片翻页时可以设置为前后页缓慢过渡以产生叠加效果,电影中经常在情节过渡时出现画面叠加效果)。
...
...
@@ -38,7 +38,7 @@ OpenCV 相加操作和 Numpy 相加操作之间存在差异。OpenCV 添加是
在这里,我拍了两张图片将它们混合在一起。第一图像的权重为 0.7,第二图像的权重为 0.3。
[
cv.addWeighted()
](
https://docs.opencv.org/4.0.0/d2/de8/group__core__array.html#gafafb2513349db3bcff51f54ee5592a19
)
在图像上应用以下等式。
<div
align=
center
>
<img
src=
"img/blending_equation.gif"
>
<img
src=
"
https://opencv.apachecn.org/docs/4.0.0/
img/blending_equation.gif"
>
</div>
```
Python
...
...
@@ -54,7 +54,7 @@ cv.destroyAllWindows()
观察以下结果:
<div
align=
center
>
<img
src=
"img/blending.jpg"
>
<img
src=
"
https://opencv.apachecn.org/docs/4.0.0/
img/blending.jpg"
>
</div>
...
...
@@ -89,7 +89,7 @@ cv.destroyAllWindows()
请参阅下面的结果。左图显示了我们创建的蒙版。右图显示最终结果。为了加深理解,请在上面的代码中显示所有中间图像,尤其是 img1_bg 和 img2_fg。
<div
align=
center
>
<img
src=
"img/overlay.jpg"
>
<img
src=
"
https://opencv.apachecn.org/docs/4.0.0/
img/overlay.jpg"
>
</div>
## 其他资源
...
...
docs/4.0.0/8.2.1-tutorial_py_svm_basics.md
浏览文件 @
9a5038c8
...
...
@@ -8,7 +8,7 @@
### 线性可分离数据
考虑下面的图像有两种类型的数据,红色和蓝色。在 kNN 中,对于一个测试数据,我们通常要计算它与所有训练样本的距离,并选择最短距离的那个。计算与所有样本的距离花费了大量时间,而且存储所有的训练样本要花费大量的内存。但是,对于图片中所给出的数据,我们真的需要这么多吗?
<div
align=
center
>
<img
src=
"img/svm_basics1.png"
>
</br>
<img
src=
"
https://opencv.apachecn.org/docs/4.0.0/
img/svm_basics1.png"
>
</br>
<b>
图像
</b>
</div>
...
...
@@ -16,7 +16,7 @@
在上图中,你可以看到很多这样的直线。我们将选哪一条?非常直观地说,该直线应该尽可能远离所有点。为什么呢?因为输入数据中可能存在噪声数据。这些噪声数据不应影响分类准确性。因此,选择最远的直线将提供更强的抗噪声能力。因此,SVM 所做的是找到与训练样本具有最大最小距离的直线(或超平面)。请参见下图中穿过中心的粗线。
<div
align=
center
>
<img
src=
"img/svm_basics2.png"
>
</br>
<img
src=
"
https://opencv.apachecn.org/docs/4.0.0/
img/svm_basics2.png"
>
</br>
<b>
图像
</b>
</div>
...
...
@@ -24,7 +24,7 @@
发生了什么事呢?首先,有两个超平面被发现最能代表数据。例如,蓝色数据由
**w<sup>T</sup>x + b<sub>0</sub> > 1**
表示,而红色数据由
**w<sup>T</sup>x + b<sub>0</sub> < -1**
表示,其中
**w**
是权重向量(
**w = [w<sub>1</sub>,w<sub>2</sub>,...,w<sub>n</sub>]**
),
**x**
是特征向量(
**x = [x<sub>1</sub>,x<sub>2</sub>,...,x<sub>n</sub>]**
),
**b<sub>0</sub>**
是偏差。权重向量决定决策边界的方向,而偏差点决定其位置。现在,决策边界被定义为这些超平面的中间,因此表示为
**w<sup>T</sup>x + b<sub>0</sub> = 0**
。从支持向量到决策边界的最小距离由
**distance<sub>support vectors</sub> = 1/||w||**
给出。间距是这个距离的两倍,我们需要最大化这个间距。即我们需要最小化一个新函数
**L(w,b<sub>0</sub>)**
,其中一些约束可以表示如下:
<div
align=
center
>
<img
src=
"img/svm_func1.png"
>
</br>
<img
src=
"
https://opencv.apachecn.org/docs/4.0.0/
img/svm_func1.png"
>
</br>
</div>
其中 ti 是每个类的标签,
**t<sub>i</sub> ∈ [-1,1]**
。
...
...
@@ -38,12 +38,12 @@
考虑二维空间中的两个点,
**p = (p<sub>1</sub>, p<sub>2</sub>)**
和
**q = (q<sub>1</sub>, q<sub>2</sub>)**
。设
***Φ**
*
是一个映射函数,它将二维的点映射到三维空间,如下所示:
<div
align=
center
>
<img
src=
"img/svm_func2.png"
>
</br>
<img
src=
"
https://opencv.apachecn.org/docs/4.0.0/
img/svm_func2.png"
>
</br>
</div>
让我们定义一个核函数
***K*(*p*,*q*)**
,它在两点之间做一个点积,如下所示:
<div
align=
center
>
<img
src=
"img/svm_func3.png"
>
</br>
<img
src=
"
https://opencv.apachecn.org/docs/4.0.0/
img/svm_func3.png"
>
</br>
</div>
...
...
@@ -51,18 +51,18 @@
除了所有这些概念之外,还存在分类错误的问题。因此,仅仅找到具有最大间距的决策边界是不够的。我们还需要考虑分类错误的问题。有时,可能会找到间距较小的决策边界,但分类错误减少。无论如何,我们需要修改我们的模型,使其找到具有最大间距的决策边界,但分类错误较少。最小化标准修改为:
<div
align=
center
>
<img
src=
"img/svm_func4.png"
>
</br>
<img
src=
"
https://opencv.apachecn.org/docs/4.0.0/
img/svm_func4.png"
>
</br>
</div>
下图显示了这个概念。对于训练数据的每个样本,定义新参数
***ξ*<sub>i</sub>**
。它是从相应的训练样本到正确决策区域的距离。对于那些没有被错误分类的数据,它们会落在相应的支持平面上,因此它们的距离为零。
<div
align=
center
>
<img
src=
"img/svm_basics3.png"
>
</br>
<img
src=
"
https://opencv.apachecn.org/docs/4.0.0/
img/svm_basics3.png"
>
</br>
<b>
图像
</b>
</div>
所以新的优化问题是:
<div
align=
center
>
<img
src=
"img/svm_func5.png"
>
</br>
<img
src=
"
https://opencv.apachecn.org/docs/4.0.0/
img/svm_func5.png"
>
</br>
</div>
如何选择参数 C?很明显,这个问题的答案取决于训练数据的分布方式。虽然没有一般性答案,但考虑以下规则很有用:
...
...
docs/4.0.0/8.2.2-tutorial_py_svm_opencv.md
浏览文件 @
9a5038c8
...
...
@@ -20,7 +20,7 @@ def deskew(img):
```
下图展示了应用于零图像的上述矫正函数。左图是原始图像,右图是矫正后的图像。
<div
align=
center
>
<img
src=
"img/deskew.jpg"
>
</br>
<img
src=
"
https://opencv.apachecn.org/docs/4.0.0/
img/deskew.jpg"
>
</br>
<b>
图像
</b>
</div>
接下来,我们必须找到每个单元的 HOG 描述符。为此,我们在 X 和 Y 方向找到每个单元的 Sobel 导数。然后,在每个像素处找到它们的大小和梯度方向。该梯度被量化为 0~16 间的整数。将此图像分为四个子方块。对于每个子方块,计算使用大小加权的方向的直方图(16 bins)。因此,每个子方块都会给你一个有 16 个值的向量。四个这样的向量(四个子方块)一起给出了有着 64 个值的特征向量。这是我们用来训练数据的特征向量。
...
...
docs/4.0.0/8.3.1-tutorial_py_kmeans_understanding.md
浏览文件 @
9a5038c8
...
...
@@ -8,13 +8,13 @@
### T 恤大小问题
举个例子,有一家公司将向市场推出一种新型 T 恤。显然,他们必须制造不同尺寸的衣服,以满足各种身材的人。为此,公司收集了一份人的身高和体重的数据,并将其绘制成图表,如下所示:
<div
align=
center
>
<img
src=
"img/tshirt.jpg"
>
</br>
<img
src=
"
https://opencv.apachecn.org/docs/4.0.0/
img/tshirt.jpg"
>
</br>
<b>
图像
</b>
</div>
公司不能制作所有尺寸的 T 恤。相反,他们将人们划分为小巧、中等和高大,并且仅制造这 3 种尺寸的衣服,以满足所有人的需求。将人群分为 3 组这种事情可以用 K-Means 聚类算法来完成,并且算法能够给我们找出最合适的 3 个尺寸,让所有人满意。如果不行,公司可以将人们分成更多的组,可能是 5 组,或者其它。查看下图:
<div
align=
center
>
<img
src=
"img/tshirt_grouped.jpg"
>
</br>
<img
src=
"
https://opencv.apachecn.org/docs/4.0.0/
img/tshirt_grouped.jpg"
>
</br>
<b>
图像
</b>
</div>
...
...
@@ -23,7 +23,7 @@
考虑如下的一组数据(你可以将其视为 T 恤问题)。我们需要将这些数据分成两组。
<div
align=
center
>
<img
src=
"img/testdata.jpg"
>
</br>
<img
src=
"
https://opencv.apachecn.org/docs/4.0.0/
img/testdata.jpg"
>
</br>
<b>
图像
</b>
</div>
...
...
@@ -33,7 +33,7 @@
在这个例子中,我们用红色标记所有的'0',用蓝色标记所有的'1'。在上述操作之后,我们得到了下图:
<div
align=
center
>
<img
src=
"img/initial_labelling.jpg"
>
</br>
<img
src=
"
https://opencv.apachecn.org/docs/4.0.0/
img/initial_labelling.jpg"
>
</br>
<b>
图像
</b>
</div>
...
...
@@ -43,18 +43,18 @@
然后我们得到了如下结果:
<div
align=
center
>
<img
src=
"img/update_centroid.jpg"
>
</br>
<img
src=
"
https://opencv.apachecn.org/docs/4.0.0/
img/update_centroid.jpg"
>
</br>
<b>
图像
</b>
</div>
现在,迭代
**步骤二**
和
**步骤三**
,直到两个中心点收敛到固定点。
\*
( 或者可能根据我们所给的条件停止,如最大迭代次数,或达到特定的准去率等。)
\*
**这些点使得测试数据与其对应的中心点之间的距离之和最小。**
或者简单地说,
***C1↔红色点**
* 和 *
**C2↔蓝色点**
*
之间的距离之和最小。
<div
align=
center
>
<img
src=
"img/kmeans_func1.png"
>
</br>
<img
src=
"
https://opencv.apachecn.org/docs/4.0.0/
img/kmeans_func1.png"
>
</br>
</div>
最终结果大概如下所示:
<div
align=
center
>
<img
src=
"img/final_clusters.jpg"
>
</br>
<img
src=
"
https://opencv.apachecn.org/docs/4.0.0/
img/final_clusters.jpg"
>
</br>
<b>
图像
</b>
</div>
...
...
docs/4.0.0/8.3.2-tutorial_py_kmeans_opencv.md
浏览文件 @
9a5038c8
...
...
@@ -53,7 +53,7 @@ plt.hist(z,256,[0,256]),plt.show()
所以我们有'z',这是一个大小为 50 的数组,值范围从 0 到 255。我已经将'z' 重塑为列向量。当存在多个特征时,它将更有用。然后我将类型数据转为 np.float32 。
我们得到以下图片:
<div
align=
"center"
><img
src=
"img/oc_1d_testdata.png"
/>
<br>
<b>
图像
</b></div>
<div
align=
"center"
><img
src=
"
https://opencv.apachecn.org/docs/4.0.0/
img/oc_1d_testdata.png"
/>
<br>
<b>
图像
</b></div>
现在我们应用 KMeans 功能。在此之前,我们需要指定标准。我的标准是,每当运行 10 次迭代算法或达到 epsilon = 1.0 的精度时,就停止算法并返回答案。
...
...
@@ -81,7 +81,7 @@ plt.hist(centers,32,[0,256],color = 'y')
plt
.
show
()
```
以下是我们得到的输出:
<div
align=
"center"
><img
src=
"img/oc_1d_clustered.png"
/>
<br>
<b>
图像
</b></div>
<div
align=
"center"
><img
src=
"
https://opencv.apachecn.org/docs/4.0.0/
img/oc_1d_clustered.png"
/>
<br>
<b>
图像
</b></div>
## 2.具有多个特征的数据
在前面的例子中,我们只采取了 T 恤问题的高度。在这里,我们将采用高度和重量,即两个特征。
...
...
@@ -89,7 +89,7 @@ plt.show()
请记住,在前一种情况下,我们将数据制作为单个列向量。 每个特征排列在一列中,而每行对应一个输入测试样本。
举个例子,在本例中,我们将测试数据集的大小设为 50x2 ,这是 50 个人的高度和体重。第一列对应着 50 个人的高度,第二列对应着他们的重量。第一行包含两个元素,其中第一个元素是第一人的高度,第二个元素是他的重量。类似地,剩余的行对应于其他人的高度和重量。查看下图:
<div
align=
"center"
><img
src=
"img/oc_feature_representation.jpg"
/>
<br>
<b>
图像
</b></div>
<div
align=
"center"
><img
src=
"
https://opencv.apachecn.org/docs/4.0.0/
img/oc_feature_representation.jpg"
/>
<br>
<b>
图像
</b></div>
现在我直接转到代码:
```
python
...
...
@@ -121,7 +121,7 @@ plt.show()
```
以下是我们得到的输出:
<div
align=
"center"
><img
src=
"img/oc_2d_clustered.jpg"
/>
<br>
<b>
图像
</b></div>
<div
align=
"center"
><img
src=
"
https://opencv.apachecn.org/docs/4.0.0/
img/oc_2d_clustered.jpg"
/>
<br>
<b>
图像
</b></div>
## 3.色彩量化
色彩量化是减少图像中颜色数量的过程。这样做的一个原因是减少内存。有时,某些设备可能具有限制,使得它只能产生有限数量的颜色。在那些情况下,也执行色彩量化。这里我们使用 k-means 聚类进行色彩量化。
...
...
@@ -154,7 +154,7 @@ cv.destroyAllWindows()
```
对于 K = 8,请参见下面的结果:
<div
align=
"center"
><img
src=
"img/oc_color_quantization.jpg"
/>
<br>
<b>
图像
</b></div>
<div
align=
"center"
><img
src=
"
https://opencv.apachecn.org/docs/4.0.0/
img/oc_color_quantization.jpg"
/>
<br>
<b>
图像
</b></div>
## 额外资源
## 练习
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录