YouTube2Text

Изучение Python OpenCV / Урок #4 – Функции трансформации изображений — Transcript

by Гоша Дударь · 4,909 words · 798 segments · language en · Watch on YouTube

Full transcript

  1. 0:00привет ходе этого урока мы с вами изучим
  2. 0:02различные функции что служит для
  3. 0:04трансформации изображений но перед
  4. 0:06началом я рекомендую вам сайт айти
  5. 0:08prodir . кому на этом сайте вы найдете
  6. 0:10код домашнее задание и много другой
  7. 0:12полезной информации ссылка на этот урок
  8. 0:14на сайте будет в описании к этому видео
  9. 0:16переходите не пожалеете во втором уроке
  10. 0:18мы с вами уже изучили некоторые функции
  11. 0:21по работе с изображениями тогда мы
  12. 0:23научились приводить изображение в другой
  13. 0:25формат также добавлять эффект размытия и
  14. 0:27находить просто различные углы в том же
  15. 0:30уроке я забыл рассказать о том что
  16. 0:31подобную технологию а подобные функции
  17. 0:34вы спокойно можете применять при работе
  18. 0:36с видео вы давайте мы возьмем код из 2
  19. 0:39видео урока из там когда мы использовали
  20. 0:41с вами эффекта размытия мы приводили в
  21. 0:43другой формат и так далее и давайте мы
  22. 0:45возьмем полностью весь этот код и
  23. 0:47применим этот код не к изображениям
  24. 0:49которое у нас здесь есть а к видео и
  25. 0:51чтобы мы просто не переписывали код
  26. 0:54повторно
  27. 0:54я предлагаю его немного скопировать с
  28. 0:57сайта айки прагер соответственно здесь
  29. 0:58есть просто весь готовый код но я
  30. 1:00давайте его немного отсюда скопируем и
  31. 1:03тут я просто укажу то что мы с вами
  32. 1:05будем получать
  33. 1:07открывать некая некий видеоролик он не
  34. 1:10находится в папке videos и называется он
  35. 1:13как рот .
  36. 1:14mp4 а далее давайте мы скопируем здесь
  37. 1:17циклом ну и соответственно за счет этого
  38. 1:20цикла мы будем проигрывать
  39. 1:21необходимую для нас картинку дан пусть
  40. 1:24каждую картинку из видео мы и будем
  41. 1:25проигрывать и что мы можем сделать мы
  42. 1:28можем сделать то что перед тем как мы с
  43. 1:30вами просто проиграем определенную
  44. 1:31картинку то есть перед тем как мы
  45. 1:33покажем определенную картинку
  46. 1:35пользователю мы можем с этой картинкой
  47. 1:37произвести любые манипуляции и вот
  48. 1:39например мы каждую картинку будем ну
  49. 1:41допустим уменьшать в размерах но на
  50. 1:44самом-то деле то можно даже не делать
  51. 1:45это в данный момент это будет лишним да
  52. 1:48но допустим мы к каждой картинке будем
  53. 1:50добавлять эффекты размытия далее мы
  54. 1:52будем преобразовывать вы другой формат в
  55. 1:55серый формат далее мы будем с вами
  56. 1:57получать углы этой картинке ну и
  57. 1:59соответственно дальше эти углы на ней
  58. 2:00немного будет будем уменьшать потом
  59. 2:02увеличиваете тем самым по сути будем
  60. 2:04каждую картинку в самом видео будем ее
  61. 2:06оптимизировать и только после того как
  62. 2:08мы полностью оптимизировали но и будем
  63. 2:10отображать пользователю
  64. 2:12если подобное сейчас запустить мы
  65. 2:14заметим что вот у нас все обработалось
  66. 2:16корректным у нас просто отображаются
  67. 2:17некоторые углы
  68. 2:18ну конечно же это все выглядит сейчас не
  69. 2:21особо здорово поэтому давайте наверное
  70. 2:23укажем здесь лучше точность то есть у
  71. 2:26меня было до этого там 200 на 200
  72. 2:27ну и соответственно 200 на 200 для
  73. 2:30прошлой картинки это было хорошее
  74. 2:32значение ну например для видео мы можем
  75. 2:33заметить что ну уж слишком мало каких-то
  76. 2:36углов была нарисована и вообще не
  77. 2:38понятно что происходит на видео поэтому
  78. 2:39мы давайте уменьшим допустим до сотен до
  79. 2:42сотни уменьшим еще раз запустим видео и
  80. 2:45в таком случае мы можем заметить что
  81. 2:46теперь я понимаю что здесь происходит
  82. 2:48меня тут прорисовываются дорога до мне
  83. 2:51прорисовывается некая машинка тесте
  84. 2:53форма здесь ее очертания немного мне
  85. 2:55понятно ну и конечно же если мне этого
  86. 2:57опять же будет не хватать это значение
  87. 3:00можно еще уменьшить в таком случае мы
  88. 3:01еще получим более четкое изображение на
  89. 3:04даже давайте наверно такой мы
  90. 3:05протестируем каждым здесь по 30 и если
  91. 3:07это запустить то вот у нас полностью
  92. 3:09детализированное видео причем удобство
  93. 3:12такого видео заключается в скорости
  94. 3:13обработки самого этого видео нам теперь
  95. 3:16очень легко будет найти нужные для нас
  96. 3:18объекты те же самые там линии квадраты
  97. 3:20кружки и все в таком духе нам это будет
  98. 3:22легко найти по причине того что в этом
  99. 3:24видео всего лишь есть два цвета черный и
  100. 3:26белый соответственно это нули и единицы
  101. 3:28ну и конечно же такое видео такую каждую
  102. 3:31картинку обработать очень легко по
  103. 3:33причине того что у нас нету теперь
  104. 3:34огромнейшего массива из различных чисел
  105. 3:36a и всего лишь два числа и вот в ходе
  106. 3:38этого урока мы с вами изучим еще кое
  107. 3:41какие функции для трансформации
  108. 3:43изображением и на самом-то деле в эти
  109. 3:45функции спокойно потом сможете применять
  110. 3:47и к видео так как видео оно состоит из
  111. 3:49различных картинок а соответственно с
  112. 3:51каждой из картинок можно будет работать
  113. 3:53как с одной отдельной картинкой на
  114. 3:55данный момент я предлагаю это все
  115. 3:57удалить просто по той причине что
  116. 3:58все-таки мы будем работать сейчас именно
  117. 4:00с изображениями с ними проще работать но
  118. 4:02принципы работы изображений и видео он
  119. 4:05один и тот же самый поэтому давайте мы
  120. 4:07на данный момент с вами сделаем
  121. 4:08следующее мы создадим некую переменным и
  122. 4:11здесь мы обратимся к оси битум и мы
  123. 4:14давайте с вами обратимся к методу image
  124. 4:16alt и просто прочитаем какое-либо
  125. 4:18изображение то есть мы давайте укажем
  126. 4:20что мы обращаемся к папке
  127. 4:21им ндс и из нее мы выбираем
  128. 4:23какую картинку которая в моем случае
  129. 4:26называется как up and save
  130. 4:27соответственно мы ее здесь открывая
  131. 4:29далее я перед тем как показать саму по
  132. 4:31себе эту картинку хотел бы ее просто
  133. 4:34отразить либо по вертикали либо по
  134. 4:36горизонтали чтобы мне отразить саму по
  135. 4:39себе картинку мы давайте сделаем
  136. 4:41следующее то есть я сохраняю в эту же
  137. 4:42перемену некое новое значение
  138. 4:44я просто обращаясь к нашей библиотеке
  139. 4:46обращаюсь к такому методу который
  140. 4:48называется как флип сюда я указываю
  141. 4:50картинку и плюс мне необходимо указать
  142. 4:52код трансформации
  143. 4:53если здесь указать число ноль то в таком
  144. 4:55случае наша картинка она будет
  145. 4:57отзеркаленная по вертикали если число 1
  146. 5:00то от зеркально по горизонтали и если -1
  147. 5:03то она будет отзеркаленной как по
  148. 5:04вертикали
  149. 5:05так и по горизонтали ну давайте возможно
  150. 5:07мы укажем здесь число 1 чтобы она по
  151. 5:09горизонтали просто было отзеркаленной
  152. 5:11далее конечно же нужно еще отобразить
  153. 5:13само по себе картинку здесь мы укажем
  154. 5:15некую подпись а также выведем сам по
  155. 5:17себе картинку
  156. 5:18ну и плюс не забываем о том что нужно
  157. 5:20вызывать метод вы идти после чего
  158. 5:22спокойно можем это все запустить и вот
  159. 5:24мы замечаем что наша картинка она просто
  160. 5:26отзеркаленная поверх январе по
  161. 5:28горизонтали все обработалось корректно
  162. 5:31также если допустим здесь укажу -1 то в
  163. 5:33таком случае оно будет
  164. 5:34и по вертикали и по горизонтали от
  165. 5:36зеркально вот это мы можем с вами заметь
  166. 5:38а то есть двойку нас как бы находится
  167. 5:39здесь плюс еще она находится внизу да то
  168. 5:42есть у нас получилось нужно от слегка
  169. 5:44ливане и картинки
  170. 5:45это если говорить именно про
  171. 5:47отзеркаливание надписи на происходит за
  172. 5:49счет метода флип мы давайте пока этот
  173. 5:52метод наверное с вами закомментируем
  174. 5:53чтобы он нам просто не мешал в будущем
  175. 5:55ну и теперь мы давайте с вами попробуем
  176. 5:58обращать картинку мы можем прописать все
  177. 6:01пункт сыну весь код гвинеи для вращения
  178. 6:03картинки вот здесь прямиком здесь но
  179. 6:06давайте мы лучше создадим некую
  180. 6:07отдельную функцию и просто эту функцию
  181. 6:10будет с вами вызывать это не является
  182. 6:12обязательным
  183. 6:13но так будет удобнее если мы создадим
  184. 6:15отдельную функцию и потом будем ее
  185. 6:16вызывать выдавать таки сделать здесь мы
  186. 6:19укажем что эта функция будет принимать
  187. 6:20несколько параметров во первых это само
  188. 6:22по себе картинкам а во вторых это просто
  189. 6:24угол вращения все больше эта функция у
  190. 6:28нас ничего дополнительно принимать не
  191. 6:29будет здесь же вы функции мы давайте
  192. 6:32будем создавать с вами две переменные и
  193. 6:34the height
  194. 6:35же вид и соответственно в эти переменные
  195. 6:38мы с вами установим следующие мы
  196. 6:39обратимся к их картинки и обратимся к
  197. 6:42шейке да то есть получается как размером
  198. 6:45с мой этой картинке плюс нам необходимо
  199. 6:48вытянуть ним три значения потому что там
  200. 6:50идет кортеж из трех значений это высота
  201. 6:52ширина а также дополнительно количество
  202. 6:54слоев нам нужно не три значения нам
  203. 6:56нужно только два значения поэтому здесь
  204. 6:58мы указываем срез и
  205. 6:59ну я указываю двоеточие и как бы два то
  206. 7:02есть говорю о том что то вплоть до
  207. 7:03второго элемента мы получим все значения
  208. 7:06нашем случае мы по факту как раз и
  209. 7:08получим значение это будет высота и
  210. 7:10ширина чуть позже мы с этими значений и
  211. 7:12как раз будем работать здесь мы давайте
  212. 7:15еще создадим некую переменам пускай она
  213. 7:17будет называться как point и это как бы
  214. 7:20.
  215. 7:21вращение нашей картинки . вращение может
  216. 7:24быть где угодно она может находиться
  217. 7:26например в нулевых координатах может
  218. 7:28находиться где-то в крайних координатах
  219. 7:29мы давайте сейчас укажем что точка
  220. 7:31вращения это по сути у нас будет
  221. 7:34середина самого изображения мы уже
  222. 7:37размеры изображения получили поэтому
  223. 7:39будем работать с этими переменами ну и
  224. 7:41здесь соответственно просто обращаемся к
  225. 7:43вид обращаемся к ширине и разделяемые
  226. 7:46пополам а также обращаемся к высоте это
  227. 7:48же разделяем ее пополам тем самым мы
  228. 7:50получим как бы как бы точку по середины
  229. 7:53посередине самого изображения именно в
  230. 7:56зависимости от его где-то . у нас и
  231. 7:57будет происходить вращение например
  232. 7:59сейчас
  233. 7:59относительно центра изображений у нас
  234. 8:02будет происходить вращение ну и далее мы
  235. 8:04давайте с вами создадим матрицу
  236. 8:07неделю наверно просто назову как мэтт и
  237. 8:09нам по сути необходимо всегда с вами
  238. 8:11создавать матрицу
  239. 8:13за счет которые мы как раз и будем
  240. 8:15выполнять само по себе вращение сама эта
  241. 8:18матрица создается через специальную
  242. 8:20функцию что доступно в библиотеке ну и
  243. 8:23чтобы нам а просто получить эту матрицу
  244. 8:24мы должны с вами обратиться к и такой
  245. 8:26функции которая называется get rotation
  246. 8:28metrics 2d здесь мы указываем с вами во
  247. 8:31первых точку вращения во вторых мы
  248. 8:33указываем угол угол напомним мы его
  249. 8:35берем с параметров самой функции и
  250. 8:38дополнительном необходимо указать
  251. 8:40насколько наше изображение увеличится
  252. 8:42превращением она мне никак не должна
  253. 8:44увеличиваться поэтому здесь я установлю
  254. 8:46единицу
  255. 8:46если хотите
  256. 8:47чтобы при вращении ваше изображение
  257. 8:49увеличилась например в два раза
  258. 8:50соответственно двойку можете прописать
  259. 8:52если в полтора можно тоже самое здесь
  260. 8:54прописать просто полтора я не хочу чтобы
  261. 8:56она увеличилась поэтому оставляем просто
  262. 8:58единицу ну и далее нам необходимо
  263. 9:01возвращать само по себе уже изображение
  264. 9:03для этому напитки обращаемся к нашей
  265. 9:05библиотеке далее мы обращаемся к такому
  266. 9:08методу который называется ифен или как
  267. 9:12она называется и что мы передаем
  268. 9:13несколько параметров во первых это
  269. 9:15изображение с которой мы в принципе
  270. 9:16изначально работали во вторых это наша
  271. 9:19матрица матрица вращение ну и в третьих
  272. 9:21это нам еще нужно передать размеры
  273. 9:24самого изображения
  274. 9:25размер изображения они у нас и вот здесь
  275. 9:27записаны мы давайте про сюда передадим
  276. 9:29это ширина а также высота вот мы эти
  277. 9:32данных и да как бы и передали ну и
  278. 9:34теперь мы наверное наверное давайте
  279. 9:37кстати еще мы сделаем так что это будет
  280. 9:39у нас называться не иметь возможно а
  281. 9:41и мяч парам просто потому что если он с
  282. 9:44одинаковое название то он это все
  283. 9:45подсвечивает а я не хочу чтобы он нам
  284. 9:47это все подсвечивал поэтому давайте
  285. 9:49просто разные названия укажи так вот все
  286. 9:51теперь у нас есть готовая функция и нам
  287. 9:54остается лишь вызвать саму по себе эту
  288. 9:56функцию для ее вызова мы с вами давайте
  289. 9:59в и ту же самую переменную m где будем
  290. 10:01устанавливать новое значение это по сути
  291. 10:02будет наша картинка что уже имеет некое
  292. 10:05вращение ну и здесь мы просто обращаемся
  293. 10:07к нашей функции rotate мы указываем
  294. 10:09какую картинку мы будем вращать и
  295. 10:11указываем угол допустим на 90 градусов я
  296. 10:13буду вращать нашу картинку чуть ниже эта
  297. 10:16картинка будет выводиться на экран на
  298. 10:18вернее вообще пользователю если мы
  299. 10:20сейчас такое запустим можем заметить что
  300. 10:22видите у нас картинка здесь это просто
  301. 10:23на 90 градусов она перевернулась если
  302. 10:26хотите чтобы она перевернулась другую
  303. 10:28сторону то соответственно можно указать
  304. 10:29здесь -90 давайте вот мы еще раз
  305. 10:31запустим и вот замечаем что картинка она
  306. 10:34перевернута в другую сторону то бишь для
  307. 10:36вращения картинки в принципе всегда
  308. 10:38можете прописывайте подобную функцию но
  309. 10:40еще раз хочу напомнить что обращать вы
  310. 10:42можете не только как одиночную картинку
  311. 10:44но так и вы можете вращать любую
  312. 10:46картинку что находится в самом видео
  313. 10:48потому что видео но и состоит из обычных
  314. 10:51картины теперь же мы наверное опять же
  315. 10:53давайте не будем с вами
  316. 10:55вызывать саму эту функцию rotate и
  317. 10:57вместо функции радует мы давайте создать
  318. 11:00им еще одну функцию которая позволит нам
  319. 11:03сместить изображение с и его
  320. 11:05первоначальных координат то есть на
  321. 11:07данный момент если вот запустить
  322. 11:08программу то наше изображение она
  323. 11:11естественно конечно же помещается в сам
  324. 11:14этот квадрат в принципе из за этого
  325. 11:16изображения создаётся само это ширина и
  326. 11:19высота этого окошка но также
  327. 11:21дополнительно мы можем указать
  328. 11:22некое смещение для картинки в таком
  329. 11:25случае по бокам будут просто черные
  330. 11:27полосы
  331. 11:27давайте это мы как раз тоже с вами
  332. 11:29попробуем сделать для этого мы конечно
  333. 11:31же опять можем прописать код просто без
  334. 11:33функции на удобно создавать некие
  335. 11:35функции поэтому давайте лучше и создадим
  336. 11:37некую функцию а мы давайте назовем так
  337. 11:39transform то есть передвижение или
  338. 11:42трансформация и это функций у нас будет
  339. 11:44принимать несколько параметров это им
  340. 11:46джим то есть это сама картинка причем
  341. 11:49давайте наверное название мы укажем
  342. 11:51другая то есть это пускай и им чапарам
  343. 11:53допустим какое у него будет название а
  344. 11:54также это смещение по иксу
  345. 11:57и смещение по игреку вот такие вот тут
  346. 11:59будут параметры далее нам необходимо
  347. 12:01здесь создать по сути тоже матрицу
  348. 12:03поэтому давайте создадим здесь некую
  349. 12:06переменную и чтобы нам создать здесь
  350. 12:08матрицу мы должны указать с вами
  351. 12:09следующее мы обращаемся к библиотеке нам
  352. 12:12пай опять-таки напомнить что за счет
  353. 12:14этой библиотеке мы очень быстро можем
  354. 12:16создавать различные матрицы здесь мы
  355. 12:18указываем с вами использовании такой
  356. 12:21функции как флот 32 по факту у нас будет
  357. 12:24создана матрица где каждый элемент это
  358. 12:26будет определенное число с точкой вот
  359. 12:29что-то в этом духе и здесь мы открываем
  360. 12:32круглые скобки в качестве значения мы
  361. 12:35сюда указываем список причем поскольку
  362. 12:38хочу создать матрицу то в этом списке
  363. 12:40создаю еще как бы два списка ну или
  364. 12:43другими словами это будет первый элемент
  365. 12:44это будет второй элемент по фактам не
  366. 12:46создали матрицу и вы первый элемент мы с
  367. 12:49вами устанавливать следующее что когда
  368. 12:51по иксу у нас будет единица по игреку 0
  369. 12:54а по z мы будем передавать с вами этот
  370. 12:56параметр x
  371. 12:57тем самым мы выполним смещение и здесь
  372. 13:00мы указываем с вами 01
  373. 13:03ну то есть соответственно здесь мы
  374. 13:04просто будем смещать подругой координате
  375. 13:06здесь мы указываем что по иксу у нас 0
  376. 13:08будет по игреку у нас один будет был
  377. 13:10опознать мы укажем так
  378. 13:12параметр который также принимаем в самой
  379. 13:14функции далее нам необходимо еще
  380. 13:17получить в принципе
  381. 13:19размеры картинки ну давайте это мы
  382. 13:21наверное будем делать чуть позже мы
  383. 13:22давайте просто сразу с вами будем
  384. 13:24возвращать уже нужную для нас картинку и
  385. 13:25для этого мы просто обращаемся к
  386. 13:27библиотеке
  387. 13:28обращаемся к методу work off or even a
  388. 13:31сюда мы передаем само изображение
  389. 13:33которым мы получили вы функцию дальше мы
  390. 13:36перейдем сюда матрицу и также мы должны
  391. 13:38сюда передать ширину и высоту ну и
  392. 13:41соответственно чтобы получить ширину и
  393. 13:42высоту мы просто обращаемся с вами к
  394. 13:45так немножко никому начал обращаться мы
  395. 13:47обращаемся к и матч парам дальше мы
  396. 13:49обращаемся к шейп здесь мы для получения
  397. 13:52высоты и ринга полученными ширины мы
  398. 13:54должны обратиться к элемент по индексу 1
  399. 13:56а для получения соответственно высоты мы
  400. 14:00обращаемся к элементу по индексу на льду
  401. 14:02потому что напомню вы шайб у нас взойдет
  402. 14:04все значение они как бы идут и наоборот
  403. 14:06но в общем то все вот это все что нужно
  404. 14:08было написать для
  405. 14:09ответ на этой функции и теперь мы можем
  406. 14:12ее вызвать для вызова мы давайте с вами
  407. 14:16пропишем следующая в ту же самую нашу
  408. 14:18переменную m чем мы будем устанавливать
  409. 14:20значение этой функции
  410. 14:22сюда мы будем передавать нашу картинку и
  411. 14:24плюс и производим указывать смещение
  412. 14:26например по иксу пуская наша картинка
  413. 14:28сместится на 30 пикселей а по игреку она
  414. 14:31пускай сместиться аж на 200 пикселей
  415. 14:33если мы такое сейчас с вами запустим то
  416. 14:36заметим что видите вот здесь у нас
  417. 14:37создается совершенно небольшой такой
  418. 14:39отступ но зато по y у нас создается
  419. 14:41достаточно большой отступ
  420. 14:43мы или другим с вами нас происходит как
  421. 14:45раз смещение картинки дан о ipsum а
  422. 14:48также по игреку то бишь за счет подобной
  423. 14:50функции вы спокойно можете смещать
  424. 14:52картинку вы какие-либо другие координаты
  425. 14:55теперь давайте научимся находить контуры
  426. 14:57изображения
  427. 14:58ранее мы уже научились находить края
  428. 15:01изображение но контуры и края это
  429. 15:03немного разные вещи дело в том что когда
  430. 15:06мы находим просто края изображения то
  431. 15:08что мы делали ранее то по факту мы с
  432. 15:10вами действительно просто находим нужные
  433. 15:11как бы углы нужные края и соответственно
  434. 15:14можем вывести линию можем ввести что-то
  435. 15:16в духе обводки по вот этим вот краям
  436. 15:19когда мы находим самыми контуры мы по
  437. 15:21сути делаем то же самое вот только мы
  438. 15:24и получаем как бы позиции всех вот этих
  439. 15:28вот
  440. 15:28контуров да и соответственно и когда мы
  441. 15:30получили позиции всех этих контуров под
  442. 15:32дальнейшем мы можем просто с этими
  443. 15:34позициями работать и мы сможем понимать
  444. 15:36где конкретно у нас будет находиться
  445. 15:38нужные нам объект и соответственно
  446. 15:41давайте сейчас попробуем с вами как раз
  447. 15:42и найти контуром а также попробуем
  448. 15:44вывести их на экран и так для начала
  449. 15:47чтобы нам найти контуры нам по сути
  450. 15:49необходимо само изображение привести вы
  451. 15:51серый формат дело в том что если мы с
  452. 15:54вами будем искать контуры
  453. 15:55сразу же ну вот с обычного изображения в
  454. 15:59таком случае у нас это изображение на
  455. 16:01достаточно долго будет обрабатываться
  456. 16:03нас будет слишком много контуров и
  457. 16:05чтобы нам просто активизировать
  458. 16:07программу чтобы нас прочие шел процесс
  459. 16:10поиска контуров и нам конечно же лучше
  460. 16:12приводить картинку к серому формату в
  461. 16:14таком случае мы хотя бы будем
  462. 16:15использовать не три слоя как это как это
  463. 16:17идет обычно в стандартной картинки
  464. 16:19архиве а мы будем использовать лишь один
  465. 16:21слой это серый
  466. 16:22слой соответственно давайте такое сейчас
  467. 16:24сделаем итак мы просто создаем некую
  468. 16:26наверняка ту же саму переменную мы с
  469. 16:28вами запишем следующее мы обращаемся к
  470. 16:30нашей библиотеке мы обращаемся с вами к
  471. 16:33методу который называется физики color и
  472. 16:35сюда мы просто указываем нужное
  473. 16:38изображение а также мы указываем формат
  474. 16:40приведение в нашем случае буду
  475. 16:42использовать тот же самый формат
  476. 16:44линии это не совсем тот же самый формат
  477. 16:45я буду использовать формат
  478. 16:47би джей ар туда то есть is art baby ну
  479. 16:51или другими словам пейджер мы
  480. 16:52конвертируем это все в их серый формат
  481. 16:54после того как мы сконвертировать это
  482. 16:56все в серый формат мы дополнительно
  483. 16:58лучше еще немного выполним размытие
  484. 17:01изображения так так лучше делать по той
  485. 17:04причине что если вы немного размывает
  486. 17:06изображение по соответственно вы немного
  487. 17:08сглаживайте углы и опять же когда вот мы
  488. 17:10будем искать контры то контуров будет
  489. 17:12меньше соответственно программа наша
  490. 17:14будет немного более оптимизированной ну
  491. 17:16и вообще в принципе поиск всех этих
  492. 17:18контуров он тоже будет немного более
  493. 17:19оптимизирован поэтому давайте здесь
  494. 17:21пропишем с вами еще то что мы обращаемся
  495. 17:23к такой функции который называется как
  496. 17:26gulsen blurr
  497. 17:27сюда мы передаем нужную картинку также
  498. 17:30мы указываем
  499. 17:32ну кормил сайта есть мы указываем
  500. 17:33насколько сильно у нас произойдет
  501. 17:35размытие здесь давайте мы укажем что-то
  502. 17:38не супер сильная здесь например 5 5
  503. 17:40укажем еще раз кстати напомнить что
  504. 17:42здесь можно указывать только нечетные
  505. 17:43числа чётные числа тут нельзя указывать
  506. 17:45ну и 7 x мы укажем просто как значение 0
  507. 17:50точно то же самое что у нас было ранее и
  508. 17:52следующее что нам нужно сделать так это
  509. 17:54по сути еще найти вот эти края и джесс
  510. 17:56который мы ранее с вами искали а уже
  511. 17:58когда мы найдем края мы только потом
  512. 18:00сможем найти еще и контры то есть
  513. 18:02действие нужно выполнить немало но это
  514. 18:05все нужно сделать если потому что если
  515. 18:08мы сразу будем искать контуры по
  516. 18:09соответственно во первых будет не совсем
  517. 18:11точный результат а во вторых это будет
  518. 18:13достаточно долго в плане обработки
  519. 18:15самого изображения но главное это будет
  520. 18:17просто не совсем точный результат вот
  521. 18:19это вот основная проблема так вот мы
  522. 18:21давайте с вами еще для поиска краев
  523. 18:23будем использовать соответственно такую
  524. 18:25функцию которая называется как они опять
  525. 18:27же мы уже с ней работали и здесь мы
  526. 18:29указываем просто изображением а также 2
  527. 18:31порога и давай и мы немного остановимся
  528. 18:33на вот этом вот моменте ранее мы с вами
  529. 18:36просто указывали например как 106 лежит
  530. 18:3930 30 но по факту
  531. 18:40когда вот мы указан своим 1 порог то это
  532. 18:43означает то что все те цвета которые
  533. 18:45будут ниже чем например 100 цвет они
  534. 18:48будут проигнорированы и у них будет
  535. 18:50значение уставлены как 0с черный цвет
  536. 18:52напомним что когда мы с вами используем
  537. 18:55допустим серая изображением то там идут
  538. 18:58цвета от 0 до 255
  539. 19:01об этом я говорил в во втором уроке то
  540. 19:04есть и существует бинарное изображение
  541. 19:06как раз пытаемся такое изображение и
  542. 19:08создать когда у нас будут просто черные
  543. 19:10и белые точки но существует также еще и
  544. 19:13серые фотографии серые форматы где у нас
  545. 19:16и цвета идут от 0 до 255
  546. 19:19соответственно ноль полностью черный 255
  547. 19:21это полностью белый так вот смотрите
  548. 19:23когда мы указываем 1 порог то мы как бы
  549. 19:25говорим что все эти цвета которые будут
  550. 19:28меньше чем например 100 они будут
  551. 19:30проигнорированы и они будут приведены к
  552. 19:32нулю то есть это будет черная .
  553. 19:34так же мы можем сказать здесь 2 порог и
  554. 19:36например сказать что пускай будет равен
  555. 19:39допустим 140 и это будет означать то что
  556. 19:42все те цвета которые будут
  557. 19:44больше чем 140 они также будут
  558. 19:46проигнорированы и они в свою очередь
  559. 19:49будут приведены к формату 255 не будут
  560. 19:52сделаны так но получается как белые
  561. 19:55точки все что будет находиться в этом же
  562. 19:58диапазоне это по сути тоже будет
  563. 20:00являться именно белой точкой или черной
  564. 20:02точкой ну в зависимости уже от контекста
  565. 20:04но по факту когда вы указываете вот эти
  566. 20:06вот 2 порога вы можете указать просто
  567. 20:08какие цвета будут
  568. 20:09изначально приведены к черному все что
  569. 20:11ниже сотни так черном будет приведено и
  570. 20:13все что выше 140 она будет приведено как
  571. 20:15белый лук делом
  572. 20:17делай как будто той точки также по
  573. 20:19желанию вы можете не указывать этот
  574. 20:21диапазон и можете просто указать 100 в
  575. 20:22том и это тоже будет окей ну мы для
  576. 20:25интереса давайте все-таки здесь что-то
  577. 20:27новенькое укажем например укажем некий
  578. 20:29диапазон далее мы наверное давайте
  579. 20:32попробуем сейчас вывести нашу картинку
  580. 20:34просто посмотрим что у нас получилось у
  581. 20:35нас получилось все абсолютно корректно
  582. 20:37виде вот я указал диапазон все
  583. 20:39обработалось без каких-либо проблем и
  584. 20:42теперь мы давайте попробуем найти
  585. 20:43контуры в этом изображении чтобы нам
  586. 20:47найти контр им нам необходимо
  587. 20:48использовать такой метод который
  588. 20:50называется как point конкурс данный
  589. 20:52метод он возвращает 2 как бы во как бы
  590. 20:55значения две переменные и соответственно
  591. 20:57мы давайте здесь создадим как раз две
  592. 21:00переменные 1 перемен опускаем будет
  593. 21:01называться как контур ну или просто
  594. 21:03конда а вторая переменная будет
  595. 21:05называться как иерархии или же просто
  596. 21:07here но пускай например у нее такой
  597. 21:08будет названием и смотрите в первую
  598. 21:10переменную в не будет установлен как бы
  599. 21:13список со всеми контурами
  600. 21:15ну как бы со всеми позициями контуров а
  601. 21:17во вторую переменную там будет
  602. 21:20установлена иерархия
  603. 21:22самих объектов вот предположим у вас
  604. 21:25например будет изображением где у вас
  605. 21:27просто будет например некий квадратик в
  606. 21:29квадратике будет линиям ну и и все
  607. 21:32например да и соответственно вы вот этот
  608. 21:34переменную киррахи в нее будет
  609. 21:36установлена днем будет установлен
  610. 21:39порядок приз там будет написано мол что
  611. 21:41изначально идет как бы квадратик а уже
  612. 21:44потом вы квадратики будет находиться там
  613. 21:46например линия то просто иерархия
  614. 21:48объектов ну на данный момент мы с
  615. 21:50иерархии объектов работать не будем но
  616. 21:52возможно чуть чуть позже в ходе этого
  617. 21:54курса мы с этим еще поработаем но теперь
  618. 21:56давайте вернем
  619. 21:57обратно к функции здесь в качестве
  620. 21:58первого параметра мы должны указать
  621. 22:00изображение с которым мы работаем в
  622. 22:02качестве изображения важно указать уже
  623. 22:04то изображение где у нас просто
  624. 22:06указанные определенные края мы это ранее
  625. 22:08уже с вами получили это изображение сюда
  626. 22:10и как раз и подставляем в качестве
  627. 22:12второго параметра мы указываем режим
  628. 22:14получения всех вот этих вот контуров и
  629. 22:17на данный момент мы давайте с вами
  630. 22:18обратимся к нашей библиотеке и укажем
  631. 22:22такой режим который называется как
  632. 22:23риттер лист он означает то что мы с вами
  633. 22:26будем получать полностью все доступные
  634. 22:28контуры можно получать частично контры
  635. 22:31но мы будем получать полностью все
  636. 22:32доступные контуры и так же здесь еще
  637. 22:35указан метод получения самих этих
  638. 22:38контуров на данный момент мы давайте с
  639. 22:40вами укажем такой метод который
  640. 22:42называется как chain и prox нам данный
  641. 22:45метод
  642. 22:46он означает то что у нас будут найдены
  643. 22:48абсолютно все координаты всех контуров
  644. 22:51но также мы можем указать какие либо
  645. 22:53другие методы вот например этот
  646. 22:55представим что у нас будет просто некая
  647. 22:57линия вот у нас изображение там просто
  648. 23:00есть одна линия и если мы используем
  649. 23:02метод chain approx нам то в таком случае
  650. 23:04мы найдем как бы контуры полностью всей
  651. 23:08этой линии и когда вот используется
  652. 23:10метод чей напрасно то мы найдем
  653. 23:12полностью все точки всей этой линии
  654. 23:15если же мы будем использовать например
  655. 23:17какой метод как chain approx импланта он
  656. 23:20является более оптимизированным так как
  657. 23:22он если опять таки рассматривать на
  658. 23:24примере этой же самой линии то он найдет
  659. 23:26только первоначальную точку а также
  660. 23:29конечную точку ну а соответственно все
  661. 23:31остальные точки уже не важен и по той
  662. 23:33причине что эта линия
  663. 23:34ну и нам по факту важны только как бы им
  664. 23:36начало этой линии и важен конец той
  665. 23:38линии поэтому соответственно approx
  666. 23:39simple он более оптимизирован но
  667. 23:41поначалу
  668. 23:42предлагаю использовать все таки
  669. 23:44предыдущий предыдущий метод который
  670. 23:46называется chain approx на теперь же мы
  671. 23:50давайте попробуем с вами сделать вот что
  672. 23:53мы давайте попробуем вывести и
  673. 23:54полученное изображение
  674. 23:56вернее даже не так мы давайте
  675. 23:58изображение то же самое будем выводить
  676. 24:00дан который у нас было до этого но
  677. 24:02давайте в терминал мы попробуем вывести
  678. 24:04с вами вот эти вот все контуры которые
  679. 24:06мы получили итак запускаем программу
  680. 24:09вечно же само по себе изображение нас
  681. 24:10никак не поменялось потому что мы как бы
  682. 24:12тоже самое изображение и выводим в то же
  683. 24:14время мы можем заметить что сводится в
  684. 24:16терминале просто гигантский список и
  685. 24:19этот гигантский и список он по сути
  686. 24:21состоит из различных точек из различных
  687. 24:24координат всех вот этих вот найденных
  688. 24:27контуров ну и на данный момент нам
  689. 24:29конечно же с этим достаточно сложно
  690. 24:30будет работать но в будущем за счет
  691. 24:33других специальных функций мы сможем
  692. 24:35просто
  693. 24:35ну как бы находить нужные для нас
  694. 24:37объекты мы будем знать их координаты и
  695. 24:39соответственные эти объекты сможем там
  696. 24:41обводить можем их сможем их подписывать
  697. 24:44и так далее например просто считывать
  698. 24:46информацию сможем с этих объектов
  699. 24:48дополнительном мы давайте наверное не
  700. 24:50только будем выводить все эти контуры
  701. 24:52просто в терминал но также давайте за
  702. 24:54счет этих контуров мы попробуем
  703. 24:56нарисовать новую картинку
  704. 24:57соответственно изначально нам необходимо
  705. 25:00создать эту новую картинку пускай она
  706. 25:02будет в самом верху и она будет
  707. 25:04называться как new image
  708. 25:05и здесь мы с вами делаем следующее то
  709. 25:08есть мы должны обратиться за вами
  710. 25:09библиотеки нам пайм здесь мы вращаемся к
  711. 25:12методу за errors который позволяет
  712. 25:14создать матрицу но при этом все элементы
  713. 25:15там будут со значением 0 и то мы можем
  714. 25:18указать просто с вами ну как бы значение
  715. 25:21элемент количество элементов но я
  716. 25:23предлагаю просто здесь обратиться к
  717. 25:25изображению и кстати говоря нам нужно
  718. 25:28тогда в таком случае вот так немножко
  719. 25:30переделать мы просто обратимся к
  720. 25:31изображению и обратимся к его размерам
  721. 25:34по сути это тоже нам как раз и нужно
  722. 25:36будет то есть то мы получим высоту
  723. 25:37получим ширину и плюс получим еще и
  724. 25:40количество слоев это значением как раз и
  725. 25:43можем подставить сюда вы метод износа но
  726. 25:45все абсолютно нормально обрабатывается
  727. 25:47дополнительном и давайте укажем здесь де
  728. 25:49type и укажем то что мы уже не раз
  729. 25:51указывали you and 8 тыс это будет
  730. 25:54значение которое больше за 0 и что мы
  731. 25:58еще давайте с вами сделаем так это вот
  732. 26:00чуть ниже вот здесь мы просто с вами
  733. 26:03попробуем на этом изображением на этом
  734. 26:05полотне которое мы создали на этом
  735. 26:07полотне мы попробуем нарисовать картинку
  736. 26:09за счет тех контуров что указано у нас
  737. 26:11вот в этом списке чтобы нам такое
  738. 26:13сделать мы обращаемся к методу counters
  739. 26:15здесь мы должны обратиться к нашему
  740. 26:18изображению к нашему полотну моем случае
  741. 26:21это new им
  742. 26:21далее мы указываем контуры в моем случае
  743. 26:24это переменная контур далее нам
  744. 26:27необходимо указать
  745. 26:28контуру ну как бы айди этих контуров но
  746. 26:31мы давайте сейчас просто укажем здесь
  747. 26:33например значения как -1 также мы должны
  748. 26:35указать цвет для самой этой ободки для
  749. 26:38самих этих контуров цвет может быть
  750. 26:40каким угодно он здесь идет в формате
  751. 26:41begin
  752. 26:43то есть соответственно это синий зеленый
  753. 26:45красный ну и допустим и давайте укажем
  754. 26:47здесь какие то возможны случайные
  755. 26:49значения я не знаю что конкретно заяц
  756. 26:51свет это будет но давайте я просто
  757. 26:53попробую вписать какие-то цифры какой-то
  758. 26:56это цвет по любому будет ну и так же
  759. 26:58здесь мы можем указать толщину еще
  760. 26:59обводки мы давайте укажем что наш ободка
  761. 27:02она будет всего лишь в один пиксель
  762. 27:04также чуть ниже мы не забываем что мы
  763. 27:07хотим вывести именно наше новое
  764. 27:09изображение теперь мы давайте это
  765. 27:11попробуем запустить и вот что мы с вами
  766. 27:13получили по факту мы получили то же
  767. 27:15самое ну ту же самую картинку что у нас
  768. 27:18было до этого но здесь есть одно
  769. 27:20небольшое отличие потому что когда мы с
  770. 27:23вами выводили картинку которая была
  771. 27:24просто создана за счет метода кении то
  772. 27:26это бы было картинка где просто были
  773. 27:28описаны все необходимые контуры но
  774. 27:31сейчас нас посуде выводится подобная
  775. 27:33картинка ну то есть такая же вернее даже
  776. 27:35картинка
  777. 27:36но дело в том что оно уже выводится за
  778. 27:38счет тех координат который мы с вами
  779. 27:40получили из предыдущей картинке то есть
  780. 27:43по факту мы полностью считали картинку у
  781. 27:45нас их была некая картинкам и и
  782. 27:46полностью с вами считали
  783. 27:48нашли все необходимые контуры нашли все
  784. 27:50необходимые краям и на основе той
  785. 27:53предыдущей картинке мы по сути создали
  786. 27:55новую картинку вот такая вот механика
  787. 27:57здесь сейчас произошла что достаточно
  788. 27:59неплохо ну что ж хоть этого урока мы
  789. 28:02изучали различные функции для
  790. 28:03трансформации изображения а также мы
  791. 28:05научились находить контуры и даже на
  792. 28:07основе этих контуров научились рисовать
  793. 28:09новые изображения надеюсь урок вам
  794. 28:11понравился если так то не забывайте
  795. 28:13подписываться на канал а так же вступай
  796. 28:15в наши соцсети все ссылки на них будут в
  797. 28:17описании к этому видео у меня ж на этом
  798. 28:19все до скорых встреч пока

About this transcript

This page contains the full transcript of Изучение Python OpenCV / Урок #4 – Функции трансформации изображений by Гоша Дударь, generated from the public captions YouTube serves with the video. The transcript has 4,909 words across 798 segments, with the original timestamps preserved so you can click any line to jump to that moment in the embedded player.

What you can do with it

Use the transcript to take notes, quote the speaker, build a study guide, generate a summary with ChatGPT or Claude via the YouTube Summary tool, or export it as a timed subtitle file with YouTube to SRT. You can also re-open it in the transcriber to translate the transcript into 100+ languages.

Free YouTube transcript tool

YouTube2Text is a free YouTube transcript generator — no signup, no daily limit. Paste any YouTube link and get the full transcript instantly, with timestamps, click-to-jump, translation to 100+ languages, AI prompts for ChatGPT, Claude, and Gemini, and exports to TXT, SRT, VTT, or Markdown.