-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathopencv_crash_deep_learning2.html
More file actions
346 lines (295 loc) · 38.8 KB
/
opencv_crash_deep_learning2.html
File metadata and controls
346 lines (295 loc) · 38.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
<!DOCTYPE html>
<html lang="cn">
<head>
<meta charset="utf-8" />
<title>计算机视觉opcencv工具深度学习快速实战2 opencv快速入门</title>
<link rel="stylesheet" href="/theme/css/main.css" />
</head>
<body id="index" class="home">
<header id="banner" class="body">
<h1><a href="/">python自动化测试人工智能 </a></h1>
<nav><ul>
<li><a href="/category/ba-zi.html">八字</a></li>
<li><a href="/category/ce-shi.html">测试</a></li>
<li><a href="/category/ce-shi-kuang-jia.html">测试框架</a></li>
<li><a href="/category/common.html">common</a></li>
<li><a href="/category/da-shu-ju.html">大数据</a></li>
<li><a href="/category/feng-shui.html">风水</a></li>
<li><a href="/category/ji-qi-xue-xi.html">机器学习</a></li>
<li><a href="/category/jie-meng.html">解梦</a></li>
<li><a href="/category/linux.html">linux</a></li>
<li class="active"><a href="/category/python.html">python</a></li>
<li><a href="/category/shu-ji.html">书籍</a></li>
<li><a href="/category/shu-ju-fen-xi.html">数据分析</a></li>
<li><a href="/category/zhong-cao-yao.html">中草药</a></li>
<li><a href="/category/zhong-yi.html">中医</a></li>
</ul></nav>
</header><!-- /#banner -->
<section id="content" class="body">
<article>
<header>
<h1 class="entry-title">
<a href="/opencv_crash_deep_learning2.html" rel="bookmark"
title="Permalink to 计算机视觉opcencv工具深度学习快速实战2 opencv快速入门">计算机视觉opcencv工具深度学习快速实战2 opencv快速入门</a></h1>
</header>
<div class="entry-content">
<footer class="post-info">
<abbr class="published" title="2018-11-19T12:20:00+08:00">
Published: 一 19 十一月 2018
</abbr>
<address class="vcard author">
By <a class="url fn" href="/author/andrew.html">andrew</a>
</address>
<p>In <a href="/category/python.html">python</a>.</p>
</footer><!-- /.post-info --> <h3 id="opencv">opencv基本操作</h3>
<div class="highlight"><pre><span></span><span class="c1"># -*- coding: utf-8 -*-</span>
<span class="c1"># Author: xurongzhong#126.com wechat:pythontesting qq:37391319</span>
<span class="c1"># 技术支持 (可以加钉钉pythontesting邀请加入) </span>
<span class="c1"># qq群:144081101 591302926 567351477</span>
<span class="c1"># CreateDate: 2018-11-17</span>
<span class="kn">import</span> <span class="nn">imutils</span>
<span class="kn">import</span> <span class="nn">cv2</span>
<span class="c1"># 读取图片信息</span>
<span class="n">image</span> <span class="o">=</span> <span class="n">cv2</span><span class="o">.</span><span class="n">imread</span><span class="p">(</span><span class="s2">"jp.png"</span><span class="p">)</span>
<span class="p">(</span><span class="n">h</span><span class="p">,</span> <span class="n">w</span><span class="p">,</span> <span class="n">d</span><span class="p">)</span> <span class="o">=</span> <span class="n">image</span><span class="o">.</span><span class="n">shape</span>
<span class="k">print</span><span class="p">(</span><span class="s2">"width={}, height={}, depth={}"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">w</span><span class="p">,</span> <span class="n">h</span><span class="p">,</span> <span class="n">d</span><span class="p">))</span>
<span class="c1"># 显示图片</span>
<span class="n">cv2</span><span class="o">.</span><span class="n">imshow</span><span class="p">(</span><span class="s2">"Image"</span><span class="p">,</span> <span class="n">image</span><span class="p">)</span>
<span class="n">cv2</span><span class="o">.</span><span class="n">waitKey</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="c1"># 访问像素</span>
<span class="p">(</span><span class="n">B</span><span class="p">,</span> <span class="n">G</span><span class="p">,</span> <span class="n">R</span><span class="p">)</span> <span class="o">=</span> <span class="n">image</span><span class="p">[</span><span class="mi">100</span><span class="p">,</span> <span class="mi">50</span><span class="p">]</span>
<span class="k">print</span><span class="p">(</span><span class="s2">"R={}, G={}, B={}"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">R</span><span class="p">,</span> <span class="n">G</span><span class="p">,</span> <span class="n">B</span><span class="p">))</span>
<span class="c1"># 选取图片区间 ROI (Region of Interest)</span>
<span class="n">roi</span> <span class="o">=</span> <span class="n">image</span><span class="p">[</span><span class="mi">60</span><span class="p">:</span><span class="mi">160</span><span class="p">,</span> <span class="mi">320</span><span class="p">:</span><span class="mi">420</span><span class="p">]</span>
<span class="n">cv2</span><span class="o">.</span><span class="n">imshow</span><span class="p">(</span><span class="s2">"ROI"</span><span class="p">,</span> <span class="n">roi</span><span class="p">)</span>
<span class="n">cv2</span><span class="o">.</span><span class="n">waitKey</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="c1"># 缩放</span>
<span class="n">resized</span> <span class="o">=</span> <span class="n">cv2</span><span class="o">.</span><span class="n">resize</span><span class="p">(</span><span class="n">image</span><span class="p">,</span> <span class="p">(</span><span class="mi">200</span><span class="p">,</span> <span class="mi">200</span><span class="p">))</span>
<span class="n">cv2</span><span class="o">.</span><span class="n">imshow</span><span class="p">(</span><span class="s2">"Fixed Resizing"</span><span class="p">,</span> <span class="n">resized</span><span class="p">)</span>
<span class="n">cv2</span><span class="o">.</span><span class="n">waitKey</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="c1"># 按比例缩放</span>
<span class="n">r</span> <span class="o">=</span> <span class="mf">300.0</span> <span class="o">/</span> <span class="n">w</span>
<span class="n">dim</span> <span class="o">=</span> <span class="p">(</span><span class="mi">300</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">h</span> <span class="o">*</span> <span class="n">r</span><span class="p">))</span>
<span class="n">resized</span> <span class="o">=</span> <span class="n">cv2</span><span class="o">.</span><span class="n">resize</span><span class="p">(</span><span class="n">image</span><span class="p">,</span> <span class="n">dim</span><span class="p">)</span>
<span class="n">cv2</span><span class="o">.</span><span class="n">imshow</span><span class="p">(</span><span class="s2">"Aspect Ratio Resize"</span><span class="p">,</span> <span class="n">resized</span><span class="p">)</span>
<span class="n">cv2</span><span class="o">.</span><span class="n">waitKey</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="c1"># 使用imutils缩放</span>
<span class="n">resized</span> <span class="o">=</span> <span class="n">imutils</span><span class="o">.</span><span class="n">resize</span><span class="p">(</span><span class="n">image</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mi">300</span><span class="p">)</span>
<span class="n">cv2</span><span class="o">.</span><span class="n">imshow</span><span class="p">(</span><span class="s2">"Imutils Resize"</span><span class="p">,</span> <span class="n">resized</span><span class="p">)</span>
<span class="n">cv2</span><span class="o">.</span><span class="n">waitKey</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="c1"># 顺时针旋转45度</span>
<span class="n">center</span> <span class="o">=</span> <span class="p">(</span><span class="n">w</span> <span class="o">//</span> <span class="mi">2</span><span class="p">,</span> <span class="n">h</span> <span class="o">//</span> <span class="mi">2</span><span class="p">)</span>
<span class="n">M</span> <span class="o">=</span> <span class="n">cv2</span><span class="o">.</span><span class="n">getRotationMatrix2D</span><span class="p">(</span><span class="n">center</span><span class="p">,</span> <span class="o">-</span><span class="mi">45</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">)</span>
<span class="n">rotated</span> <span class="o">=</span> <span class="n">cv2</span><span class="o">.</span><span class="n">warpAffine</span><span class="p">(</span><span class="n">image</span><span class="p">,</span> <span class="n">M</span><span class="p">,</span> <span class="p">(</span><span class="n">w</span><span class="p">,</span> <span class="n">h</span><span class="p">))</span>
<span class="n">cv2</span><span class="o">.</span><span class="n">imshow</span><span class="p">(</span><span class="s2">"OpenCV Rotation"</span><span class="p">,</span> <span class="n">rotated</span><span class="p">)</span>
<span class="n">cv2</span><span class="o">.</span><span class="n">waitKey</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="c1"># 使用imutils旋转</span>
<span class="n">rotated</span> <span class="o">=</span> <span class="n">imutils</span><span class="o">.</span><span class="n">rotate</span><span class="p">(</span><span class="n">image</span><span class="p">,</span> <span class="o">-</span><span class="mi">45</span><span class="p">)</span>
<span class="n">cv2</span><span class="o">.</span><span class="n">imshow</span><span class="p">(</span><span class="s2">"Imutils Rotation"</span><span class="p">,</span> <span class="n">rotated</span><span class="p">)</span>
<span class="n">cv2</span><span class="o">.</span><span class="n">waitKey</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="c1"># 使用imutils无损旋转</span>
<span class="n">rotated</span> <span class="o">=</span> <span class="n">imutils</span><span class="o">.</span><span class="n">rotate_bound</span><span class="p">(</span><span class="n">image</span><span class="p">,</span> <span class="mi">45</span><span class="p">)</span>
<span class="n">cv2</span><span class="o">.</span><span class="n">imshow</span><span class="p">(</span><span class="s2">"Imutils Bound Rotation"</span><span class="p">,</span> <span class="n">rotated</span><span class="p">)</span>
<span class="n">cv2</span><span class="o">.</span><span class="n">waitKey</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="c1"># apply a Gaussian blur with a 11x11 kernel to the image to smooth it,</span>
<span class="c1"># useful when reducing high frequency noise 高斯模糊</span>
<span class="c1"># https://www.pyimagesearch.com/2016/07/25/convolutions-with-opencv-and-python/</span>
<span class="n">blurred</span> <span class="o">=</span> <span class="n">cv2</span><span class="o">.</span><span class="n">GaussianBlur</span><span class="p">(</span><span class="n">image</span><span class="p">,</span> <span class="p">(</span><span class="mi">11</span><span class="p">,</span> <span class="mi">11</span><span class="p">),</span> <span class="mi">0</span><span class="p">)</span>
<span class="n">cv2</span><span class="o">.</span><span class="n">imshow</span><span class="p">(</span><span class="s2">"Blurred"</span><span class="p">,</span> <span class="n">blurred</span><span class="p">)</span>
<span class="n">cv2</span><span class="o">.</span><span class="n">waitKey</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="c1"># 画框</span>
<span class="n">output</span> <span class="o">=</span> <span class="n">image</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
<span class="n">cv2</span><span class="o">.</span><span class="n">rectangle</span><span class="p">(</span><span class="n">output</span><span class="p">,</span> <span class="p">(</span><span class="mi">320</span><span class="p">,</span> <span class="mi">60</span><span class="p">),</span> <span class="p">(</span><span class="mi">420</span><span class="p">,</span> <span class="mi">160</span><span class="p">),</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">255</span><span class="p">),</span> <span class="mi">2</span><span class="p">)</span>
<span class="n">cv2</span><span class="o">.</span><span class="n">imshow</span><span class="p">(</span><span class="s2">"Rectangle"</span><span class="p">,</span> <span class="n">output</span><span class="p">)</span>
<span class="n">cv2</span><span class="o">.</span><span class="n">waitKey</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="c1"># 画圆</span>
<span class="n">output</span> <span class="o">=</span> <span class="n">image</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
<span class="n">cv2</span><span class="o">.</span><span class="n">circle</span><span class="p">(</span><span class="n">output</span><span class="p">,</span> <span class="p">(</span><span class="mi">300</span><span class="p">,</span> <span class="mi">150</span><span class="p">),</span> <span class="mi">20</span><span class="p">,</span> <span class="p">(</span><span class="mi">255</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span>
<span class="n">cv2</span><span class="o">.</span><span class="n">imshow</span><span class="p">(</span><span class="s2">"Circle"</span><span class="p">,</span> <span class="n">output</span><span class="p">)</span>
<span class="n">cv2</span><span class="o">.</span><span class="n">waitKey</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="c1"># 划线</span>
<span class="n">output</span> <span class="o">=</span> <span class="n">image</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
<span class="n">cv2</span><span class="o">.</span><span class="n">line</span><span class="p">(</span><span class="n">output</span><span class="p">,</span> <span class="p">(</span><span class="mi">60</span><span class="p">,</span> <span class="mi">20</span><span class="p">),</span> <span class="p">(</span><span class="mi">400</span><span class="p">,</span> <span class="mi">200</span><span class="p">),</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">255</span><span class="p">),</span> <span class="mi">5</span><span class="p">)</span>
<span class="n">cv2</span><span class="o">.</span><span class="n">imshow</span><span class="p">(</span><span class="s2">"Line"</span><span class="p">,</span> <span class="n">output</span><span class="p">)</span>
<span class="n">cv2</span><span class="o">.</span><span class="n">waitKey</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="c1"># 输出文字</span>
<span class="n">output</span> <span class="o">=</span> <span class="n">image</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
<span class="n">cv2</span><span class="o">.</span><span class="n">putText</span><span class="p">(</span><span class="n">output</span><span class="p">,</span> <span class="s2">"https://china-testing.github.io"</span><span class="p">,</span> <span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="mi">25</span><span class="p">),</span>
<span class="n">cv2</span><span class="o">.</span><span class="n">FONT_HERSHEY_SIMPLEX</span><span class="p">,</span> <span class="mf">0.7</span><span class="p">,</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">255</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span> <span class="mi">2</span><span class="p">)</span>
<span class="n">cv2</span><span class="o">.</span><span class="n">imshow</span><span class="p">(</span><span class="s2">"Text"</span><span class="p">,</span> <span class="n">output</span><span class="p">)</span>
<span class="n">cv2</span><span class="o">.</span><span class="n">waitKey</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
</pre></div>
<p>原图:</p>
<p><img alt="图片.png" src="https://upload-images.jianshu.io/upload_images/12713060-739e8c1a4a6c1349.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240"></p>
<p>选取图片区间 ROI (Region of Interest)</p>
<p><img alt="图片.png" src="https://upload-images.jianshu.io/upload_images/12713060-e284d39f542302a3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240"></p>
<p>缩放</p>
<p><img alt="图片.png" src="https://upload-images.jianshu.io/upload_images/12713060-d26035a133103798.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240"></p>
<p>按比例缩放</p>
<p><img alt="图片.png" src="https://upload-images.jianshu.io/upload_images/12713060-29fbd0a129fa1d08.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240"></p>
<p>旋转</p>
<p><img alt="图片.png" src="https://upload-images.jianshu.io/upload_images/12713060-183e89ab6aba2a76.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240"></p>
<p>使用imutils无损旋转</p>
<p><img alt="图片.png" src="https://upload-images.jianshu.io/upload_images/12713060-be14a7c60597e283.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240"></p>
<p>高斯模糊</p>
<p><img alt="图片.png" src="https://upload-images.jianshu.io/upload_images/12713060-c9e928fcbc08dbd4.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240"></p>
<p>画框</p>
<p><img alt="图片.png" src="https://upload-images.jianshu.io/upload_images/12713060-346fb3db3d523cd8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240"></p>
<p>画圆</p>
<p><img alt="图片.png" src="https://upload-images.jianshu.io/upload_images/12713060-859bb289ca755ad2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240"></p>
<p>划线</p>
<p><img alt="图片.png" src="https://upload-images.jianshu.io/upload_images/12713060-a0412e9a7c440761.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240"></p>
<p>输出文字</p>
<p><img alt="Text_screenshot_17.11.2018.png" src="https://upload-images.jianshu.io/upload_images/12713060-525ecb254a778711.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240"></p>
<p>执行时的输出</p>
<div class="highlight"><pre><span></span><span class="err">$</span> <span class="n">python</span> <span class="n">opencv_tutorial_01</span><span class="o">.</span><span class="n">py</span>
<span class="n">width</span><span class="o">=</span><span class="mi">600</span><span class="p">,</span> <span class="n">height</span><span class="o">=</span><span class="mi">322</span><span class="p">,</span> <span class="n">depth</span><span class="o">=</span><span class="mi">3</span>
<span class="n">R</span><span class="o">=</span><span class="mi">41</span><span class="p">,</span> <span class="n">G</span><span class="o">=</span><span class="mi">49</span><span class="p">,</span> <span class="n">B</span><span class="o">=</span><span class="mi">37</span>
</pre></div>
<p><a href="https://itbooks.pipipan.com/fs/18113597-320636142">本节英文原版代码下载</a></p>
<p>关于旋转这块,实际上pillow做的更好。比如同样逆时针旋转90度。</p>
<p>opencv的实现:</p>
<div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">imutils</span>
<span class="kn">import</span> <span class="nn">cv2</span>
<span class="n">image</span> <span class="o">=</span> <span class="n">cv2</span><span class="o">.</span><span class="n">imread</span><span class="p">(</span><span class="s2">"jp.png"</span><span class="p">)</span>
<span class="n">rotated</span> <span class="o">=</span> <span class="n">imutils</span><span class="o">.</span><span class="n">rotate</span><span class="p">(</span><span class="n">image</span><span class="p">,</span> <span class="mi">90</span><span class="p">)</span>
<span class="n">cv2</span><span class="o">.</span><span class="n">imshow</span><span class="p">(</span><span class="s2">"Imutils Rotation"</span><span class="p">,</span> <span class="n">rotated</span><span class="p">)</span>
<span class="n">cv2</span><span class="o">.</span><span class="n">waitKey</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
</pre></div>
<p><img alt="Text_screenshot_17.11.2018.png" src="https://upload-images.jianshu.io/upload_images/12713060-b7ef4184568e285e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240"></p>
<p>pillow的实现:</p>
<div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">PIL</span> <span class="kn">import</span> <span class="n">Image</span>
<span class="n">im</span> <span class="o">=</span> <span class="n">Image</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s2">"jp.png"</span><span class="p">)</span>
<span class="n">im2</span> <span class="o">=</span> <span class="n">im</span><span class="o">.</span><span class="n">rotate</span><span class="p">(</span><span class="mi">90</span><span class="p">,</span> <span class="n">expand</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span>
<span class="n">im2</span><span class="o">.</span><span class="n">show</span><span class="p">()</span>
</pre></div>
<p><img alt="test.jpg" src="https://upload-images.jianshu.io/upload_images/12713060-8cf9a5e7ee544811.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240"></p>
<p>更多参考: <a href="https://www.jianshu.com/p/f03f7f52d465">python库介绍-图像处理工具pillow中文文档-手册(2018 5.*)</a></p>
<p><img alt="deep_learning_face_detection_opencv.gif" src="https://upload-images.jianshu.io/upload_images/12713060-1342046ba68d9898.gif?imageMogr2/auto-orient/strip"></p>
<h3 id="_1">参考资料</h3>
<ul>
<li>技术支持qq群144081101(代码和模型存放)</li>
<li><a href="https://china-testing.github.io/opencv_crash_deep_learning2.html">本文最新版本地址</a></li>
<li><a href="https://github.com/china-testing/python-api-tesing">本文涉及的python测试开发库</a> 谢谢点赞!</li>
<li><a href="https://github.com/china-testing/python-api-tesing/blob/master/books.md">本文相关海量书籍下载</a> </li>
<li><a href="https://www.jianshu.com/p/49202312f855">2018最佳人工智能机器学习工具书及下载(持续更新)</a></li>
<li>代码下载:https://itbooks.pipipan.com/fs/18113597-320636142</li>
<li>代码github地址:https://github.com/china-testing/python-api-tesing/tree/master/opencv_crash_deep_learning</li>
</ul>
<h3 id="_2">识别俄罗斯方块</h3>
<div class="highlight"><pre><span></span><span class="c1"># -*- coding: utf-8 -*-</span>
<span class="c1"># Author: xurongzhong#126.com wechat:pythontesting qq:37391319</span>
<span class="c1"># 技术支持 (可以加钉钉pythontesting邀请加入) </span>
<span class="c1"># qq群:144081101 591302926 567351477</span>
<span class="c1"># CreateDate: 2018-11-19</span>
<span class="c1"># python opencv_tutorial_02.py --image tetris_blocks.png</span>
<span class="kn">import</span> <span class="nn">argparse</span>
<span class="kn">import</span> <span class="nn">imutils</span>
<span class="kn">import</span> <span class="nn">cv2</span>
<span class="n">ap</span> <span class="o">=</span> <span class="n">argparse</span><span class="o">.</span><span class="n">ArgumentParser</span><span class="p">()</span>
<span class="n">ap</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"-i"</span><span class="p">,</span> <span class="s2">"--image"</span><span class="p">,</span> <span class="n">required</span><span class="o">=</span><span class="bp">True</span><span class="p">,</span>
<span class="n">help</span><span class="o">=</span><span class="s2">"path to input image"</span><span class="p">)</span>
<span class="n">args</span> <span class="o">=</span> <span class="nb">vars</span><span class="p">(</span><span class="n">ap</span><span class="o">.</span><span class="n">parse_args</span><span class="p">())</span>
<span class="n">image</span> <span class="o">=</span> <span class="n">cv2</span><span class="o">.</span><span class="n">imread</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="s2">"image"</span><span class="p">])</span>
<span class="n">cv2</span><span class="o">.</span><span class="n">imshow</span><span class="p">(</span><span class="s2">"Image"</span><span class="p">,</span> <span class="n">image</span><span class="p">)</span>
<span class="n">cv2</span><span class="o">.</span><span class="n">waitKey</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="c1"># 转为灰度图</span>
<span class="n">gray</span> <span class="o">=</span> <span class="n">cv2</span><span class="o">.</span><span class="n">cvtColor</span><span class="p">(</span><span class="n">image</span><span class="p">,</span> <span class="n">cv2</span><span class="o">.</span><span class="n">COLOR_BGR2GRAY</span><span class="p">)</span>
<span class="n">cv2</span><span class="o">.</span><span class="n">imshow</span><span class="p">(</span><span class="s2">"Gray"</span><span class="p">,</span> <span class="n">gray</span><span class="p">)</span>
<span class="n">cv2</span><span class="o">.</span><span class="n">waitKey</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="c1"># 边缘检测</span>
<span class="n">edged</span> <span class="o">=</span> <span class="n">cv2</span><span class="o">.</span><span class="n">Canny</span><span class="p">(</span><span class="n">gray</span><span class="p">,</span> <span class="mi">30</span><span class="p">,</span> <span class="mi">150</span><span class="p">)</span>
<span class="n">cv2</span><span class="o">.</span><span class="n">imshow</span><span class="p">(</span><span class="s2">"Edged"</span><span class="p">,</span> <span class="n">edged</span><span class="p">)</span>
<span class="n">cv2</span><span class="o">.</span><span class="n">waitKey</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="c1"># 门限</span>
<span class="n">thresh</span> <span class="o">=</span> <span class="n">cv2</span><span class="o">.</span><span class="n">threshold</span><span class="p">(</span><span class="n">gray</span><span class="p">,</span> <span class="mi">225</span><span class="p">,</span> <span class="mi">255</span><span class="p">,</span> <span class="n">cv2</span><span class="o">.</span><span class="n">THRESH_BINARY_INV</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span>
<span class="n">cv2</span><span class="o">.</span><span class="n">imshow</span><span class="p">(</span><span class="s2">"Thresh"</span><span class="p">,</span> <span class="n">thresh</span><span class="p">)</span>
<span class="n">cv2</span><span class="o">.</span><span class="n">waitKey</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="c1"># 发现边缘</span>
<span class="n">cnts</span> <span class="o">=</span> <span class="n">cv2</span><span class="o">.</span><span class="n">findContours</span><span class="p">(</span><span class="n">thresh</span><span class="o">.</span><span class="n">copy</span><span class="p">(),</span> <span class="n">cv2</span><span class="o">.</span><span class="n">RETR_EXTERNAL</span><span class="p">,</span>
<span class="n">cv2</span><span class="o">.</span><span class="n">CHAIN_APPROX_SIMPLE</span><span class="p">)</span>
<span class="n">cnts</span> <span class="o">=</span> <span class="n">cnts</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="n">imutils</span><span class="o">.</span><span class="n">is_cv2</span><span class="p">()</span> <span class="k">else</span> <span class="n">cnts</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
<span class="n">output</span> <span class="o">=</span> <span class="n">image</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
<span class="c1"># loop over the contours</span>
<span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">cnts</span><span class="p">:</span>
<span class="c1"># draw each contour on the output image with a 3px thick purple</span>
<span class="c1"># outline, then display the output contours one at a time</span>
<span class="n">cv2</span><span class="o">.</span><span class="n">drawContours</span><span class="p">(</span><span class="n">output</span><span class="p">,</span> <span class="p">[</span><span class="n">c</span><span class="p">],</span> <span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="p">(</span><span class="mi">240</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">159</span><span class="p">),</span> <span class="mi">3</span><span class="p">)</span>
<span class="n">cv2</span><span class="o">.</span><span class="n">imshow</span><span class="p">(</span><span class="s2">"Contours"</span><span class="p">,</span> <span class="n">output</span><span class="p">)</span>
<span class="n">cv2</span><span class="o">.</span><span class="n">waitKey</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="c1"># draw the total number of contours found in purple</span>
<span class="n">text</span> <span class="o">=</span> <span class="s2">"I found {} objects!"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">cnts</span><span class="p">))</span>
<span class="n">cv2</span><span class="o">.</span><span class="n">putText</span><span class="p">(</span><span class="n">output</span><span class="p">,</span> <span class="n">text</span><span class="p">,</span> <span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="mi">25</span><span class="p">),</span> <span class="n">cv2</span><span class="o">.</span><span class="n">FONT_HERSHEY_SIMPLEX</span><span class="p">,</span> <span class="mf">0.7</span><span class="p">,</span>
<span class="p">(</span><span class="mi">240</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">159</span><span class="p">),</span> <span class="mi">2</span><span class="p">)</span>
<span class="n">cv2</span><span class="o">.</span><span class="n">imshow</span><span class="p">(</span><span class="s2">"Contours"</span><span class="p">,</span> <span class="n">output</span><span class="p">)</span>
<span class="n">cv2</span><span class="o">.</span><span class="n">waitKey</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="c1"># we apply erosions to reduce the size of foreground objects</span>
<span class="n">mask</span> <span class="o">=</span> <span class="n">thresh</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
<span class="n">mask</span> <span class="o">=</span> <span class="n">cv2</span><span class="o">.</span><span class="n">erode</span><span class="p">(</span><span class="n">mask</span><span class="p">,</span> <span class="bp">None</span><span class="p">,</span> <span class="n">iterations</span><span class="o">=</span><span class="mi">5</span><span class="p">)</span>
<span class="n">cv2</span><span class="o">.</span><span class="n">imshow</span><span class="p">(</span><span class="s2">"Eroded"</span><span class="p">,</span> <span class="n">mask</span><span class="p">)</span>
<span class="n">cv2</span><span class="o">.</span><span class="n">waitKey</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="c1"># 扩大</span>
<span class="n">mask</span> <span class="o">=</span> <span class="n">thresh</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
<span class="n">mask</span> <span class="o">=</span> <span class="n">cv2</span><span class="o">.</span><span class="n">dilate</span><span class="p">(</span><span class="n">mask</span><span class="p">,</span> <span class="bp">None</span><span class="p">,</span> <span class="n">iterations</span><span class="o">=</span><span class="mi">5</span><span class="p">)</span>
<span class="n">cv2</span><span class="o">.</span><span class="n">imshow</span><span class="p">(</span><span class="s2">"Dilated"</span><span class="p">,</span> <span class="n">mask</span><span class="p">)</span>
<span class="n">cv2</span><span class="o">.</span><span class="n">waitKey</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="c1"># a typical operation we may want to apply is to take our mask and</span>
<span class="c1"># apply a bitwise AND to our input image, keeping only the masked</span>
<span class="c1"># regions</span>
<span class="n">mask</span> <span class="o">=</span> <span class="n">thresh</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
<span class="n">output</span> <span class="o">=</span> <span class="n">cv2</span><span class="o">.</span><span class="n">bitwise_and</span><span class="p">(</span><span class="n">image</span><span class="p">,</span> <span class="n">image</span><span class="p">,</span> <span class="n">mask</span><span class="o">=</span><span class="n">mask</span><span class="p">)</span>
<span class="n">cv2</span><span class="o">.</span><span class="n">imshow</span><span class="p">(</span><span class="s2">"Output"</span><span class="p">,</span> <span class="n">output</span><span class="p">)</span>
<span class="n">cv2</span><span class="o">.</span><span class="n">waitKey</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
</pre></div>
<p>原图和灰度图:</p>
<p><img alt="图片.png" src="https://upload-images.jianshu.io/upload_images/12713060-94bf719d8b474e10.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240"></p>
<p>边缘检测</p>
<p><img alt="图片.png" src="https://upload-images.jianshu.io/upload_images/12713060-50ede7b8170e68b5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240"></p>
<p>门限</p>
<p><img alt="图片.png" src="https://upload-images.jianshu.io/upload_images/12713060-87aa6ca756b90ad3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240"></p>
<p>轮廓</p>
<p><img alt="图片.png" src="https://upload-images.jianshu.io/upload_images/12713060-7b80766c18d6807f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240"></p>
<p>查找结果</p>
<p><img alt="图片.png" src="https://upload-images.jianshu.io/upload_images/12713060-f31c3c17a9e3082f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240"></p>
<p>腐蚀和扩张</p>
<p><img alt="图片.png" src="https://upload-images.jianshu.io/upload_images/12713060-eed2fb35d9671430.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240"></p>
<p><img alt="图片.png" src="https://upload-images.jianshu.io/upload_images/12713060-0500aad75de363d5.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240"></p>
<p>屏蔽和位操作</p>
<p><img alt="图片.png" src="https://upload-images.jianshu.io/upload_images/12713060-2ea31f08cdaf7c22.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240"></p>
<p>串在一起执行</p>
<div class="highlight"><pre><span></span><span class="err">$</span> <span class="n">python</span> <span class="n">opencv_tutorial_02</span><span class="o">.</span><span class="n">py</span> <span class="o">--</span><span class="n">image</span> <span class="n">tetris_blocks</span><span class="o">.</span><span class="n">png</span>
</pre></div>
<p><img alt="test.gif" src="https://upload-images.jianshu.io/upload_images/12713060-51c23248c697d612.gif?imageMogr2/auto-orient/strip"></p>
<h2 id="_3">参考资料</h2>
<ul>
<li>讨论qq群144081101 591302926 567351477 </li>
<li><a href="https://github.com/china-testing/python-api-tesing">本文涉及的python测试开发库</a> 请在github上点赞,谢谢!</li>
<li><a href="https://github.com/china-testing/python-api-tesing/blob/master/books.md">本文相关海量书籍下载</a> </li>
<li><a href="https://github.com/ageitgey/face_recognition">face_recognition</a></li>
<li><a href="https://china-testing.github.io/opencv_books.html">2018最佳人工智能图像处理工具OpenCV书籍下载</a> </li>
<li><a href="https://china-testing.github.io/ai_books.html">2018最佳人工智能机器学习工具书籍及下载(持续更新)</a> </li>
<li><a href="https://china-testing.github.io/opencv_crash_deep_learning1.html">本文最新版本地址</a></li>
<li><a href="https://china-testing.github.io/testing_training.html">接口自动化性能测试线上培训大纲</a></li>
<li>道家技术-手相手诊看相中医等钉钉群21734177 qq群:391441566 184175668 338228106 看手相、面相、舌相、抽签、体质识别。服务费50元每人次起。请联系钉钉或者微信pythontesting</li>
</ul>
</div><!-- /.entry-content -->
</article>
</section>
<section id="extras" class="body">
<div class="blogroll">
<h2>links</h2>
<ul>
<li><a href="https://china-testing.github.io/testing_training.html">自动化性能接口测试线上及深圳培训与项目实战 qq群:144081101 591302926</a></li>
<li><a href="http://blog.sciencenet.cn/blog-2604609-1112306.html">pandas数据分析scrapy爬虫 521070358 Py人工智能pandas-opencv 6089740</a></li>
<li><a href="http://blog.sciencenet.cn/blog-2604609-1112306.html">中医解梦看相八字算命qq群 391441566 csdn书籍下载-python爬虫 437355848</a></li>
</ul>
</div><!-- /.blogroll -->
</section><!-- /#extras -->
<footer id="contentinfo" class="body">
<address id="about" class="vcard body">
Proudly powered by <a href="http://getpelican.com/">Pelican</a>, which takes great advantage of <a href="http://python.org">Python</a>.
</address><!-- /#about -->
<p>The theme is by <a href="http://coding.smashingmagazine.com/2009/08/04/designing-a-html-5-layout-from-scratch/">Smashing Magazine</a>, thanks!</p>
</footer><!-- /#contentinfo -->
</body>
</html>