├── README.md
├── Resources
├── 1.jpg
├── Scanned
│ ├── NoPlate_0.jpg
│ ├── NoPlate_1.jpg
│ └── NoPlate_2.jpg
├── Thumbnail.jpg
├── book.jpg
├── cards.jpg
├── colorPicker.py
├── haarcascade_frontalface_default.xml
├── haarcascade_russian_plate_number.xml
├── lambo.PNG
├── land.jpg
├── lena.png
├── p1.jpg
├── p2.jpg
├── p3.jpg
├── paper.jpg
├── shapes.png
└── test_video.mp4
├── Tumbnails
├── Chapter1.gif
├── Chapter2.gif
├── Chapter3.gif
├── Chapter4.gif
├── Chapter5.gif
├── Chapter6.gif
├── Chapter7.gif
├── Chapter8.gif
├── Chapter9.gif
├── Installations.gif
├── Introduction.gif
├── Marker.gif
├── project1.gif
├── project2.gif
└── project3.gif
├── chapter1.py
├── chapter2.py
├── chapter3.py
├── chapter4.py
├── chapter5.py
├── chapter6.py
├── chapter7.py
├── chapter8.py
├── chapter9.py
├── project1.py
├── project2.py
└── project3.py
/README.md:
--------------------------------------------------------------------------------
1 | # LEARN OPENCV IN 3 HOURS USING PYTHON - INCLUDING EXAMPLE PROJECTS
2 | [](https://youtu.be/WQeoO7MI0Bs)
3 |
4 |
5 | # What will you learn ?
6 |
7 |
8 | |Virtual Painter|Document Scanner|Number Plate Detector|
9 | |:----:|:----:|:----:|
10 | |
|
|
|
11 | |Contours Detection|Color Detection|Face Detection|
12 | |
|
|
|
13 |
14 |
15 |
16 | # Prerequisites
17 |
18 |
19 | |Index|Topic|Image|Video|Description|
20 | |:----:|:----:|:----:|:----:|:----:|
21 | |1|Introduction to Images|
|[Watch Now](https://youtu.be/WQeoO7MI0Bs?t=137) | Basic concept of Images. The RGB Channels and Gray Scale Images. |
22 | |2|Installations|
|[Watch Now](https://youtu.be/WQeoO7MI0Bs?t=277) | Installation process of Pyhton, OpenCV and the Pycharm IDE |
23 |
24 |
25 |
26 |
27 | # Chapters
28 |
29 | |Chapter|Topic|Image|Video|Description|
30 | |:----:|:----:|:----:|:----:|:----:|
31 | |1| [How to Read Image Video-Webcam](https://github.com/murtazahassan/Learn-OpenCV-in-3-hours/blob/master/chapter1.py)|
|[Watch Now](https://youtu.be/WQeoO7MI0Bs?t=549) | Learn how to read images videos and webcam. |
32 | |2| [5 Must Know OpenCV Basic Functions](https://github.com/murtazahassan/Learn-OpenCV-in-3-hours/blob/master/chapter2.py)|
|[Watch Now](https://youtu.be/WQeoO7MI0Bs?t=1021) | 5 Must know opencv functions for beginners. Gray Scale, Blur, Edge Detection, Dialation and Erosion. |
33 | |3| [How to Crop and Resize Images](https://github.com/murtazahassan/Learn-OpenCV-in-3-hours/blob/master/chapter3.py)|
|[Watch Now](https://youtu.be/WQeoO7MI0Bs?t=1651) | How to crop and resize and iamge. Resize could be used to scale up or scale down an image where cropping can be used to get a part of the image. |
34 | |4| [How to Draw Shapes and Text](https://github.com/murtazahassan/Learn-OpenCV-in-3-hours/blob/master/chapter4.py)|
|[Watch Now](https://youtu.be/WQeoO7MI0Bs?t=2052) | Learn to create blank images along with how to draw Lines, rectangles, circles and custom text. |
35 | |5| [Warp Prespective/BirdView](https://github.com/murtazahassan/Learn-OpenCV-in-3-hours/blob/master/chapter5.py)|
|[Watch Now](https://youtu.be/WQeoO7MI0Bs?t=2699) | Learn how to creat a warp prespective of a selected area of an image using fixed points. |
36 | |6| [Joining Multiple Images to Display](https://github.com/murtazahassan/Learn-OpenCV-in-3-hours/blob/master/chapter6.py)|
|[Watch Now](https://youtu.be/WQeoO7MI0Bs?t=3004) | Join multiple images together as one image for easy visualization of the workflow. Learn how to do it for smaller noumber of images and how it could be scaled up to have several images in the same image. |
37 | |7| [Color Detection](https://github.com/murtazahassan/Learn-OpenCV-in-3-hours/blob/master/chapter7.py)|
|[Watch Now](https://youtu.be/WQeoO7MI0Bs?t=3374) |How to detect any color in an image using the HSV space with the help of opencv Trackbars. |
38 | |8| [Contour/Shape Detection](https://github.com/murtazahassan/Learn-OpenCV-in-3-hours/blob/master/chapter8.py)|
|[Watch Now](https://youtu.be/WQeoO7MI0Bs?t=4537) |How to detect shapes of objects by finding their contours. Contours are basically outline that bound the shape or form of an object. So we will be detecting multiple shapes and how many corners points each shape has along with its area . |
39 | |9| [Face Detection](https://github.com/murtazahassan/Learn-OpenCV-in-3-hours/blob/master/chapter9.py)|
|[Watch Now](https://youtu.be/WQeoO7MI0Bs?t=6031) |How to detect faces in realtime using Viola Jones method. |
40 | |___|___________________|______________________________|__________| ____________________________
41 |
42 |
43 | # Projects
44 |
45 |
46 |
47 | |Project|Topic|Image|Video|Description|
48 | |:----:|:----:|:----:|:----:|:----:|
49 | |1| [Virtual Paint](https://github.com/murtazahassan/Learn-OpenCV-in-3-hours/blob/master/project1.py)|
|[Watch Now](https://youtu.be/WQeoO7MI0Bs?t=6363) | Detecting Color and using colored marker to draw virtually. |
50 | |2| [Documnet Scanner](https://github.com/murtazahassan/Learn-OpenCV-in-3-hours/blob/master/project2.py)|
|[Watch Now](https://youtu.be/WQeoO7MI0Bs?t=8145) | In this project we are going to create a simple document scanner using opencv. We will learn how to run this in real time |
51 | |3|[Number Plate Detector](https://github.com/murtazahassan/Learn-OpenCV-in-3-hours/blob/master/project3.py)|
|[Watch Now](https://youtu.be/WQeoO7MI0Bs?t=10594) | In this project we will detect number plates on cars in realtime and save them with a click of a button. |
52 |
53 |
54 | # Notes
55 |
56 |
57 | |Index|Comment|
58 | |:---|:---|
59 | |1.|[Recommended IDE: PyCharm Community edition](https://www.jetbrains.com/pycharm/download/)|
60 | |2.|[Python: 3.7.6](https://www.python.org/downloads/release/python-376/)|
61 |
--------------------------------------------------------------------------------
/Resources/1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/murtazahassan/Learn-OpenCV-in-3-hours/d4d6a14c7151aa4ebe23eb2a7cc8f94db05384c3/Resources/1.jpg
--------------------------------------------------------------------------------
/Resources/Scanned/NoPlate_0.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/murtazahassan/Learn-OpenCV-in-3-hours/d4d6a14c7151aa4ebe23eb2a7cc8f94db05384c3/Resources/Scanned/NoPlate_0.jpg
--------------------------------------------------------------------------------
/Resources/Scanned/NoPlate_1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/murtazahassan/Learn-OpenCV-in-3-hours/d4d6a14c7151aa4ebe23eb2a7cc8f94db05384c3/Resources/Scanned/NoPlate_1.jpg
--------------------------------------------------------------------------------
/Resources/Scanned/NoPlate_2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/murtazahassan/Learn-OpenCV-in-3-hours/d4d6a14c7151aa4ebe23eb2a7cc8f94db05384c3/Resources/Scanned/NoPlate_2.jpg
--------------------------------------------------------------------------------
/Resources/Thumbnail.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/murtazahassan/Learn-OpenCV-in-3-hours/d4d6a14c7151aa4ebe23eb2a7cc8f94db05384c3/Resources/Thumbnail.jpg
--------------------------------------------------------------------------------
/Resources/book.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/murtazahassan/Learn-OpenCV-in-3-hours/d4d6a14c7151aa4ebe23eb2a7cc8f94db05384c3/Resources/book.jpg
--------------------------------------------------------------------------------
/Resources/cards.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/murtazahassan/Learn-OpenCV-in-3-hours/d4d6a14c7151aa4ebe23eb2a7cc8f94db05384c3/Resources/cards.jpg
--------------------------------------------------------------------------------
/Resources/colorPicker.py:
--------------------------------------------------------------------------------
1 | import cv2
2 | import numpy as np
3 |
4 | frameWidth = 640
5 | frameHeight = 480
6 | cap = cv2.VideoCapture(1)
7 | cap.set(3, frameWidth)
8 | cap.set(4, frameHeight)
9 | cap.set(10,150)
10 |
11 | def empty(a):
12 | pass
13 |
14 | cv2.namedWindow("HSV")
15 | cv2.resizeWindow("HSV",640,240)
16 | cv2.createTrackbar("HUE Min","HSV",0,179,empty)
17 | cv2.createTrackbar("SAT Min","HSV",0,255,empty)
18 | cv2.createTrackbar("VALUE Min","HSV",0,255,empty)
19 | cv2.createTrackbar("HUE Max","HSV",179,179,empty)
20 | cv2.createTrackbar("SAT Max","HSV",255,255,empty)
21 | cv2.createTrackbar("VALUE Max","HSV",255,255,empty)
22 |
23 | while True:
24 |
25 | _, img = cap.read()
26 | imgHsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
27 |
28 | h_min = cv2.getTrackbarPos("HUE Min","HSV")
29 | h_max = cv2.getTrackbarPos("HUE Max", "HSV")
30 | s_min = cv2.getTrackbarPos("SAT Min", "HSV")
31 | s_max = cv2.getTrackbarPos("SAT Max", "HSV")
32 | v_min = cv2.getTrackbarPos("VALUE Min", "HSV")
33 | v_max = cv2.getTrackbarPos("VALUE Max", "HSV")
34 | print(h_min)
35 |
36 | lower = np.array([h_min,s_min,v_min])
37 | upper = np.array([h_max,s_max,v_max])
38 | mask = cv2.inRange(imgHsv,lower,upper)
39 | result = cv2.bitwise_and(img,img, mask = mask)
40 |
41 | mask = cv2.cvtColor(mask, cv2.COLOR_GRAY2BGR)
42 | hStack = np.hstack([img,mask,result])
43 | #cv2.imshow('Original', img)
44 | #cv2.imshow('HSV Color Space', imgHsv)
45 | #cv2.imshow('Mask', mask)
46 | #cv2.imshow('Result', result)
47 | cv2.imshow('Horizontal Stacking', hStack)
48 | if cv2.waitKey(1) & 0xFF == ord('q'):
49 | break
50 |
51 | cap.release()
52 | cv2.destroyAllWindows()
--------------------------------------------------------------------------------
/Resources/haarcascade_russian_plate_number.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | BOOST
5 | HAAR
6 | 20
7 | 60
8 |
9 | GAB
10 | 9.9500000476837158e-001
11 | 5.0000000000000000e-001
12 | 9.4999999999999996e-001
13 | 1
14 | 100
15 |
16 | 0
17 | 1
18 | ALL
19 | 20
20 |
21 |
22 | <_>
23 | 6
24 | -1.3110191822052002e+000
25 |
26 | <_>
27 |
28 | 0 -1 193 1.0079263709485531e-002
29 |
30 | -8.1339186429977417e-001 5.0277775526046753e-001
31 | <_>
32 |
33 | 0 -1 94 -2.2060684859752655e-002
34 |
35 | 7.9418992996215820e-001 -5.0896102190017700e-001
36 | <_>
37 |
38 | 0 -1 18 -4.8777908086776733e-002
39 |
40 | 7.1656656265258789e-001 -4.1640335321426392e-001
41 | <_>
42 |
43 | 0 -1 35 1.0387318208813667e-002
44 |
45 | 3.7618312239646912e-001 -8.5504144430160522e-001
46 | <_>
47 |
48 | 0 -1 191 -9.4083719886839390e-004
49 |
50 | 4.2658549547195435e-001 -5.7729166746139526e-001
51 | <_>
52 |
53 | 0 -1 48 -8.2391249015927315e-003
54 |
55 | 8.2346975803375244e-001 -3.7503159046173096e-001
56 |
57 | <_>
58 | 6
59 | -1.1759783029556274e+000
60 |
61 | <_>
62 |
63 | 0 -1 21 1.7386786639690399e-001
64 |
65 | -6.8139964342117310e-001 6.0767590999603271e-001
66 | <_>
67 |
68 | 0 -1 28 -1.9797295331954956e-002
69 |
70 | 7.8072130680084229e-001 -4.4399836659431458e-001
71 | <_>
72 |
73 | 0 -1 46 -1.0154811898246408e-003
74 |
75 | 3.3383268117904663e-001 -7.6357340812683105e-001
76 | <_>
77 |
78 | 0 -1 138 2.4954911321401596e-002
79 |
80 | -3.9979115128517151e-001 6.8620890378952026e-001
81 | <_>
82 |
83 | 0 -1 25 2.8837744612246752e-003
84 |
85 | -2.7928480505943298e-001 7.9980146884918213e-001
86 | <_>
87 |
88 | 0 -1 26 -3.8839362561702728e-002
89 |
90 | -7.8442335128784180e-001 3.4929576516151428e-001
91 |
92 | <_>
93 | 6
94 | -1.7856997251510620e+000
95 |
96 | <_>
97 |
98 | 0 -1 34 2.7977079153060913e-002
99 |
100 | -5.8424139022827148e-001 6.6850829124450684e-001
101 | <_>
102 |
103 | 0 -1 171 1.9148588180541992e-002
104 |
105 | -6.5457659959793091e-001 4.0804430842399597e-001
106 | <_>
107 |
108 | 0 -1 7 1.1955041438341141e-002
109 |
110 | -4.2002618312835693e-001 5.6217432022094727e-001
111 | <_>
112 |
113 | 0 -1 45 -2.1218564361333847e-002
114 |
115 | 7.1812576055526733e-001 -3.0354043841362000e-001
116 | <_>
117 |
118 | 0 -1 108 2.0117280655540526e-004
119 |
120 | -6.1749500036239624e-001 3.5549193620681763e-001
121 | <_>
122 |
123 | 0 -1 122 3.9725980604998767e-004
124 |
125 | -2.6844096183776855e-001 7.6771658658981323e-001
126 |
127 | <_>
128 | 9
129 | -1.1837021112442017e+000
130 |
131 | <_>
132 |
133 | 0 -1 202 -1.3291766867041588e-002
134 |
135 | 4.5248869061470032e-001 -5.8849954605102539e-001
136 | <_>
137 |
138 | 0 -1 79 -4.8353265970945358e-002
139 |
140 | 7.0951640605926514e-001 -3.2546108961105347e-001
141 | <_>
142 |
143 | 0 -1 22 2.6532993651926517e-003
144 |
145 | -2.5343564152717590e-001 7.6588714122772217e-001
146 | <_>
147 |
148 | 0 -1 66 -3.8548894226551056e-002
149 |
150 | 5.8126109838485718e-001 -3.0813106894493103e-001
151 | <_>
152 |
153 | 0 -1 41 -6.8602780811488628e-004
154 |
155 | 2.6361095905303955e-001 -7.2226840257644653e-001
156 | <_>
157 |
158 | 0 -1 69 -2.5726919993758202e-002
159 |
160 | -8.7153857946395874e-001 1.9438524544239044e-001
161 | <_>
162 |
163 | 0 -1 24 8.4192806389182806e-004
164 |
165 | -3.6150649189949036e-001 5.2065432071685791e-001
166 | <_>
167 |
168 | 0 -1 62 -2.6956878136843443e-003
169 |
170 | 5.9945529699325562e-001 -2.8344830870628357e-001
171 | <_>
172 |
173 | 0 -1 112 3.0572075396776199e-002
174 |
175 | -3.0688971281051636e-001 5.7261526584625244e-001
176 |
177 | <_>
178 | 8
179 | -1.4687808752059937e+000
180 |
181 | <_>
182 |
183 | 0 -1 5 3.1486168503761292e-002
184 |
185 | -5.7836848497390747e-001 3.7931033968925476e-001
186 | <_>
187 |
188 | 0 -1 150 2.8311354108154774e-003
189 |
190 | -5.7888329029083252e-001 3.2841828465461731e-001
191 | <_>
192 |
193 | 0 -1 76 -4.2060948908329010e-002
194 |
195 | 5.5578106641769409e-001 -3.2662427425384521e-001
196 | <_>
197 |
198 | 0 -1 115 6.2936875037848949e-003
199 |
200 | -2.1032968163490295e-001 7.8646916151046753e-001
201 | <_>
202 |
203 | 0 -1 51 7.0570126175880432e-002
204 |
205 | -4.3683132529258728e-001 4.0298295021057129e-001
206 | <_>
207 |
208 | 0 -1 135 2.5173835456371307e-003
209 |
210 | -2.0461565256118774e-001 8.2858163118362427e-001
211 | <_>
212 |
213 | 0 -1 102 1.5648975968360901e-003
214 |
215 | -2.4848082661628723e-001 6.0209411382675171e-001
216 | <_>
217 |
218 | 0 -1 177 -3.5970686003565788e-003
219 |
220 | 2.3294737935066223e-001 -6.5612471103668213e-001
221 |
222 | <_>
223 | 9
224 | -1.1029583215713501e+000
225 |
226 | <_>
227 |
228 | 0 -1 27 -1.1257569491863251e-001
229 |
230 | 3.3181819319725037e-001 -5.3901344537734985e-001
231 | <_>
232 |
233 | 0 -1 142 3.8014666642993689e-003
234 |
235 | -3.6430206894874573e-001 4.5984184741973877e-001
236 | <_>
237 |
238 | 0 -1 57 9.8789634648710489e-004
239 |
240 | -2.6661416888237000e-001 5.6971323490142822e-001
241 | <_>
242 |
243 | 0 -1 55 2.1719809621572495e-002
244 |
245 | 1.8432702124118805e-001 -8.2999354600906372e-001
246 | <_>
247 |
248 | 0 -1 111 5.1051773130893707e-002
249 |
250 | 1.4391148090362549e-001 -9.4541704654693604e-001
251 | <_>
252 |
253 | 0 -1 164 1.8956036074087024e-003
254 |
255 | -6.0830104351043701e-001 2.6091885566711426e-001
256 | <_>
257 |
258 | 0 -1 81 -5.8700828813016415e-003
259 |
260 | 6.9104760885238647e-001 -2.6916843652725220e-001
261 | <_>
262 |
263 | 0 -1 116 -1.1522199492901564e-003
264 |
265 | -6.9503885507583618e-001 2.4749211966991425e-001
266 | <_>
267 |
268 | 0 -1 90 -5.1933946087956429e-003
269 |
270 | 5.8551025390625000e-001 -3.0389472842216492e-001
271 |
272 | <_>
273 | 9
274 | -9.0274518728256226e-001
275 |
276 | <_>
277 |
278 | 0 -1 205 -1.4383997768163681e-002
279 |
280 | 4.5400592684745789e-001 -4.9917897582054138e-001
281 | <_>
282 |
283 | 0 -1 114 -3.3369414508342743e-002
284 |
285 | -9.3247985839843750e-001 1.4586758613586426e-001
286 | <_>
287 |
288 | 0 -1 128 5.2380945999175310e-004
289 |
290 | -2.8349643945693970e-001 6.4983856678009033e-001
291 | <_>
292 |
293 | 0 -1 143 6.1231426661834121e-004
294 |
295 | -1.8502233922481537e-001 6.5052211284637451e-001
296 | <_>
297 |
298 | 0 -1 49 1.7017847858369350e-003
299 |
300 | 2.2008989751338959e-001 -7.2277534008026123e-001
301 | <_>
302 |
303 | 0 -1 133 2.6139442343264818e-003
304 |
305 | 1.8238025903701782e-001 -7.6262325048446655e-001
306 | <_>
307 |
308 | 0 -1 43 -2.0020073279738426e-003
309 |
310 | 5.6799399852752686e-001 -2.8219676017761230e-001
311 | <_>
312 |
313 | 0 -1 119 1.9273828947916627e-003
314 |
315 | -2.0913636684417725e-001 7.9203850030899048e-001
316 | <_>
317 |
318 | 0 -1 134 -9.4476283993571997e-004
319 |
320 | -8.2361942529678345e-001 2.4256958067417145e-001
321 |
322 | <_>
323 | 10
324 | -1.4518526792526245e+000
325 |
326 | <_>
327 |
328 | 0 -1 162 1.6756314784288406e-002
329 |
330 | -6.9359332323074341e-001 5.1373954862356186e-002
331 | <_>
332 |
333 | 0 -1 16 2.4082964286208153e-002
334 |
335 | -3.3989402651786804e-001 4.5332714915275574e-001
336 | <_>
337 |
338 | 0 -1 186 1.2284796684980392e-003
339 |
340 | -2.2297365963459015e-001 6.1439812183380127e-001
341 | <_>
342 |
343 | 0 -1 59 -1.4379122294485569e-003
344 |
345 | -6.9444245100021362e-001 2.0446482300758362e-001
346 | <_>
347 |
348 | 0 -1 185 -1.8713285680860281e-003
349 |
350 | 6.7942184209823608e-001 -2.7580419182777405e-001
351 | <_>
352 |
353 | 0 -1 190 -4.7389674000442028e-003
354 |
355 | -7.0437240600585938e-001 2.6915156841278076e-001
356 | <_>
357 |
358 | 0 -1 156 7.4071279959753156e-004
359 |
360 | -2.9220902919769287e-001 5.3538239002227783e-001
361 | <_>
362 |
363 | 0 -1 11 -2.2739455103874207e-001
364 |
365 | 6.6916191577911377e-001 -2.1987228095531464e-001
366 | <_>
367 |
368 | 0 -1 155 -1.0255509987473488e-003
369 |
370 | 6.3346290588378906e-001 -2.2717863321304321e-001
371 | <_>
372 |
373 | 0 -1 167 2.4775355122983456e-003
374 |
375 | -5.4297816753387451e-001 3.1877547502517700e-001
376 |
377 | <_>
378 | 11
379 | -1.3153649568557739e+000
380 |
381 | <_>
382 |
383 | 0 -1 6 1.9131936132907867e-002
384 |
385 | -6.0168600082397461e-001 1.9141913950443268e-001
386 | <_>
387 |
388 | 0 -1 42 -4.5855185016989708e-003
389 |
390 | 2.1901632845401764e-001 -5.7136750221252441e-001
391 | <_>
392 |
393 | 0 -1 53 -1.9026801455765963e-003
394 |
395 | -8.0075079202651978e-001 1.6502076387405396e-001
396 | <_>
397 |
398 | 0 -1 19 -3.2767035067081451e-002
399 |
400 | 5.1496404409408569e-001 -2.5474679470062256e-001
401 | <_>
402 |
403 | 0 -1 129 6.3941581174731255e-004
404 |
405 | -1.9851709902286530e-001 6.7218667268753052e-001
406 | <_>
407 |
408 | 0 -1 201 1.5573646873235703e-002
409 |
410 | -1.7564551532268524e-001 7.0536541938781738e-001
411 | <_>
412 |
413 | 0 -1 200 9.5508026424795389e-004
414 |
415 | -1.9691802561283112e-001 6.1125624179840088e-001
416 | <_>
417 |
418 | 0 -1 67 9.0427603572607040e-003
419 |
420 | 1.6518253087997437e-001 -8.7012130022048950e-001
421 | <_>
422 |
423 | 0 -1 77 8.1576988101005554e-002
424 |
425 | 1.4075902104377747e-001 -8.4871828556060791e-001
426 | <_>
427 |
428 | 0 -1 166 -5.1994959358125925e-004
429 |
430 | 2.1803210675716400e-001 -5.4628211259841919e-001
431 | <_>
432 |
433 | 0 -1 70 -2.3009868338704109e-002
434 |
435 | -7.9586231708526611e-001 1.5989699959754944e-001
436 |
437 | <_>
438 | 13
439 | -1.4625015258789063e+000
440 |
441 | <_>
442 |
443 | 0 -1 1 2.6759501546621323e-002
444 |
445 | -6.0482984781265259e-001 1.4906832575798035e-001
446 | <_>
447 |
448 | 0 -1 165 3.0343931168317795e-002
449 |
450 | -4.7357541322708130e-001 2.6279065012931824e-001
451 | <_>
452 |
453 | 0 -1 161 1.2678599450737238e-003
454 |
455 | -1.9493983685970306e-001 6.9734728336334229e-001
456 | <_>
457 |
458 | 0 -1 30 1.8607920501381159e-003
459 |
460 | 1.5611934661865234e-001 -9.0542370080947876e-001
461 | <_>
462 |
463 | 0 -1 157 -1.3872641138732433e-003
464 |
465 | 5.3263407945632935e-001 -3.0192303657531738e-001
466 | <_>
467 |
468 | 0 -1 180 -6.9969398900866508e-003
469 |
470 | -9.4549953937530518e-001 1.5575224161148071e-001
471 | <_>
472 |
473 | 0 -1 158 1.1245720088481903e-003
474 |
475 | -2.6688691973686218e-001 5.5608308315277100e-001
476 | <_>
477 |
478 | 0 -1 160 -2.8279949910938740e-003
479 |
480 | -9.1861122846603394e-001 1.3309663534164429e-001
481 | <_>
482 |
483 | 0 -1 58 7.1019242750480771e-004
484 |
485 | -3.0977895855903625e-001 4.3846300244331360e-001
486 | <_>
487 |
488 | 0 -1 8 -4.1933014988899231e-002
489 |
490 | -8.9102542400360107e-001 1.5866196155548096e-001
491 | <_>
492 |
493 | 0 -1 87 1.6568358987569809e-002
494 |
495 | 1.2731756269931793e-001 -8.5553413629531860e-001
496 | <_>
497 |
498 | 0 -1 64 2.0309074316173792e-003
499 |
500 | -2.3260365426540375e-001 6.7330485582351685e-001
501 | <_>
502 |
503 | 0 -1 159 -1.7069760942831635e-003
504 |
505 | -7.1925789117813110e-001 1.9108834862709045e-001
506 |
507 | <_>
508 | 14
509 | -1.4959813356399536e+000
510 |
511 | <_>
512 |
513 | 0 -1 4 1.4695923775434494e-002
514 |
515 | -6.2167906761169434e-001 2.1172638237476349e-001
516 | <_>
517 |
518 | 0 -1 50 -1.6501215286552906e-003
519 |
520 | 1.9353884458541870e-001 -5.7780367136001587e-001
521 | <_>
522 |
523 | 0 -1 123 7.0121872704476118e-004
524 |
525 | -2.2979106009006500e-001 5.3033334016799927e-001
526 | <_>
527 |
528 | 0 -1 52 9.4158272258937359e-004
529 |
530 | 1.6849038004875183e-001 -7.4897718429565430e-001
531 | <_>
532 |
533 | 0 -1 124 -2.0684124901890755e-003
534 |
535 | 6.7936712503433228e-001 -1.9317412376403809e-001
536 | <_>
537 |
538 | 0 -1 23 -1.8305826233699918e-004
539 |
540 | -7.0275229215621948e-001 1.7971208691596985e-001
541 | <_>
542 |
543 | 0 -1 198 5.5587477982044220e-004
544 |
545 | -2.4448128044605255e-001 5.0703984498977661e-001
546 | <_>
547 |
548 | 0 -1 152 4.3448276119306684e-004
549 |
550 | 1.3497908413410187e-001 -8.5621362924575806e-001
551 | <_>
552 |
553 | 0 -1 197 -1.2359691318124533e-003
554 |
555 | 6.1710417270660400e-001 -2.2301279008388519e-001
556 | <_>
557 |
558 | 0 -1 153 -6.9627340417355299e-004
559 |
560 | -6.4706987142562866e-001 2.3951497673988342e-001
561 | <_>
562 |
563 | 0 -1 175 1.0683680884540081e-003
564 |
565 | -2.8343605995178223e-001 4.9318629503250122e-001
566 | <_>
567 |
568 | 0 -1 168 1.7104238213505596e-004
569 |
570 | -2.7171039581298828e-001 4.2520308494567871e-001
571 | <_>
572 |
573 | 0 -1 144 8.2368971779942513e-003
574 |
575 | 1.6359315812587738e-001 -7.3864609003067017e-001
576 | <_>
577 |
578 | 0 -1 131 -5.9884190559387207e-003
579 |
580 | 3.8030940294265747e-001 -3.0763563513755798e-001
581 |
582 | <_>
583 | 9
584 | -1.1183819770812988e+000
585 |
586 | <_>
587 |
588 | 0 -1 187 -1.4863962307572365e-002
589 |
590 | 1.1989101022481918e-001 -6.6138857603073120e-001
591 | <_>
592 |
593 | 0 -1 117 2.4736612103879452e-003
594 |
595 | -5.2778661251068115e-001 2.3012125492095947e-001
596 | <_>
597 |
598 | 0 -1 71 -4.8899287357926369e-003
599 |
600 | 6.0186779499053955e-001 -2.0681641995906830e-001
601 | <_>
602 |
603 | 0 -1 174 1.5796069055795670e-002
604 |
605 | 1.4610521495342255e-001 -8.2099527120590210e-001
606 | <_>
607 |
608 | 0 -1 104 5.9720675926655531e-004
609 |
610 | -2.3587301373481750e-001 4.8323699831962585e-001
611 | <_>
612 |
613 | 0 -1 103 -1.9448818638920784e-003
614 |
615 | 6.4417767524719238e-001 -2.0953170955181122e-001
616 | <_>
617 |
618 | 0 -1 154 1.9433414854574949e-004
619 |
620 | 2.0600238442420959e-001 -7.2418999671936035e-001
621 | <_>
622 |
623 | 0 -1 163 -1.5097535215318203e-002
624 |
625 | -8.7151485681533813e-001 1.2594890594482422e-001
626 | <_>
627 |
628 | 0 -1 82 -3.9843879640102386e-003
629 |
630 | 4.3801131844520569e-001 -2.9676589369773865e-001
631 |
632 | <_>
633 | 12
634 | -1.5434337854385376e+000
635 |
636 | <_>
637 |
638 | 0 -1 105 1.1273270938545465e-003
639 |
640 | -4.7976878285408020e-001 3.6627906560897827e-001
641 | <_>
642 |
643 | 0 -1 95 9.7806821577250957e-004
644 |
645 | -2.7689707279205322e-001 5.1295894384384155e-001
646 | <_>
647 |
648 | 0 -1 15 1.6528377309441566e-002
649 |
650 | -4.5259797573089600e-001 2.4290211498737335e-001
651 | <_>
652 |
653 | 0 -1 137 1.1040373938158154e-003
654 |
655 | -3.2714816927909851e-001 3.4566244482994080e-001
656 | <_>
657 |
658 | 0 -1 109 -1.7780361231416464e-003
659 |
660 | -6.9511681795120239e-001 1.8829824030399323e-001
661 | <_>
662 |
663 | 0 -1 92 4.6280334936454892e-004
664 |
665 | -2.3864887654781342e-001 5.3136289119720459e-001
666 | <_>
667 |
668 | 0 -1 100 -1.4975425438024104e-004
669 |
670 | -6.6509884595870972e-001 2.1483559906482697e-001
671 | <_>
672 |
673 | 0 -1 83 -1.4625370968133211e-003
674 |
675 | 2.6556470990180969e-001 -4.9002227187156677e-001
676 | <_>
677 |
678 | 0 -1 14 -2.6019819779321551e-004
679 |
680 | -7.0160359144210815e-001 1.6359129548072815e-001
681 | <_>
682 |
683 | 0 -1 14 2.2371641534846276e-004
684 |
685 | 1.2919521331787109e-001 -6.9767206907272339e-001
686 | <_>
687 |
688 | 0 -1 194 -1.0447315871715546e-002
689 |
690 | 2.1837629377841949e-001 -4.6482038497924805e-001
691 | <_>
692 |
693 | 0 -1 20 -9.2897024005651474e-003
694 |
695 | 6.4918082952499390e-001 -2.0495061576366425e-001
696 |
697 | <_>
698 | 12
699 | -1.4440233707427979e+000
700 |
701 | <_>
702 |
703 | 0 -1 9 8.5356216877698898e-003
704 |
705 | -5.3151458501815796e-001 2.2357723116874695e-001
706 | <_>
707 |
708 | 0 -1 182 1.5294685726985335e-003
709 |
710 | -6.0895460844039917e-001 1.7429886758327484e-001
711 | <_>
712 |
713 | 0 -1 40 1.8610086990520358e-003
714 |
715 | -2.5480428338050842e-001 4.2150071263313293e-001
716 | <_>
717 |
718 | 0 -1 176 1.5735558699816465e-003
719 |
720 | -1.6832062602043152e-001 4.8567819595336914e-001
721 | <_>
722 |
723 | 0 -1 179 -6.7992787808179855e-004
724 |
725 | 3.9894598722457886e-001 -3.0744269490242004e-001
726 | <_>
727 |
728 | 0 -1 151 4.9857296049594879e-002
729 |
730 | -1.5370152890682220e-001 6.7523348331451416e-001
731 | <_>
732 |
733 | 0 -1 139 -2.8339058160781860e-002
734 |
735 | 5.0540882349014282e-001 -2.9473617672920227e-001
736 | <_>
737 |
738 | 0 -1 72 -7.7956825494766235e-002
739 |
740 | 4.0387043356895447e-001 -3.0287107825279236e-001
741 | <_>
742 |
743 | 0 -1 89 -3.6115488037467003e-003
744 |
745 | 6.3856112957000732e-001 -1.6917882859706879e-001
746 | <_>
747 |
748 | 0 -1 207 3.3940275898203254e-004
749 |
750 | 1.3713537156581879e-001 -7.8120291233062744e-001
751 | <_>
752 |
753 | 0 -1 39 4.0043061599135399e-003
754 |
755 | 1.5233094990253448e-001 -6.3939732313156128e-001
756 | <_>
757 |
758 | 0 -1 65 -4.4601649278774858e-004
759 |
760 | 2.1333815157413483e-001 -4.7728902101516724e-001
761 |
762 | <_>
763 | 13
764 | -1.2532578706741333e+000
765 |
766 | <_>
767 |
768 | 0 -1 204 -2.0341124385595322e-002
769 |
770 | 2.4170616269111633e-001 -4.9161517620086670e-001
771 | <_>
772 |
773 | 0 -1 169 8.9040049351751804e-004
774 |
775 | -2.8570893406867981e-001 4.2666998505592346e-001
776 | <_>
777 |
778 | 0 -1 60 -3.3259526826441288e-003
779 |
780 | 4.2626520991325378e-001 -2.3811897635459900e-001
781 | <_>
782 |
783 | 0 -1 38 -3.1714607030153275e-002
784 |
785 | -8.5494768619537354e-001 1.1712870001792908e-001
786 | <_>
787 |
788 | 0 -1 31 -1.1553820222616196e-002
789 |
790 | 2.2675493359565735e-001 -4.9640509486198425e-001
791 | <_>
792 |
793 | 0 -1 80 -6.7727260291576385e-002
794 |
795 | -8.6705064773559570e-001 9.8765812814235687e-002
796 | <_>
797 |
798 | 0 -1 63 -3.1611192971467972e-003
799 |
800 | 3.9449846744537354e-001 -2.8210711479187012e-001
801 | <_>
802 |
803 | 0 -1 149 4.3221906526014209e-004
804 |
805 | 1.1805476248264313e-001 -9.0178310871124268e-001
806 | <_>
807 |
808 | 0 -1 188 -2.2296360111795366e-004
809 |
810 | 1.7324598133563995e-001 -5.2877873182296753e-001
811 | <_>
812 |
813 | 0 -1 120 -2.1440195851027966e-003
814 |
815 | 5.5513423681259155e-001 -1.9791823625564575e-001
816 | <_>
817 |
818 | 0 -1 113 -4.5122690498828888e-003
819 |
820 | 5.5083745718002319e-001 -1.8810540437698364e-001
821 | <_>
822 |
823 | 0 -1 130 -3.5149464383721352e-003
824 |
825 | 5.5467557907104492e-001 -2.2856147587299347e-001
826 | <_>
827 |
828 | 0 -1 121 -4.4786706566810608e-003
829 |
830 | -7.9106998443603516e-001 1.7836479842662811e-001
831 |
832 | <_>
833 | 15
834 | -1.1898330450057983e+000
835 |
836 | <_>
837 |
838 | 0 -1 0 1.5206767246127129e-002
839 |
840 | -4.9173194169998169e-001 2.7093595266342163e-001
841 | <_>
842 |
843 | 0 -1 125 6.9564773002639413e-004
844 |
845 | -2.3066598176956177e-001 5.4028344154357910e-001
846 | <_>
847 |
848 | 0 -1 125 -8.3668017759919167e-004
849 |
850 | 4.4658055901527405e-001 -2.7778497338294983e-001
851 | <_>
852 |
853 | 0 -1 91 -3.8321319967508316e-002
854 |
855 | -7.9069298505783081e-001 1.8700349330902100e-001
856 | <_>
857 |
858 | 0 -1 207 -2.1063965687062591e-004
859 |
860 | -6.3163763284683228e-001 1.8656146526336670e-001
861 | <_>
862 |
863 | 0 -1 61 3.6907330155372620e-002
864 |
865 | 9.9319733679294586e-002 -7.6762360334396362e-001
866 | <_>
867 |
868 | 0 -1 85 8.1071127206087112e-003
869 |
870 | -2.8561261296272278e-001 3.4748569130897522e-001
871 | <_>
872 |
873 | 0 -1 189 6.2815943965688348e-004
874 |
875 | 1.6656193137168884e-001 -5.4635977745056152e-001
876 | <_>
877 |
878 | 0 -1 86 2.8582263621501625e-004
879 |
880 | -2.4100163578987122e-001 4.5410770177841187e-001
881 | <_>
882 |
883 | 0 -1 173 -1.9862279295921326e-002
884 |
885 | -9.4317340850830078e-001 1.2513674795627594e-001
886 | <_>
887 |
888 | 0 -1 96 1.1506280861794949e-003
889 |
890 | -2.4514634907245636e-001 4.6452957391738892e-001
891 | <_>
892 |
893 | 0 -1 29 2.3451185552403331e-004
894 |
895 | 1.2489952147006989e-001 -8.0278074741363525e-001
896 | <_>
897 |
898 | 0 -1 101 6.7837134702131152e-004
899 |
900 | -2.5017899274826050e-001 4.3841627240180969e-001
901 | <_>
902 |
903 | 0 -1 17 3.1583159579895437e-004
904 |
905 | 1.5951988101005554e-001 -7.4524724483489990e-001
906 | <_>
907 |
908 | 0 -1 110 7.2623658925294876e-003
909 |
910 | 1.2511830031871796e-001 -6.5659755468368530e-001
911 |
912 | <_>
913 | 15
914 | -1.2416906356811523e+000
915 |
916 | <_>
917 |
918 | 0 -1 2 7.5144092552363873e-003
919 |
920 | -5.9518074989318848e-001 5.3793102502822876e-002
921 | <_>
922 |
923 | 0 -1 98 -6.4494344405829906e-004
924 |
925 | 2.0429474115371704e-001 -4.3661779165267944e-001
926 | <_>
927 |
928 | 0 -1 196 3.3831471228040755e-004
929 |
930 | -2.1566553413867950e-001 4.7118204832077026e-001
931 | <_>
932 |
933 | 0 -1 73 2.8320802375674248e-003
934 |
935 | 1.3322307169437408e-001 -8.3729231357574463e-001
936 | <_>
937 |
938 | 0 -1 199 1.6218879027292132e-003
939 |
940 | -2.0889574289321899e-001 4.7114694118499756e-001
941 | <_>
942 |
943 | 0 -1 10 2.7122153551317751e-004
944 |
945 | 1.1475630849599838e-001 -7.8029519319534302e-001
946 | <_>
947 |
948 | 0 -1 170 8.8358242064714432e-003
949 |
950 | 1.2460929155349731e-001 -7.6791721582412720e-001
951 | <_>
952 |
953 | 0 -1 106 9.7634072881191969e-004
954 |
955 | -2.0806105434894562e-001 5.1318311691284180e-001
956 | <_>
957 |
958 | 0 -1 107 -2.1239042282104492e-002
959 |
960 | -8.7171542644500732e-001 1.2721680104732513e-001
961 | <_>
962 |
963 | 0 -1 97 7.1797124110162258e-004
964 |
965 | -3.0763280391693115e-001 3.7504923343658447e-001
966 | <_>
967 |
968 | 0 -1 32 2.7504155412316322e-002
969 |
970 | 1.5651945769786835e-001 -7.9516488313674927e-001
971 | <_>
972 |
973 | 0 -1 178 1.0624636197462678e-003
974 |
975 | 1.3473348319530487e-001 -6.9174814224243164e-001
976 | <_>
977 |
978 | 0 -1 33 -8.1248432397842407e-002
979 |
980 | -8.5117286443710327e-001 1.0601779073476791e-001
981 | <_>
982 |
983 | 0 -1 140 -2.2936165332794189e-002
984 |
985 | 3.9202499389648438e-001 -2.9867398738861084e-001
986 | <_>
987 |
988 | 0 -1 146 -1.3326616026461124e-003
989 |
990 | 4.7240665555000305e-001 -2.6287403702735901e-001
991 |
992 | <_>
993 | 13
994 | -1.3383979797363281e+000
995 |
996 | <_>
997 |
998 | 0 -1 3 3.2254494726657867e-002
999 |
1000 | -6.5151512622833252e-001 7.9947575926780701e-002
1001 | <_>
1002 |
1003 | 0 -1 172 -1.1810796568170190e-003
1004 |
1005 | 2.5173431634902954e-001 -4.5536977052688599e-001
1006 | <_>
1007 |
1008 | 0 -1 88 8.0361258005723357e-004
1009 |
1010 | -2.1178695559501648e-001 4.9318632483482361e-001
1011 | <_>
1012 |
1013 | 0 -1 93 6.6201295703649521e-004
1014 |
1015 | -1.9441033899784088e-001 4.6225026249885559e-001
1016 | <_>
1017 |
1018 | 0 -1 84 3.4565184614621103e-004
1019 |
1020 | -2.1175089478492737e-001 4.6985754370689392e-001
1021 | <_>
1022 |
1023 | 0 -1 132 -5.6433549616485834e-004
1024 |
1025 | -7.9713624715805054e-001 1.8714086711406708e-001
1026 | <_>
1027 |
1028 | 0 -1 56 5.8492692187428474e-004
1029 |
1030 | -3.9330720901489258e-001 2.4242231249809265e-001
1031 | <_>
1032 |
1033 | 0 -1 13 2.5043603032827377e-002
1034 |
1035 | 1.3490234315395355e-001 -7.5923883914947510e-001
1036 | <_>
1037 |
1038 | 0 -1 37 -1.8510785885155201e-003
1039 |
1040 | 4.1279399394989014e-001 -2.7271771430969238e-001
1041 | <_>
1042 |
1043 | 0 -1 68 -2.5741360150277615e-004
1044 |
1045 | -6.3662034273147583e-001 1.8135882914066315e-001
1046 | <_>
1047 |
1048 | 0 -1 184 -1.5121832489967346e-002
1049 |
1050 | 2.5249326229095459e-001 -3.8438034057617188e-001
1051 | <_>
1052 |
1053 | 0 -1 203 -1.5006031841039658e-002
1054 |
1055 | -8.4878319501876831e-001 1.1718367785215378e-001
1056 | <_>
1057 |
1058 | 0 -1 74 4.9880752339959145e-004
1059 |
1060 | -2.6755046844482422e-001 4.5769825577735901e-001
1061 |
1062 | <_>
1063 | 12
1064 | -1.2097512483596802e+000
1065 |
1066 | <_>
1067 |
1068 | 0 -1 195 -1.1614991351962090e-002
1069 |
1070 | 1.4465409517288208e-001 -5.9521216154098511e-001
1071 | <_>
1072 |
1073 | 0 -1 75 3.9767110138200223e-004
1074 |
1075 | -4.2697989940643311e-001 2.4382311105728149e-001
1076 | <_>
1077 |
1078 | 0 -1 47 -4.6969857066869736e-002
1079 |
1080 | -9.3969690799713135e-001 1.2196484953165054e-001
1081 | <_>
1082 |
1083 | 0 -1 136 5.5550434626638889e-004
1084 |
1085 | -1.8246935307979584e-001 6.5156191587448120e-001
1086 | <_>
1087 |
1088 | 0 -1 99 2.9468833236023784e-004
1089 |
1090 | 1.5099152922630310e-001 -7.8840750455856323e-001
1091 | <_>
1092 |
1093 | 0 -1 44 1.2439775280654430e-002
1094 |
1095 | 1.4981375634670258e-001 -7.5917595624923706e-001
1096 | <_>
1097 |
1098 | 0 -1 147 6.6337559837847948e-004
1099 |
1100 | -2.5185841321945190e-001 5.9387433528900146e-001
1101 | <_>
1102 |
1103 | 0 -1 148 -6.8454549182206392e-004
1104 |
1105 | 5.1199448108673096e-001 -2.5247576832771301e-001
1106 | <_>
1107 |
1108 | 0 -1 141 1.4808592386543751e-003
1109 |
1110 | 2.2439701855182648e-001 -5.8184891939163208e-001
1111 | <_>
1112 |
1113 | 0 -1 12 6.0307271778583527e-003
1114 |
1115 | -4.3553912639617920e-001 2.8183382749557495e-001
1116 | <_>
1117 |
1118 | 0 -1 78 -1.9170897081494331e-002
1119 |
1120 | -8.5707378387451172e-001 1.4850790798664093e-001
1121 | <_>
1122 |
1123 | 0 -1 122 3.0278289341367781e-004
1124 |
1125 | -3.1547480821609497e-001 4.1798374056816101e-001
1126 |
1127 | <_>
1128 | 10
1129 | -1.2253109216690063e+000
1130 |
1131 | <_>
1132 |
1133 | 0 -1 181 4.6847470104694366e-002
1134 |
1135 | -4.9239391088485718e-001 5.2287584543228149e-001
1136 | <_>
1137 |
1138 | 0 -1 118 2.2181579843163490e-003
1139 |
1140 | -4.2569425702095032e-001 3.6892616748809814e-001
1141 | <_>
1142 |
1143 | 0 -1 145 6.1082182219251990e-004
1144 |
1145 | 1.7654621601104736e-001 -8.2656937837600708e-001
1146 | <_>
1147 |
1148 | 0 -1 127 1.7401995137333870e-002
1149 |
1150 | 2.7770876884460449e-001 -5.6393522024154663e-001
1151 | <_>
1152 |
1153 | 0 -1 54 5.2314018830657005e-004
1154 |
1155 | -3.6257097125053406e-001 4.6126455068588257e-001
1156 | <_>
1157 |
1158 | 0 -1 206 2.1581796463578939e-003
1159 |
1160 | 1.9110183417797089e-001 -6.8012320995330811e-001
1161 | <_>
1162 |
1163 | 0 -1 192 -1.3209994649514556e-003
1164 |
1165 | 6.7618584632873535e-001 -2.6087108254432678e-001
1166 | <_>
1167 |
1168 | 0 -1 126 -1.2237254530191422e-002
1169 |
1170 | -5.7184767723083496e-001 3.0778104066848755e-001
1171 | <_>
1172 |
1173 | 0 -1 36 8.7829465046525002e-003
1174 |
1175 | 1.6890920698642731e-001 -7.8835797309875488e-001
1176 | <_>
1177 |
1178 | 0 -1 183 7.5588272884488106e-003
1179 |
1180 | 1.5143942832946777e-001 -8.2572847604751587e-001
1181 |
1182 | <_>
1183 |
1184 | <_>
1185 | 0 0 10 10 -1.
1186 | <_>
1187 | 0 0 5 5 2.
1188 | <_>
1189 | 5 5 5 5 2.
1190 | 0
1191 | <_>
1192 |
1193 | <_>
1194 | 0 0 12 16 -1.
1195 | <_>
1196 | 6 0 6 16 2.
1197 | 0
1198 | <_>
1199 |
1200 | <_>
1201 | 0 3 10 6 -1.
1202 | <_>
1203 | 5 3 5 6 2.
1204 | 0
1205 | <_>
1206 |
1207 | <_>
1208 | 0 3 21 16 -1.
1209 | <_>
1210 | 7 3 7 16 3.
1211 | 0
1212 | <_>
1213 |
1214 | <_>
1215 | 0 4 16 9 -1.
1216 | <_>
1217 | 4 4 8 9 2.
1218 | 0
1219 | <_>
1220 |
1221 | <_>
1222 | 0 4 10 12 -1.
1223 | <_>
1224 | 5 4 5 12 2.
1225 | 0
1226 | <_>
1227 |
1228 | <_>
1229 | 0 7 14 7 -1.
1230 | <_>
1231 | 7 7 7 7 2.
1232 | 0
1233 | <_>
1234 |
1235 | <_>
1236 | 0 9 12 7 -1.
1237 | <_>
1238 | 6 9 6 7 2.
1239 | 0
1240 | <_>
1241 |
1242 | <_>
1243 | 0 9 60 3 -1.
1244 | <_>
1245 | 30 9 30 3 2.
1246 | 0
1247 | <_>
1248 |
1249 | <_>
1250 | 0 10 8 3 -1.
1251 | <_>
1252 | 4 10 4 3 2.
1253 | 0
1254 | <_>
1255 |
1256 | <_>
1257 | 0 11 1 2 -1.
1258 | <_>
1259 | 0 12 1 1 2.
1260 | 0
1261 | <_>
1262 |
1263 | <_>
1264 | 1 0 51 12 -1.
1265 | <_>
1266 | 1 4 51 4 3.
1267 | 0
1268 | <_>
1269 |
1270 | <_>
1271 | 1 3 15 7 -1.
1272 | <_>
1273 | 6 3 5 7 3.
1274 | 0
1275 | <_>
1276 |
1277 | <_>
1278 | 1 7 30 6 -1.
1279 | <_>
1280 | 1 7 15 3 2.
1281 | <_>
1282 | 16 10 15 3 2.
1283 | 0
1284 | <_>
1285 |
1286 | <_>
1287 | 1 12 1 2 -1.
1288 | <_>
1289 | 1 13 1 1 2.
1290 | 0
1291 | <_>
1292 |
1293 | <_>
1294 | 2 2 18 16 -1.
1295 | <_>
1296 | 2 6 18 8 2.
1297 | 0
1298 | <_>
1299 |
1300 | <_>
1301 | 2 3 29 4 -1.
1302 | <_>
1303 | 2 5 29 2 2.
1304 | 0
1305 | <_>
1306 |
1307 | <_>
1308 | 2 9 1 2 -1.
1309 | <_>
1310 | 2 10 1 1 2.
1311 | 0
1312 | <_>
1313 |
1314 | <_>
1315 | 2 14 40 6 -1.
1316 | <_>
1317 | 2 17 40 3 2.
1318 | 0
1319 | <_>
1320 |
1321 | <_>
1322 | 3 0 22 6 -1.
1323 | <_>
1324 | 3 2 22 2 3.
1325 | 0
1326 | <_>
1327 |
1328 | <_>
1329 | 3 2 38 2 -1.
1330 | <_>
1331 | 3 2 19 1 2.
1332 | <_>
1333 | 22 3 19 1 2.
1334 | 0
1335 | <_>
1336 |
1337 | <_>
1338 | 3 4 51 16 -1.
1339 | <_>
1340 | 3 8 51 8 2.
1341 | 0
1342 | <_>
1343 |
1344 | <_>
1345 | 3 7 3 8 -1.
1346 | <_>
1347 | 4 7 1 8 3.
1348 | 0
1349 | <_>
1350 |
1351 | <_>
1352 | 3 9 1 3 -1.
1353 | <_>
1354 | 3 10 1 1 3.
1355 | 0
1356 | <_>
1357 |
1358 | <_>
1359 | 4 8 3 5 -1.
1360 | <_>
1361 | 5 8 1 5 3.
1362 | 0
1363 | <_>
1364 |
1365 | <_>
1366 | 4 8 4 9 -1.
1367 | <_>
1368 | 5 8 2 9 2.
1369 | 0
1370 | <_>
1371 |
1372 | <_>
1373 | 4 11 36 9 -1.
1374 | <_>
1375 | 16 11 12 9 3.
1376 | 0
1377 | <_>
1378 |
1379 | <_>
1380 | 4 14 49 6 -1.
1381 | <_>
1382 | 4 17 49 3 2.
1383 | 0
1384 | <_>
1385 |
1386 | <_>
1387 | 5 0 17 6 -1.
1388 | <_>
1389 | 5 2 17 2 3.
1390 | 0
1391 | <_>
1392 |
1393 | <_>
1394 | 5 1 3 1 -1.
1395 | <_>
1396 | 6 1 1 1 3.
1397 | 0
1398 | <_>
1399 |
1400 | <_>
1401 | 5 1 8 2 -1.
1402 | <_>
1403 | 7 1 4 2 2.
1404 | 0
1405 | <_>
1406 |
1407 | <_>
1408 | 5 2 36 9 -1.
1409 | <_>
1410 | 17 2 12 9 3.
1411 | 0
1412 | <_>
1413 |
1414 | <_>
1415 | 5 3 33 17 -1.
1416 | <_>
1417 | 16 3 11 17 3.
1418 | 0
1419 | <_>
1420 |
1421 | <_>
1422 | 6 0 30 19 -1.
1423 | <_>
1424 | 16 0 10 19 3.
1425 | 0
1426 | <_>
1427 |
1428 | <_>
1429 | 6 3 29 4 -1.
1430 | <_>
1431 | 6 5 29 2 2.
1432 | 0
1433 | <_>
1434 |
1435 | <_>
1436 | 6 4 16 16 -1.
1437 | <_>
1438 | 14 4 8 16 2.
1439 | 0
1440 | <_>
1441 |
1442 | <_>
1443 | 6 9 54 1 -1.
1444 | <_>
1445 | 33 9 27 1 2.
1446 | 0
1447 | <_>
1448 |
1449 | <_>
1450 | 7 0 4 18 -1.
1451 | <_>
1452 | 8 0 2 18 2.
1453 | 0
1454 | <_>
1455 |
1456 | <_>
1457 | 7 3 12 15 -1.
1458 | <_>
1459 | 13 3 6 15 2.
1460 | 0
1461 | <_>
1462 |
1463 | <_>
1464 | 7 4 20 5 -1.
1465 | <_>
1466 | 12 4 10 5 2.
1467 | 0
1468 | <_>
1469 |
1470 | <_>
1471 | 7 4 6 3 -1.
1472 | <_>
1473 | 7 5 6 1 3.
1474 | 0
1475 | <_>
1476 |
1477 | <_>
1478 | 7 4 36 6 -1.
1479 | <_>
1480 | 19 4 12 6 3.
1481 | 0
1482 | <_>
1483 |
1484 | <_>
1485 | 7 5 28 4 -1.
1486 | <_>
1487 | 14 5 14 4 2.
1488 | 0
1489 | <_>
1490 |
1491 | <_>
1492 | 7 7 4 11 -1.
1493 | <_>
1494 | 8 7 2 11 2.
1495 | 0
1496 | <_>
1497 |
1498 | <_>
1499 | 7 9 12 7 -1.
1500 | <_>
1501 | 13 9 6 7 2.
1502 | 0
1503 | <_>
1504 |
1505 | <_>
1506 | 8 1 21 4 -1.
1507 | <_>
1508 | 8 3 21 2 2.
1509 | 0
1510 | <_>
1511 |
1512 | <_>
1513 | 8 4 28 6 -1.
1514 | <_>
1515 | 15 4 14 6 2.
1516 | 0
1517 | <_>
1518 |
1519 | <_>
1520 | 8 8 38 6 -1.
1521 | <_>
1522 | 8 10 38 2 3.
1523 | 0
1524 | <_>
1525 |
1526 | <_>
1527 | 8 14 25 4 -1.
1528 | <_>
1529 | 8 15 25 2 2.
1530 | 0
1531 | <_>
1532 |
1533 | <_>
1534 | 9 2 12 4 -1.
1535 | <_>
1536 | 12 2 6 4 2.
1537 | 0
1538 | <_>
1539 |
1540 | <_>
1541 | 9 5 24 3 -1.
1542 | <_>
1543 | 15 5 12 3 2.
1544 | 0
1545 | <_>
1546 |
1547 | <_>
1548 | 9 8 40 12 -1.
1549 | <_>
1550 | 9 12 40 4 3.
1551 | 0
1552 | <_>
1553 |
1554 | <_>
1555 | 10 2 8 2 -1.
1556 | <_>
1557 | 12 2 4 2 2.
1558 | 0
1559 | <_>
1560 |
1561 | <_>
1562 | 10 2 9 2 -1.
1563 | <_>
1564 | 13 2 3 2 3.
1565 | 0
1566 | <_>
1567 |
1568 | <_>
1569 | 10 5 3 3 -1.
1570 | <_>
1571 | 11 6 1 1 9.
1572 | 0
1573 | <_>
1574 |
1575 | <_>
1576 | 11 0 32 20 -1.
1577 | <_>
1578 | 19 0 16 20 2.
1579 | 0
1580 | <_>
1581 |
1582 | <_>
1583 | 11 3 1 4 -1.
1584 | <_>
1585 | 11 5 1 2 2.
1586 | 0
1587 | <_>
1588 |
1589 | <_>
1590 | 11 9 4 3 -1.
1591 | <_>
1592 | 12 9 2 3 2.
1593 | 0
1594 | <_>
1595 |
1596 | <_>
1597 | 11 9 3 7 -1.
1598 | <_>
1599 | 12 9 1 7 3.
1600 | 0
1601 | <_>
1602 |
1603 | <_>
1604 | 12 3 9 2 -1.
1605 | <_>
1606 | 15 3 3 2 3.
1607 | 0
1608 | <_>
1609 |
1610 | <_>
1611 | 12 6 6 6 -1.
1612 | <_>
1613 | 14 6 2 6 3.
1614 | 0
1615 | <_>
1616 |
1617 | <_>
1618 | 12 10 42 10 -1.
1619 | <_>
1620 | 26 10 14 10 3.
1621 | 0
1622 | <_>
1623 |
1624 | <_>
1625 | 12 14 11 3 -1.
1626 | <_>
1627 | 12 15 11 1 3.
1628 | 0
1629 | <_>
1630 |
1631 | <_>
1632 | 13 4 6 14 -1.
1633 | <_>
1634 | 15 4 2 14 3.
1635 | 0
1636 | <_>
1637 |
1638 | <_>
1639 | 13 8 3 6 -1.
1640 | <_>
1641 | 14 8 1 6 3.
1642 | 0
1643 | <_>
1644 |
1645 | <_>
1646 | 13 11 32 2 -1.
1647 | <_>
1648 | 21 11 16 2 2.
1649 | 0
1650 | <_>
1651 |
1652 | <_>
1653 | 13 13 25 6 -1.
1654 | <_>
1655 | 13 16 25 3 2.
1656 | 0
1657 | <_>
1658 |
1659 | <_>
1660 | 13 16 21 3 -1.
1661 | <_>
1662 | 20 16 7 3 3.
1663 | 0
1664 | <_>
1665 |
1666 | <_>
1667 | 14 2 3 2 -1.
1668 | <_>
1669 | 15 2 1 2 3.
1670 | 0
1671 | <_>
1672 |
1673 | <_>
1674 | 14 2 24 8 -1.
1675 | <_>
1676 | 20 2 12 8 2.
1677 | 0
1678 | <_>
1679 |
1680 | <_>
1681 | 14 13 36 6 -1.
1682 | <_>
1683 | 23 13 18 6 2.
1684 | 0
1685 | <_>
1686 |
1687 | <_>
1688 | 14 14 8 3 -1.
1689 | <_>
1690 | 14 15 8 1 3.
1691 | 0
1692 | <_>
1693 |
1694 | <_>
1695 | 14 14 45 6 -1.
1696 | <_>
1697 | 14 17 45 3 2.
1698 | 0
1699 | <_>
1700 |
1701 | <_>
1702 | 14 18 9 2 -1.
1703 | <_>
1704 | 17 18 3 2 3.
1705 | 0
1706 | <_>
1707 |
1708 | <_>
1709 | 15 9 4 1 -1.
1710 | <_>
1711 | 16 9 2 1 2.
1712 | 0
1713 | <_>
1714 |
1715 | <_>
1716 | 15 10 19 4 -1.
1717 | <_>
1718 | 15 12 19 2 2.
1719 | 0
1720 | <_>
1721 |
1722 | <_>
1723 | 16 0 28 8 -1.
1724 | <_>
1725 | 16 2 28 4 2.
1726 | 0
1727 | <_>
1728 |
1729 | <_>
1730 | 16 2 36 18 -1.
1731 | <_>
1732 | 28 2 12 18 3.
1733 | 0
1734 | <_>
1735 |
1736 | <_>
1737 | 16 6 24 6 -1.
1738 | <_>
1739 | 22 6 12 6 2.
1740 | 0
1741 | <_>
1742 |
1743 | <_>
1744 | 17 1 24 6 -1.
1745 | <_>
1746 | 17 3 24 2 3.
1747 | 0
1748 | <_>
1749 |
1750 | <_>
1751 | 17 3 15 12 -1.
1752 | <_>
1753 | 22 7 5 4 9.
1754 | 0
1755 | <_>
1756 |
1757 | <_>
1758 | 17 15 11 3 -1.
1759 | <_>
1760 | 17 16 11 1 3.
1761 | 0
1762 | <_>
1763 |
1764 | <_>
1765 | 18 5 6 10 -1.
1766 | <_>
1767 | 20 5 2 10 3.
1768 | 0
1769 | <_>
1770 |
1771 | <_>
1772 | 18 6 18 3 -1.
1773 | <_>
1774 | 24 6 6 3 3.
1775 | 0
1776 | <_>
1777 |
1778 | <_>
1779 | 18 11 3 1 -1.
1780 | <_>
1781 | 19 11 1 1 3.
1782 | 0
1783 | <_>
1784 |
1785 | <_>
1786 | 19 6 32 2 -1.
1787 | <_>
1788 | 27 6 16 2 2.
1789 | 0
1790 | <_>
1791 |
1792 | <_>
1793 | 19 8 3 1 -1.
1794 | <_>
1795 | 20 8 1 1 3.
1796 | 0
1797 | <_>
1798 |
1799 | <_>
1800 | 19 9 14 11 -1.
1801 | <_>
1802 | 26 9 7 11 2.
1803 | 0
1804 | <_>
1805 |
1806 | <_>
1807 | 19 10 3 3 -1.
1808 | <_>
1809 | 20 10 1 3 3.
1810 | 0
1811 | <_>
1812 |
1813 | <_>
1814 | 19 13 7 3 -1.
1815 | <_>
1816 | 19 14 7 1 3.
1817 | 0
1818 | <_>
1819 |
1820 | <_>
1821 | 19 14 13 3 -1.
1822 | <_>
1823 | 19 15 13 1 3.
1824 | 0
1825 | <_>
1826 |
1827 | <_>
1828 | 20 0 15 20 -1.
1829 | <_>
1830 | 25 0 5 20 3.
1831 | 0
1832 | <_>
1833 |
1834 | <_>
1835 | 20 9 3 1 -1.
1836 | <_>
1837 | 21 9 1 1 3.
1838 | 0
1839 | <_>
1840 |
1841 | <_>
1842 | 20 10 3 2 -1.
1843 | <_>
1844 | 21 10 1 2 3.
1845 | 0
1846 | <_>
1847 |
1848 | <_>
1849 | 21 1 21 6 -1.
1850 | <_>
1851 | 21 3 21 2 3.
1852 | 0
1853 | <_>
1854 |
1855 | <_>
1856 | 21 8 4 3 -1.
1857 | <_>
1858 | 22 8 2 3 2.
1859 | 0
1860 | <_>
1861 |
1862 | <_>
1863 | 21 9 3 4 -1.
1864 | <_>
1865 | 22 9 1 4 3.
1866 | 0
1867 | <_>
1868 |
1869 | <_>
1870 | 21 10 4 2 -1.
1871 | <_>
1872 | 22 10 2 2 2.
1873 | 0
1874 | <_>
1875 |
1876 | <_>
1877 | 21 11 24 2 -1.
1878 | <_>
1879 | 27 11 12 2 2.
1880 | 0
1881 | <_>
1882 |
1883 | <_>
1884 | 21 18 4 1 -1.
1885 | <_>
1886 | 22 18 2 1 2.
1887 | 0
1888 | <_>
1889 |
1890 | <_>
1891 | 22 3 4 1 -1.
1892 | <_>
1893 | 23 3 2 1 2.
1894 | 0
1895 | <_>
1896 |
1897 | <_>
1898 | 22 6 2 6 -1.
1899 | <_>
1900 | 22 6 1 3 2.
1901 | <_>
1902 | 23 9 1 3 2.
1903 | 0
1904 | <_>
1905 |
1906 | <_>
1907 | 22 7 3 3 -1.
1908 | <_>
1909 | 23 8 1 1 9.
1910 | 0
1911 | <_>
1912 |
1913 | <_>
1914 | 22 8 3 5 -1.
1915 | <_>
1916 | 23 8 1 5 3.
1917 | 0
1918 | <_>
1919 |
1920 | <_>
1921 | 22 9 3 2 -1.
1922 | <_>
1923 | 23 9 1 2 3.
1924 | 0
1925 | <_>
1926 |
1927 | <_>
1928 | 23 8 3 3 -1.
1929 | <_>
1930 | 24 8 1 3 3.
1931 | 0
1932 | <_>
1933 |
1934 | <_>
1935 | 23 10 3 2 -1.
1936 | <_>
1937 | 24 10 1 2 3.
1938 | 0
1939 | <_>
1940 |
1941 | <_>
1942 | 24 3 20 17 -1.
1943 | <_>
1944 | 29 3 10 17 2.
1945 | 0
1946 | <_>
1947 |
1948 | <_>
1949 | 24 4 14 6 -1.
1950 | <_>
1951 | 31 4 7 6 2.
1952 | 0
1953 | <_>
1954 |
1955 | <_>
1956 | 24 18 9 2 -1.
1957 | <_>
1958 | 27 18 3 2 3.
1959 | 0
1960 | <_>
1961 |
1962 | <_>
1963 | 25 5 8 4 -1.
1964 | <_>
1965 | 25 5 4 4 2.
1966 | 1
1967 | <_>
1968 |
1969 | <_>
1970 | 25 6 22 14 -1.
1971 | <_>
1972 | 36 6 11 14 2.
1973 | 0
1974 | <_>
1975 |
1976 | <_>
1977 | 25 12 28 8 -1.
1978 | <_>
1979 | 25 14 28 4 2.
1980 | 0
1981 | <_>
1982 |
1983 | <_>
1984 | 25 14 9 3 -1.
1985 | <_>
1986 | 25 15 9 1 3.
1987 | 0
1988 | <_>
1989 |
1990 | <_>
1991 | 26 2 27 18 -1.
1992 | <_>
1993 | 35 2 9 18 3.
1994 | 0
1995 | <_>
1996 |
1997 | <_>
1998 | 26 3 22 3 -1.
1999 | <_>
2000 | 26 4 22 1 3.
2001 | 0
2002 | <_>
2003 |
2004 | <_>
2005 | 26 4 8 4 -1.
2006 | <_>
2007 | 30 4 4 4 2.
2008 | 0
2009 | <_>
2010 |
2011 | <_>
2012 | 26 4 20 6 -1.
2013 | <_>
2014 | 31 4 10 6 2.
2015 | 0
2016 | <_>
2017 |
2018 | <_>
2019 | 26 7 1 12 -1.
2020 | <_>
2021 | 22 11 1 4 3.
2022 | 1
2023 | <_>
2024 |
2025 | <_>
2026 | 26 9 3 3 -1.
2027 | <_>
2028 | 27 9 1 3 3.
2029 | 0
2030 | <_>
2031 |
2032 | <_>
2033 | 26 13 9 3 -1.
2034 | <_>
2035 | 26 14 9 1 3.
2036 | 0
2037 | <_>
2038 |
2039 | <_>
2040 | 27 3 15 6 -1.
2041 | <_>
2042 | 32 3 5 6 3.
2043 | 0
2044 | <_>
2045 |
2046 | <_>
2047 | 27 9 3 1 -1.
2048 | <_>
2049 | 28 9 1 1 3.
2050 | 0
2051 | <_>
2052 |
2053 | <_>
2054 | 27 9 3 2 -1.
2055 | <_>
2056 | 28 9 1 2 3.
2057 | 0
2058 | <_>
2059 |
2060 | <_>
2061 | 27 10 3 3 -1.
2062 | <_>
2063 | 28 10 1 3 3.
2064 | 0
2065 | <_>
2066 |
2067 | <_>
2068 | 27 11 3 2 -1.
2069 | <_>
2070 | 28 11 1 2 3.
2071 | 0
2072 | <_>
2073 |
2074 | <_>
2075 | 28 2 10 4 -1.
2076 | <_>
2077 | 28 2 10 2 2.
2078 | 1
2079 | <_>
2080 |
2081 | <_>
2082 | 28 8 32 6 -1.
2083 | <_>
2084 | 28 10 32 2 3.
2085 | 0
2086 | <_>
2087 |
2088 | <_>
2089 | 28 10 3 1 -1.
2090 | <_>
2091 | 29 10 1 1 3.
2092 | 0
2093 | <_>
2094 |
2095 | <_>
2096 | 28 11 3 1 -1.
2097 | <_>
2098 | 29 11 1 1 3.
2099 | 0
2100 | <_>
2101 |
2102 | <_>
2103 | 28 15 5 4 -1.
2104 | <_>
2105 | 28 16 5 2 2.
2106 | 0
2107 | <_>
2108 |
2109 | <_>
2110 | 28 16 23 4 -1.
2111 | <_>
2112 | 28 17 23 2 2.
2113 | 0
2114 | <_>
2115 |
2116 | <_>
2117 | 28 19 6 1 -1.
2118 | <_>
2119 | 30 19 2 1 3.
2120 | 0
2121 | <_>
2122 |
2123 | <_>
2124 | 29 3 9 4 -1.
2125 | <_>
2126 | 32 3 3 4 3.
2127 | 0
2128 | <_>
2129 |
2130 | <_>
2131 | 29 5 9 1 -1.
2132 | <_>
2133 | 32 5 3 1 3.
2134 | 0
2135 | <_>
2136 |
2137 | <_>
2138 | 29 8 3 6 -1.
2139 | <_>
2140 | 30 8 1 6 3.
2141 | 0
2142 | <_>
2143 |
2144 | <_>
2145 | 29 9 3 1 -1.
2146 | <_>
2147 | 30 9 1 1 3.
2148 | 0
2149 | <_>
2150 |
2151 | <_>
2152 | 29 11 10 4 -1.
2153 | <_>
2154 | 29 13 10 2 2.
2155 | 0
2156 | <_>
2157 |
2158 | <_>
2159 | 29 11 26 8 -1.
2160 | <_>
2161 | 29 13 26 4 2.
2162 | 0
2163 | <_>
2164 |
2165 | <_>
2166 | 30 0 16 6 -1.
2167 | <_>
2168 | 30 3 16 3 2.
2169 | 0
2170 | <_>
2171 |
2172 | <_>
2173 | 30 2 30 6 -1.
2174 | <_>
2175 | 30 2 15 3 2.
2176 | <_>
2177 | 45 5 15 3 2.
2178 | 0
2179 | <_>
2180 |
2181 | <_>
2182 | 30 3 9 4 -1.
2183 | <_>
2184 | 33 3 3 4 3.
2185 | 0
2186 | <_>
2187 |
2188 | <_>
2189 | 30 5 9 4 -1.
2190 | <_>
2191 | 30 6 9 2 2.
2192 | 0
2193 | <_>
2194 |
2195 | <_>
2196 | 30 10 3 2 -1.
2197 | <_>
2198 | 31 10 1 2 3.
2199 | 0
2200 | <_>
2201 |
2202 | <_>
2203 | 30 14 18 6 -1.
2204 | <_>
2205 | 36 14 6 6 3.
2206 | 0
2207 | <_>
2208 |
2209 | <_>
2210 | 31 3 4 3 -1.
2211 | <_>
2212 | 32 3 2 3 2.
2213 | 0
2214 | <_>
2215 |
2216 | <_>
2217 | 31 7 4 9 -1.
2218 | <_>
2219 | 32 7 2 9 2.
2220 | 0
2221 | <_>
2222 |
2223 | <_>
2224 | 31 11 3 2 -1.
2225 | <_>
2226 | 32 11 1 2 3.
2227 | 0
2228 | <_>
2229 |
2230 | <_>
2231 | 31 11 3 3 -1.
2232 | <_>
2233 | 32 11 1 3 3.
2234 | 0
2235 | <_>
2236 |
2237 | <_>
2238 | 32 4 3 2 -1.
2239 | <_>
2240 | 33 4 1 2 3.
2241 | 0
2242 | <_>
2243 |
2244 | <_>
2245 | 32 6 18 6 -1.
2246 | <_>
2247 | 32 6 9 3 2.
2248 | <_>
2249 | 41 9 9 3 2.
2250 | 0
2251 | <_>
2252 |
2253 | <_>
2254 | 33 1 22 6 -1.
2255 | <_>
2256 | 33 4 22 3 2.
2257 | 0
2258 | <_>
2259 |
2260 | <_>
2261 | 33 3 4 2 -1.
2262 | <_>
2263 | 34 3 2 2 2.
2264 | 0
2265 | <_>
2266 |
2267 | <_>
2268 | 33 3 4 4 -1.
2269 | <_>
2270 | 34 3 2 4 2.
2271 | 0
2272 | <_>
2273 |
2274 | <_>
2275 | 33 5 4 1 -1.
2276 | <_>
2277 | 34 5 2 1 2.
2278 | 0
2279 | <_>
2280 |
2281 | <_>
2282 | 33 9 3 6 -1.
2283 | <_>
2284 | 34 9 1 6 3.
2285 | 0
2286 | <_>
2287 |
2288 | <_>
2289 | 33 10 3 3 -1.
2290 | <_>
2291 | 34 10 1 3 3.
2292 | 0
2293 | <_>
2294 |
2295 | <_>
2296 | 34 8 4 7 -1.
2297 | <_>
2298 | 35 8 2 7 2.
2299 | 0
2300 | <_>
2301 |
2302 | <_>
2303 | 34 9 3 5 -1.
2304 | <_>
2305 | 35 9 1 5 3.
2306 | 0
2307 | <_>
2308 |
2309 | <_>
2310 | 34 18 9 2 -1.
2311 | <_>
2312 | 37 18 3 2 3.
2313 | 0
2314 | <_>
2315 |
2316 | <_>
2317 | 35 0 8 6 -1.
2318 | <_>
2319 | 37 0 4 6 2.
2320 | 0
2321 | <_>
2322 |
2323 | <_>
2324 | 35 9 3 2 -1.
2325 | <_>
2326 | 36 9 1 2 3.
2327 | 0
2328 | <_>
2329 |
2330 | <_>
2331 | 36 9 24 9 -1.
2332 | <_>
2333 | 42 9 12 9 2.
2334 | 0
2335 | <_>
2336 |
2337 | <_>
2338 | 37 1 16 18 -1.
2339 | <_>
2340 | 41 1 8 18 2.
2341 | 0
2342 | <_>
2343 |
2344 | <_>
2345 | 37 11 20 8 -1.
2346 | <_>
2347 | 42 11 10 8 2.
2348 | 0
2349 | <_>
2350 |
2351 | <_>
2352 | 38 8 15 12 -1.
2353 | <_>
2354 | 38 12 15 4 3.
2355 | 0
2356 | <_>
2357 |
2358 | <_>
2359 | 39 6 12 8 -1.
2360 | <_>
2361 | 45 6 6 8 2.
2362 | 0
2363 | <_>
2364 |
2365 | <_>
2366 | 40 8 8 4 -1.
2367 | <_>
2368 | 40 8 8 2 2.
2369 | 1
2370 | <_>
2371 |
2372 | <_>
2373 | 40 10 3 1 -1.
2374 | <_>
2375 | 41 10 1 1 3.
2376 | 0
2377 | <_>
2378 |
2379 | <_>
2380 | 40 10 3 5 -1.
2381 | <_>
2382 | 41 10 1 5 3.
2383 | 0
2384 | <_>
2385 |
2386 | <_>
2387 | 40 13 12 6 -1.
2388 | <_>
2389 | 43 13 6 6 2.
2390 | 0
2391 | <_>
2392 |
2393 | <_>
2394 | 41 5 7 15 -1.
2395 | <_>
2396 | 41 10 7 5 3.
2397 | 0
2398 | <_>
2399 |
2400 | <_>
2401 | 41 6 12 6 -1.
2402 | <_>
2403 | 45 6 4 6 3.
2404 | 0
2405 | <_>
2406 |
2407 | <_>
2408 | 41 7 12 7 -1.
2409 | <_>
2410 | 45 7 4 7 3.
2411 | 0
2412 | <_>
2413 |
2414 | <_>
2415 | 41 8 12 12 -1.
2416 | <_>
2417 | 45 8 4 12 3.
2418 | 0
2419 | <_>
2420 |
2421 | <_>
2422 | 41 9 3 6 -1.
2423 | <_>
2424 | 42 9 1 6 3.
2425 | 0
2426 | <_>
2427 |
2428 | <_>
2429 | 42 2 3 13 -1.
2430 | <_>
2431 | 43 2 1 13 3.
2432 | 0
2433 | <_>
2434 |
2435 | <_>
2436 | 42 4 18 10 -1.
2437 | <_>
2438 | 42 4 9 5 2.
2439 | <_>
2440 | 51 9 9 5 2.
2441 | 0
2442 | <_>
2443 |
2444 | <_>
2445 | 42 5 18 8 -1.
2446 | <_>
2447 | 42 5 9 4 2.
2448 | <_>
2449 | 51 9 9 4 2.
2450 | 0
2451 | <_>
2452 |
2453 | <_>
2454 | 42 7 2 7 -1.
2455 | <_>
2456 | 43 7 1 7 2.
2457 | 0
2458 | <_>
2459 |
2460 | <_>
2461 | 42 14 12 5 -1.
2462 | <_>
2463 | 46 14 4 5 3.
2464 | 0
2465 | <_>
2466 |
2467 | <_>
2468 | 43 1 10 9 -1.
2469 | <_>
2470 | 40 4 10 3 3.
2471 | 1
2472 | <_>
2473 |
2474 | <_>
2475 | 43 6 6 6 -1.
2476 | <_>
2477 | 43 9 6 3 2.
2478 | 0
2479 | <_>
2480 |
2481 | <_>
2482 | 44 0 8 20 -1.
2483 | <_>
2484 | 46 0 4 20 2.
2485 | 0
2486 | <_>
2487 |
2488 | <_>
2489 | 44 2 16 12 -1.
2490 | <_>
2491 | 44 2 8 6 2.
2492 | <_>
2493 | 52 8 8 6 2.
2494 | 0
2495 | <_>
2496 |
2497 | <_>
2498 | 44 5 3 8 -1.
2499 | <_>
2500 | 45 5 1 8 3.
2501 | 0
2502 | <_>
2503 |
2504 | <_>
2505 | 44 8 3 4 -1.
2506 | <_>
2507 | 45 8 1 4 3.
2508 | 0
2509 | <_>
2510 |
2511 | <_>
2512 | 44 12 16 4 -1.
2513 | <_>
2514 | 52 12 8 4 2.
2515 | 0
2516 | <_>
2517 |
2518 | <_>
2519 | 44 13 10 3 -1.
2520 | <_>
2521 | 49 13 5 3 2.
2522 | 0
2523 | <_>
2524 |
2525 | <_>
2526 | 45 19 9 1 -1.
2527 | <_>
2528 | 48 19 3 1 3.
2529 | 0
2530 | <_>
2531 |
2532 | <_>
2533 | 46 3 8 8 -1.
2534 | <_>
2535 | 50 3 4 8 2.
2536 | 0
2537 | <_>
2538 |
2539 | <_>
2540 | 47 12 10 6 -1.
2541 | <_>
2542 | 52 12 5 6 2.
2543 | 0
2544 | <_>
2545 |
2546 | <_>
2547 | 48 0 4 13 -1.
2548 | <_>
2549 | 49 0 2 13 2.
2550 | 0
2551 | <_>
2552 |
2553 | <_>
2554 | 48 5 3 12 -1.
2555 | <_>
2556 | 45 8 3 6 2.
2557 | 1
2558 | <_>
2559 |
2560 | <_>
2561 | 48 9 12 8 -1.
2562 | <_>
2563 | 54 9 6 8 2.
2564 | 0
2565 | <_>
2566 |
2567 | <_>
2568 | 48 13 12 4 -1.
2569 | <_>
2570 | 54 13 6 4 2.
2571 | 0
2572 | <_>
2573 |
2574 | <_>
2575 | 49 8 3 1 -1.
2576 | <_>
2577 | 50 8 1 1 3.
2578 | 0
2579 | <_>
2580 |
2581 | <_>
2582 | 49 8 3 2 -1.
2583 | <_>
2584 | 50 8 1 2 3.
2585 | 0
2586 | <_>
2587 |
2588 | <_>
2589 | 49 8 3 3 -1.
2590 | <_>
2591 | 50 8 1 3 3.
2592 | 0
2593 | <_>
2594 |
2595 | <_>
2596 | 50 9 3 3 -1.
2597 | <_>
2598 | 51 10 1 1 9.
2599 | 0
2600 | <_>
2601 |
2602 | <_>
2603 | 51 8 3 3 -1.
2604 | <_>
2605 | 52 8 1 3 3.
2606 | 0
2607 | <_>
2608 |
2609 | <_>
2610 | 52 6 6 10 -1.
2611 | <_>
2612 | 54 6 2 10 3.
2613 | 0
2614 | <_>
2615 |
2616 | <_>
2617 | 52 7 8 7 -1.
2618 | <_>
2619 | 56 7 4 7 2.
2620 | 0
2621 | <_>
2622 |
2623 | <_>
2624 | 52 8 8 4 -1.
2625 | <_>
2626 | 52 8 8 2 2.
2627 | 1
2628 | <_>
2629 |
2630 | <_>
2631 | 54 3 6 15 -1.
2632 | <_>
2633 | 57 3 3 15 2.
2634 | 0
2635 | <_>
2636 |
2637 | <_>
2638 | 54 8 6 7 -1.
2639 | <_>
2640 | 57 8 3 7 2.
2641 | 0
2642 | <_>
2643 |
2644 | <_>
2645 | 57 11 3 6 -1.
2646 | <_>
2647 | 57 13 3 2 3.
2648 | 0
2649 | <_>
2650 |
2651 | <_>
2652 | 59 8 1 3 -1.
2653 | <_>
2654 | 59 9 1 1 3.
2655 | 0
2656 |
2657 |
--------------------------------------------------------------------------------
/Resources/lambo.PNG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/murtazahassan/Learn-OpenCV-in-3-hours/d4d6a14c7151aa4ebe23eb2a7cc8f94db05384c3/Resources/lambo.PNG
--------------------------------------------------------------------------------
/Resources/land.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/murtazahassan/Learn-OpenCV-in-3-hours/d4d6a14c7151aa4ebe23eb2a7cc8f94db05384c3/Resources/land.jpg
--------------------------------------------------------------------------------
/Resources/lena.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/murtazahassan/Learn-OpenCV-in-3-hours/d4d6a14c7151aa4ebe23eb2a7cc8f94db05384c3/Resources/lena.png
--------------------------------------------------------------------------------
/Resources/p1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/murtazahassan/Learn-OpenCV-in-3-hours/d4d6a14c7151aa4ebe23eb2a7cc8f94db05384c3/Resources/p1.jpg
--------------------------------------------------------------------------------
/Resources/p2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/murtazahassan/Learn-OpenCV-in-3-hours/d4d6a14c7151aa4ebe23eb2a7cc8f94db05384c3/Resources/p2.jpg
--------------------------------------------------------------------------------
/Resources/p3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/murtazahassan/Learn-OpenCV-in-3-hours/d4d6a14c7151aa4ebe23eb2a7cc8f94db05384c3/Resources/p3.jpg
--------------------------------------------------------------------------------
/Resources/paper.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/murtazahassan/Learn-OpenCV-in-3-hours/d4d6a14c7151aa4ebe23eb2a7cc8f94db05384c3/Resources/paper.jpg
--------------------------------------------------------------------------------
/Resources/shapes.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/murtazahassan/Learn-OpenCV-in-3-hours/d4d6a14c7151aa4ebe23eb2a7cc8f94db05384c3/Resources/shapes.png
--------------------------------------------------------------------------------
/Resources/test_video.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/murtazahassan/Learn-OpenCV-in-3-hours/d4d6a14c7151aa4ebe23eb2a7cc8f94db05384c3/Resources/test_video.mp4
--------------------------------------------------------------------------------
/Tumbnails/Chapter1.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/murtazahassan/Learn-OpenCV-in-3-hours/d4d6a14c7151aa4ebe23eb2a7cc8f94db05384c3/Tumbnails/Chapter1.gif
--------------------------------------------------------------------------------
/Tumbnails/Chapter2.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/murtazahassan/Learn-OpenCV-in-3-hours/d4d6a14c7151aa4ebe23eb2a7cc8f94db05384c3/Tumbnails/Chapter2.gif
--------------------------------------------------------------------------------
/Tumbnails/Chapter3.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/murtazahassan/Learn-OpenCV-in-3-hours/d4d6a14c7151aa4ebe23eb2a7cc8f94db05384c3/Tumbnails/Chapter3.gif
--------------------------------------------------------------------------------
/Tumbnails/Chapter4.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/murtazahassan/Learn-OpenCV-in-3-hours/d4d6a14c7151aa4ebe23eb2a7cc8f94db05384c3/Tumbnails/Chapter4.gif
--------------------------------------------------------------------------------
/Tumbnails/Chapter5.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/murtazahassan/Learn-OpenCV-in-3-hours/d4d6a14c7151aa4ebe23eb2a7cc8f94db05384c3/Tumbnails/Chapter5.gif
--------------------------------------------------------------------------------
/Tumbnails/Chapter6.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/murtazahassan/Learn-OpenCV-in-3-hours/d4d6a14c7151aa4ebe23eb2a7cc8f94db05384c3/Tumbnails/Chapter6.gif
--------------------------------------------------------------------------------
/Tumbnails/Chapter7.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/murtazahassan/Learn-OpenCV-in-3-hours/d4d6a14c7151aa4ebe23eb2a7cc8f94db05384c3/Tumbnails/Chapter7.gif
--------------------------------------------------------------------------------
/Tumbnails/Chapter8.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/murtazahassan/Learn-OpenCV-in-3-hours/d4d6a14c7151aa4ebe23eb2a7cc8f94db05384c3/Tumbnails/Chapter8.gif
--------------------------------------------------------------------------------
/Tumbnails/Chapter9.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/murtazahassan/Learn-OpenCV-in-3-hours/d4d6a14c7151aa4ebe23eb2a7cc8f94db05384c3/Tumbnails/Chapter9.gif
--------------------------------------------------------------------------------
/Tumbnails/Installations.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/murtazahassan/Learn-OpenCV-in-3-hours/d4d6a14c7151aa4ebe23eb2a7cc8f94db05384c3/Tumbnails/Installations.gif
--------------------------------------------------------------------------------
/Tumbnails/Introduction.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/murtazahassan/Learn-OpenCV-in-3-hours/d4d6a14c7151aa4ebe23eb2a7cc8f94db05384c3/Tumbnails/Introduction.gif
--------------------------------------------------------------------------------
/Tumbnails/Marker.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/murtazahassan/Learn-OpenCV-in-3-hours/d4d6a14c7151aa4ebe23eb2a7cc8f94db05384c3/Tumbnails/Marker.gif
--------------------------------------------------------------------------------
/Tumbnails/project1.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/murtazahassan/Learn-OpenCV-in-3-hours/d4d6a14c7151aa4ebe23eb2a7cc8f94db05384c3/Tumbnails/project1.gif
--------------------------------------------------------------------------------
/Tumbnails/project2.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/murtazahassan/Learn-OpenCV-in-3-hours/d4d6a14c7151aa4ebe23eb2a7cc8f94db05384c3/Tumbnails/project2.gif
--------------------------------------------------------------------------------
/Tumbnails/project3.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/murtazahassan/Learn-OpenCV-in-3-hours/d4d6a14c7151aa4ebe23eb2a7cc8f94db05384c3/Tumbnails/project3.gif
--------------------------------------------------------------------------------
/chapter1.py:
--------------------------------------------------------------------------------
1 | ######################## READ IMAGE ############################
2 | # import cv2
3 | # # LOAD AN IMAGE USING 'IMREAD'
4 | # img = cv2.imread("Resources/lena.png")
5 | # # DISPLAY
6 | # cv2.imshow("Lena Soderberg",img)
7 | # cv2.waitKey(0)
8 |
9 | ######################### READ VIDEO #############################
10 | # import cv2
11 | # frameWidth = 640
12 | # frameHeight = 480
13 | # cap = cv2.VideoCapture("Resources/test_ video.mp4")
14 | # while True:
15 | # success, img = cap.read()
16 | # img = cv2.resize(img, (frameWidth, frameHeight))
17 | # cv2.imshow("Result", img)
18 | # if cv2.waitKey(1) & 0xFF == ord('q'):
19 | # break
20 | ######################### READ WEBCAM ############################
21 | import cv2
22 | frameWidth = 640
23 | frameHeight = 480
24 | cap = cv2.VideoCapture(0)
25 | cap.set(3, frameWidth)
26 | cap.set(4, frameHeight)
27 | cap.set(10,150)
28 | while True:
29 | success, img = cap.read()
30 | cv2.imshow("Result", img)
31 | if cv2.waitKey(1) & 0xFF == ord('q'):
32 | break
33 |
--------------------------------------------------------------------------------
/chapter2.py:
--------------------------------------------------------------------------------
1 | import cv2
2 | import numpy as np
3 |
4 | img = cv2.imread("Resources/lena.png")
5 | kernel = np.ones((5,5),np.uint8)
6 |
7 | imgGray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
8 | imgBlur = cv2.GaussianBlur(imgGray,(7,7),0)
9 | imgCanny = cv2.Canny(img,150,200)
10 | imgDialation = cv2.dilate(imgCanny,kernel,iterations=1)
11 | imgEroded = cv2.erode(imgDialation,kernel,iterations=1)
12 |
13 | cv2.imshow("Gray Image",imgGray)
14 | cv2.imshow("Blur Image",imgBlur)
15 | cv2.imshow("Canny Image",imgCanny)
16 | cv2.imshow("Dialation Image",imgDialation)
17 | cv2.imshow("Eroded Image",imgEroded)
18 | cv2.waitKey(0)
--------------------------------------------------------------------------------
/chapter3.py:
--------------------------------------------------------------------------------
1 | import cv2
2 | import numpy as np
3 |
4 | img = cv2.imread("Resources/shapes.png")
5 | print(img.shape)
6 |
7 | imgResize = cv2.resize(img,(1000,500))
8 | print(imgResize.shape)
9 |
10 | imgCropped = img[46:119,352:495]
11 |
12 | cv2.imshow("Image",img)
13 | #cv2.imshow("Image Resize",imgResize)
14 | cv2.imshow("Image Cropped",imgCropped)
15 |
16 | cv2.waitKey(0)
--------------------------------------------------------------------------------
/chapter4.py:
--------------------------------------------------------------------------------
1 | import cv2
2 | import numpy as np
3 |
4 | img = np.zeros((512,512,3),np.uint8)
5 | #print(img)
6 | #img[:]= 255,0,0
7 |
8 | cv2.line(img,(0,0),(img.shape[1],img.shape[0]),(0,255,0),3)
9 | cv2.rectangle(img,(0,0),(250,350),(0,0,255),2)
10 | cv2.circle(img,(400,50),30,(255,255,0),5)
11 | cv2.putText(img," OPENCV ",(300,200),cv2.FONT_HERSHEY_COMPLEX,1,(0,150,0),3)
12 |
13 |
14 | cv2.imshow("Image",img)
15 |
16 | cv2.waitKey(0)
--------------------------------------------------------------------------------
/chapter5.py:
--------------------------------------------------------------------------------
1 | import cv2
2 | import numpy as np
3 |
4 | img = cv2.imread("Resources/cards.jpg")
5 |
6 | width,height = 250,350
7 | pts1 = np.float32([[111,219],[287,188],[154,482],[352,440]])
8 | pts2 = np.float32([[0,0],[width,0],[0,height],[width,height]])
9 | matrix = cv2.getPerspectiveTransform(pts1,pts2)
10 | imgOutput = cv2.warpPerspective(img,matrix,(width,height))
11 |
12 |
13 | cv2.imshow("Image",img)
14 | cv2.imshow("Output",imgOutput)
15 |
16 | cv2.waitKey(0)
--------------------------------------------------------------------------------
/chapter6.py:
--------------------------------------------------------------------------------
1 | import cv2
2 | import numpy as np
3 |
4 |
5 | def stackImages(scale,imgArray):
6 | rows = len(imgArray)
7 | cols = len(imgArray[0])
8 | rowsAvailable = isinstance(imgArray[0], list)
9 | width = imgArray[0][0].shape[1]
10 | height = imgArray[0][0].shape[0]
11 | if rowsAvailable:
12 | for x in range ( 0, rows):
13 | for y in range(0, cols):
14 | if imgArray[x][y].shape[:2] == imgArray[0][0].shape [:2]:
15 | imgArray[x][y] = cv2.resize(imgArray[x][y], (0, 0), None, scale, scale)
16 | else:
17 | imgArray[x][y] = cv2.resize(imgArray[x][y], (imgArray[0][0].shape[1], imgArray[0][0].shape[0]), None, scale, scale)
18 | if len(imgArray[x][y].shape) == 2: imgArray[x][y]= cv2.cvtColor( imgArray[x][y], cv2.COLOR_GRAY2BGR)
19 | imageBlank = np.zeros((height, width, 3), np.uint8)
20 | hor = [imageBlank]*rows
21 | hor_con = [imageBlank]*rows
22 | for x in range(0, rows):
23 | hor[x] = np.hstack(imgArray[x])
24 | ver = np.vstack(hor)
25 | else:
26 | for x in range(0, rows):
27 | if imgArray[x].shape[:2] == imgArray[0].shape[:2]:
28 | imgArray[x] = cv2.resize(imgArray[x], (0, 0), None, scale, scale)
29 | else:
30 | imgArray[x] = cv2.resize(imgArray[x], (imgArray[0].shape[1], imgArray[0].shape[0]), None,scale, scale)
31 | if len(imgArray[x].shape) == 2: imgArray[x] = cv2.cvtColor(imgArray[x], cv2.COLOR_GRAY2BGR)
32 | hor= np.hstack(imgArray)
33 | ver = hor
34 | return ver
35 |
36 | img = cv2.imread('Resources/lena.png')
37 | imgGray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
38 |
39 | imgStack = stackImages(0.5,([img,imgGray,img],[img,img,img]))
40 |
41 | # imgHor = np.hstack((img,img))
42 | # imgVer = np.vstack((img,img))
43 | #
44 | # cv2.imshow("Horizontal",imgHor)
45 | # cv2.imshow("Vertical",imgVer)
46 | cv2.imshow("ImageStack",imgStack)
47 |
48 | cv2.waitKey(0)
--------------------------------------------------------------------------------
/chapter7.py:
--------------------------------------------------------------------------------
1 | import cv2
2 | import numpy as np
3 |
4 | def empty(a):
5 | pass
6 |
7 | def stackImages(scale,imgArray):
8 | rows = len(imgArray)
9 | cols = len(imgArray[0])
10 | rowsAvailable = isinstance(imgArray[0], list)
11 | width = imgArray[0][0].shape[1]
12 | height = imgArray[0][0].shape[0]
13 | if rowsAvailable:
14 | for x in range ( 0, rows):
15 | for y in range(0, cols):
16 | if imgArray[x][y].shape[:2] == imgArray[0][0].shape [:2]:
17 | imgArray[x][y] = cv2.resize(imgArray[x][y], (0, 0), None, scale, scale)
18 | else:
19 | imgArray[x][y] = cv2.resize(imgArray[x][y], (imgArray[0][0].shape[1], imgArray[0][0].shape[0]), None, scale, scale)
20 | if len(imgArray[x][y].shape) == 2: imgArray[x][y]= cv2.cvtColor( imgArray[x][y], cv2.COLOR_GRAY2BGR)
21 | imageBlank = np.zeros((height, width, 3), np.uint8)
22 | hor = [imageBlank]*rows
23 | hor_con = [imageBlank]*rows
24 | for x in range(0, rows):
25 | hor[x] = np.hstack(imgArray[x])
26 | ver = np.vstack(hor)
27 | else:
28 | for x in range(0, rows):
29 | if imgArray[x].shape[:2] == imgArray[0].shape[:2]:
30 | imgArray[x] = cv2.resize(imgArray[x], (0, 0), None, scale, scale)
31 | else:
32 | imgArray[x] = cv2.resize(imgArray[x], (imgArray[0].shape[1], imgArray[0].shape[0]), None,scale, scale)
33 | if len(imgArray[x].shape) == 2: imgArray[x] = cv2.cvtColor(imgArray[x], cv2.COLOR_GRAY2BGR)
34 | hor= np.hstack(imgArray)
35 | ver = hor
36 | return ver
37 |
38 |
39 |
40 | path = 'Resources/lambo.png'
41 | cv2.namedWindow("TrackBars")
42 | cv2.resizeWindow("TrackBars",640,240)
43 | cv2.createTrackbar("Hue Min","TrackBars",0,179,empty)
44 | cv2.createTrackbar("Hue Max","TrackBars",19,179,empty)
45 | cv2.createTrackbar("Sat Min","TrackBars",110,255,empty)
46 | cv2.createTrackbar("Sat Max","TrackBars",240,255,empty)
47 | cv2.createTrackbar("Val Min","TrackBars",153,255,empty)
48 | cv2.createTrackbar("Val Max","TrackBars",255,255,empty)
49 |
50 | while True:
51 | img = cv2.imread(path)
52 | imgHSV = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
53 | h_min = cv2.getTrackbarPos("Hue Min","TrackBars")
54 | h_max = cv2.getTrackbarPos("Hue Max", "TrackBars")
55 | s_min = cv2.getTrackbarPos("Sat Min", "TrackBars")
56 | s_max = cv2.getTrackbarPos("Sat Max", "TrackBars")
57 | v_min = cv2.getTrackbarPos("Val Min", "TrackBars")
58 | v_max = cv2.getTrackbarPos("Val Max", "TrackBars")
59 | print(h_min,h_max,s_min,s_max,v_min,v_max)
60 | lower = np.array([h_min,s_min,v_min])
61 | upper = np.array([h_max,s_max,v_max])
62 | mask = cv2.inRange(imgHSV,lower,upper)
63 | imgResult = cv2.bitwise_and(img,img,mask=mask)
64 |
65 |
66 | # cv2.imshow("Original",img)
67 | # cv2.imshow("HSV",imgHSV)
68 | # cv2.imshow("Mask", mask)
69 | # cv2.imshow("Result", imgResult)
70 |
71 | imgStack = stackImages(0.6,([img,imgHSV],[mask,imgResult]))
72 | cv2.imshow("Stacked Images", imgStack)
73 |
74 | cv2.waitKey(1)
75 |
76 |
77 |
--------------------------------------------------------------------------------
/chapter8.py:
--------------------------------------------------------------------------------
1 | import cv2
2 | import numpy as np
3 |
4 | def stackImages(scale,imgArray):
5 | rows = len(imgArray)
6 | cols = len(imgArray[0])
7 | rowsAvailable = isinstance(imgArray[0], list)
8 | width = imgArray[0][0].shape[1]
9 | height = imgArray[0][0].shape[0]
10 | if rowsAvailable:
11 | for x in range ( 0, rows):
12 | for y in range(0, cols):
13 | if imgArray[x][y].shape[:2] == imgArray[0][0].shape [:2]:
14 | imgArray[x][y] = cv2.resize(imgArray[x][y], (0, 0), None, scale, scale)
15 | else:
16 | imgArray[x][y] = cv2.resize(imgArray[x][y], (imgArray[0][0].shape[1], imgArray[0][0].shape[0]), None, scale, scale)
17 | if len(imgArray[x][y].shape) == 2: imgArray[x][y]= cv2.cvtColor( imgArray[x][y], cv2.COLOR_GRAY2BGR)
18 | imageBlank = np.zeros((height, width, 3), np.uint8)
19 | hor = [imageBlank]*rows
20 | hor_con = [imageBlank]*rows
21 | for x in range(0, rows):
22 | hor[x] = np.hstack(imgArray[x])
23 | ver = np.vstack(hor)
24 | else:
25 | for x in range(0, rows):
26 | if imgArray[x].shape[:2] == imgArray[0].shape[:2]:
27 | imgArray[x] = cv2.resize(imgArray[x], (0, 0), None, scale, scale)
28 | else:
29 | imgArray[x] = cv2.resize(imgArray[x], (imgArray[0].shape[1], imgArray[0].shape[0]), None,scale, scale)
30 | if len(imgArray[x].shape) == 2: imgArray[x] = cv2.cvtColor(imgArray[x], cv2.COLOR_GRAY2BGR)
31 | hor= np.hstack(imgArray)
32 | ver = hor
33 | return ver
34 |
35 | def getContours(img):
36 | contours,hierarchy = cv2.findContours(img,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE)
37 | for cnt in contours:
38 | area = cv2.contourArea(cnt)
39 | print(area)
40 | if area>500:
41 | cv2.drawContours(imgContour, cnt, -1, (255, 0, 0), 3)
42 | peri = cv2.arcLength(cnt,True)
43 | #print(peri)
44 | approx = cv2.approxPolyDP(cnt,0.02*peri,True)
45 | print(len(approx))
46 | objCor = len(approx)
47 | x, y, w, h = cv2.boundingRect(approx)
48 |
49 | if objCor ==3: objectType ="Tri"
50 | elif objCor == 4:
51 | aspRatio = w/float(h)
52 | if aspRatio >0.98 and aspRatio <1.03: objectType= "Square"
53 | else:objectType="Rectangle"
54 | elif objCor>4: objectType= "Circles"
55 | else:objectType="None"
56 |
57 |
58 |
59 | cv2.rectangle(imgContour,(x,y),(x+w,y+h),(0,255,0),2)
60 | cv2.putText(imgContour,objectType,
61 | (x+(w//2)-10,y+(h//2)-10),cv2.FONT_HERSHEY_COMPLEX,0.7,
62 | (0,0,0),2)
63 |
64 |
65 |
66 |
67 | path = 'Resources/shapes.png'
68 | img = cv2.imread(path)
69 | imgContour = img.copy()
70 |
71 | imgGray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
72 | imgBlur = cv2.GaussianBlur(imgGray,(7,7),1)
73 | imgCanny = cv2.Canny(imgBlur,50,50)
74 | getContours(imgCanny)
75 |
76 | imgBlank = np.zeros_like(img)
77 | imgStack = stackImages(0.8,([img,imgGray,imgBlur],
78 | [imgCanny,imgContour,imgBlank]))
79 |
80 | cv2.imshow("Stack", imgStack)
81 |
82 | cv2.waitKey(0)
83 |
--------------------------------------------------------------------------------
/chapter9.py:
--------------------------------------------------------------------------------
1 | import cv2
2 |
3 | faceCascade= cv2.CascadeClassifier("Resources/haarcascade_frontalface_default.xml")
4 | img = cv2.imread('Resources/lena.png')
5 | imgGray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
6 |
7 | faces = faceCascade.detectMultiScale(imgGray,1.1,4)
8 |
9 | for (x,y,w,h) in faces:
10 | cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
11 |
12 |
13 | cv2.imshow("Result", img)
14 | cv2.waitKey(0)
--------------------------------------------------------------------------------
/project1.py:
--------------------------------------------------------------------------------
1 | import cv2
2 | import numpy as np
3 | frameWidth = 640
4 | frameHeight = 480
5 | cap = cv2.VideoCapture(1)
6 | cap.set(3, frameWidth)
7 | cap.set(4, frameHeight)
8 | cap.set(10,150)
9 |
10 | myColors = [[5,107,0,19,255,255],
11 | [133,56,0,159,156,255],
12 | [57,76,0,100,255,255],
13 | [90,48,0,118,255,255]]
14 | myColorValues = [[51,153,255], ## BGR
15 | [255,0,255],
16 | [0,255,0],
17 | [255,0,0]]
18 |
19 | myPoints = [] ## [x , y , colorId ]
20 |
21 | def findColor(img,myColors,myColorValues):
22 | imgHSV = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
23 | count = 0
24 | newPoints=[]
25 | for color in myColors:
26 | lower = np.array(color[0:3])
27 | upper = np.array(color[3:6])
28 | mask = cv2.inRange(imgHSV,lower,upper)
29 | x,y=getContours(mask)
30 | cv2.circle(imgResult,(x,y),15,myColorValues[count],cv2.FILLED)
31 | if x!=0 and y!=0:
32 | newPoints.append([x,y,count])
33 | count +=1
34 | #cv2.imshow(str(color[0]),mask)
35 | return newPoints
36 |
37 | def getContours(img):
38 | contours,hierarchy = cv2.findContours(img,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE)
39 | x,y,w,h = 0,0,0,0
40 | for cnt in contours:
41 | area = cv2.contourArea(cnt)
42 | if area>500:
43 | #cv2.drawContours(imgResult, cnt, -1, (255, 0, 0), 3)
44 | peri = cv2.arcLength(cnt,True)
45 | approx = cv2.approxPolyDP(cnt,0.02*peri,True)
46 | x, y, w, h = cv2.boundingRect(approx)
47 | return x+w//2,y
48 |
49 | def drawOnCanvas(myPoints,myColorValues):
50 | for point in myPoints:
51 | cv2.circle(imgResult, (point[0], point[1]), 10, myColorValues[point[2]], cv2.FILLED)
52 |
53 |
54 | while True:
55 | success, img = cap.read()
56 | imgResult = img.copy()
57 | newPoints = findColor(img, myColors,myColorValues)
58 | if len(newPoints)!=0:
59 | for newP in newPoints:
60 | myPoints.append(newP)
61 | if len(myPoints)!=0:
62 | drawOnCanvas(myPoints,myColorValues)
63 |
64 |
65 | cv2.imshow("Result", imgResult)
66 | if cv2.waitKey(1) & 0xFF == ord('q'):
67 | break
--------------------------------------------------------------------------------
/project2.py:
--------------------------------------------------------------------------------
1 | import cv2
2 | import numpy as np
3 |
4 |
5 | ###################################
6 | widthImg=540
7 | heightImg =640
8 | #####################################
9 |
10 | cap = cv2.VideoCapture(1)
11 | cap.set(10,150)
12 |
13 |
14 | def preProcessing(img):
15 | imgGray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
16 | imgBlur = cv2.GaussianBlur(imgGray,(5,5),1)
17 | imgCanny = cv2.Canny(imgBlur,200,200)
18 | kernel = np.ones((5,5))
19 | imgDial = cv2.dilate(imgCanny,kernel,iterations=2)
20 | imgThres = cv2.erode(imgDial,kernel,iterations=1)
21 | return imgThres
22 |
23 | def getContours(img):
24 | biggest = np.array([])
25 | maxArea = 0
26 | contours,hierarchy = cv2.findContours(img,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE)
27 | for cnt in contours:
28 | area = cv2.contourArea(cnt)
29 | if area>5000:
30 | #cv2.drawContours(imgContour, cnt, -1, (255, 0, 0), 3)
31 | peri = cv2.arcLength(cnt,True)
32 | approx = cv2.approxPolyDP(cnt,0.02*peri,True)
33 | if area >maxArea and len(approx) == 4:
34 | biggest = approx
35 | maxArea = area
36 | cv2.drawContours(imgContour, biggest, -1, (255, 0, 0), 20)
37 | return biggest
38 |
39 | def reorder (myPoints):
40 | myPoints = myPoints.reshape((4,2))
41 | myPointsNew = np.zeros((4,1,2),np.int32)
42 | add = myPoints.sum(1)
43 | #print("add", add)
44 | myPointsNew[0] = myPoints[np.argmin(add)]
45 | myPointsNew[3] = myPoints[np.argmax(add)]
46 | diff = np.diff(myPoints,axis=1)
47 | myPointsNew[1]= myPoints[np.argmin(diff)]
48 | myPointsNew[2] = myPoints[np.argmax(diff)]
49 | #print("NewPoints",myPointsNew)
50 | return myPointsNew
51 |
52 | def getWarp(img,biggest):
53 | biggest = reorder(biggest)
54 | pts1 = np.float32(biggest)
55 | pts2 = np.float32([[0, 0], [widthImg, 0], [0, heightImg], [widthImg, heightImg]])
56 | matrix = cv2.getPerspectiveTransform(pts1, pts2)
57 | imgOutput = cv2.warpPerspective(img, matrix, (widthImg, heightImg))
58 |
59 | imgCropped = imgOutput[20:imgOutput.shape[0]-20,20:imgOutput.shape[1]-20]
60 | imgCropped = cv2.resize(imgCropped,(widthImg,heightImg))
61 |
62 | return imgCropped
63 |
64 |
65 | def stackImages(scale,imgArray):
66 | rows = len(imgArray)
67 | cols = len(imgArray[0])
68 | rowsAvailable = isinstance(imgArray[0], list)
69 | width = imgArray[0][0].shape[1]
70 | height = imgArray[0][0].shape[0]
71 | if rowsAvailable:
72 | for x in range ( 0, rows):
73 | for y in range(0, cols):
74 | if imgArray[x][y].shape[:2] == imgArray[0][0].shape [:2]:
75 | imgArray[x][y] = cv2.resize(imgArray[x][y], (0, 0), None, scale, scale)
76 | else:
77 | imgArray[x][y] = cv2.resize(imgArray[x][y], (imgArray[0][0].shape[1], imgArray[0][0].shape[0]), None, scale, scale)
78 | if len(imgArray[x][y].shape) == 2: imgArray[x][y]= cv2.cvtColor( imgArray[x][y], cv2.COLOR_GRAY2BGR)
79 | imageBlank = np.zeros((height, width, 3), np.uint8)
80 | hor = [imageBlank]*rows
81 | hor_con = [imageBlank]*rows
82 | for x in range(0, rows):
83 | hor[x] = np.hstack(imgArray[x])
84 | ver = np.vstack(hor)
85 | else:
86 | for x in range(0, rows):
87 | if imgArray[x].shape[:2] == imgArray[0].shape[:2]:
88 | imgArray[x] = cv2.resize(imgArray[x], (0, 0), None, scale, scale)
89 | else:
90 | imgArray[x] = cv2.resize(imgArray[x], (imgArray[0].shape[1], imgArray[0].shape[0]), None,scale, scale)
91 | if len(imgArray[x].shape) == 2: imgArray[x] = cv2.cvtColor(imgArray[x], cv2.COLOR_GRAY2BGR)
92 | hor= np.hstack(imgArray)
93 | ver = hor
94 | return ver
95 |
96 | while True:
97 | success, img = cap.read()
98 | img = cv2.resize(img,(widthImg,heightImg))
99 | imgContour = img.copy()
100 |
101 | imgThres = preProcessing(img)
102 | biggest = getContours(imgThres)
103 | if biggest.size !=0:
104 | imgWarped=getWarp(img,biggest)
105 | # imageArray = ([img,imgThres],
106 | # [imgContour,imgWarped])
107 | imageArray = ([imgContour, imgWarped])
108 | cv2.imshow("ImageWarped", imgWarped)
109 | else:
110 | # imageArray = ([img, imgThres],
111 | # [img, img])
112 | imageArray = ([imgContour, img])
113 |
114 | stackedImages = stackImages(0.6,imageArray)
115 | cv2.imshow("WorkFlow", stackedImages)
116 |
117 | if cv2.waitKey(1) & 0xFF == ord('q'):
118 | break
--------------------------------------------------------------------------------
/project3.py:
--------------------------------------------------------------------------------
1 | import cv2
2 |
3 | #############################################
4 | frameWidth = 640
5 | frameHeight = 480
6 | nPlateCascade = cv2.CascadeClassifier("Resources/haarcascade_russian_plate_number.xml")
7 | minArea = 200
8 | color = (255,0,255)
9 | ###############################################
10 | cap = cv2.VideoCapture("Resources/video12.mp4")
11 | cap.set(3, frameWidth)
12 | cap.set(4, frameHeight)
13 | cap.set(10,150)
14 | count = 0
15 |
16 | while True:
17 | success, img = cap.read()
18 | imgGray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
19 | numberPlates = nPlateCascade.detectMultiScale(imgGray, 1.1, 10)
20 | for (x, y, w, h) in numberPlates:
21 | area = w*h
22 | if area >minArea:
23 | cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 255), 2)
24 | cv2.putText(img,"Number Plate",(x,y-5),
25 | cv2.FONT_HERSHEY_COMPLEX_SMALL,1,color,2)
26 | imgRoi = img[y:y+h,x:x+w]
27 | cv2.imshow("ROI", imgRoi)
28 |
29 | cv2.imshow("Result", img)
30 |
31 | if cv2.waitKey(1) & 0xFF == ord('s'):
32 | cv2.imwrite("Resources/Scanned/NoPlate_"+str(count)+".jpg",imgRoi)
33 | cv2.rectangle(img,(0,200),(640,300),(0,255,0),cv2.FILLED)
34 | cv2.putText(img,"Scan Saved",(150,265),cv2.FONT_HERSHEY_DUPLEX,
35 | 2,(0,0,255),2)
36 | cv2.imshow("Result",img)
37 | cv2.waitKey(500)
38 | count +=1
--------------------------------------------------------------------------------