未验证 提交 edc015ae 编写于 作者: 飞龙 提交者: GitHub

Merge pull request #51 from zhangqizky/master

4.1&4.2校对
......@@ -21,7 +21,7 @@
```
> **注意**
> 对于 HSV, 色调范围为 [0,179], 饱和度范围为 [0,255] ,像素值为 [0,255]. 不同的软件使用不同的比例. 所以如果你想用 OpenCV 的值与别的软件的值作对比,你需要归一化这些范围。
> 对于 HSV, 色调(Hue)范围为 [0,179], 饱和度(Saturation)范围为 [0,255] ,明亮度(Value)为 [0,255]. 不同的软件使用不同的比例. 所以如果你想用 OpenCV 的值与别的软件的值作对比,你需要归一化这些范围。
## 目标追踪
......@@ -29,7 +29,7 @@
* 提取每一视频帧。
* 将 BGR 转化为 HSV 颜色空间。
* 我们将 HSV 图片的阈值设为蓝色范围
* 我们用蓝色像素的范围对该 HSV 图片做阈值
* 现在提取出了蓝色对象,我们可以随意处理图片了
......@@ -62,11 +62,11 @@ cv.destroyAllWindows()
接下来的图片显示了追踪蓝色对象:
![图片](./img/frame.jpg)
![图片](./img/4-1-1.jpg)
> **注意**
> 在图片中有一些噪声,在之后的章节中我们会学习如何消除。
> 这是目标追踪最简单的例子。当你学会了轮廓函数,你就可以做的更多,例如找到对象的质心并且使用它来追踪对象,只需在相机和前面移动你的手就可以绘制图表,还有许多其他有趣的东西。
> 这是目标追踪最简单的例子。当你学会了轮廓函数,你就可以做的更多,例如找到对象的质心并且使用它来追踪对象,只需在相机前面移动你的手,手指或者掌心的轨迹就可以绘制图形,还有许多其他有趣的东西。
## 如何找到 HSV 值去追踪?
......
......@@ -3,16 +3,15 @@
在本教程中:
* 你将会学到将不同的几何变换应用于图像,如平移、旋转、仿射变换等。
* 另外,我们会创建一个从视频中提取彩色对象的应用。
* 你会学到如下函数:**[cv.getPerspectiveTransform](https://docs.opencv.org/4.0.0/da/d54/group__imgproc__transform.html#ga20f62aa3235d869c9956436c870893ae )**
## 变换
OpenCV 提供了两个变换函数, **[ cv.warpAffine](https://docs.opencv.org/4.0.0/da/d54/group__imgproc__transform.html#ga0203d9ee5fcd28d40dbc4a1ea4451983)****[cv.getPerspectiveTransform](https://docs.opencv.org/4.0.0/da/d54/group__imgproc__transform.html#ga20f62aa3235d869c9956436c870893ae)**他们可以完成所有类型的变换。**[ cv.warpAffine](https://docs.opencv.org/4.0.0/da/d54/group__imgproc__transform.html#ga0203d9ee5fcd28d40dbc4a1ea4451983)** 输入为 2*3 的变换矩阵, **[cv.getPerspectiveTransform](https://docs.opencv.org/4.0.0/da/d54/group__imgproc__transform.html#ga20f62aa3235d869c9956436c870893ae)** 输入为 2*3 的变换矩阵。
OpenCV 提供了两个变换函数, **[ cv.warpAffine](https://docs.opencv.org/4.0.0/da/d54/group__imgproc__transform.html#ga0203d9ee5fcd28d40dbc4a1ea4451983)****[cv.getPerspectiveTransform](https://docs.opencv.org/4.0.0/da/d54/group__imgproc__transform.html#ga20f62aa3235d869c9956436c870893ae)**用这两个函数就可以完成所有类型的变换。**[ cv.warpAffine](https://docs.opencv.org/4.0.0/da/d54/group__imgproc__transform.html#ga0203d9ee5fcd28d40dbc4a1ea4451983)** 输入为 2x3 的变换矩阵, **[cv.getPerspectiveTransform](https://docs.opencv.org/4.0.0/da/d54/group__imgproc__transform.html#ga20f62aa3235d869c9956436c870893ae)** 输入为 2x3 的变换矩阵。
## 比例
## 缩放
比例是调整图片的大小。 OpenCV 使用 **[cv.resize()](https://docs.opencv.org/4.0.0/da/d54/group__imgproc__transform.html#ga47a974309e9102f5f08231edc7e7529d)** 函数进行调整。可以手动指定图像的大小,也可以指定比例因子。可以使用不同的插值方法。最好的插值方法是用于收缩的 **[cv.INTER_AREA](https://docs.opencv.org/4.0.0/da/d54/group__imgproc__transform.html#gga5bb5a1fea74ea38e1a5445ca803ff121acf959dca2480cc694ca016b81b442ceb)****[cv.INTER_CUBIC](https://docs.opencv.org/4.0.0/da/d54/group__imgproc__transform.html#gga5bb5a1fea74ea38e1a5445ca803ff121a55e404e7fa9684af79fe9827f36a5dc1)** (慢)和快速方法 **[cv.INTER_LINEAR](https://docs.opencv.org/4.0.0/da/d54/group__imgproc__transform.html#gga5bb5a1fea74ea38e1a5445ca803ff121ac97d8e4880d8b5d509e96825c7522deb )** 。默认情况下,所使用的插值方法都是 **[cv.INTER_AREA](https://docs.opencv.org/4.0.0/da/d54/group__imgproc__transform.html#gga5bb5a1fea74ea38e1a5445ca803ff121acf959dca2480cc694ca016b81b442ceb)** 。你可以使用如下方法调整输入图片大小:
缩放是调整图片的大小。 OpenCV 使用 **[cv.resize()](https://docs.opencv.org/4.0.0/da/d54/group__imgproc__transform.html#ga47a974309e9102f5f08231edc7e7529d)** 函数进行调整。可以手动指定图像的大小,也可以指定比例因子。可以使用不同的插值方法。对于下采样(图像上缩小),最合适的插值方法是 **[cv.INTER_AREA](https://docs.opencv.org/4.0.0/da/d54/group__imgproc__transform.html#gga5bb5a1fea74ea38e1a5445ca803ff121acf959dca2480cc694ca016b81b442ceb)** 对于上采样(放大),最好的方法是 **[cv.INTER_CUBIC](https://docs.opencv.org/4.0.0/da/d54/group__imgproc__transform.html#gga5bb5a1fea74ea38e1a5445ca803ff121a55e404e7fa9684af79fe9827f36a5dc1)** (速度较慢)和 **[cv.INTER_LINEAR](https://docs.opencv.org/4.0.0/da/d54/group__imgproc__transform.html#gga5bb5a1fea74ea38e1a5445ca803ff121ac97d8e4880d8b5d509e96825c7522deb )** (速度较快)。默认情况下,所使用的插值方法都是 **[cv.INTER_AREA](https://docs.opencv.org/4.0.0/da/d54/group__imgproc__transform.html#gga5bb5a1fea74ea38e1a5445ca803ff121acf959dca2480cc694ca016b81b442ceb)** 。你可以使用如下方法调整输入图片大小:
```python
import numpy as np
......@@ -24,13 +23,13 @@ height, width = img.shape[:2]
res = cv.resize(img,(2*width, 2*height), interpolation = cv.INTER_CUBIC)
```
## 变换
## 平移变换
变换是物体位置的移动。如果知道 **(x,y)** 方向的偏移量,假设为 **(t_{x},t_{y})**,则可以创建如下转换矩阵 **M**
平移变换是物体位置的移动。如果知道 **(x,y)** 方向的偏移量,假设为 **(t_x,t_y)**,则可以创建如下转换矩阵 **M**
![图片](./img/Geometric_Transformations_fomula_1.jpg)
![图片](./img/Geometric_Transformations_fomula_1.png)
您可以将语句放入 np.float32 类型的 numpy 数组中,并将其传递到 **[ cv.warpAffine](https://docs.opencv.org/4.0.0/da/d54/group__imgproc__transform.html#ga0203d9ee5fcd28d40dbc4a1ea4451983)**。请参见以下转换(100,50)的示例:
您可以将变换矩阵存为 np.float32 类型的 numpy 数组,并将其作为 **[ cv.warpAffine](https://docs.opencv.org/4.0.0/da/d54/group__imgproc__transform.html#ga0203d9ee5fcd28d40dbc4a1ea4451983)** 的第二个参数。请参见以下转换(100,50)的示例:
```python
import numpy as np
......@@ -54,17 +53,17 @@ cv.destroyAllWindows()
## 旋转
**\Theta** 角度旋转图片的转换矩阵形式为:
![图片](./img/theta.png)角度旋转图片的转换矩阵形式为:
![图片](./img/Geometric_Transformations_fomula_2.jpg)
![图片](./img/Geometric_Transformations_fomula_2.png)
但 Opencv 提供了可变旋转中心的比例变换,所以你可以在任意位置旋转图片,修改后的转换矩阵为:
![图片](./img/Geometric_Transformations_fomula_3.jpg)
![图片](./img/Geometric_Transformations_fomula_3.png)
其中:
![图片](./img/Geometric_Transformations_fomula_4.jpg)
![图片](./img/Geometric_Transformations_fomula_4.png)
为了找到这个转换矩阵,opencv 提供了一个函数, **[cv.getRotationMatrix2D](https://docs.opencv.org/4.0.0/da/d54/group__imgproc__transform.html#gafbbc470ce83812914a70abfb604f4326)** 。请查看下面的示例,它将图像相对于中心旋转 90 度,而不进行任何缩放。
......@@ -103,9 +102,9 @@ plt.show()
![图片](./img/Geometric_Transformations_3.jpg)
## 感知变换
## 透视变换
于感知转换,你需要一个 3x3 变换矩阵。即使在转换之后,直线也将保持直线。要找到这个变换矩阵,需要输入图像上的 4 个点和输出图像上的相应点。在这四点中,有三点不应该共线。然后通过 **[cv.getPerspectiveTransform](https://docs.opencv.org/4.0.0/da/d54/group__imgproc__transform.html#ga20f62aa3235d869c9956436c870893ae)** 找到变换矩阵。然后对这个 3x3 变换矩阵使用 **[cv.warpPerspective](https://docs.opencv.org/4.0.0/da/d54/group__imgproc__transform.html#gaf73673a7e8e18ec6963e3774e6a94b87)**
透视转换,你需要一个 3x3 变换矩阵。即使在转换之后,直线也将保持直线。要找到这个变换矩阵,需要输入图像上的 4 个点和输出图像上的相应点。在这四点中,任意三点不应该共线。然后通过 **[cv.getPerspectiveTransform](https://docs.opencv.org/4.0.0/da/d54/group__imgproc__transform.html#ga20f62aa3235d869c9956436c870893ae)** 找到变换矩阵。然后对这个 3x3 变换矩阵使用 **[cv.warpPerspective](https://docs.opencv.org/4.0.0/da/d54/group__imgproc__transform.html#gaf73673a7e8e18ec6963e3774e6a94b87)**
请看代码:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册