Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit8d6ffac

Browse files
CodecWanggitbook-bot
authored andcommitted
GitBook: [master] 33 pages modified
1 parent24ec9ec commit8d6ffac

File tree

33 files changed

+4601
-179
lines changed

33 files changed

+4601
-179
lines changed

‎README.md

Lines changed: 46 additions & 179 deletions
Original file line numberDiff line numberDiff line change
@@ -1,184 +1,51 @@
1-
#OpenCV-Python Tutorial for Beginners
2-
3-
---
1+
#目录
42

53
![](http://blog.codec.wang/opencv-python-tutorial-amend-new-cover.png)
64

7-
- Blog:http://codec.wang
8-
- Github中MathJax的公示显示有误,可到[Blog](http://codec.wang/opencv-python)查看。
9-
-[OpenCV-Python 3.x旧版教程](https://github.com/CodecWang/OpenCV-Python-Tutorial/tree/3.x)
5+
* 博客:[http://opencv.codec.wang](http://codec.wang)
6+
7+
###入门篇
8+
9+
| 标题| 简介|
10+
| :---| :---|
11+
|[简介与安装](01-Introduction-and-Installation)| 了解和安装OpenCV-Python|
12+
|[番外篇: 代码性能优化](Extra-01-Code-Optimization)| 度量运行时间/提升效率的几种方式|
13+
|[基本元素: 图片](02-Basic-Element-Image)| 图片的载入/显示和保存|
14+
|[番外篇: 无损保存和Matplotlib使用](Extra-02-High-Quality-Save-and-Matplotlib)| 高保真保存图片、Matplotlib库的简单使用|
15+
|[打开摄像头](03-Open-Camera)| 打开摄像头捕获图片/录制视频/播放本地视频|
16+
|[番外篇: 滑动条](Extra-03-Trackbar)| 滑动条的使用|
17+
|[图像基本操作](04-Basic-Operations)| 访问像素点/ROI/通道分离合并/图片属性|
18+
|[颜色空间转换](05-Changing-Colorspaces)| 颜色空间转换/追踪特定颜色物体|
19+
|[阈值分割](06-Image-Thresholding)| 阈值分割/二值化|
20+
|[番外篇: Otsu阈值法](Extra-04-Otsu-Thresholding)| 双峰图片/Otsu自动阈值法|
21+
|[图像几何变换](07-Image-Geometric-Transformation)| 旋转/平移/缩放/翻转|
22+
|[番外篇: 仿射变换与透视变换](Extra-05-Warpaffine-Warpperspective)| 基于2×3的仿射变换/基于3×3的透视变换|
23+
|[绘图功能](08-Drawing-Function)| 画线/画圆/画矩形/添加文字|
24+
|[番外篇: 鼠标绘图](Extra-06-Drawing-with-Mouse)| 用鼠标实时绘图|
25+
|[挑战篇: 画动态时钟](Challenge-01-Draw-Dynamic-Clock)| /|
26+
|[挑战篇: PyQt5编写GUI界面](Challenge-02-Create-GUI-with-PyQt5)| /|
27+
28+
###基础篇
29+
30+
| 标题| 简介|
31+
| :---| :---|
32+
|[图像混合](09-Image-Blending)| 算数运算/混合/按位运算|
33+
|[番外篇: 亮度与对比度](Extra-07-Contrast-and-Brightness)| 调整图片的亮度和对比度|
34+
|[平滑图像](10-Smoothing-Images)| 卷积/滤波/模糊/降噪|
35+
|[番外篇: 卷积基础-图片边框](Extra-08-Padding-and-Convolution)| 了解卷积/滤波的基础知识/给图片添加边框|
36+
|[边缘检测](11-Edge-Detection)| Canny/Sobel算子|
37+
|[番外篇: 图像梯度](Extra-09-Image-Gradients)| 了解图像梯度和边缘检测的相关概念|
38+
|[腐蚀与膨胀](12-Erode-and-Dilate)| 形态学操作/腐蚀/膨胀/开运算/闭运算|
39+
|[轮廓](13-Contours)| 寻找/绘制轮廓|
40+
|[番外篇: 轮廓层级](Extra-10-Contours-Hierarchy)| 了解轮廓间的层级关系|
41+
|[轮廓特征](14-Contour-Features)| 面积/周长/最小外接矩\(\)/形状匹配|
42+
|[番外篇: 凸包及更多轮廓特征](Extra-11-Convex-Hull)| 计算凸包/了解更多轮廓特征|
43+
|[直方图](15-Histograms)| 计算绘制直方图/均衡化|
44+
|[模板匹配](16-Template-Matching)| 图中找小图|
45+
|[霍夫变换](17-Hough-Transform)| 提取直线/圆|
46+
|[挑战任务: 车道检测](Challenge-03-Lane-Road-Detection)| /|
47+
48+
>如果您觉得写的不错的话,欢迎打赏,我会写出更好的内容!✊
1049
11-
##:book:Content
50+
!\[\]\([https://blog.codec.wang/opencv-python-tutorial-amend-new-cover.png](https://blog.codec.wang/opencv-python-tutorial-amend-new-cover.png)\)
1251

13-
<table>
14-
<thead>
15-
<tr>
16-
<th>序号</th>
17-
<th>标题</th>
18-
<th>内容简介</th>
19-
</tr>
20-
</thead>
21-
<tbody>
22-
<tr>
23-
<td colspan='3'><h4>:boom:入门篇</h4></td>
24-
</tr>
25-
<tr>
26-
<td>01</td>
27-
<td><a href="01-Introduction-and-Installation">简介与安装<br/>Introduction and Installation</a></td>
28-
<td>了解和安装OpenCV-Python</td>
29-
</tr>
30-
<tr>
31-
<td>02</td>
32-
<td><a href="Extra-01-Code-Optimization">番外篇: 代码性能优化<br/>Code Optimization</a></td>
33-
<td>度量运行时间/提升效率的几种方式</td>
34-
</tr>
35-
<tr>
36-
<td>03</td>
37-
<td><a href="02-Basic-Element-Image">基本元素: 图片<br/>Basic Element: Image</a></td>
38-
<td>图片的载入/显示和保存</td>
39-
</tr>
40-
<tr>
41-
<td>04</td>
42-
<td><a href="Extra-02-High-Quality-Save-and-Matplotlib">番外篇: 无损保存和Matplotlib使用<br/>High Quality Save and Matplotlib</a></td>
43-
<td>高保真保存图片、Matplotlib库的简单使用</td>
44-
</tr>
45-
<tr>
46-
<td>05</td>
47-
<td><a href="03-Open-Camera">打开摄像头<br/>Open Camera</a></td>
48-
<td>打开摄像头捕获图片/录制视频/播放本地视频</td>
49-
</tr>
50-
<tr>
51-
<td>06</td>
52-
<td><a href="Extra-03-Trackbar">番外篇: 滑动条<br/>Trackbar</a></td>
53-
<td>滑动条的使用</td>
54-
</tr>
55-
<tr>
56-
<td>07</td>
57-
<td><a href="04-Basic-Operations">图像基本操作<br/>Basic Operations</a></td>
58-
<td>访问像素点/ROI/通道分离合并/图片属性</td>
59-
</tr>
60-
<tr>
61-
<td>08</td>
62-
<td><a href="05-Changing-Colorspaces">颜色空间转换<br/>Changing Colorspaces</a></td>
63-
<td>颜色空间转换/追踪特定颜色物体</td>
64-
</tr>
65-
<tr>
66-
<td>09</td>
67-
<td><a href="06-Image-Thresholding">阈值分割<br/>Image Thresholding</a></td>
68-
<td>阈值分割/二值化</td>
69-
</tr>
70-
<tr>
71-
<td>10</td>
72-
<td><a href="Extra-04-Otsu-Thresholding">番外篇: Otsu阈值法<br/>Otsu Thresholding</a></td>
73-
<td>双峰图片/Otsu自动阈值法</td>
74-
</tr>
75-
<tr>
76-
<td>11</td>
77-
<td><a href="07-Image-Geometric-Transformation">图像几何变换<br/>Image Geometric Transformation</a></td>
78-
<td>旋转/平移/缩放/翻转</td>
79-
</tr>
80-
<tr>
81-
<td>12</td>
82-
<td><a href="Extra-05-Warpaffine-Warpperspective">番外篇: 仿射变换与透视变换<br/>Warpaffine Warpperspective</a></td>
83-
<td>基于2×3的仿射变换/基于3×3的透视变换</td>
84-
</tr>
85-
<tr>
86-
<td>13</td>
87-
<td><a href="08-Drawing-Function">绘图功能<br/>Drawing Function</a></td>
88-
<td>画线/画圆/画矩形/添加文字</td>
89-
</tr>
90-
<tr>
91-
<td>14</td>
92-
<td><a href="Extra-06-Drawing-with-Mouse">番外篇: 鼠标绘图<br/>Drawing with Mouse</a></td>
93-
<td>用鼠标实时绘图</td>
94-
</tr>
95-
<tr>
96-
<td>15</td>
97-
<td><a href="Challenge-01-Draw-Dynamic-Clock">挑战篇: 画动态时钟<br/>Draw Dynamic Clock</a></td>
98-
<td>/</td>
99-
</tr>
100-
<tr>
101-
<td>16</td>
102-
<td><a href="Challenge-02-Create-GUI-with-PyQt5">挑战篇: PyQt5编写GUI界面<br/>Create GUI with PyQt5</a></td>
103-
<td>/</td>
104-
</tr>
105-
<tr>
106-
<td colspan='3'><h4>:fire:基础篇</h4></td>
107-
</tr>
108-
<tr>
109-
<td>17</td>
110-
<td><a href="09-Image-Blending">图像混合<br/>Image Blending</a></td>
111-
<td>算数运算/混合/按位运算</td>
112-
</tr>
113-
<tr>
114-
<td>18</td>
115-
<td><a href="Extra-07-Contrast-and-Brightness">番外篇: 亮度与对比度<br/>Contrast and Brightness</a></td>
116-
<td>调整图片的亮度和对比度</td>
117-
</tr>
118-
<tr>
119-
<td>19</td>
120-
<td><a href="10-Smoothing-Images">平滑图像<br/>Smoothing Images</a></td>
121-
<td>卷积/滤波/模糊/降噪</td>
122-
</tr>
123-
<tr>
124-
<td>20</td>
125-
<td><a href="Extra-08-Padding-and-Convolution">番外篇: 卷积基础-图片边框<br/>Padding and Convolution</a></td>
126-
<td>了解卷积/滤波的基础知识/给图片添加边框</td>
127-
</tr>
128-
<tr>
129-
<td>21</td>
130-
<td><a href="11-Edge-Detection">边缘检测<br/>Edge Detection</a></td>
131-
<td>Canny/Sobel</td>
132-
</tr>
133-
<tr>
134-
<td>22</td>
135-
<td><a href="Extra-09-Image-Gradients">番外篇: 图像梯度<br/>Image Gradients</a></td>
136-
<td>了解图像梯度和边缘检测的相关概念</td>
137-
</tr>
138-
<tr>
139-
<td>23</td>
140-
<td><a href="12-Erode-and-Dilate">腐蚀与膨胀<br/>Erode and Dilate</a></td>
141-
<td>形态学操作/腐蚀/膨胀/开运算/闭运算</td>
142-
</tr>
143-
<tr>
144-
<td>24</td>
145-
<td><a href="13-Contours">轮廓<br/>Contours</a></td>
146-
<td>寻找/绘制轮廓</td>
147-
</tr>
148-
<tr>
149-
<td>25</td>
150-
<td><a href="Extra-10-Contours-Hierarchy">番外篇: 轮廓层级<br/>Contours Hierarchy</a></td>
151-
<td>了解轮廓间的层级关系</td>
152-
</tr>
153-
<tr>
154-
<td>26</td>
155-
<td><a href="14-Contour-Features">轮廓特征<br/>Contour Features</a></td>
156-
<td>面积/周长/最小外接矩(圆)/形状匹配</td>
157-
</tr>
158-
<tr>
159-
<td>27</td>
160-
<td><a href="Extra-11-Convex-Hull">番外篇: 凸包及更多轮廓特征<br/>Convex Hull</a></td>
161-
<td>计算凸包/了解更多轮廓特征</td>
162-
</tr>
163-
<tr>
164-
<td>28</td>
165-
<td><a href="15-Histograms">直方图<br/>Histograms</a></td>
166-
<td>计算绘制直方图/均衡化</td>
167-
</tr>
168-
<tr>
169-
<td>29</td>
170-
<td><a href="16-Template-Matching">模板匹配<br/></a></td>
171-
<td>大图中找小图</td>
172-
</tr>
173-
<tr>
174-
<td>30</td>
175-
<td><a href="17-Hough-Transform">霍夫变换<br/>Hough Transform</a></td>
176-
<td>提取直线/圆</td>
177-
</tr>
178-
<tr>
179-
<td>31</td>
180-
<td><a href="Challenge-03-Lane-Road-Detection">挑战任务: 车道检测<br/>Lane Road Detection</a></td>
181-
<td>/</td>
182-
</tr>
183-
</tbody>
184-
</table>

‎SUMMARY.md

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
#Table of contents
2+
3+
*[目录](README.md)
4+
5+
##入门篇 <aid="start"></a>
6+
7+
*[01: 简介与安装](start/01-introduction-and-installation.md)
8+
*[02: 基本元素: 图片](start/02-basic-element-image.md)
9+
*[03: 打开摄像头](start/03-open-camera.md)
10+
*[04: 图像基本操作](start/04-basic-operations.md)
11+
*[05: 颜色空间转换](start/05-changing-colorspaces.md)
12+
*[06: 阈值分割](start/06-image-thresholding.md)
13+
*[07: 图像几何变换](start/07-image-geometric-transformation.md)
14+
*[08: 绘图功能](start/08-drawing-function.md)
15+
*[番外篇: 代码性能优化](start/extra-01-code-optimization.md)
16+
*[番外篇: 无损保存和Matplotlib](start/extra-02-high-quality-save-and-matplotlib.md)
17+
*[番外篇: 滑动条](start/extra-03-trackbar.md)
18+
*[番外篇: Otsu阈值法](start/extra-04-otsu-thresholding.md)
19+
*[番外篇: 仿射变换与透视变换](start/extra-05-warpaffine-warpperspective.md)
20+
*[番外篇: 鼠标绘图](start/extra-06-drawing-with-mouse.md)
21+
*[挑战任务: 画动态时钟](start/challenge-01-draw-dynamic-clock.md)
22+
*[挑战任务: PyQt5编写GUI界面](start/challenge-02-create-gui-with-pyqt5.md)
23+
24+
##基础篇 <aid="basic"></a>
25+
26+
*[09: 图像混合](basic/09-image-blending.md)
27+
*[10: 平滑图像](basic/10-smoothing-images.md)
28+
*[11: 边缘检测](basic/11-edge-detection.md)
29+
*[12: 腐蚀与膨胀](basic/12-erode-and-dilate.md)
30+
*[13: 轮廓](basic/13-contours.md)
31+
*[14: 轮廓特征](basic/14-contour-features.md)
32+
*[15: 直方图](basic/15-histograms.md)
33+
*[16: 模板匹配](basic/16-template-matching.md)
34+
*[17: 霍夫变换](basic/17-hough-transform.md)
35+
*[番外篇: 亮度与对比度](basic/extra-07-contrast-and-brightness.md)
36+
*[番外篇: 卷积基础-图片边框](basic/extra-08-padding-and-convolution.md)
37+
*[番外篇: 图像梯度](basic/extra-09-image-gradients.md)
38+
*[番外篇: 轮廓层级](basic/extra-10-contours-hierarchy.md)
39+
*[番外篇: 凸包及更多轮廓特征](basic/extra-11-convex-hull.md)
40+
*[挑战任务: 车道检测](basic/challenge-03-lane-road-detection.md)
41+

‎basic/09-image-blending.md

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
#09: 图像混合
2+
3+
![](http://blog.codec.wang/cv2_image_blending_6_4.jpg)
4+
5+
学习图片间的数学运算,图像混合。图片等可到[源码处]()下载。
6+
7+
##目标
8+
9+
* 图片间的数学运算,如相加、按位运算等
10+
* OpenCV函数:`cv2.add()`,`cv2.addWeighted()`,`cv2.bitwise_and()`
11+
12+
##教程
13+
14+
>首先恭喜你已经完成了入门篇的学习噢,接下来我们学习一些OpenCV的基础内容,加油\(ง •\_\)
15+
16+
###图片相加
17+
18+
要叠加两张图片,可以用`cv2.add()`函数,相加两幅图片的形状(高度/宽度/通道数)必须相同。numpy中可以直接用res = img + img1相加,但这两者的结果并不相同:
19+
20+
```python
21+
x= np.uint8([250])
22+
y= np.uint8([10])
23+
print(cv2.add(x, y))# 250+10 = 260 => 255
24+
print(x+ y)# 250+10 = 260 % 256 = 4
25+
```
26+
27+
如果是二值化图片(只有0和255两种值),两者结果是一样的(用numpy的方式更简便一些)。
28+
29+
###图像混合
30+
31+
图像混合`cv2.addWeighted()`也是一种图片相加的操作,只不过两幅图片的权重不一样,γ相当于一个修正值:
32+
33+
$$
34+
dst = \alpha\times img1+\beta\times img2 + \gamma
35+
$$
36+
37+
```python
38+
img1= cv2.imread('lena_small.jpg')
39+
img2= cv2.imread('opencv-logo-white.png')
40+
res= cv2.addWeighted(img1,0.6, img2,0.4,0)
41+
```
42+
43+
![&#x56FE;&#x50CF;&#x6DF7;&#x5408;](http://blog.codec.wang/cv2_image_blending_6_4.jpg)
44+
45+
>经验之谈:α和β都等于1时,就相当于图片相加。
46+
47+
###按位操作
48+
49+
按位操作包括按位与/或/非/异或操作,有什么用途呢?比如说我们要实现下图的效果:
50+
51+
![](http://blog.codec.wang/cv2_bitwise_operations_demo.jpg)
52+
53+
如果将两幅图片直接相加会改变图片的颜色,如果用图像混合,则会改变图片的透明度,所以我们需要用按位操作。首先来了解一下[掩膜](https://baike.baidu.com/item/%E6%8E%A9%E8%86%9C/8544392?fr=aladdin)(mask)的概念:掩膜是用一副二值化图片对另外一幅图片进行局部的遮挡,看下图就一目了然了:
54+
55+
![&#x63A9;&#x819C;&#x6982;&#x5FF5;](http://blog.codec.wang/cv2_understand_mask.jpg)
56+
57+
所以我们的思路就是把原图中要放logo的区域抠出来,再把logo放进去就行了:
58+
59+
```python
60+
img1= cv2.imread('lena.jpg')
61+
img2= cv2.imread('opencv-logo-white.png')
62+
63+
# 把logo放在左上角,所以我们只关心这一块区域
64+
rows, cols= img2.shape[:2]
65+
roi= img1[:rows, :cols]
66+
67+
# 创建掩膜
68+
img2gray= cv2.cvtColor(img2, cv2.COLOR_BGR2GRAY)
69+
ret, mask= cv2.threshold(img2gray,10,255, cv2.THRESH_BINARY)
70+
mask_inv= cv2.bitwise_not(mask)
71+
72+
# 保留除logo外的背景
73+
img1_bg= cv2.bitwise_and(roi, roi,mask=mask_inv)
74+
dst= cv2.add(img1_bg, img2)# 进行融合
75+
img1[:rows, :cols]= dst# 融合后放在原图上
76+
```
77+
78+
>经验之谈:掩膜的概念在图像混合/叠加的场景下使用较多,可以多多练习噢!
79+
80+
##小结
81+
82+
*`cv2.add()`用来叠加两幅图片,`cv2.addWeighted()`也是叠加两幅图片,但两幅图片的权重不一样。
83+
*`cv2.bitwise_and()`,`cv2.bitwise_not()`,`cv2.bitwise_or()`,`cv2.bitwise_xor()`分别执行按位与/或/非/异或运算。掩膜就是用来对图片进行全局或局部的遮挡。
84+
85+
##接口文档
86+
87+
*[cv2.add\(\)](https://docs.opencv.org/4.0.0/d2/de8/group__core__array.html#ga10ac1bfb180e2cfda1701d06c24fdbd6)
88+
*[cv2.addWeighted\(\)](https://docs.opencv.org/4.0.0/d2/de8/group__core__array.html#gafafb2513349db3bcff51f54ee5592a19)
89+
*[cv2.bitwise\_and\(\)](https://docs.opencv.org/4.0.0/d2/de8/group__core__array.html#ga60b4d04b251ba5eb1392c34425497e14)
90+
*[cv2.bitwise\_not\(\)](https://docs.opencv.org/4.0.0/d2/de8/group__core__array.html#ga0002cf8b418479f4cb49a75442baee2f)
91+
92+
##引用
93+
94+
*[本节源码](https://github.com/codecwang/OpenCV-Python-Tutorial/tree/master/09-Image-Blending)
95+
*[掩膜](https://baike.baidu.com/item/%E6%8E%A9%E8%86%9C/8544392?fr=aladdin)
96+
*[Arithmetic Operations on Images](http://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_core/py_image_arithmetics/py_image_arithmetics.html)
97+

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp