Π Π°Π·Π½ΠΎΠ΅

Opencv canny: OpenCV: Canny Edge Detector

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

Π”Π΅Ρ‚Π΅ΠΊΡ‚ΠΎΡ€ Π³Ρ€Π°Π½ΠΈΡ† Канни / Π₯Π°Π±Ρ€

Π”ΠΎΠ±Ρ€ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ суток!

ПослСднСС врСмя, Π½Π° Π₯Π°Π±Ρ€Π΅ часто стал ΡƒΠΏΠΎΠΌΠΈΠ½Π°Ρ‚ΡŒΡΡ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ выдСлСния Π³Ρ€Π°Π½ΠΈΡ† Канни (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, ΠΊ ΠΌΠΎΠ΅ΠΌΡƒ ΡƒΠ΄ΠΈΠ²Π»Π΅Π½ΠΈΡŽ, пСрСводится дословно: Ρ…ΠΈΡ‚Ρ€Ρ‹ΠΉ). Π˜Ρ‚Π°ΠΊ, я созрСл ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ с ΠΎΠ±Ρ‰Π΅ΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ своим ΠΎΠΏΡ‹Ρ‚ΠΎΠΌ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ этого Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΎΡ€Π°.


Π’ свободноС врСмя, Π² цСлях самообразования, я ΠΈΠ·ΡƒΡ‡Π°ΡŽ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ (Π² Ρ‚ΠΎΠΌ числС ΠΈ машинного зрСния). Π—Π°Π½ΠΈΠΌΠ°ΡŽΡΡŒ этим Π½Π΅ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ, Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ ΠΏΡ€ΠΈΠ΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡΡΡŒ научнопопулярной Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹ ΠΈΠ»ΠΈ собствСнных алгоритмичСских Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ.

Π§Ρ‚ΠΎΠ±Ρ‹ с ΠΎΠ΄Π½ΠΎΠΉ стороны, ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, Π° с Π΄Ρ€ΡƒΠ³ΠΎΠΉ – ΠΏΡ€ΠΈΠ΄Π°Ρ‚ΡŒ ΠΏΠΎΠ²Π΅ΡΡ‚Π²ΠΎΠ²Π°Π½ΠΈΡŽ Π½ΠΎΡ‚ΠΊΠΈ brainfuck-программирования, я ΠΏΠΎΠΊΠ°ΠΆΡƒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π² срСдС ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΉ Π°Π»Π³Π΅Π±Ρ€Ρ‹ Mathcad (Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ протСстированы Π² вСрсиях 13 ΠΈ 14), с ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ мСньшим использованиСм спСцифичСских встроСнных ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ². ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΏΠΎΡ…ΠΎΠ΄, Π½Π° ΠΌΠΎΠΉ взгляд, ΡƒΠ»ΡƒΡ‡ΡˆΠ°Π΅Ρ‚ восприятиС дСмонстрации, ΠΈ ΠΎΠ±Π»Π΅Π³Ρ‡Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΉ пСрСнос Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² Π² Π΄Ρ€ΡƒΠ³ΠΈΠ΅ срСды проСктирования/Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ этапы Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΎΡ€Π° Канни ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΡƒΡŽ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, программная рСализация ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° БобСля с использованиСм SIMD-Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ систСмы ΠΊΠΎΠΌΠ°Π½Π΄ процСссора), Π½ΠΎ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°ΠΌΠ΅Π½Ρ‹ ΠΎΠ΄Π½ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² (ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²) Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ БобСля ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΌΠ΅Π½Ρ‘Π½ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ РобСртса ΠΈΠ»ΠΈ ΠŸΡ€ΡŽΠΈΡ‚Ρ‚Π°), ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Π°Ρ€ΡŒΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ коэффициСнтов, Π·Π°Π΄Π°ΡŽΡ‰ΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ².

ΠŸΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½Π°Ρ вСрсия создана ΠΈΠ· сообраТСний максимальной простоты Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² срСдС Mathcad, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π² ΡƒΡ‰Π΅Ρ€Π± ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΠΎ скорости ΠΈ качСству дСтСктирования, ΠΈ приводится ΠΊΠ°ΠΊ дСмонстрация основных этапов функционирования Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΎΡ€Π° Канни.

Π’Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π³Ρ€Π°Π½ΠΈΡ† Канни

Канни (John F. Canny; 1953 Π³.) ΠΈΠ·ΡƒΡ‡ΠΈΠ» ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ получСния Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°, ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠΎ критСриям выдСлСния, Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΎΡ‚ΠΊΠ»ΠΈΠΊΠΎΠ² ΠΎΠ΄Π½ΠΎΠ³ΠΎ края. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΎΡ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹, Π½ΠΎ ΠΏΡ€ΠΈ этом ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΎΠΆΠ½Ρ‹Π΅, Ρ‚ΠΎΡ‡Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ линию Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ (Π±Π΅Π· Π΅Ρ‘ фрагмСнтирования) ΠΈ Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Π³Ρ€Π°Π½ΠΈΡ†Ρƒ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, Ρ‡Ρ‚ΠΎ позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ восприятия ΡˆΠΈΡ€ΠΎΠΊΠΈΡ… полос измСнСния яркости ΠΊΠ°ΠΊ совокупности Π³Ρ€Π°Π½ΠΈΡ†. Канни Π²Π²Π΅Π» понятиС Non-Maximum Suppression (ΠΏΠΎΠ΄Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π΅-максимумов), ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ пиксСлями Π³Ρ€Π°Π½ΠΈΡ† ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‚ΠΎΡ‡ΠΊΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… достигаСтся Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ максимум Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π° Π² Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π°.
Π₯отя Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Π° Π±Ρ‹Π»Π° ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½Π° Π½Π° Π·Π°Ρ€Π΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠ³ΠΎ зрСния (1986 Π³. ), Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΎΡ€ Π³Ρ€Π°Π½ΠΈΡ† Канни Π΄ΠΎ сих ΠΏΠΎΡ€ являСтся ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π»ΡƒΡ‡ΡˆΠΈΡ… Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ². ΠšΡ€ΠΎΠΌΠ΅ особСнных частных случаСв Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π» сущСствСнно Π»ΡƒΡ‡ΡˆΠ΅, Ρ‡Π΅ΠΌ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΎΡ€ Канни.

Π—Π°Π΄Π°Ρ‡Π°

Π’ качСствС дСмонстрации Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π΅ΡˆΠ΅Π½Π° Π·Π°Π΄Π°Ρ‡Π° ΠΏΠΎ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΡŽ Π³Ρ€Π°Π½ΠΈΡ† Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ.

Алгоритм состоит ΠΈΠ· пяти ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… шагов:

  1. Π‘Π³Π»Π°ΠΆΠΈΠ²Π°Π½ΠΈΠ΅. Π Π°Π·ΠΌΡ‹Ρ‚ΠΈΠ΅ изобраТСния для удалСния ΡˆΡƒΠΌΠ°.
  2. Поиск Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚ΠΎΠ². Π“Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°ΡŽΡ‚ΡΡ Ρ‚Π°ΠΌ, Π³Π΄Π΅ Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚ изобраТСния ΠΏΡ€ΠΈΠΎΠ±Ρ€Π΅Ρ‚Π°Π΅Ρ‚ максимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.
  3. ПодавлСниС Π½Π΅-максимумов. Волько Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ максимумы ΠΎΡ‚ΠΌΠ΅Ρ‡Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹.
  4. Двойная пороговая Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ. ΠŸΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎΡ€ΠΎΠ³Π°ΠΌΠΈ.
  5. Врассировка области нСоднозначности. Π˜Ρ‚ΠΎΠ³ΠΎΠ²Ρ‹Π΅ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΏΡƒΡ‚Ρ‘ΠΌ подавлСния всСх ΠΊΡ€Π°Ρ‘Π², нСсвязанных с ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌΠΈ (ΡΠΈΠ»ΡŒΠ½Ρ‹ΠΌΠΈ) Π³Ρ€Π°Π½ΠΈΡ†Π°ΠΌΠΈ.

ΠŸΠ΅Ρ€Π΅Π΄ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Π΄Π΅Ρ‚Π΅ΠΊΡ‚ΠΎΡ€Π°, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅ΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΎΡ‚Ρ‚Π΅Π½ΠΊΠΈ сСрого, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹. Π­Ρ‚ΠΎΡ‚ этап Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π΅Π½ для ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.

ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΠΎΡ‚Ρ‚Π΅Π½ΠΊΠΈ сСрого

Для прСобразования исходного изобраТСния Π² ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² градациях сСрого, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Β«ΡΡ€ΠΊΠΎΡΡ‚ΡŒΒ»-ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΡƒΡŽ. Для этого ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ YUV (ΠΈΠ»ΠΈ HSL, HSV, Π΄Ρ€ΡƒΠ³ΠΈΡ…).
Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ рисунок прСдставлСн Π² RGB Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ, ΠΏΡ€ΠΈΡ‡Ρ‘ΠΌ функция Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚Ρ€ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Π² Π²ΠΈΠ΄Π΅ ΠΎΠ΄Π½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹.

Для ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° изобраТСния Π² модСль YUV Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ.
ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΌΠΎΠ΄Π΅Π»ΠΈ (R,G,B):

РассчитаСм Y-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ YUV ΠΌΠΎΠ΄Π΅Π»ΠΈ:

ΠšΠΎΡΡ„Ρ„ΠΈΡ†ΠΈΠ΅Π½Ρ‚Ρ‹ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° (ΠΎΠ½ΠΈ постоянны ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ особСнностями чСловСчСского восприятия, Π° вСдь ΠΈΠΌΠ΅Π½Π½ΠΎ с ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠ° ΠΌΡ‹ здСсь ΠΎΡ†Π΅Π½ΠΈΠ²Π°Π΅ΠΌ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹):

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ прСобразования:

Π‘Π³Π»Π°ΠΆΠΈΠ²Π°Π½ΠΈΠ΅

Для подавлСния ΡˆΡƒΠΌΠ°, Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ Ρ€Π°Π·ΠΌΡ‹Ρ‚ΠΈΠ΅ΠΌ изобраТСния Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠΌ Гаусса.
Ѐункция Гаусса для Π΄Π²ΡƒΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ случая:

ΠœΠ΅Ρ‚ΠΎΠ΄, ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ ядро Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ size с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ Οƒ:

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°, примСнСния Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° с ядром Ρ€Π°Π·ΠΌΠ΅Ρ€Π° size ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ Οƒ ΠΊ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ изобраТСния Matrix:

НСобходимо Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠ΅ Π½Π°ΠΈΠ»ΡƒΡ‡ΡˆΠ΅Π΅ ΠΏΠΎΠ΄Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡˆΡƒΠΌΠ°. ВлияниС пиксСлСй Π΄Ρ€ΡƒΠ³ Π½Π° Π΄Ρ€ΡƒΠ³Π° ΠΏΡ€ΠΈ гауссовой Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Ρƒ расстояния ΠΌΠ΅ΠΆΠ΄Ρƒ Π½ΠΈΠΌΠΈ: коэффициСнт ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Π°, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΈ ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ размытия, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ Οƒ. Π§Ρ€Π΅Π·ΠΌΠ΅Ρ€Π½ΠΎΠ΅ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ коэффициСнта ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ ΡƒΡΠΈΠ»Π΅Π½ΠΈΡŽ усрСднСния Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ Ρ€Π°Π²Π½ΠΎΠΌΠ΅Ρ€Π½ΠΎ Ρ‡Ρ‘Ρ€Π½ΠΎΠ³ΠΎ Ρ†Π²Π΅Ρ‚Π° всСх пиксСлСй:

Π’Ρ‹Π±Π΅Ρ€Π΅ΠΌ Οƒ=1.0.
Π―Π΄Ρ€ΠΎ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° ΠΎΡ‡Π΅Π½ΡŒ быстро ΡƒΠ±Ρ‹Π²Π°Π΅Ρ‚ ΠΊ Π½ΡƒΠ»ΡŽ ΠΏΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ ΠΎΡ‚ Ρ‚ΠΎΡ‡ΠΊΠΈ (0, 0), ΠΈ ΠΏΠΎΡ‚ΠΎΠΌΡƒ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒΡΡ свСрткой с ΠΎΠΊΠ½ΠΎΠΌ нСбольшого Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π²ΠΎΠΊΡ€ΡƒΠ³ (0, 0) (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ€ΡƒΠΊΠΎΠ²ΠΎΠ΄ΡΡ‚Π²ΡƒΡΡΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎΠΌ Ρ‚Ρ€Ρ‘Ρ… сигм, Π²ΠΎΠ·ΡŒΠΌΡ‘ΠΌ радиус ΠΎΠΊΠ½Π° Ρ€Π°Π²Π½Ρ‹ΠΌ 3Οƒ). НиТС прСдставлСн Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ примСнСния Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° с фиксированным Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Οƒ, ΠΈ Ρ€Π°Π·Π½Ρ‹ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ ядра (ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ size).

Π’Ρ‹Π±Π΅Ρ€Π΅ΠΌ size=7. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ примСнСния Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° с Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΡ‘Π½ Π½Π° рисункС Π²Ρ‹ΡˆΠ΅.

Поиск Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚ΠΎΠ²

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ БобСля часто ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°Ρ… выдСлСния Π³Ρ€Π°Π½ΠΈΡ†. По сути, это дискрСтный Π΄ΠΈΡ„Ρ„Π΅Ρ€Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π° яркости изобраТСния. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ примСнСния ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° БобСля Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠ΅ изобраТСния являСтся Π»ΠΈΠ±ΠΎ Π²Π΅ΠΊΡ‚ΠΎΡ€ Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π° яркости Π² этой Ρ‚ΠΎΡ‡ΠΊΠ΅, Π»ΠΈΠ±ΠΎ Π΅Π³ΠΎ Π½ΠΎΡ€ΠΌΠ°. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ БобСля основан Π½Π° свёрткС изобраТСния нСбольшими цСлочислСнными Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°ΠΌΠΈ Π² Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΌ ΠΈ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠΌ направлСниях, поэтому Π΅Π³ΠΎ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ. Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ ΠΈΠΌ аппроксимация Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π° достаточно грубая, особСнно это сказываСтся Π½Π° высокочастотных колСбаниях изобраТСния.
Π―Π΄Ρ€Π° Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²:

РСализация (сопоставляСт ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠ΅ Π²Π΅ΠΊΡ‚ΠΎΡ€ Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π°):

Π£Π³ΠΎΠ» Π²Π΅ΠΊΡ‚ΠΎΡ€Π° квантуСтся ΠΏΠΎ 45Β° β€” ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚Π°ΠΊΠΈΠ΅ значСния Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ для ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… этапов.
На рисункС Π½ΠΈΠΆΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ примСнСния ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΊ Ρ€Π°Π·ΠΌΡ‹Ρ‚ΠΎΠΌΡƒ (А) ΠΈ исходному (Π² градациях сСрого) ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ (Π‘).

ПодавлСниС Π½Π΅-максимумов

ПиксСлями Π³Ρ€Π°Π½ΠΈΡ† ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ пиксСли, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… достигаСтся Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ максимум Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π° Π² Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π°. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ направлСния Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΊΡ€Π°Ρ‚Π½ΠΎ 45Β°.

ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ подавлСния ΠΏΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ Π½Π° рисункС Π²Ρ‹ΡˆΠ΅. ΠŸΠΎΡ‡Ρ‚ΠΈ всС пиксСли Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Β«ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΡ€ΠΈΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ Π²Π²Π΅Ρ€Ρ…Β», поэтому Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π° Π² этих Ρ‚ΠΎΡ‡ΠΊΠ°Ρ… Π±ΡƒΠ΄Π΅Ρ‚ сравнСно с Π½ΠΈΠΆΠ΅- ΠΈ Π²Ρ‹ΡˆΠ΅Ρ€Π°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ пиксСлями. ΠžΠ±Π²Π΅Π΄Ρ‘Π½Π½Ρ‹Π΅ Π±Π΅Π»Ρ‹ΠΌ ΠΊΠΎΠ½Ρ‚ΡƒΡ€ΠΎΠΌ пиксСли останутся Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ, ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ – Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎΠ΄Π°Π²Π»Π΅Π½Ρ‹.
РСализация ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΎΡ‡ΠΊΠΈ Π½Π° ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ:

Π‘Ρ€Π°Π²Π½Π΅Π½ΠΈΠ΅ значСния:

РСализация подавлСния:

ПослС подавлСния Π½Π΅-максимумов, края стали Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½Ρ‹ΠΌΠΈ ΠΈ Ρ‚ΠΎΠ½ΠΊΠΈΠΌΠΈ.

НиТС, Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΌ рисункС, прСдставлСно Π²Π΅ΠΊΡ‚ΠΎΡ€Π½ΠΎΠ΅ ΠΏΠΎΠ»Π΅ Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚ΠΎΠ² (ΡƒΠ³Π»Ρ‹ ΠΊΡ€Π°Ρ‚Π½Ρ‹ 45Β°) всСго исходного (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, Π΄ΠΎ подавлСния) изобраТСния, Π° Π½Π° Π²Ρ‚ΠΎΡ€ΠΎΠΌ – нСбольшого Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°.

Двойная пороговая Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ шаг β€” ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ€ΠΎΠ³Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ находится ΠΈΠ»ΠΈ Π½Π΅Ρ‚ Π³Ρ€Π°Π½ΠΈΡ†Π° Π² Π΄Π°Π½Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠ΅ изобраТСния. Π§Π΅ΠΌ мСньшС ΠΏΠΎΡ€ΠΎΠ³, Ρ‚Π΅ΠΌ большС Π³Ρ€Π°Π½ΠΈΡ† Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ, Π½ΠΎ Ρ‚Π΅ΠΌ Π±ΠΎΠ»Π΅Π΅ восприимчивым ΠΊ ΡˆΡƒΠΌΡƒ станСт Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, выдСляя лишниС Π΄Π°Π½Π½Ρ‹Π΅ изобраТСния. Наоборот, высокий ΠΏΠΎΡ€ΠΎΠ³ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ слабыС края ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π³Ρ€Π°Π½ΠΈΡ†Ρƒ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ.
Π’Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π³Ρ€Π°Π½ΠΈΡ† Канни ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π΄Π²Π° ΠΏΠΎΡ€ΠΎΠ³Π° Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ: Ссли Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ пиксСля Π²Ρ‹ΡˆΠ΅ Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ – ΠΎΠ½ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ максимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (Π³Ρ€Π°Π½ΠΈΡ†Π° считаСтся достовСрной), Ссли Π½ΠΈΠΆΠ΅ – пиксСль подавляСтся, Ρ‚ΠΎΡ‡ΠΊΠΈ со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ, ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠΌ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΡ€ΠΎΠ³ΠΎΠ², ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚ фиксированноС срСднСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΡ‚ΠΎΡ‡Π½Π΅Π½Ρ‹ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ этапС).
РСализация:

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ примСнСния с ΠΏΠΎΡ€ΠΎΠ³Π°ΠΌΠΈ 55% ΠΈ 60% ΠΎΡ‚ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½ Π½Π° рисункС Π΄Π°Π»Π΅Π΅.

Врассировка области нСоднозначности

Π£ΠΏΡ€ΠΎΡ‰Ρ‘Π½Π½ΠΎ, Π·Π°Π΄Π°Ρ‡Π° сводится ΠΊ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΡŽ Π³Ρ€ΡƒΠΏΠΏ пиксСлСй, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΠΈΡ… Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ этапС ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΈ ΠΎΡ‚Π½Π΅ΡΠ΅Π½ΠΈΡŽ ΠΈΡ… ΠΊ Π³Ρ€Π°Π½ΠΈΡ†Π΅ (Ссли ΠΎΠ½ΠΈ соСдинСны с ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· установлСнных Π³Ρ€Π°Π½ΠΈΡ†) ΠΈΠ»ΠΈ ΠΈΡ… подавлСнию (Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС). ПиксСль добавляСтся ΠΊ Π³Ρ€ΡƒΠΏΠΏΠ΅, Ссли ΠΎΠ½ соприкасаСтся с Π½Π΅ΠΉ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈΠ· 8-ΠΌΠΈ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΉ.
РСализация:

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ трассировки:

Бписок источников

Π’ процСссС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ я использовал ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ источники (Π³Π»Π°Π²Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, [1]):

  1. Canny Edge Detection www. cvmt.dk/education/teaching/f09/VGIS8/AIP
  2. ВикипСдия. Edge detection en.wikipedia.org/wiki/Edge_detection
  3. ВикипСдия. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ БобСля ru.wikipedia.org/wiki/ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€_БобСля
  4. АлгоритмичСскиС основы растровой Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ www.intuit.ru/department/graphics/rastrgraph/8/rastrgraph_8.html

Π‘ΡƒΠ΄Ρƒ Ρ€Π°Π΄ ΠΊΡ€ΠΈΡ‚ΠΈΠΊΠ΅ ΠΈ замСчаниям, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ машинного зрСния Π½Π΅ связана с ΠΌΠΎΠ΅ΠΉ ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΉ Π΄Π΅ΡΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ.

upd А Π²ΠΎΡ‚ ΠΈ ΠΊΡ€ΠΈΡ‚ΠΈΠΊΠ°. Бпасибо andreyivanoff Π·Π° ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π½Π° ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ ошибки Π² Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅ ΠΈ ссылкС Π½Π° ΡΡ‚Π°Ρ‚ΡŒΡŽ (Ρ‚ΡƒΡ‚).

upd2 andreyivanoff Π΄Π°Ρ‘Ρ‚ Π²Π°ΠΆΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΊ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ Ρ‚ΡƒΡ‚.

OpenCV, МашинноС Π·Ρ€Π΅Π½ΠΈΠ΅ Π½Π° Python: Поиск Π»ΠΈΡ†Π° Π½Π° Ρ„ΠΎΡ‚ΠΎ. Π§Π°ΡΡ‚ΡŒ 4

Π’ΠΎΡ‚ ΠΌΡ‹ с Π²Π°ΠΌΠΈ ΠΈ подошли ΠΊ самому интСрСсному. К поиску Π»ΠΈΡ†Π°\Π»ΠΈΡ† Π½Π° Ρ„ΠΎΡ‚ΠΎ ΠΈΠ»ΠΈ Π² Π²ΠΈΠ΄Π΅ΠΎΠΏΠΎΡ‚ΠΎΠΊΠ΅. Для поиска ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Каскад Π₯Π°Π°Ρ€Π°.

Каскад Π₯Π°Π°Ρ€Π° β€” способ обнаруТСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ, основанный Π½Π° машинном ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠΈ, идСя ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±Ρ‹Π»Π° Π±Ρ‹Π»Π° ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π° Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π·Π° авторством Пола Π’ΠΈΠΎΠ»Ρ‹ (Paul Viola) ΠΈ Майкла ДТонса (Michael Jones). ΠžΠ±ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ каскад Π₯Π°Π°Ρ€Π°, принимая Π½Π° Π²Ρ…ΠΎΠ΄ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, опрСдСляСт, Π΅ΡΡ‚ΡŒ Π»ΠΈ Π½Π° Π½Π΅ΠΌ искомый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Ρ‚.Π΅. выполняСт Π·Π°Π΄Π°Ρ‡Ρƒ классификации, раздСляя Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π° Π΄Π²Π° класса (Π΅ΡΡ‚ΡŒ искомый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π½Π΅Ρ‚ искомого ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°) . БобствСнно сам Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΡΠ²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΠΊ Ρ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠŸΡ€ΠΈΠ·Π½Π°ΠΊ Π₯Π°Π°Ρ€Π° (Π½Π°Π±ΠΎΡ€ΠΎΠΌ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½Ρ‹Ρ… областСй) ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ проходят ΠΏΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ ΠΈ находят искомый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Π― Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ силСн Π² объяснСниС тСория, ΠΊΠΎΠΌΡƒ интСрСсны подробности ΠΈΡ‰Π΅ΠΌ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅.

Π§Ρ‚ΠΎ Π½Π°ΠΌ Π²Π°ΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ : всС это ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ OpenCV. И Π½Π°Ρ‚Ρ€Π΅Π½ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠΈ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°. По этому сразу ΠΊΠΎΠ΄, ΠΏΠΎΡ‚ΠΎΠΌ Π±ΡƒΠ΄ΡƒΡ‚ пояснСния :

pip install opencv-python # Волько основныС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹
pip install opencv-contrib-python # ВсС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Ссли Π½Π΅ ошибаюсь
import cv2

faceCascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FPS, 24) # Чистота ΠΊΠ°Π΄Ρ€ΠΎΠ²

while True:
    ret, img = cap.read()
    gray = cv2. cvtColor(img, cv2.COLOR_BGR2GRAY)

    faces = faceCascade.detectMultiScale(
        gray,               #
        scaleFactor=1.2,    #
        minNeighbors=5,     #
        minSize=(20, 20)    #
    )

    for (x, y, w, h) in faces:
        cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
    cv2.imshow("camera", img)
    if cv2.waitKey(10) == 27:  # Esc key
        break
cap.release()
cv2.destroyAllWindows()

faceCascade = cv2.CascadeClassifier(β€˜haarcascade_frontalface_default.xml’) .

БобствСнно этой ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ΠΌΡ‹ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ ΡƒΠΆΠ΅ ΠΎΠ±ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ классификаторы haarcascade_frontalface_default.xml . Π’Π·ΡΡ‚ΡŒ ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ с нашСго сайта ΠΈΠ»ΠΈ Github OpenCV.

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² сСрый Ρ†Π²Π΅Ρ‚, Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π»ΡƒΡ‡ΡˆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Ρ‡Π΅Ρ€Π½ΠΎ-Π±Π΅Π»Ρ‹ΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ.

faces = faceCascade.detectMultiScale(
gray, #
scaleFactor=1. 2, #
minNeighbors=5, #
minSize=(20, 20) #
)

Π­Ρ‚ΠΎ функция поиска Π»ΠΈΡ†.

  • scaleFactor=1.2 β€” ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ, Π½Π° сколько ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ Ρ€Π°Π·ΠΌΠ΅Ρ€ изобраТСния ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΌΠ°ΡΡˆΡ‚Π°Π±Π΅ изобраТСния. Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для создания ΠΌΠ°ΡΡˆΡ‚Π°Π±Π½ΠΎΠΉ ΠΏΠΈΡ€Π°ΠΌΠΈΠ΄Ρ‹.
  • minNeighbors=5 β€” ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ, сколько сосСдСй Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ-ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚ для Π΅Π³ΠΎ сохранСния. (Ρ‡Π΅ΠΌ Π²Ρ‹ΡˆΠ΅ , Ρ‚Π΅ΠΌ большС Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ).
  • minSize=(20, 20) β€” Минимально Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ мСньшСго Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ.

for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)

РисуСм ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈ Π²ΠΎ ΠΊΡ€ΡƒΠ³ Π½Π°ΠΉΠ΄Π΅Π½ΠΎΠ³ΠΎ Π»ΠΈΡ†Π°.

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ Π±Ρ‹Π²Π°ΡŽΡ‚ Π»ΠΎΠΆΠ½Ρ‹Π΅ срабатывания ΠΈΠ»ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚ Π½Π΅ Π²ΠΈΠ΄Π΅Ρ‚ Π»ΠΈΡ†ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ. МоТно ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ классификаторы, ΠΏΠΎΠΈΠ³Ρ€Π°Ρ‚ΡŒΡΡ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ. ВсС ΠΎΡ‡Π΅Π½ΡŒ сильно зависит ΠΎΡ‚ освСщСния ΠΈ Ρ‚. Π΄. Для Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ распознавания ΠΏΡ€ΠΈΠ±Π΅Π³Π°ΡŽΡ‚ ΠΊ Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ изобраТСния.

НапримСр Π½ΠΎΡ€ΠΌΠ°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ срСднСквадратичСскоС ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅. Π­Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Π½ΠΈΡ†Π° Π² освСщСнности Π½Π° фотографиях ΠΎΠΊΠ°Π·Ρ‹Π²Π°Π»Π° ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ влияния Π½Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ классификации.

Π”Π°Π²Π°ΠΉΡ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ поиск Π³Π»Π°Π· :

import cv2

faceCascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
# Π—Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ каскады для Π³Π»Π°Π·.
eyeCascade = cv2.CascadeClassifier('haarcascade_eye.xml')

img = cv2.imread('semia.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

faces = faceCascade.detectMultiScale(
        gray,               #
        scaleFactor=1.2,    # Находим Π»ΠΈΡ†Π° Π½Π° Ρ„ΠΎΡ‚ΠΎ
        minNeighbors=4,     #
        minSize=(20, 20)    #
    )

for (x, y, w, h) in faces:
    roi_gray = gray[y:y + h, x:x + w] # Π’Ρ‹Ρ€Π΅Π·Π°Π΅ΠΌ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ с Π»ΠΈΡ†Π°ΠΌΠΈ
    roi_color = img[y:y + h, x:x + w]
    cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
    eyes = eyeCascade. detectMultiScale(
        roi_gray,              #
        scaleFactor=1.2,       # Π˜Ρ‰Π΅ΠΌ Π³Π»Π°Π·Π° Π² области с Π»ΠΈΡ†ΠΎΠΌ
        minNeighbors=4,
        minSize=(5, 5),
    )
    for (ex, ey, ew, eh) in eyes:
        cv2.rectangle(roi_color, (ex, ey), (ex + ew, ey + eh), (0, 255, 0), 2)  # РисуСм ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π³Π»Π°Π·

cv2.imshow("camera", img)
cv2.waitKey(0)
cv2.destroyAllWindows()

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Ρ‡Ρ‚ΠΎ Π½Π΅ всС Π³Π»Π°Π·Π° нашлись. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ· Π·Π° ΠΎΡ‡ΠΊΠΎΠ² Π½Π° Π±Π°Π±ΡƒΡˆΠΊΠ΅ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ нашли. Но Π½Π΅ смотря Π½Π° это , Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΈ ΠΏΠΎ сСй дСнь считаСтся достаточно Ρ‚ΠΎΡ‡Π½Ρ‹ΠΌ , ΠΎΡ‡Π΅Π½ΡŒ быстрым ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ ΡˆΠΈΡ€ΠΎΠΊΠΎΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅. Π― Π΄ΡƒΠΌΠ°ΡŽ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΌΠΎΠΆΠ½ΠΎ сильно ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ Π΄Π°ΠΆΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ OpenCV Ссли ΡƒΠ³Π»ΡƒΠ±ΠΈΡ‚ΡŒΡΡ Π² эту Ρ‚Π΅ΠΌΡƒ сильнСй.

Если Π²Ρ‹ нашли ΠΎΡˆΠΈΠ±ΠΊΡƒ, поТалуйста, Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚Π΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ тСкста ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Ctrl+Enter.

OpenCV: ΡˆΠΏΠ°Ρ€Π³Π°Π»ΠΊΠ° β€” PYTHON

Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ OpenCV?

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠ³ΠΎ зрСния ΠΈ машинного обучСния с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ. Π’ Π½Π΅Ρ‘ входят Π±ΠΎΠ»Π΅Π΅ 2500 Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ², Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΅ΡΡ‚ΡŒ ΠΊΠ°ΠΊ классичСскиС, Ρ‚Π°ΠΊ ΠΈ соврСмСнныС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ для ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠ³ΠΎ зрСния ΠΈ машинного обучСния. Π­Ρ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΈΠΌΠ΅Π΅Ρ‚ интСрфСйсы Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… языках, срСди ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΅ΡΡ‚ΡŒ Python (Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π΅Π³ΠΎ), Javaΰͺ, C++ΰͺ ΠΈ Matlabΰͺ.

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

Установка

Π˜Π½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ ΠΏΠΎ установкС Π½Π° Windows ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ здСсь, Π° Π½Π° Linux β€” здСсь.

Π˜ΠΌΠΏΠΎΡ€Ρ‚ ΠΈ просмотр изобраТСния


import cv2
image = cv2.imread("./ΠΏΡƒΡ‚ΡŒ/ΠΊ/ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ.Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅")
cv2.imshow("Image", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅:
ΠŸΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ способом Π²Ρ‹ΡˆΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ находится Π² Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΌ пространствС Π½Π΅ RGB (ΠΊΠ°ΠΊ всС ΠΏΡ€ΠΈΠ²Ρ‹ΠΊΠ»ΠΈ), Π° BGR. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π² Π½Π°Ρ‡Π°Π»Π΅ это Π½Π΅ Ρ‚Π°ΠΊ Π²Π°ΠΆΠ½ΠΎ, Π½ΠΎ ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ Π½Π°Ρ‡Π½Ρ‘Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Ρ†Π²Π΅Ρ‚ΠΎΠΌ β€” стоит Π·Π½Π°Ρ‚ΡŒ ΠΎΠ± этой особСнности. Π•ΡΡ‚ΡŒ 2 ΠΏΡƒΡ‚ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ:

  1. ΠŸΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ мСстами 1-ΠΉ ΠΊΠ°Π½Π°Π» (R β€” красный) с 3-ΠΌ ΠΊΠ°Π½Π°Π»ΠΎΠΌ (B β€” синий), ΠΈ Ρ‚ΠΎΠ³Π΄Π° красный Ρ†Π²Π΅Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ (0,0,255), Π° Π½Π΅ (255,0,0).
  2. ΠŸΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠ΅ пространство Π½Π° RGB:
    
    rgb_image = cv2. cvtColor(image, cv2.COLOR_BGR2RGB)
    

И Ρ‚ΠΎΠ³Π΄Π° Π² ΠΊΠΎΠ΄Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΡƒΠΆΠ΅ Π½Π΅ с image, Π° с rgb_image.

На протяТСнии ΡΡ‚Π°Ρ‚ΡŒΠΈ для Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄:


import cv2
def viewImage(image, name_of_window):
    cv2.namedWindow(name_of_window, cv2.WINDOW_NORMAL)
    cv2.imshow(name_of_window, image)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

ΠšΠ°Π΄Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅

ΠšΠ°Π΄Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅Β β€” ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ„ΠŸΡ‘ΡΠΈΠΊ послС кадрирования


import cv2
cropped = image[10:500, 500:2000]
viewImage(cropped, "ΠŸΡ‘ΡΠΈΠΊ послС кадрирования")

Π“Π΄Π΅ image[10:500, 500:2000] β€” это image[y:y + высота, x:x + ΡˆΠΈΡ€ΠΈΠ½Π°].

ИзмСнСниС Ρ€Π°Π·ΠΌΠ΅Ρ€Π°

ИзмСнСниС Ρ€Π°Π·ΠΌΠ΅Ρ€Π°Β β€” исходноС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Π˜Π·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π½Π° 20%


import cv2
scale_percent = 20 # ΠŸΡ€ΠΎΡ†Π΅Π½Ρ‚ ΠΎΡ‚ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°
width = int(img. shape[1] * scale_percent / 100)
height = int(img.shape[0] * scale_percent / 100)
dim = (width, height)
resized = cv2.resize(img, dim, interpolation = cv2.INTER_AREA)
viewImage(resized, "ПослС измСнСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π½Π° 20 %")

Π­Ρ‚Π° функция ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Π΅Ρ‚ ΡΠΎΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ сторон ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ изобраТСния. Π”Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ измСнСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ здСсь.

ΠŸΠΎΠ²ΠΎΡ€ΠΎΡ‚

Π€ΠΎΡ‚ΠΎ Π”ΠΆΠΎΠ½Π°Ρ‚Π°Π½Π° ΠœΠ΅ΠΉΠ΅Ρ€Π° ΠΈΠ· Pexels.ΠŸΡ‘ΡΠΈΠΊ послС ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° Π½Π° 180 градусов.


import cv2
(h, w, d) = image.shape
center = (w // 2, h // 2)
M = cv2.getRotationMatrix2D(center, 180, 1.0)
rotated = cv2.warpAffine(image, M, (w, h))
viewImage(rotated, "ΠŸΡ‘ΡΠΈΠΊ послС ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° Π½Π° 180 градусов")

image.shape Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ высоту, ΡˆΠΈΡ€ΠΈΠ½Ρƒ ΠΈ ΠΊΠ°Π½Π°Π»Ρ‹. M β€” ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° β€” ΠΏΠΎΠ²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° 180 градусов Π²ΠΎΠΊΡ€ΡƒΠ³ Ρ†Π΅Π½Ρ‚Ρ€Π°. -ve β€” это ΡƒΠ³ΠΎΠ» ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° изобраТСния ΠΏΠΎ часовой стрСлкС, Π° +ve, соотвСтствСнно, ΠΏΡ€ΠΎΡ‚ΠΈΠ² часовой.

ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ Π² Π³Ρ€Π°Π΄Π°Ρ†ΠΈΠΈ сСрого ΠΈ Π² Ρ‡Ρ‘Ρ€Π½ΠΎ-Π±Π΅Π»ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΏΠΎΡ€ΠΎΠ³Ρƒ

ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π»: PexelsΠ“Ρ€Π°Π΄Π°Ρ†ΠΈΠΈ сСрогоЧёрно-Π±Π΅Π»ΠΎΠ΅. ΠŸΠΎΡ€ΠΎΠ³


import cv2
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
ret, threshold_image = cv2.threshold(im, 127, 255, 0)
viewImage(gray_image, "ΠŸΡ‘ΡΠΈΠΊ Π² градациях сСрого")
viewImage(threshold_image, "Π§Ρ‘Ρ€Π½ΠΎ-Π±Π΅Π»Ρ‹ΠΉ пёсик")

gray_image β€” это одноканальная вСрсия изобраТСния.

Ѐункция threshold Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ всС пиксСли, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Π΅ΠΌΠ½Π΅Π΅ (мСньшС) 127 Π·Π°ΠΌΠ΅Π½Π΅Π½Ρ‹ Π½Π° 0, Π° всС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ярчС (большС) 127, β€” Π½Π° 255.

Для ясности Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€:


ret, threshold = cv2.threshold(im, 150, 200, 10)

Π—Π΄Π΅ΡΡŒ всё, Ρ‡Ρ‚ΠΎ Ρ‚Π΅ΠΌΠ½Π΅Π΅, Ρ‡Π΅ΠΌ 150, замСняСтся Π½Π° 10, Π° всё, Ρ‡Ρ‚ΠΎ ярчС, β€” Π½Π° 200.

ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ threshold-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ описаны здСсь.

Π Π°Π·ΠΌΡ‹Ρ‚ΠΈΠ΅/сглаТиваниС

Π˜ΡΡ…ΠΎΠ΄Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ с PixabayΠ Π°Π·ΠΌΡ‹Ρ‚Ρ‹ΠΉ пёсик


import cv2
blurred = cv2. GaussianBlur(image, (51, 51), 0)
viewImage(blurred, "Π Π°Π·ΠΌΡ‹Ρ‚Ρ‹ΠΉ пёсик")

Ѐункция GaussianBlur (Ρ€Π°Π·ΠΌΡ‹Ρ‚ΠΈΠ΅ ΠΏΠΎ Гауссу) ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ 3 ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°:

  1. Π˜ΡΡ…ΠΎΠ΄Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.
  2. ΠšΠΎΡ€Ρ‚Π΅ΠΆ ΠΈΠ· 2 ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π½Π΅Ρ‡Ρ‘Ρ‚Π½Ρ‹Ρ… чисСл. Π§Π΅ΠΌ большС числа, Ρ‚Π΅ΠΌ большС сила сглаТивания.
  3. sigmaX ΠΈ sigmaY. Если эти ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ€Π°Π²Π½Ρ‹ΠΌΠΈ 0, Ρ‚ΠΎ ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ рассчитано автоматичСски.

Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΏΡ€ΠΎ Ρ€Π°Π·ΠΌΡ‹Ρ‚ΠΈΠ΅ здСсь.

РисованиС ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠ²

РисуСм ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΈΒ β€” исходноС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠžΠ±Π²ΠΎΠ΄ΠΈΠΌ ΠΌΠΎΡ€Π΄ΠΎΡ‡ΠΊΡƒ ΠΆΡ‘Π»Ρ‚Ρ‹ΠΌ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠΌ


import cv2
output = image.copy()
cv2.rectangle(output, (2600, 800), (4100, 2400), (0, 255, 255), 10)
viewImage(output, "Обводим ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠΌ Π»ΠΈΡ†ΠΎ пёсика")

Π­Ρ‚Π° функция ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ 5 ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²:

  1. Π‘Π°ΠΌΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.
  2. ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π° Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ Π»Π΅Π²ΠΎΠ³ΠΎ ΡƒΠ³Π»Π° (x1, y1).
  3. ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π° Π½ΠΈΠΆΠ½Π΅Π³ΠΎ ΠΏΡ€Π°Π²ΠΎΠ³ΠΎ ΡƒΠ³Π»Π° (x2, y2).
  4. Π¦Π²Π΅Ρ‚ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° (GBR/RGB Π² зависимости ΠΎΡ‚ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ).
  5. Π’ΠΎΠ»Ρ‰ΠΈΠ½Π° Π»ΠΈΠ½ΠΈΠΈ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°.

РисованиС линий

Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ с pexelsΠ”Π²ΡƒΡ… пёсиков Ρ€Π°Π·Π΄Π΅Π»ΠΈΠΌ Π»ΠΈΠ½ΠΈΠ΅ΠΉ


import cv2
output = image.copy()
cv2.line(output, (60, 20), (400, 200), (0, 0, 255), 5)
viewImage(output, "2 пёсика, Ρ€Π°Π·Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ Π»ΠΈΠ½ΠΈΠ΅ΠΉ")

Ѐункция line ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ 5 ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²:

  1. Π‘Π°ΠΌΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ рисуСтся линия.
  2. ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π° ΠΏΠ΅Ρ€Π²ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ (x1, y1).
  3. ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ (x2, y2).
  4. Π¦Π²Π΅Ρ‚ Π»ΠΈΠ½ΠΈΠΈ (GBR/RGB Π² зависимости ΠΎΡ‚ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ).
  5. Π’ΠΎΠ»Ρ‰ΠΈΠ½Π° Π»ΠΈΠ½ΠΈΠΈ.

ВСкст Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ

Π˜ΡΡ…ΠΎΠ΄Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ для надписиНадпись Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ


import cv2
output = image.copy()
cv2.putText(output, "We <3 Dogs", (1500, 3600),cv2.FONT_HERSHEY_SIMPLEX, 15, (30, 105, 210), 40) 
viewImage(output, "Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ с тСкстом")

Ѐункция putText ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ 7 ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²:

  1. НСпосрСдствСнно ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.
  2. ВСкст для изобраТСния.
  3. ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π° Π½ΠΈΠΆΠ½Π΅Π³ΠΎ Π»Π΅Π²ΠΎΠ³ΠΎ ΡƒΠ³Π»Π° Π½Π°Ρ‡Π°Π»Π° тСкста (x, y).
  4. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ ΡˆΡ€ΠΈΡ„Ρ‚.
  5. Π Π°Π·ΠΌΠ΅Ρ€ ΡˆΡ€ΠΈΡ„Ρ‚Π°.
  6. Π¦Π²Π΅Ρ‚ тСкста (GBR/RGB Π² зависимости ΠΎΡ‚ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ).
  7. Π’ΠΎΠ»Ρ‰ΠΈΠ½Π° Π»ΠΈΠ½ΠΈΠΉ Π±ΡƒΠΊΠ².

РаспознаваниС Π»ΠΈΡ†

На этот Ρ€Π°Π· Π±Π΅Π· пёсиков.

Π€ΠΎΡ‚ΠΎ с PixabayΠžΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΎ Π΄Π²Π° Π»ΠΈΡ†Π°


import cv2
image_path = "./ΠΏΡƒΡ‚ΡŒ/ΠΊ/Ρ„ΠΎΡ‚ΠΎ.Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅"
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
image = cv2.imread(image_path)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(
    gray,
    scaleFactor= 1.1,a
    minNeighbors= 5,
    minSize=(10, 10)
)
faces_detected = "Π›ΠΈΡ† ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΎ: " + format(len(faces))
print(faces_detected)
# РисуСм ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Ρ‹ Π²ΠΎΠΊΡ€ΡƒΠ³ Π»ΠΈΡ†
for (x, y, w, h) in faces:
    cv2.rectangle(image, (x, y), (x+w, y+h), (255, 255, 0), 2)
viewImage(image,faces_detected)

detectMultiScale β€” общая функция для распознавания ΠΊΠ°ΠΊ Π»ΠΈΡ†, Ρ‚Π°ΠΊ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π§Ρ‚ΠΎΠ±Ρ‹ функция искала ΠΈΠΌΠ΅Π½Π½ΠΎ Π»ΠΈΡ†Π°, ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‘ΠΌ Π΅ΠΉ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ каскад.

Ѐункция detectMultiScale ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ 4 ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°:

  1. ΠžΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π³Ρ€Π°Π΄Π°Ρ†ΠΈΠΈ сСрого.
  2. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ scaleFactor. НСкоторыС Π»ΠΈΡ†Π° ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ большС Π΄Ρ€ΡƒΠ³ΠΈΡ…, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ находятся Π±Π»ΠΈΠΆΠ΅, Ρ‡Π΅ΠΌ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅. Π­Ρ‚ΠΎΡ‚ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ компСнсируСт пСрспСктиву.
  3. Алгоритм распознавания ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡΠΊΠΎΠ»ΡŒΠ·ΡΡ‰Π΅Π΅ ΠΎΠΊΠ½ΠΎ Π²ΠΎ врСмя распознавания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ minNeighbors опрСдСляСт количСство ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π²ΠΎΠΊΡ€ΡƒΠ³ Π»ΠΈΡ†Π°. Π’ΠΎ Π΅ΡΡ‚ΡŒ Ρ‡Π΅ΠΌ большС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этого ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°, Ρ‚Π΅ΠΌ большС Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ» Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΊΠ°ΠΊ Π»ΠΈΡ†ΠΎ. Блишком малСнькоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ количСство Π»ΠΎΠΆΠ½Ρ‹Ρ… срабатываний, Π° слишком большоС сдСлаСт Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π±ΠΎΠ»Π΅Π΅ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ.
  4. minSize β€” нСпосрСдствСнно Ρ€Π°Π·ΠΌΠ΅Ρ€ этих областСй.

Contours β€” распознаваниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²

РаспознаваниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² производится с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ сСгмСнтации изобраТСния. Для этого Π΅ΡΡ‚ΡŒ Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: cv2.findContours ΠΈ cv2.drawContours.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎ описано ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ сСгмСнтации. Всё, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ для Π½Π΅Ρ‘, находится Ρ‚Π°ΠΌ.

Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ изобраТСния


import cv2
image = cv2.imread("./ΠΈΠΌΠΏΠΎΡ€Ρ‚/ΠΏΡƒΡ‚ΡŒ.Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅")
cv2.imwrite("./экспорт/ΠΏΡƒΡ‚ΡŒ.Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅", image)

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

OpenCV β€” отличная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° с Π»Ρ‘Π³ΠΊΠΈΠΌΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°ΠΌΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² 3D-Ρ€Π΅Π½Π΄Π΅Ρ€Π΅, ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚ΠΎΠΌ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈ Π²ΠΈΠ΄Π΅ΠΎ, отслСТивании ΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ людСй Π½Π° Π²ΠΈΠ΄Π΅ΠΎ, поискС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹Ρ… ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΈΠ· Π½Π°Π±ΠΎΡ€Π° ΠΈ для ΠΌΠ½ΠΎΠ³ΠΎ-ΠΌΠ½ΠΎΠ³ΠΎ Ρ‡Π΅Π³ΠΎ Π΅Ρ‰Ρ‘.

Π­Ρ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½Π° для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹, связанныС с ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΌ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅ΠΌ Π² области ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.

ВрСбуСтся рСгистрация для доступа ΠΊ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Ρƒ. РСгистрация, Ссли Π’Ρ‹ ΡƒΠΆΠ΅ зарСгистрированы β€” ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ΡΡŒ

OpenCV — ΠžΠ±Π·ΠΎΡ€ — CoderLessons.com

OpenCV β€” это кроссплатформСнная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ прилоТСния для ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠ³ΠΎ зрСния Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. ОсновноС Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ удСляСтся ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, Π·Π°Ρ…Π²Π°Ρ‚Ρƒ ΠΈ Π°Π½Π°Π»ΠΈΠ·Ρƒ Π²ΠΈΠ΄Π΅ΠΎ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Ρ‚Π°ΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠ°ΠΊ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ Π»ΠΈΡ† ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

Π”Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Π΅ΠΌ Π³Π»Π°Π²Ρƒ с опрСдСлСния Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π° Β«ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠ΅ Π·Ρ€Π΅Π½ΠΈΠ΅Β».

ΠšΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠ΅ Π·Ρ€Π΅Π½ΠΈΠ΅

Computer Vision ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° ΠΊΠ°ΠΊ дисциплина, которая ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚, ΠΊΠ°ΠΊ Ρ€Π΅ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Ρ‚ΡŒ ΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½ΡƒΡŽ сцСну ΠΈΠ· Π΅Π΅ 2D-ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния свойств структуры, ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Π² сцСнС. Он занимаСтся ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ чСловСчСского зрСния с использованиСм ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΈ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ обСспСчСния.

Computer Vision Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ поля:

  • ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ β€” фокусируСтся Π½Π° ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ изобраТСниями.

  • РаспознаваниС ΠΎΠ±Ρ€Π°Π·ΠΎΠ² β€” ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ классификации ΠΎΠ±Ρ€Π°Π·Ρ†ΠΎΠ².

  • ЀотограммСтрия β€” это касаСтся получСния Ρ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ ΠΈΠ· ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ β€” фокусируСтся Π½Π° ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ изобраТСниями.

РаспознаваниС ΠΎΠ±Ρ€Π°Π·ΠΎΠ² β€” ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ классификации ΠΎΠ±Ρ€Π°Π·Ρ†ΠΎΠ².

ЀотограммСтрия β€” это касаСтся получСния Ρ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ ΠΈΠ· ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ.

Computer Vision Vs ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ связана с ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ изобраТСния Π² ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. Π’Ρ…ΠΎΠ΄ ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ изобраТСния ΠΎΠ±Π° изобраТСния.

ΠšΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠ΅ Π·Ρ€Π΅Π½ΠΈΠ΅ β€” это построСниС явных, Π·Π½Π°Ρ‡ΠΈΠΌΡ‹Ρ… описаний физичСских ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΠΎ ΠΈΡ… ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠ³ΠΎ зрСния являСтся описаниС ΠΈΠ»ΠΈ интСрпрСтация структур Π² Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠΉ сцСнС.

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠ³ΠΎ зрСния

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ пСрСчислили Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· основных областСй, Π³Π΄Π΅ интСнсивно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Computer Vision.

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ€ΠΎΠ±ΠΎΡ‚ΠΎΡ‚Π΅Ρ…Π½ΠΈΠΊΠΈ

  • Локализация β€” ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ мСстополоТСния Ρ€ΠΎΠ±ΠΎΡ‚Π° автоматичСски

  • навигация

  • ИзбСганиС прСпятствий

  • Π‘Π±ΠΎΡ€ΠΊΠ° (ΠΊΠΎΠ»Ρ‹ΡˆΠ΅ΠΊ, сварка, покраска)

  • ΠœΠ°Π½ΠΈΠΏΡƒΠ»ΡΡ†ΠΈΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ€ΠΎΠ±ΠΎΡ‚-манипулятор PUMA)

  • Human Robot Interaction (HRI) β€” Π˜Π½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ Ρ€ΠΎΠ±ΠΎΡ‚ΠΎΡ‚Π΅Ρ…Π½ΠΈΠΊΠ° для взаимодСйствия ΠΈ обслуТивания людСй

Локализация β€” ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ мСстополоТСния Ρ€ΠΎΠ±ΠΎΡ‚Π° автоматичСски

навигация

ИзбСганиС прСпятствий

Π‘Π±ΠΎΡ€ΠΊΠ° (ΠΊΠΎΠ»Ρ‹ΡˆΠ΅ΠΊ, сварка, покраска)

ΠœΠ°Π½ΠΈΠΏΡƒΠ»ΡΡ†ΠΈΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ€ΠΎΠ±ΠΎΡ‚-манипулятор PUMA)

Human Robot Interaction (HRI) β€” Π˜Π½Ρ‚Π΅Π»Π»Π΅ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ Ρ€ΠΎΠ±ΠΎΡ‚ΠΎΡ‚Π΅Ρ…Π½ΠΈΠΊΠ° для взаимодСйствия ΠΈ обслуТивания людСй

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π² ΠΌΠ΅Π΄ΠΈΡ†ΠΈΠ½Π΅

  • ΠšΠ»Π°ΡΡΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡ ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, классификация поврСТдСния ΠΈΠ»ΠΈ ΠΊΠ»Π΅Ρ‚ΠΎΠΊ ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠΏΡƒΡ…ΠΎΠ»ΠΈ)
  • 2D / 3D сСгмСнтация
  • 3D рСконструкция чСловСчСского ΠΎΡ€Π³Π°Π½Π° (МРВ ΠΈΠ»ΠΈ Π£Π—Π˜)
  • Π’ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Π°Ρ Ρ€ΠΎΠ±ΠΎΡ‚ΠΎΡ‚Π΅Ρ…Π½ΠΈΠΊΠ°

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΎΠΉ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ

  • ΠŸΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ (ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ Π΄Π΅Ρ„Π΅ΠΊΡ‚ΠΎΠ²)
  • сборочный
  • Π‘Ρ‡ΠΈΡ‚Ρ‹Π²Π°Π½ΠΈΠ΅ ΡˆΡ‚Ρ€ΠΈΡ…-ΠΊΠΎΠ΄Π° ΠΈ этикСтки Π½Π° ΡƒΠΏΠ°ΠΊΠΎΠ²ΠΊΠ΅
  • Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²
  • ПониманиС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, OCR)

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ бСзопасности

  • БиомСтрия (радуТная ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ°, ΠΎΡ‚ΠΏΠ΅Ρ‡Π°Ρ‚ΠΎΠΊ ΠΏΠ°Π»ΡŒΡ†Π°, распознаваниС Π»ΠΈΡ†Π°)

  • НаблюдСниС β€” ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄ΠΎΠ·Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… дСйствий ΠΈΠ»ΠΈ повСдСния

БиомСтрия (радуТная ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠ°, ΠΎΡ‚ΠΏΠ΅Ρ‡Π°Ρ‚ΠΎΠΊ ΠΏΠ°Π»ΡŒΡ†Π°, распознаваниС Π»ΠΈΡ†Π°)

НаблюдСниС β€” ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΠΎΠ΄ΠΎΠ·Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… дСйствий ΠΈΠ»ΠΈ повСдСния

ВранспортноС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

  • АвтономноС транспортноС срСдство
  • Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³ Π±Π΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ водитСля

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ OpenCV

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ OpenCV, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ β€”

  • Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ изобраТСния

  • Π—Π°Ρ…Π²Π°Ρ‚ ΠΈ сохранСниС Π²ΠΈΠ΄Π΅ΠΎ

  • ΠžΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ изобраТСния (Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ)

  • Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

  • ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Π»ΠΈΡ†Π°, Π³Π»Π°Π·Π°, Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΠΈ, Π² Π²ΠΈΠ΄Π΅ΠΎ ΠΈΠ»ΠΈ изобраТСниях.

  • ΠŸΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ Π²ΠΈΠ΄Π΅ΠΎ, Ρ‚.Π΅. ΠΎΡ†Π΅Π½ΠΈΡ‚Π΅ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π² Π½Π΅ΠΌ, Π²Ρ‹Ρ‡Ρ‚ΠΈΡ‚Π΅ Ρ„ΠΎΠ½ ΠΈ отслСдитС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² Π½Π΅ΠΌ.

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ изобраТСния

Π—Π°Ρ…Π²Π°Ρ‚ ΠΈ сохранСниС Π²ΠΈΠ΄Π΅ΠΎ

ΠžΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ изобраТСния (Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ)

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Π»ΠΈΡ†Π°, Π³Π»Π°Π·Π°, Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΠΈ, Π² Π²ΠΈΠ΄Π΅ΠΎ ΠΈΠ»ΠΈ изобраТСниях.

ΠŸΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠΉΡ‚Π΅ Π²ΠΈΠ΄Π΅ΠΎ, Ρ‚.Π΅. ΠΎΡ†Π΅Π½ΠΈΡ‚Π΅ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ Π² Π½Π΅ΠΌ, Π²Ρ‹Ρ‡Ρ‚ΠΈΡ‚Π΅ Ρ„ΠΎΠ½ ΠΈ отслСдитС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π² Π½Π΅ΠΌ.

OpenCV ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ разрабатывался Π½Π° C ++. Π’ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ этому Π±Ρ‹Π»ΠΈ прСдоставлСны привязки Python ΠΈ Java. OpenCV Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСмах, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Windows, Linux, OSx, FreeBSD, Net BSD, Open BSD ΠΈ Ρ‚. Π”.

Π’ этом руководствС ΠΎΠ±ΡŠΡΡΠ½ΡΡŽΡ‚ΡΡ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ OpenCV Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… привязки Java.

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ OpenCV

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ основныС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ OpenCV.

Основная Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ

Π­Ρ‚ΠΎΡ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ основныС структуры Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Scalar, Point, Range ΠΈ Ρ‚. Π”., ΠšΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для создания ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ OpenCV. Π’ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊ этому, ΠΎΠ½ Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив Mat , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для хранСния ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ. Π’ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Java OpenCV этот ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ ΠΊΠ°ΠΊ ΠΏΠ°ΠΊΠ΅Ρ‚ с ΠΈΠΌΠ΅Π½Π΅ΠΌ org.opencv.core .

ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° изобраТСния

Π­Ρ‚ΠΎΡ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, гСомСтричСскиС прСобразования ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ пространства, гистограммы ΠΈ Ρ‚. Π”. Π’ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Java OpenCV этот ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ ΠΊΠ°ΠΊ ΠΏΠ°ΠΊΠ΅Ρ‚ с ΠΈΠΌΠ΅Π½Π΅ΠΌ org.opencv.imgproc .

Π²ΠΈΠ΄Π΅ΠΎ

Π­Ρ‚ΠΎΡ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠ΅ понятия Π°Π½Π°Π»ΠΈΠ·Π° Π²ΠΈΠ΄Π΅ΠΎ, ΠΊΠ°ΠΊ ΠΎΡ†Π΅Π½ΠΊΠ° двиТСния, Π²Ρ‹Ρ‡ΠΈΡ‚Π°Π½ΠΈΠ΅ Ρ„ΠΎΠ½Π° ΠΈ отслСТиваниС ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π’ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Java OpenCV этот ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ ΠΊΠ°ΠΊ ΠΏΠ°ΠΊΠ΅Ρ‚ с ΠΈΠΌΠ΅Π½Π΅ΠΌ org.opencv.video .

Π’ΠΈΠ΄Π΅ΠΎ Π²Π²ΠΎΠ΄ / Π²Ρ‹Π²ΠΎΠ΄

Π­Ρ‚ΠΎΡ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΎΠ±ΡŠΡΡΠ½ΡΠ΅Ρ‚ Π·Π°Ρ…Π²Π°Ρ‚ Π²ΠΈΠ΄Π΅ΠΎ ΠΈ Π²ΠΈΠ΄Π΅ΠΎΠΊΠΎΠ΄Π΅ΠΊΠΈ с использованиСм Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ OpenCV. Π’ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Java OpenCV этот ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ ΠΊΠ°ΠΊ ΠΏΠ°ΠΊΠ΅Ρ‚ с ΠΈΠΌΠ΅Π½Π΅ΠΌ org.opencv.videoio .

calib3d

Π­Ρ‚ΠΎΡ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹, ΠΊΠ°ΡΠ°ΡŽΡ‰ΠΈΠ΅ΡΡ основных Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² Π³Π΅ΠΎΠΌΠ΅Ρ‚Ρ€ΠΈΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π²ΠΈΠ΄ΠΎΠ², ΠΊΠ°Π»ΠΈΠ±Ρ€ΠΎΠ²ΠΊΠΈ ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½ΠΎΠΉ ΠΈ стСрСокамСры, ΠΎΡ†Π΅Π½ΠΊΠΈ ΠΏΠΎΠ·Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, стСрСо соотвСтствия ΠΈ элСмСнтов Ρ‚Ρ€Π΅Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠΉ рСконструкции. Π’ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Java OpenCV этот ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ ΠΊΠ°ΠΊ ΠΏΠ°ΠΊΠ΅Ρ‚ с ΠΈΠΌΠ΅Π½Π΅ΠΌ org.opencv.calib3d .

features2d

Π­Ρ‚ΠΎΡ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ обнаруТСния ΠΈ описания Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π’ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Java OpenCV этот ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ ΠΊΠ°ΠΊ ΠΏΠ°ΠΊΠ΅Ρ‚ с ΠΈΠΌΠ΅Π½Π΅ΠΌ org.opencv.features2d .

Objdetect

Π­Ρ‚ΠΎΡ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π² сСбя ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ экзСмпляров ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… классов, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Π»ΠΈΡ†Π°, Π³Π»Π°Π·Π°, ΠΊΡ€ΡƒΠΆΠΊΠΈ, люди, Π°Π²Ρ‚ΠΎΠΌΠΎΠ±ΠΈΠ»ΠΈ ΠΈ Ρ‚. Π”. Π’ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Java OpenCV этот ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ ΠΊΠ°ΠΊ ΠΏΠ°ΠΊΠ΅Ρ‚ с ΠΈΠΌΠ΅Π½Π΅ΠΌ org.opencv.objdetect .

Highgui

Π­Ρ‚ΠΎ простой Π² использовании интСрфСйс с простыми возмоТностями ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса. Π’ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ Java OpenCV Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ этого модуля Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² Π΄Π²Π° Ρ€Π°Π·Π½Ρ‹Ρ… ΠΏΠ°ΠΊΠ΅Ρ‚Π°, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ org.opencv.imgcodecs ΠΈ org.opencv.videoio .

ΠšΡ€Π°Ρ‚ΠΊΠ°Ρ история OpenCV

OpenCV ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π±Ρ‹Π»Π° ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Ρ‚ΠΈΠ²ΠΎΠΉ Intel для ΠΊΠΎΠ½ΡΡƒΠ»ΡŒΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, интСнсивно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… процСссор. Он Π±Ρ‹Π» ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎ Π·Π°ΠΏΡƒΡ‰Π΅Π½ Π² 1999 Π³ΠΎΠ΄Ρƒ.

Поиск Π»ΠΈΡ† с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ OpenCV Π½Π° Python 3

Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°ΠΌΠΊΠΈ Π²ΠΎΠΊΡ€ΡƒΠ³ Π»ΠΈΡ† (Π±Π΅Π· Π³Π»Π°Π·) Π½Π° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅:

def detect_faces(f_cascade, bgr_img, scale_factor=1.3):
    gray = cv2.cvtColor(bgr_img, cv2.COLOR_BGR2GRAY)  # need grayscale image
    faces = f_cascade.detectMultiScale(  # detect faces
        gray, scaleFactor=scale_factor, minNeighbors=5)
 
    for (x, y, w, h) in faces:  # draw a rectangle around each face
        cv2.rectangle(bgr_img, (x, y), (x+w, y+h), (0, 255, 0), 2)
    return len(faces)  # return the number of detected faces

Π³Π΄Π΅ Π² качСствС каскадного классификатора ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ haarcascade_frontalface_alt, установлСнный вмСстС с opencv:

import os
import cv2  # $ pip install opencv-python
 
path = os.path.join(cv2.__path__[0], 'data/haarcascade_frontalface_alt.xml')
assert os.path.exists(path)
haar_face_cascade = cv2.CascadeClassifier(path)

Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΈΡ†Π° Π½Π° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅, Π·Π°Π΄Π°Π½Π½ΠΎΠΉ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строкС:

import sys
 
bgr_img = cv2.imread(sys.argv[1])
nfaces = detect_faces(haar_face_cascade, bgr_img, 1.05)
print(f'detected {nfaces}')  # -> 85
 
# show image
cv2.imshow('Image', img)
cv2.waitKey()  # wait until any key is pressed
cv2.destroyAllWindows()

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ для Ρ„ΠΎΡ‚ΠΎ с выставки:

Π’ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π½Π΅ всС Π»ΠΈΡ†Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈΡΡŒ ΠΈ Π΅ΡΡ‚ΡŒ Π»ΠΎΠΆΠ½Ρ‹Π΅ срабатывания. УвСличивая scale_factor ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ число Π»ΠΎΠΆΠ½Ρ‹Ρ… срабатываний ΠΈ ΠΎΠ±Ρ‰Π΅Π΅ число ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Ρ… Π»ΠΈΡ† Π½Π° ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅.

Π’ качСствС Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ LBP каскадныС классификаторы ΠΈΠ· OpenCV, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΠ΅ мСньшС рСсурсов, Π½ΠΎ Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… большС Π»ΠΎΠΆΠ½Ρ‹Ρ… срабатываний:

face_cascade = cv2.CascadeClassifier('lbpcascade_frontalface_improved.xml')
bgr_img = cv2.imread(sys.argv[1])
nfaces = detect_faces(face_cascade, bgr_img, 1.01)
print(f'detected {nfaces}') # -> 99
cv2.imwrite('detected-faces-lbp.png', bgr_img)

Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½Ρ‹Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π½Π΅ΠΆΠ΅Π»ΠΈ LBP ΠΈΠ»ΠΈ Haar каскадныС классификаторы ΠΈΠ· OpenCV, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡƒΠΌΠ΅Ρ€Π΅Π½Π½Ρ‹Π΅ рСсурсы (достаточно для Π²ΠΈΠ΄Π΅ΠΎ), ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ OpenCV dnn модуля. Face detection with OpenCV and deep learning.

Найти ΠΈ Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚ΡƒΡ€Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ OpenCV | ΠΏΠΈΡ‚ΠΎΠ½

ΠšΠΎΠ½Ρ‚ΡƒΡ€Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ линия, ΡΠΎΠ΅Π΄ΠΈΠ½ΡΡŽΡ‰Π°Ρ всС Ρ‚ΠΎΡ‡ΠΊΠΈ вдоль Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ изобраТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡƒΡŽ ΠΈΠ½Ρ‚Π΅Π½ΡΠΈΠ²Π½ΠΎΡΡ‚ΡŒ. ΠšΠΎΠ½Ρ‚ΡƒΡ€Ρ‹ пригодятся ΠΏΡ€ΠΈ Π°Π½Π°Π»ΠΈΠ·Π΅ Ρ„ΠΎΡ€ΠΌΡ‹, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

OpenCV ΠΈΠΌΠ΅Π΅Ρ‚ findContour() которая ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚ΡƒΡ€Ρ‹ ΠΈΠ· изобраТСния. Π›ΡƒΡ‡ΡˆΠ΅ всСго ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΌΠΈ изобраТСниями, поэтому ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ сначала ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΏΠΎΡ€ΠΎΠ³ΠΎΠ²ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, Ρ€Π΅Π±Ρ€Π° БобСля ΠΈ Ρ‚. Π”.

НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ ΠΊΠΎΠ΄ для поиска ΠΊΠΎΠ½Ρ‚ΡƒΡ€ΠΎΠ² β€”

import cv2

import numpy as np

Β Β 

image = cv2.imread('C://Users//gfg//shapes.jpg')

cv2.waitKey(0)

Β Β 

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

Β Β 

edged = cv2.Canny(gray, 30, 200)

cv2.waitKey(0)

Β Β 

contours, hierarchy = cv2.findContours(edged,Β 

Β Β Β Β cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)

Β Β 

cv2.imshow('Canny Edges After Contouring', edged)

cv2.waitKey(0)

Β Β 

print("Number of Contours found = " + str(len(contours)))

Β Β 

cv2.drawContours(image, contours, -1, (0, 255, 0), 3)

Β Β 

cv2.imshow('Contours', image)

cv2.waitKey(0)

cv2.destroyAllWindows()

Π’Ρ‹Ρ…ΠΎΠ΄:

ΠœΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ cv2.findContours() Π΅ΡΡ‚ΡŒ Ρ‚Ρ€ΠΈ сущСствСнных Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ β€” исходноС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Π²Ρ‚ΠΎΡ€ΠΎΠΉ β€” Ρ€Π΅ΠΆΠΈΠΌ поиска ΠΊΠΎΠ½Ρ‚ΡƒΡ€Π°, Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ β€” ΠΌΠ΅Ρ‚ΠΎΠ΄ аппроксимации ΠΊΠΎΠ½Ρ‚ΡƒΡ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ½Ρ‚ΡƒΡ€Ρ‹ ΠΈ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡŽ. ‘ contours ‘ β€” это список Python всСх ΠΊΠΎΠ½Ρ‚ΡƒΡ€ΠΎΠ² изобраТСния. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚ΡƒΡ€ прСдставляСт собой массив Numpy (x, y) ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ Π³Ρ€Π°Π½ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΎΡ‡Π΅ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.

ΠœΠ΅Ρ‚ΠΎΠ΄ аппроксимации ΠΊΠΎΠ½Ρ‚ΡƒΡ€ΠΎΠ² β€”
Π’Ρ‹ΡˆΠ΅ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚ΡƒΡ€Ρ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π³Ρ€Π°Π½ΠΈΡ†Π°ΠΌΠΈ Ρ„ΠΎΡ€ΠΌΡ‹ с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Π½ΡΠΈΠ²Π½ΠΎΡΡ‚ΡŒΡŽ. Он Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ (x, y) Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ Ρ„ΠΈΠ³ΡƒΡ€Ρ‹. Но Ρ…Ρ€Π°Π½ΠΈΡ‚ Π»ΠΈ ΠΎΠ½ всС ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹? Π­Ρ‚ΠΎ задаСтся этим ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ ΠΊΠΎΠ½Ρ‚ΡƒΡ€Π½ΠΎΠΉ аппроксимации.
Если ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅ΠΌ cv2.CHAIN_APPROX_NONE , всС Π³Ρ€Π°Π½ΠΈΡ‡Π½Ρ‹Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ. Но Π½Π° самом Π΄Π΅Π»Π΅, Π½Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ всС ΠΏΡƒΠ½ΠΊΡ‚Ρ‹? НапримСр, Ссли ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π½Π°ΠΉΡ‚ΠΈ ΠΊΠΎΠ½Ρ‚ΡƒΡ€ прямой Π»ΠΈΠ½ΠΈΠΈ. Нам Π½ΡƒΠΆΠ½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Π²Π΅ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ этой Π»ΠΈΠ½ΠΈΠΈ. Π­Ρ‚ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ cv2.CHAIN_APPROX_SIMPLE . Он удаляСт всС лишниС Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΈ сТимаСт ΠΊΠΎΠ½Ρ‚ΡƒΡ€, Ρ‚Π΅ΠΌ самым экономя ΠΏΠ°ΠΌΡΡ‚ΡŒ.

Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌΡ‹Π΅ посты:

Найти ΠΈ Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚ΡƒΡ€Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ OpenCV | ΠΏΠΈΡ‚ΠΎΠ½

0.00 (0%) 0 votes

OpenCV: ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ Canny Edge

ЦСль

Π’ этой Π³Π»Π°Π²Π΅ ΠΌΡ‹ ΡƒΠ·Π½Π°Π΅ΠΌ ΠΎ

  • ΠšΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡ обнаруТСния края Canny
  • Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ OpenCV для этого: cv.Canny ()

ВСория

Canny Edge Detection — это популярный Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ обнаруТСния ΠΊΡ€ΠΎΠΌΠΎΠΊ. Он Π±Ρ‹Π» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ Π”ΠΆΠΎΠ½ΠΎΠΌ Π€. Кэнни Π²

  1. . Π­Ρ‚ΠΎ многоэтапный Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, ΠΈ ΠΌΡ‹ рассмотрим ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ этап.
  2. Π‘Π½ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΡˆΡƒΠΌΠ°

    ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΊΡ€Π°Π΅Π² Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊ ΡˆΡƒΠΌΡƒ Π² ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ, ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ шагом являСтся ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡˆΡƒΠΌΠ° Π² ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ гауссовского Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° 5×5.{-1} \ bigg (\ frac {G_y} {G_x} \ bigg) \]

    НаправлСниС Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π° всСгда пСрпСндикулярно краям. Он округляСтся Π΄ΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… ΡƒΠ³Π»ΠΎΠ², ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅, Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΈ Π΄Π²Π° Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… направлСния.

  3. НС максимальноС подавлСниС

    ПослС получСния Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹ ΠΈ направлСния Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π° выполняСтся ΠΏΠΎΠ»Π½ΠΎΠ΅ сканированиС изобраТСния для удалСния Π»ΡŽΠ±Ρ‹Ρ… Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… пиксСлСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅ ΡΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ края. Для этого Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ пиксСлС пиксСль провСряСтся, являСтся Π»ΠΈ ΠΎΠ½ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ максимумом Π² Π΅Π³ΠΎ окрСстности Π² Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π°.ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½ΠΈΠΆΠ΅:

    ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

    Π’ΠΎΡ‡ΠΊΠ° А находится Π½Π° ΠΊΡ€Π°ΡŽ (Π² Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ). НаправлСниС Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π° Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΊ ΠΊΡ€Π°ΡŽ. Π’ΠΎΡ‡ΠΊΠΈ B ΠΈ C находятся Π² направлСниях Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‚ΠΎΡ‡ΠΊΠ° A сравниваСтся с Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ B ΠΈ C, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Π»ΠΈ ΠΎΠ½Π° Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ максимум. Если это Ρ‚Π°ΠΊ, ΠΎΠ½ рассматриваСтся для ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ этапа, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΎΠ½ подавляСтся (обнуляСтся).

    ΠšΠΎΡ€ΠΎΡ‡Π΅ говоря, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ с Β«Ρ‚ΠΎΠ½ΠΊΠΈΠΌΠΈ краями».

  4. ΠŸΠΎΡ€ΠΎΠ³ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ гистСрСзиса

    На этом этапС Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠ· Ρ€Π΅Π±Π΅Ρ€ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ€Π΅Π±Ρ€Π°ΠΌΠΈ, Π° ΠΊΠ°ΠΊΠΈΠ΅ Π½Π΅Ρ‚.Для этого Π½Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ Π΄Π²Π° ΠΏΠΎΡ€ΠΎΠ³ΠΎΠ²Ρ‹Ρ… значСния: minVal ΠΈ maxVal. Π›ΡŽΠ±Ρ‹Π΅ края с Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚ΠΎΠΌ интСнсивности большС maxVal ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ краями, Π° Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Π½ΠΈΠΆΠ΅ minVal, ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ краями, поэтому отбрасывайтС. Π’Π΅, ΠΊΡ‚ΠΎ находится ΠΌΠ΅ΠΆΠ΄Ρƒ этими двумя ΠΏΠΎΡ€ΠΎΠ³Π°ΠΌΠΈ, ΠΊΠ»Π°ΡΡΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Ρ€Π΅Π±Ρ€Π° ΠΈΠ»ΠΈ Π½Π΅ Ρ€Π΅Π±Ρ€Π° Π² зависимости ΠΎΡ‚ ΠΈΡ… связности. Если ΠΎΠ½ΠΈ соСдинСны с пиксСлями с Ρ‡Π΅Ρ‚ΠΊΠΈΠΌΠΈ краями, ΠΎΠ½ΠΈ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΊΡ€Π°Π΅Π². Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΎΠ½ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹Π±Ρ€Π°ΡΡ‹Π²Π°ΡŽΡ‚ΡΡ. Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½ΠΈΠΆΠ΅:

    ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

    ΠšΡ€Π°ΠΉ A Π²Ρ‹ΡˆΠ΅ maxVal, поэтому считаСтся «Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΌ Ρ€Π΅Π±Ρ€ΠΎΠΌ».Π₯отя ΠΊΡ€Π°ΠΉ C Π½ΠΈΠΆΠ΅ maxVal, ΠΎΠ½ соСдинСн с Ρ€Π΅Π±Ρ€ΠΎΠΌ A, поэтому ΠΎΠ½ Ρ‚Π°ΠΊΠΆΠ΅ считаСтся допустимым, ΠΈ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΏΠΎΠ»Π½ΡƒΡŽ ΠΊΡ€ΠΈΠ²ΡƒΡŽ. Но Ρ€Π΅Π±Ρ€ΠΎ B, хотя ΠΎΠ½ΠΎ Π²Ρ‹ΡˆΠ΅ minVal ΠΈ находится Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ области, Ρ‡Ρ‚ΠΎ ΠΈ Ρ€Π΅Π±Ρ€ΠΎ C, Π½Π΅ связано Π½ΠΈ с ΠΊΠ°ΠΊΠΈΠΌ «Π²Π΅Ρ€Π½Ρ‹ΠΌ Ρ€Π΅Π±Ρ€ΠΎΠΌ», поэтому ΠΎΠ½ΠΎ отбрасываСтся. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ minVal ΠΈ maxVal соотвСтствСнно, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

    На этом этапС Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ ΠΌΠ΅Π»ΠΊΠΈΠ΅ ΡˆΡƒΠΌΡ‹ пиксСлСй ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ края ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой Π΄Π»ΠΈΠ½Π½Ρ‹Π΅ Π»ΠΈΠ½ΠΈΠΈ.

Π˜Ρ‚Π°ΠΊ, Π² ΠΈΡ‚ΠΎΠ³Π΅ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Ρ‡Π΅Ρ‚ΠΊΠΈΠ΅ края изобраТСния.

ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ Canny Edge Π² OpenCV

OpenCV ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ всС Π²Ρ‹ΡˆΠ΅ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½Π½ΠΎΠ΅ Π² ΠΎΠ΄Π½Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, cv.Canny () . ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ, ΠΊΠ°ΠΊ это ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ — это нашС Π²Ρ…ΠΎΠ΄Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΈ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ — это наши minVal ΠΈ maxVal соотвСтствСнно. Π’Ρ€Π΅Ρ‚ΠΈΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ — aperture_size. Π­Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ ядра БобСля, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ для поиска Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚ΠΎΠ² изобраТСния. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ это 3. ПослСдний Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ — L2gradient, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Π΄Π°Π΅Ρ‚ ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠ΅ для опрСдСлСния Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹ Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π°. Если это True, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠ΅, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π²Ρ‹ΡˆΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ являСтся Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½Ρ‹ΠΌ, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ эта функция: \ (Edge \ _Gradient \; (G) = | G_x | + | G_y | \).По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ это False.

import numpy as np

import cv2 as cv

from matplotlib import pyplot as plt

plt.subplot (121), plt.imshow (img, cmap = ‘gray’)

plt.title (‘Original Image ‘), plt.xticks ([]), plt.yticks ([])

plt.subplot (122), plt.imshow (edge, cmap =’ gray ‘)

plt.title (‘ Edge Image ‘) , plt.xticks ([]), plt.yticks ([])

plt.show ()

Π‘ΠΌ. Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π½ΠΈΠΆΠ΅:

ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ рСсурсы

  1. Π”Π΅Ρ‚Π΅ΠΊΡ‚ΠΎΡ€ края Canny Π² Π’ΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ
  2. Π£Ρ‡Π΅Π±Π½ΠΎΠ΅ пособиС ΠΏΠΎ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΡŽ Canny Edge ΠΎΡ‚ Π‘ΠΈΠ»Π»Π° Π“Ρ€ΠΈΠ½Π°, 2002.

УпраТнСния

  1. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ нСбольшоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ края Canny, ΠΏΠΎΡ€ΠΎΠ³ΠΎΠ²Ρ‹Π΅ значСния ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π΄Π²ΡƒΡ… Ρ‚Ρ€Π΅ΠΊΠ±Π°Ρ€ΠΎΠ². Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ влияниС ΠΏΠΎΡ€ΠΎΠ³ΠΎΠ²Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ Canny Edge — OpenCV-Python Tutorials 1 докумСнтация

ЦСль

Π’ этой Π³Π»Π°Π²Π΅ ΠΌΡ‹ ΡƒΠ·Π½Π°Π΅ΠΌ ΠΎ

  • ΠšΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΡ обнаруТСния края Canny
  • Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ OpenCV для этого: cv2.Канни ()

ВСория

Canny Edge Detection — это популярный Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ обнаруТСния ΠΊΡ€ΠΎΠΌΠΎΠΊ. Он Π±Ρ‹Π» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ Π”ΠΆΠΎΠ½ΠΎΠΌ Π€. Кэнни Π² 1986 Π³ΠΎΠ΄Ρƒ. Π­Ρ‚ΠΎ многоэтапный Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, ΠΈ ΠΌΡ‹ рассмотрим ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ этап.

  1. Π‘Π½ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΡˆΡƒΠΌΠ°

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΊΡ€Π°Π΅Π² Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊ ΡˆΡƒΠΌΡƒ Π² ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ, ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ шагом являСтся ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡˆΡƒΠΌΠ° Π² ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ гауссовского Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° 5×5. ΠœΡ‹ ΡƒΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ это Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… Π³Π»Π°Π²Π°Ρ….

  1. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π° интСнсивности изобраТСния

Π‘Π³Π»Π°ΠΆΠ΅Π½Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π·Π°Ρ‚Π΅ΠΌ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΡƒΠ΅Ρ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ядра БобСля ΠΊΠ°ΠΊ Π² Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠΌ, Ρ‚Π°ΠΊ ΠΈ Π² Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡƒΡŽ Π² Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ () ΠΈ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ ().Из этих Π΄Π²ΡƒΡ… ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΉΡ‚ΠΈ Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚ края ΠΈ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ пиксСля ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

НаправлСниС Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π° всСгда пСрпСндикулярно краям. Он округляСтся Π΄ΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… ΡƒΠ³Π»ΠΎΠ², ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅, Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΈ Π΄Π²Π° Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… направлСния.

  1. НС максимальноС подавлСниС

ПослС получСния Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹ ΠΈ направлСния Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π° выполняСтся ΠΏΠΎΠ»Π½ΠΎΠ΅ сканированиС изобраТСния для удалСния Π»ΡŽΠ±Ρ‹Ρ… Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… пиксСлСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π΅ ΡΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ края. Для этого Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ пиксСлС пиксСль провСряСтся, являСтся Π»ΠΈ ΠΎΠ½ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ максимумом Π² Π΅Π³ΠΎ окрСстности Π² Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π°.ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½ΠΈΠΆΠ΅:

Π’ΠΎΡ‡ΠΊΠ° А находится Π½Π° ΠΊΡ€Π°ΡŽ (Π² Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ). НаправлСниС Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π° Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΊ ΠΊΡ€Π°ΡŽ. Π’ΠΎΡ‡ΠΊΠΈ B ΠΈ C находятся Π² направлСниях Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‚ΠΎΡ‡ΠΊΠ° A сравниваСтся с Ρ‚ΠΎΡ‡ΠΊΠ°ΠΌΠΈ B ΠΈ C, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Π»ΠΈ ΠΎΠ½Π° Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ максимум. Если это Ρ‚Π°ΠΊ, ΠΎΠ½ рассматриваСтся для ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ этапа, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΎΠ½ подавляСтся (обнуляСтся).

ΠšΠΎΡ€ΠΎΡ‡Π΅ говоря, Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ с Β«Ρ‚ΠΎΠ½ΠΊΠΈΠΌΠΈ краями».

  1. ΠŸΠΎΡ€ΠΎΠ³ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ гистСрСзиса

На этом этапС Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠ· Ρ€Π΅Π±Π΅Ρ€ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ€Π΅Π±Ρ€Π°ΠΌΠΈ, Π° ΠΊΠ°ΠΊΠΈΠ΅ Π½Π΅Ρ‚.Для этого Π½Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ Π΄Π²Π° ΠΏΠΎΡ€ΠΎΠ³ΠΎΠ²Ρ‹Ρ… значСния: minVal ΠΈ maxVal . Π›ΡŽΠ±Ρ‹Π΅ края с Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚ΠΎΠΌ интСнсивности Π±ΠΎΠ»Π΅Π΅ maxVal ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ краями, Π° Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Π½ΠΈΠΆΠ΅ minVal , ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ краями, поэтому отбрасывайтС. Π’Π΅, ΠΊΡ‚ΠΎ находится ΠΌΠ΅ΠΆΠ΄Ρƒ этими двумя ΠΏΠΎΡ€ΠΎΠ³Π°ΠΌΠΈ, ΠΊΠ»Π°ΡΡΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Ρ€Π΅Π±Ρ€Π° ΠΈΠ»ΠΈ Π½Π΅ Ρ€Π΅Π±Ρ€Π° Π² зависимости ΠΎΡ‚ ΠΈΡ… связности. Если ΠΎΠ½ΠΈ соСдинСны с пиксСлями с Ρ‡Π΅Ρ‚ΠΊΠΈΠΌΠΈ краями, ΠΎΠ½ΠΈ ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΊΡ€Π°Π΅Π². Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΎΠ½ΠΈ Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹Π±Ρ€Π°ΡΡ‹Π²Π°ΡŽΡ‚ΡΡ. Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½ΠΈΠΆΠ΅:

ΠšΡ€ΠΎΠΌΠΊΠ° A Π²Ρ‹ΡˆΠ΅ maxVal , поэтому считаСтся Β«Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠΉ ΠΊΡ€ΠΎΠΌΠΊΠΎΠΉΒ».Π₯отя ΠΊΡ€Π°ΠΉ C Π½ΠΈΠΆΠ΅ maxVal , ΠΎΠ½ соСдинСн с Ρ€Π΅Π±Ρ€ΠΎΠΌ A, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ это Ρ‚Π°ΠΊΠΆΠ΅ считаСтся допустимым ΠΊΡ€Π°Π΅ΠΌ, ΠΈ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ эту ΠΏΠΎΠ»Π½ΡƒΡŽ ΠΊΡ€ΠΈΠ²ΡƒΡŽ. Но ΠΊΡ€Π°ΠΉ B, хотя ΠΎΠ½ Π²Ρ‹ΡˆΠ΅ minVal ΠΈ находится Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ области, Ρ‡Ρ‚ΠΎ ΠΈ ΠΊΡ€Π°ΠΉ C, ΠΎΠ½ Π½Π΅ связан с ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ Β«Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΌ ΠΊΡ€Π°Π΅ΠΌΒ», поэтому ΠΎΠ½ отбрасываСтся. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ minVal ΠΈ maxVal соотвСтствСнно, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

На этом этапС Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ ΠΌΠ΅Π»ΠΊΠΈΠ΅ ΡˆΡƒΠΌΡ‹ пиксСлСй ΠΏΡ€ΠΈ условии, Ρ‡Ρ‚ΠΎ края ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой Π΄Π»ΠΈΠ½Π½Ρ‹Π΅ Π»ΠΈΠ½ΠΈΠΈ.

Π˜Ρ‚Π°ΠΊ, Π² ΠΈΡ‚ΠΎΠ³Π΅ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Ρ‡Π΅Ρ‚ΠΊΠΈΠ΅ края изобраТСния.

ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ Canny Edge Π² OpenCV

OpenCV ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ всС Π²Ρ‹ΡˆΠ΅ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½Π½ΠΎΠ΅ Π² ΠΎΠ΄Π½Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ cv2.Canny () . ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ, ΠΊΠ°ΠΊ это ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ — это нашС Π²Ρ…ΠΎΠ΄Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΠΈ Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ — это наши minVal ΠΈ maxVal соотвСтствСнно. Π’Ρ€Π΅Ρ‚ΠΈΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ — aperture_size . Π­Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ ядра БобСля, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ³ΠΎ для поиска Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚ΠΎΠ² изобраТСния. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ это 3. ПослСдний Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ — L2gradient , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Π΄Π°Π΅Ρ‚ ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠ΅ для опрСдСлСния Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹ Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π°.Если это Π˜ΡΡ‚ΠΈΠ½Π½ΠΎ , ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΡƒΡ€Π°Π²Π½Π΅Π½ΠΈΠ΅, упомянутоС Π²Ρ‹ΡˆΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ являСтся Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½Ρ‹ΠΌ, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ эта функция:. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ это Π›ΠΎΠΆΡŒ .

 ΠΈΠΌΠΏΠΎΡ€Ρ‚ cv2
ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ numpy ΠΊΠ°ΠΊ np
ΠΈΠ· matplotlib ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ pyplot ΠΊΠ°ΠΊ plt

img = cv2.imread ('messi5.jpg', 0)
Ρ€Π΅Π±Ρ€Π° = cv2.Canny (img, 100,200)

plt.subplot (121), plt.imshow (img, cmap = 'сСрый')
plt.title ('Π˜ΡΡ…ΠΎΠ΄Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅'), plt.xticks ([]), plt.yticks ([])
plt.subplot (122), plt.imshow (края, cmap = 'сСрый')
plt.title ('Edge Image'), plt.xticks ([]), plt.yticks ([])

plt.show ()
 

Π‘ΠΌ. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π½ΠΈΠΆΠ΅:

Contour Features — OpenCV-Python Tutorials 1 докумСнтация

ЦСль

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ ΡƒΠ·Π½Π°Π΅ΠΌ

  • Для опрСдСлСния Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… характСристик ΠΊΠΎΠ½Ρ‚ΡƒΡ€ΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ, ΠΏΠ΅Ρ€ΠΈΠΌΠ΅Ρ‚Ρ€, Ρ†Π΅Π½Ρ‚Ρ€ΠΎΠΈΠ΄, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‰Π°Ρ Ρ€Π°ΠΌΠΊΠ° ΠΈ Ρ‚. Π”.
  • Π’Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ мноТСство Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, связанных с ΠΊΠΎΠ½Ρ‚ΡƒΡ€Π°ΠΌΠΈ.

1. ΠœΠΎΠΌΠ΅Π½Ρ‚Ρ‹

ΠœΠΎΠΌΠ΅Π½Ρ‚Ρ‹ изобраТСния ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ характСристики, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Ρ†Π΅Π½Ρ‚Ρ€ масс ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ Ρ‚. Π”.ΠŸΠΎΡΠ΅Ρ‚ΠΈΡ‚Π΅ страницу Π²ΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ Π½Π° Image Moments

Ѐункция cv2.moments () Π΄Π°Π΅Ρ‚ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ всСх вычислСнных Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠ². Π‘ΠΌ. НиТС:

 ΠΈΠΌΠΏΠΎΡ€Ρ‚ cv2
ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ numpy ΠΊΠ°ΠΊ np

img = cv2.imread ('star.jpg', 0)
ret, thresh = cv2.threshold (img, 127,255,0)
ΠΊΠΎΠ½Ρ‚ΡƒΡ€Ρ‹, иСрархия = cv2.findContours (thresh, 1, 2)

cnt = contours [0]
M = cv2.moments (cnt)
ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ M
 

Π‘ этого ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·Π²Π»Π΅Ρ‡ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ, Ρ†Π΅Π½Ρ‚Ρ€ΠΎΠΈΠ΄ ΠΈ Ρ‚. Π”. Π¦Π΅Π½Ρ‚Ρ€ΠΎΠΈΠ΄ задаСтся ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡΠΌΠΈ, ΠΈ.Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

 cx = int (M ['m10'] / M ['m00'])
cy = int (M ['m01'] / M ['m00'])
 

2. ΠŸΠ»ΠΎΡ‰Π°Π΄ΡŒ ΠΊΠΎΠ½Ρ‚ΡƒΡ€Π°

ΠŸΠ»ΠΎΡ‰Π°Π΄ΡŒ ΠΊΠΎΠ½Ρ‚ΡƒΡ€Π° задаСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ cv2.contourArea () ΠΈΠ»ΠΈ ΠΌΠΎΠΌΠ΅Π½Ρ‚ΠΎΠΌ M [β€˜m00’] .

 ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ = cv2.contourArea (cnt)
 

3. ΠšΠΎΠ½Ρ‚ΡƒΡ€ ΠΏΠ΅Ρ€ΠΈΠΌΠ΅Ρ‚Ρ€Π°

Π’Π°ΠΊΠΆΠ΅ называСтся Π΄Π»ΠΈΠ½ΠΎΠΉ Π΄ΡƒΠ³ΠΈ. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ cv2.arcLength () . Π’Ρ‚ΠΎΡ€ΠΎΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, являСтся Π»ΠΈ Ρ„ΠΎΡ€ΠΌΠ° Π·Π°ΠΌΠΊΠ½ΡƒΡ‚Ρ‹ΠΌ ΠΊΠΎΠ½Ρ‚ΡƒΡ€ΠΎΠΌ (Ссли ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ True ) ΠΈΠ»ΠΈ просто ΠΊΡ€ΠΈΠ²ΠΎΠΉ.

 ΠΏΠ΅Ρ€ΠΈΠΌΠ΅Ρ‚Ρ€ = cv2.arcLength (cnt, True)
 

4. Аппроксимация ΠΊΠΎΠ½Ρ‚ΡƒΡ€Π°

Он ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ°Π΅Ρ‚ Ρ„ΠΎΡ€ΠΌΡƒ ΠΊΠΎΠ½Ρ‚ΡƒΡ€Π° ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅ с мСньшим количСством Π²Π΅Ρ€ΡˆΠΈΠ½ Π² зависимости ΠΎΡ‚ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π½Π°ΠΌΠΈ точности. Π­Ρ‚ΠΎ рСализация Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Дугласа-ΠŸΠ΅ΠΊΠ΅Ρ€Π°. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ страницу Π²ΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ для Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠΈ дСмонстрации.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ это, ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ Π½Π°ΠΉΡ‚ΠΈ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ, Π½ΠΎ ΠΈΠ·-Π·Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ с ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ Π½Π΅ ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚, Π° Β«ΠΏΠ»ΠΎΡ…ΡƒΡŽ Ρ„ΠΎΡ€ΠΌΡƒΒ» (ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ Π½ΠΈΠΆΠ΅).Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для аппроксимации Ρ„ΠΎΡ€ΠΌΡ‹. Π’ этом случаС Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ называСтся эпсилон , Ρ‡Ρ‚ΠΎ прСдставляСт собой максимальноС расстояниС ΠΎΡ‚ ΠΊΠΎΠ½Ρ‚ΡƒΡ€Π° Π΄ΠΎ аппроксимируСмого ΠΊΠΎΠ½Ρ‚ΡƒΡ€Π°. Π­Ρ‚ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ точности. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ ΠΌΡƒΠ΄Ρ€Ρ‹ΠΉ Π²Ρ‹Π±ΠΎΡ€ epsilon .

 epsilon = 0,1 * cv2.arcLength (cnt, True)
ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ = cv2.approxPolyDP (cnt, epsilon, True)
 

НиТС, Π½Π° Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ, зСлСная линия ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π°ΠΏΠΏΡ€ΠΎΠΊΡΠΈΠΌΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΊΡ€ΠΈΠ²ΡƒΡŽ для эпсилон = 10% Π΄Π»ΠΈΠ½Ρ‹ Π΄ΡƒΠ³ΠΈ .Π’Ρ€Π΅Ρ‚ΡŒΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Ρ‚ΠΎ ΠΆΠ΅ самоС для epsilon = 1% ΠΎΡ‚ Π½ΡƒΠ»Π΅Π²ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°

, автоматичСскоС ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ края Canny с Python ΠΈ OpenCV

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½Ρ‹ΠΉ доступ ΠΊ ΠΊΠΎΠ΄Ρƒ для этого руководства ΠΈ всСх Π΄Ρ€ΡƒΠ³ΠΈΡ… 400+ руководств ΠΏΠΎ PyImageSearch.

Π’Π½ΡƒΡ‚Ρ€ΠΈ Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ …

  • Доступ ΠΊ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ рСпозиториям ΠΊΠΎΠ΄Π° для всС 400 руководств Π² Π±Π»ΠΎΠ³Π΅ PyImageSearch
  • ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ настроСнныС Π±Π»ΠΎΠΊΠ½ΠΎΡ‚Ρ‹ Jupyter Π² Google Colab для всСх Π½ΠΎΠ²Ρ‹Ρ… руководств
  • Π£Π³Π»ΡƒΠ±Π»Π΅Π½Π½Ρ‹Π΅ Π²ΠΈΠ΄Π΅ΠΎΡƒΡ€ΠΎΠΊΠΈ для всСх Π½ΠΎΠ²Ρ‹Ρ… сообщСний Π² Π±Π»ΠΎΠ³Π°Ρ… — эти Π²ΠΈΠ΄Π΅ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ, ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈ совСты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ я Π½Π΅ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽ Π² тСкстовыС вСрсии своих руководств

Π’Π²Π΅Π΄ΠΈΡ‚Π΅ свой адрСс элСктронной ΠΏΠΎΡ‡Ρ‚Ρ‹ Π½ΠΈΠΆΠ΅ ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ доступ:

Π― использовал Ρ‡Π°ΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π²Π°ΡˆΠΈΡ… руководств для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ возникшСй Ρƒ мСня ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Python ΠΈ OpenCV.Боролся с этим Π΄Π²Π΅ Π½Π΅Π΄Π΅Π»ΠΈ, Π° ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… экспСртов Π½Π΅ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΠ»ΠΈ. ΠŸΡ€ΠΎΡ‡Ρ‚ΠΈΡ‚Π΅ Π²Π°ΡˆΡƒ ΡΡ‚Π°Ρ‚ΡŒΡŽ я нашСл …. Π˜ΡΠΏΡ€Π°Π²ΠΈΠ» Π·Π° Π΄Π²Π° часа. И это Ρ‚ΠΎΠΆΠ΅ Π±Ρ‹Π»ΠΎ критичСски Π²Π°ΠΆΠ½ΠΎ. Π’Π°ΡˆΠΈ Π²Π΅Ρ‰ΠΈ качСствСнныС!

Исмаил Вомас-Π‘Π΅Π½Π³Π΅ Π‘Ρ‚Π°Ρ€ΡˆΠΈΠΉ ΠΊΠΎΠ½ΡΡƒΠ»ΡŒΡ‚Π°Π½Ρ‚ ΠΏΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ΠΈΡŽ качСства ΠΈ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΠΎΡ€

PyImageSearch Plus — ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½Ρ‹ΠΉ доступ ΠΊ ΠΊΠΎΠ΄Ρƒ для этого руководства ΠΈ всСх Π΄Ρ€ΡƒΠ³ΠΈΡ… 400 руководств ΠΏΠΎ PyImageSearch!

Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ свой Ρ‚Π°Ρ€ΠΈΡ„Π½Ρ‹ΠΉ ΠΏΠ»Π°Π½ Π½ΠΈΠΆΠ΅ …

$ 4.95 / мСс

49,50 $ / год (экономия 15%)

  • Доступ ΠΊ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ рСпозиториям ΠΊΠΎΠ΄Π° для всС 400 руководств Π½Π° PyImageSearch
  • ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ ΠΊΠΎΠ΄ доступа для всСх Π½ΠΎΠ²Ρ‹Ρ… руководств , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ понСдСльник
  • ΠŸΡ€ΠΎΡΡ‚Π°Ρ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π² ΠΎΠ΄ΠΈΠ½ ΠΊΠ»ΠΈΠΊ ΠΊΠΎΠ΄Π°, ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ, Π½Π°Π±ΠΎΡ€ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ‚. Π”.

$ 14.95 / мСс

149,50 $ / год (экономия 15%)

  • ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ настроСнныС Π±Π»ΠΎΠΊΠ½ΠΎΡ‚Ρ‹ Jupyter Π² Google Colab для всСх Π½ΠΎΠ²Ρ‹Ρ… руководств
  • ЗапускайтС всС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ΄Π° Π² своСм Π²Π΅Π±-Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅. — Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Windows, macOS ΠΈ Linux.
  • Доступ ΠΊ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ рСпозиториям ΠΊΠΎΠ΄Π° для всС 400 руководств Π½Π° PyImageSearch
  • ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ ΠΊΠΎΠ΄ доступа для всСх Π½ΠΎΠ²Ρ‹Ρ… руководств , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ понСдСльник
  • ΠŸΡ€ΠΎΡΡ‚Π°Ρ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π² ΠΎΠ΄ΠΈΠ½ ΠΊΠ»ΠΈΠΊ ΠΊΠΎΠ΄Π°, ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ, Π½Π°Π±ΠΎΡ€ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ‚. Π”.

$ 74.95 / мСс

749,50 $ / год (экономия 15%)

  • Π’ΠΈΠ΄Π΅ΠΎΡƒΡ€ΠΎΠΊΠΈ для всСх Π½ΠΎΠ²Ρ‹Ρ… сообщСний Π² Π±Π»ΠΎΠ³Π΅
  • ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ настроСнныС Π±Π»ΠΎΠΊΠ½ΠΎΡ‚Ρ‹ Jupyter Π² Google Colab для всСх Π½ΠΎΠ²Ρ‹Ρ… руководств
  • ЗапускайтС всС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ΄Π° Π² своСм Π²Π΅Π±-Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅. — Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² Windows, macOS ΠΈ Linux.
  • Доступ ΠΊ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ рСпозиториям ΠΊΠΎΠ΄Π° для всС 400 руководств Π½Π° PyImageSearch
  • ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ ΠΊΠΎΠ΄ доступа для всСх Π½ΠΎΠ²Ρ‹Ρ… руководств , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ понСдСльник
  • ΠŸΡ€ΠΎΡΡ‚Π°Ρ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π² ΠΎΠ΄ΠΈΠ½ ΠΊΠ»ΠΈΠΊ ΠΊΠΎΠ΄Π°, ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ, Π½Π°Π±ΠΎΡ€ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ‚. Π”.
  • Доступ ΠΊ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ рСпозиториям ΠΊΠΎΠ΄Π° для всС 400+ руководств Π² Π±Π»ΠΎΠ³Π΅ PyImageSearch
  • ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ ΠΊΠΎΠ΄ доступа для всСх Π½ΠΎΠ²Ρ‹Ρ… руководств , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ понСдСльник Π² 10:00 EST
  • ΠŸΡ€ΠΎΡΡ‚Π°Ρ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π² ΠΎΠ΄ΠΈΠ½ ΠΊΠ»ΠΈΠΊ для исходного ΠΊΠΎΠ΄Π°, Π½Π°Π±ΠΎΡ€ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΈ Ρ‚. Π”.
  • ΠžΡ‚ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π² любой ΠΌΠΎΠΌΠ΅Π½Ρ‚
  • Π›Π΅Π³ΠΊΠΈΠΉ доступ ΠΊ ΠΊΠΎΠ΄Ρƒ, Π½Π°Π±ΠΎΡ€Π°ΠΌ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠ±ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΌ модСлям для всСх 400+ руководств Π² Π±Π»ΠΎΠ³Π΅ PyImageSearch
  • Π˜Π·ΡƒΡ‡ΠΈΡ‚Π΅ использованиС Jupyter Notebooks Π² Google Colab для всСх Π½ΠΎΠ²Ρ‹Ρ… руководств , ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π½Π° PyImageSearch
  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ настроСнных срСд Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π² Google Colab — большС Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π³ΠΎΠ»ΠΎΠ²Π½Ρ‹Ρ… Π±ΠΎΠ»Π΅ΠΉ ΠΈ Ρ‚Ρ€Π°Ρ‚Ρ‹ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° настройку срСды Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ
  • ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Ρ‹Π΅ Π²ΠΈΠ΄Π΅ΠΎΡƒΡ€ΠΎΠΊΠΈ ΠΈ ΠΏΠΎΡˆΠ°Π³ΠΎΠ²Ρ‹Π΅ инструкции для всСх Π½ΠΎΠ²Ρ‹Ρ… руководств ΠΈ руководств
  • Доступ ΠΊ ΡΠΊΡΠΊΠ»ΡŽΠ·ΠΈΠ²Π½Ρ‹Ρ… ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΌΠΎΠΈΡ… ΠΊΠ½ΠΈΠ³ ΠΈ курсов

Π― использовал Ρ‡Π°ΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π²Π°ΡˆΠΈΡ… руководств для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ возникшСй Ρƒ мСня ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Python ΠΈ OpenCV.Боролся с этим Π΄Π²Π΅ Π½Π΅Π΄Π΅Π»ΠΈ, Π° ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… экспСртов Π½Π΅ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΠ»ΠΈ. ΠŸΡ€ΠΎΡ‡Ρ‚ΠΈΡ‚Π΅ Π²Π°ΡˆΡƒ ΡΡ‚Π°Ρ‚ΡŒΡŽ я нашСл …. Π˜ΡΠΏΡ€Π°Π²ΠΈΠ» Π·Π° Π΄Π²Π° часа. И это Ρ‚ΠΎΠΆΠ΅ Π±Ρ‹Π»ΠΎ критичСски Π²Π°ΠΆΠ½ΠΎ. Π’Π°ΡˆΠΈ Π²Π΅Ρ‰ΠΈ качСствСнныС!

Исмаил Вомас-Π‘Π΅Π½Π³Π΅ Π‘Ρ‚Π°Ρ€ΡˆΠΈΠΉ ΠΊΠΎΠ½ΡΡƒΠ»ΡŒΡ‚Π°Π½Ρ‚ ΠΏΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ΠΈΡŽ качСства ΠΈ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΠΎΡ€

Руководств ΠΏΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Π½Π° Python

Canny Edge Detection and Gradients OpenCV Python Tutorial

Π”ΠΎΠ±Ρ€ΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°Ρ‚ΡŒ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΡƒΡ‡Π΅Π±Π½ΠΈΠΊ OpenCV с Python. Π’ этом ΡƒΡ€ΠΎΠΊΠ΅ ΠΌΡ‹ рассмотрим Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Ρ‹ изобраТСния ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΊΡ€Π°Π΅Π².Π“Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Ρ‹ изобраТСния ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для измСрСния Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½ΠΎΠΉ интСнсивности, Π° ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΊΡ€Π°Π΅Π² Π΄Π΅Π»Π°Π΅Ρ‚ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΎ, Π½Π° Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ…ΠΎΠΆΠ΅: ΠΎΠ½ΠΎ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ края! Π‘ΠΏΠΎΡ€ΠΈΠΌ, Ρ‚Ρ‹ Π½Π΅ ΠΎΠΆΠΈΠ΄Π°Π» этого.

Π‘Π½Π°Ρ‡Π°Π»Π° ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Π°:

 ΠΈΠΌΠΏΠΎΡ€Ρ‚ cv2
ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ numpy ΠΊΠ°ΠΊ np

cap = cv2.VideoCapture (1)

Π° (1):

    # Π’ΠΎΠ·ΡŒΠΌΠΈΡ‚Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠ°Π΄Ρ€
    _, frame = cap.read ()
    hsv = cv2.cvtColor (ΠΊΠ°Π΄Ρ€, cv2.COLOR_BGR2HSV)
    
    lower_red = np.array ([30,150,50])
    upper_red = np.array ([255,255,180])
    
    маска = cv2.inRange (hsv, lower_red, upper_red)
    res = cv2.bitwise_and (ΠΊΠ°Π΄Ρ€, ΠΊΠ°Π΄Ρ€, маска = маска)

    Laplacian = cv2.Laplacian (ΠΊΠ°Π΄Ρ€, cv2.CV_64F)
    sobelx = cv2.Sobel (Ρ€Π°ΠΌΠΊΠ°, cv2.CV_64F, 1,0, ksize = 5)
    sobely = cv2.Sobel (frame, cv2.CV_64F, 0,1, ksize = 5)

    cv2.imshow ('ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π»', Ρ€Π°ΠΌΠΊΠ°)
    cv2.imshow ('Маска', маска)
    cv2.imshow ('лапласианский', лапласианский)
    cv2.imshow ('sobelx', sobelx)
    cv2.imshow ('Ρ‚Ρ€Π΅Π·Π²ΠΎ', Ρ‚Ρ€Π΅Π·Π²ΠΎ)

    k = cv2.waitKey (5) & 0xFF
    Ссли k == 27:
        ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π°

cv2.destroyAllWindows ()
cap.release ()
 

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

Если Π²Π°ΠΌ интСрСсно, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ cv2.CV_64F , это Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…. ksize — Ρ€Π°Π·ΠΌΠ΅Ρ€ ядра. ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ 5, поэтому ΠΊΠΎΠ½ΡΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΏΠΎ Ρ€Π΅Π³ΠΈΠΎΠ½Π°ΠΌ 5×5.

Π₯отя ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эти Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Ρ‹ для прСобразования Π² чистыС края, ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ Canny Edge!

 ΠΈΠΌΠΏΠΎΡ€Ρ‚ cv2
ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ numpy ΠΊΠ°ΠΊ np

cap = cv2.VideoCapture (0)

Π° (1):

    _, frame = cap.read ()
    hsv = cv2.cvtColor (ΠΊΠ°Π΄Ρ€, cv2.COLOR_BGR2HSV)
    
    lower_red = np.array ([30,150,50])
    upper_red = np.array ([255,255,180])
    
    маска = cv2.inRange (hsv, lower_red, upper_red)
    res = cv2.bitwise_and (ΠΊΠ°Π΄Ρ€, ΠΊΠ°Π΄Ρ€, маска = маска)

    cv2.imshow ('ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π»', Ρ€Π°ΠΌΠΊΠ°)
    Edge = cv2.Canny (Ρ€Π°ΠΌΠΊΠ°, 100,200)
    cv2.imshow ('Π Π΅Π±Ρ€Π°', края)

    k = cv2.waitKey (5) & 0xFF
    Ссли k == 27:
        ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π°

cv2.destroyAllWindows ()
cap.release () 

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

ЧСртовски Ρ…ΠΎΡ€ΠΎΡˆΠΎ! Однако Π½Π΅ всС Ρ‚Π°ΠΊ идСально. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Ρ‚Π΅Π½ΠΈ Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΊΡ€Π°Π΅Π². Один ΠΈΠ· самых ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½Ρ‹Ρ… — Ρ‚Π΅Π½ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ испускаСт синяя ΡΠΎΠ±Π°Ρ‡ΡŒΡ ΠΊΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ руководствС ΠΏΠΎ OpenCV ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΈ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹Π΅ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… изобраТСниях.

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΡƒΡ‡Π΅Π±Π½ΠΈΠΊ: Π£Ρ‡Π΅Π±Π½ΠΈΠΊ ΠΏΠΎ ΡΠΎΠΏΠΎΡΡ‚Π°Π²Π»Π΅Π½ΠΈΡŽ шаблонов OpenCV Python

OpenCV: Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ рисования

imgRemote bool (React. & pt1, Point & pt2)

void

void cv :: arrowedLine (InputOutputArray img, Point pt1, Point pt2, const Scalar & color, int width = 1, int line_type = 8, int shift = 0, double tipLength = 0,1)
РисуСт сСгмСнт стрСлки, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΎΡ‚ ΠΏΠ΅Ρ€Π²ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ ΠΊΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ.ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ …
void cv :: circle (InputOutputArray img, Point center, int radius, const Scalar & color, int width = 1, int lineType = LINE_8, int shift = 0)
РисуСт ΠΊΡ€ΡƒΠ³. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ …
bool cv :: clipLine (Size imgSize, Point & pt1, Point & pt2)
ΠžΠ±Ρ€Π΅Π·Π°Π΅Ρ‚ линию ΠΏΠΎ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΡƒ изобраТСния.ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ …
bool cv :: clipLine (Size2l imgSize, Point2l & pt1, Point2l & pt2)
void cv :: drawContours (ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ InputOutputArray, ΠΊΠΎΠ½Ρ‚ΡƒΡ€Ρ‹ InputArrayOfArrays, int contourIdx, const Scalar & color, int width = 1, int lineType = 1, int lineType) , int maxLevel = INT_MAX, Point offset = Point ())
РисуСт ΠΊΠΎΠ½Ρ‚ΡƒΡ€Ρ‹ ΠΊΠΎΠ½Ρ‚ΡƒΡ€ΠΎΠ² ΠΈΠ»ΠΈ ΠΊΠΎΠ½Ρ‚ΡƒΡ€Ρ‹ с Π·Π°Π»ΠΈΠ²ΠΊΠΎΠΉ.ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ …
void cv :: drawMarker (Mat & img, Point position, const Scalar & color, int markerType = MARKER_CROSS, int markerSize = 20, int Ρ‚ΠΎΠ»Ρ‰ΠΈΠ½Π° = 1, int line_type = 8 )
РисуСт ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ Π² Π·Π°Ρ€Π°Π½Π΅Π΅ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ …
void cv :: ellipse (InputOutputArray img, Point center, Size Axes, double angle, double startAngle, double endAngle, const Scalar & color, int width = 1, int lineType = LINE_8, int shift = 0)
РисуСт ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ ΠΈΠ»ΠΈ Ρ‚ΠΎΠ»ΡΡ‚ΡƒΡŽ ΡΠ»Π»ΠΈΠΏΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π΄ΡƒΠ³Ρƒ ΠΈΠ»ΠΈ заполняСт сСктор эллипса.ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ …
void cv :: ellipse (InputOutputArray img, const RotatedRect & box, const Scalar & color, int Ρ‚ΠΎΠ»Ρ‰ΠΈΠ½Π° = 1, int lineType = LINE_338)
cv :: ellipse2Poly (Point center, Size Axes, int angle, int arcStart, int arcEnd, int delta, std :: vector & pts)
ΠŸΡ€ΠΈΠ±Π»ΠΈΠΆΠ°Π΅Ρ‚ ΡΠ»Π»ΠΈΠΏΡ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Π΄ΡƒΠ³Ρƒ ΠΊ ΠΏΠΎΠ»ΠΈΠ»ΠΈΠ½ΠΈΠΈ.

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *

2025 Β© ВсС ΠΏΡ€Π°Π²Π° Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Ρ‹. ΠšΠ°Ρ€Ρ‚Π° сайта