Opencv canny: OpenCV: Canny Edge Detector
ΠΠ΅ΡΠ΅ΠΊΡΠΎΡ Π³ΡΠ°Π½ΠΈΡ ΠΠ°Π½Π½ΠΈ / Π₯Π°Π±Ρ
ΠΠΎΠ±ΡΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΡΡΠΎΠΊ!
ΠΠΎΡΠ»Π΅Π΄Π½Π΅Π΅ Π²ΡΠ΅ΠΌΡ, Π½Π° Π₯Π°Π±ΡΠ΅ ΡΠ°ΡΡΠΎ ΡΡΠ°Π» ΡΠΏΠΎΠΌΠΈΠ½Π°ΡΡΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΡ Π³ΡΠ°Π½ΠΈΡ ΠΠ°Π½Π½ΠΈ (ΠΊΠΎΡΠΎΡΡΠΉ, ΠΊ ΠΌΠΎΠ΅ΠΌΡ ΡΠ΄ΠΈΠ²Π»Π΅Π½ΠΈΡ, ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΡΡΡ Π΄ΠΎΡΠ»ΠΎΠ²Π½ΠΎ: Ρ ΠΈΡΡΡΠΉ). ΠΡΠ°ΠΊ, Ρ ΡΠΎΠ·ΡΠ΅Π» ΠΏΠΎΠ΄Π΅Π»ΠΈΡΡΡΡ Ρ ΠΎΠ±ΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΡΡΡΡ ΡΠ²ΠΎΠΈΠΌ ΠΎΠΏΡΡΠΎΠΌ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠΎΠ³ΠΎ Π΄Π΅ΡΠ΅ΠΊΡΠΎΡΠ°.
Π ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ, Π² ΡΠ΅Π»ΡΡ
ΡΠ°ΠΌΠΎΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ, Ρ ΠΈΠ·ΡΡΠ°Ρ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ (Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΠΈ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ³ΠΎ Π·ΡΠ΅Π½ΠΈΡ). ΠΠ°Π½ΠΈΠΌΠ°ΡΡΡ ΡΡΠΈΠΌ Π½Π΅ΠΏΡΠΎΡΠ΅ΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ, Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ ΠΏΡΠΈΠ΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡ Π½Π°ΡΡΠ½ΠΎΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎΠΉ Π»ΠΈΡΠ΅ΡΠ°ΡΡΡΡ ΠΈΠ»ΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΡ
Π°Π»Π³ΠΎΡΠΈΡΠΌΠΈΡΠ΅ΡΠΊΠΈΡ
ΡΠ΅ΡΠ΅Π½ΠΈΠΉ.
Π§ΡΠΎΠ±Ρ Ρ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, ΡΠΏΡΠΎΡΡΠΈΡΡ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, Π° Ρ Π΄ΡΡΠ³ΠΎΠΉ β ΠΏΡΠΈΠ΄Π°ΡΡ ΠΏΠΎΠ²Π΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΡ Π½ΠΎΡΠΊΠΈ brainfuck-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Ρ ΠΏΠΎΠΊΠ°ΠΆΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Π² ΡΡΠ΅Π΄Π΅ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΠΎΠΉ Π°Π»Π³Π΅Π±ΡΡ Mathcad (Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΠΏΡΠΎΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½Ρ Π² Π²Π΅ΡΡΠΈΡΡ
13 ΠΈ 14), Ρ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡΠΈΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΡ
Π²ΡΡΡΠΎΠ΅Π½Π½ΡΡ
ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ². ΠΠΎΠ΄ΠΎΠ±Π½ΡΠΉ ΠΏΠΎΡ
ΠΎΠ΄, Π½Π° ΠΌΠΎΠΉ Π²Π·Π³Π»ΡΠ΄, ΡΠ»ΡΡΡΠ°Π΅Ρ Π²ΠΎΡΠΏΡΠΈΡΡΠΈΠ΅ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΠΈ, ΠΈ ΠΎΠ±Π»Π΅Π³ΡΠ°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΉ ΠΏΠ΅ΡΠ΅Π½ΠΎΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² Π² Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ΅Π΄Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ/ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ. Π‘Π»Π΅Π΄ΡΠ΅Ρ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΠ°ΠΏΡ ΡΠ°Π±ΠΎΡΡ Π΄Π΅ΡΠ΅ΠΊΡΠΎΡΠ° ΠΠ°Π½Π½ΠΈ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°ΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° Π‘ΠΎΠ±Π΅Π»Ρ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ SIMD-ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΡΠΈΡΡΠ΅ΠΌΡ ΠΊΠΎΠΌΠ°Π½Π΄ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°), Π½ΠΎ ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π·Π°ΠΌΠ΅Π½Ρ ΠΎΠ΄Π½ΠΈΡ
ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ² (ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²) Π΄ΡΡΠ³ΠΈΠΌΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ Π‘ΠΎΠ±Π΅Π»Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°ΠΌΠ΅Π½ΡΠ½ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ Π ΠΎΠ±Π΅ΡΡΡΠ° ΠΈΠ»ΠΈ ΠΡΡΠΈΡΡΠ°), ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²Π°ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΡΡΡΠΈΡΠΈΠ΅Π½ΡΠΎΠ², Π·Π°Π΄Π°ΡΡΠΈΡ
ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠ°Π±ΠΎΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΎΠ².
ΠΡΠΈΠ²Π΅Π΄ΡΠ½Π½Π°Ρ Π²Π΅ΡΡΠΈΡ ΡΠΎΠ·Π΄Π°Π½Π° ΠΈΠ· ΡΠΎΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΡΠΎΡΡΠΎΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π² ΡΡΠ΅Π΄Π΅ Mathcad, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π² ΡΡΠ΅ΡΠ± ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΠΎ ΡΠΊΠΎΡΠΎΡΡΠΈ ΠΈ ΠΊΠ°ΡΠ΅ΡΡΠ²Ρ Π΄Π΅ΡΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΈ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ ΠΊΠ°ΠΊ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ
ΡΡΠ°ΠΏΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄Π΅ΡΠ΅ΠΊΡΠΎΡΠ° ΠΠ°Π½Π½ΠΈ.
ΠΡΠ΄Π΅Π»Π΅Π½ΠΈΠ΅ Π³ΡΠ°Π½ΠΈΡ ΠΠ°Π½Π½ΠΈ
ΠΠ°Π½Π½ΠΈ (John F. Canny; 1953 Π³.) ΠΈΠ·ΡΡΠΈΠ» ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠΈΠ»ΡΡΡΠ°, ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎ ΠΊΡΠΈΡΠ΅ΡΠΈΡΠΌ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΡ, Π»ΠΎΠΊΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ
ΠΎΡΠΊΠ»ΠΈΠΊΠΎΠ² ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΡΠ°Ρ. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π΄Π΅ΡΠ΅ΠΊΡΠΎΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°ΡΡ Π½Π° Π³ΡΠ°Π½ΠΈΡΡ, Π½ΠΎ ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ Π»ΠΎΠΆΠ½ΡΠ΅, ΡΠΎΡΠ½ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ Π»ΠΈΠ½ΠΈΡ Π³ΡΠ°Π½ΠΈΡΡ (Π±Π΅Π· Π΅Ρ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ) ΠΈ ΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°ΡΡ Π½Π° ΠΊΠ°ΠΆΠ΄ΡΡ Π³ΡΠ°Π½ΠΈΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ Π²ΠΎΡΠΏΡΠΈΡΡΠΈΡ ΡΠΈΡΠΎΠΊΠΈΡ
ΠΏΠΎΠ»ΠΎΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΡΠΊΠΎΡΡΠΈ ΠΊΠ°ΠΊ ΡΠΎΠ²ΠΎΠΊΡΠΏΠ½ΠΎΡΡΠΈ Π³ΡΠ°Π½ΠΈΡ. ΠΠ°Π½Π½ΠΈ Π²Π²Π΅Π» ΠΏΠΎΠ½ΡΡΠΈΠ΅ Non-Maximum Suppression (ΠΏΠΎΠ΄Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π΅-ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌΠΎΠ²), ΠΊΠΎΡΠΎΡΠΎΠ΅ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΏΠΈΠΊΡΠ΅Π»ΡΠΌΠΈ Π³ΡΠ°Π½ΠΈΡ ΠΎΠ±ΡΡΠ²Π»ΡΡΡΡΡ ΡΠΎΡΠΊΠΈ, Π² ΠΊΠΎΡΠΎΡΡΡ
Π΄ΠΎΡΡΠΈΠ³Π°Π΅ΡΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ° Π² Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ Π²Π΅ΠΊΡΠΎΡΠ° Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ°.
Π₯ΠΎΡΡ Π΅Π³ΠΎ ΡΠ°Π±ΠΎΡΠ° Π±ΡΠ»Π° ΠΏΡΠΎΠ²Π΅Π΄Π΅Π½Π° Π½Π° Π·Π°ΡΠ΅ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΠΎΠ³ΠΎ Π·ΡΠ΅Π½ΠΈΡ (1986 Π³. ), Π΄Π΅ΡΠ΅ΠΊΡΠΎΡ Π³ΡΠ°Π½ΠΈΡ ΠΠ°Π½Π½ΠΈ Π΄ΠΎ ΡΠΈΡ
ΠΏΠΎΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π»ΡΡΡΠΈΡ
Π΄Π΅ΡΠ΅ΠΊΡΠΎΡΠΎΠ². ΠΡΠΎΠΌΠ΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΡΡ
ΡΠ°ΡΡΠ½ΡΡ
ΡΠ»ΡΡΠ°Π΅Π² ΡΡΡΠ΄Π½ΠΎ Π½Π°ΠΉΡΠΈ Π΄Π΅ΡΠ΅ΠΊΡΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π±Ρ ΡΠ°Π±ΠΎΡΠ°Π» ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ Π»ΡΡΡΠ΅, ΡΠ΅ΠΌ Π΄Π΅ΡΠ΅ΠΊΡΠΎΡ ΠΠ°Π½Π½ΠΈ.
ΠΠ°Π΄Π°ΡΠ°
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΠΈ ΡΠ°Π±ΠΎΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° Π±ΡΠ΄Π΅Ρ ΡΠ΅ΡΠ΅Π½Π° Π·Π°Π΄Π°ΡΠ° ΠΏΠΎ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΡ Π³ΡΠ°Π½ΠΈΡ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ.
ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΠΏΡΡΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΡΠ°Π³ΠΎΠ²:
- Π‘Π³Π»Π°ΠΆΠΈΠ²Π°Π½ΠΈΠ΅. Π Π°Π·ΠΌΡΡΠΈΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π΄Π»Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΡΡΠΌΠ°.
- ΠΠΎΠΈΡΠΊ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠΎΠ². ΠΡΠ°Π½ΠΈΡΡ ΠΎΡΠΌΠ΅ΡΠ°ΡΡΡΡ ΡΠ°ΠΌ, Π³Π΄Π΅ Π³ΡΠ°Π΄ΠΈΠ΅Π½Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΏΡΠΈΠΎΠ±ΡΠ΅ΡΠ°Π΅Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅.
- ΠΠΎΠ΄Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π΅-ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌΠΎΠ². Π’ΠΎΠ»ΡΠΊΠΎ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌΡ ΠΎΡΠΌΠ΅ΡΠ°ΡΡΡΡ ΠΊΠ°ΠΊ Π³ΡΠ°Π½ΠΈΡΡ.
- ΠΠ²ΠΎΠΉΠ½Π°Ρ ΠΏΠΎΡΠΎΠ³ΠΎΠ²Π°Ρ ΡΠΈΠ»ΡΡΡΠ°ΡΠΈΡ. ΠΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ Π³ΡΠ°Π½ΠΈΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ ΠΏΠΎΡΠΎΠ³Π°ΠΌΠΈ.
- Π’ΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠ° ΠΎΠ±Π»Π°ΡΡΠΈ Π½Π΅ΠΎΠ΄Π½ΠΎΠ·Π½Π°ΡΠ½ΠΎΡΡΠΈ. ΠΡΠΎΠ³ΠΎΠ²ΡΠ΅ Π³ΡΠ°Π½ΠΈΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ ΠΏΡΡΡΠΌ ΠΏΠΎΠ΄Π°Π²Π»Π΅Π½ΠΈΡ Π²ΡΠ΅Ρ ΠΊΡΠ°ΡΠ², Π½Π΅ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΌΠΈ (ΡΠΈΠ»ΡΠ½ΡΠΌΠΈ) Π³ΡΠ°Π½ΠΈΡΠ°ΠΌΠΈ.
ΠΠ΅ΡΠ΅Π΄ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ Π΄Π΅ΡΠ΅ΠΊΡΠΎΡΠ°, ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΠΌ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΎΡΡΠ΅Π½ΠΊΠΈ ΡΠ΅ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΡΠΌΠ΅Π½ΡΡΠΈΡΡ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π·Π°ΡΡΠ°ΡΡ. ΠΡΠΎΡ ΡΡΠ°ΠΏ Ρ
Π°ΡΠ°ΠΊΡΠ΅ΡΠ΅Π½ Π΄Π»Ρ ΠΌΠ½ΠΎΠ³ΠΈΡ
ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ.
ΠΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΠΎΡΡΠ΅Π½ΠΊΠΈ ΡΠ΅ΡΠΎΠ³ΠΎ
ΠΠ»Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π² ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π³ΡΠ°Π΄Π°ΡΠΈΡΡ
ΡΠ΅ΡΠΎΠ³ΠΎ, Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π΅Π³ΠΎ Β«ΡΡΠΊΠΎΡΡΡΒ»-ΡΠΎΡΡΠ°Π²Π»ΡΡΡΡΡ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΡΠ΄ΠΎΠ±Π½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΡΠ²Π΅ΡΠΎΠ²ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ 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]):
- Canny Edge Detection www.
cvmt.dk/education/teaching/f09/VGIS8/AIP
- ΠΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΡ. Edge detection en.wikipedia.org/wiki/Edge_detection
- ΠΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΡ. ΠΠΏΠ΅ΡΠ°ΡΠΎΡ Π‘ΠΎΠ±Π΅Π»Ρ ru.wikipedia.org/wiki/ΠΠΏΠ΅ΡΠ°ΡΠΎΡ_Π‘ΠΎΠ±Π΅Π»Ρ
- ΠΠ»Π³ΠΎΡΠΈΡΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΡΠ½ΠΎΠ²Ρ ΡΠ°ΡΡΡΠΎΠ²ΠΎΠΉ Π³ΡΠ°ΡΠΈΠΊΠΈ 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 cv2faceCascade = 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 cv2faceCascade = 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.
( 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()detectMultiScale
ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΌΠ΅ΡΠΈΡΡ ΡΡΠΎ Π½Π΅ Π²ΡΠ΅ Π³Π»Π°Π·Π° Π½Π°ΡΠ»ΠΈΡΡ. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ· Π·Π° ΠΎΡΠΊΠΎΠ² Π½Π° Π±Π°Π±ΡΡΠΊΠ΅ Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅ Π½Π°ΡΠ»ΠΈ. ΠΠΎ Π½Π΅ ΡΠΌΠΎΡΡΡ Π½Π° ΡΡΠΎ , Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΈ ΠΏΠΎ ΡΠ΅ΠΉ Π΄Π΅Π½Ρ ΡΡΠΈΡΠ°Π΅ΡΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠΎΡΠ½ΡΠΌ , ΠΎΡΠ΅Π½Ρ Π±ΡΡΡΡΡΠΌ ΠΈ ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΡΠΎΠΊΠΎΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅. Π― Π΄ΡΠΌΠ°Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΈΠ»ΡΠ½ΠΎ ΡΠ»ΡΡΡΠΈΡΡ Π΄Π°ΠΆΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ 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-ΠΉ ΠΊΠ°Π½Π°Π» (R β ΠΊΡΠ°ΡΠ½ΡΠΉ) Ρ 3-ΠΌ ΠΊΠ°Π½Π°Π»ΠΎΠΌ (B β ΡΠΈΠ½ΠΈΠΉ), ΠΈ ΡΠΎΠ³Π΄Π° ΠΊΡΠ°ΡΠ½ΡΠΉ ΡΠ²Π΅Ρ Π±ΡΠ΄Π΅Ρ
(0,0,255)
, Π° Π½Π΅(255,0,0)
. - ΠΠΎΠΌΠ΅Π½ΡΡΡ ΡΠ²Π΅ΡΠΎΠ²ΠΎΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ Π½Π° 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 ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°:
- ΠΡΡ ΠΎΠ΄Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅.
- ΠΠΎΡΡΠ΅ΠΆ ΠΈΠ· 2 ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΡ Π½Π΅ΡΡΡΠ½ΡΡ ΡΠΈΡΠ΅Π». Π§Π΅ΠΌ Π±ΠΎΠ»ΡΡΠ΅ ΡΠΈΡΠ»Π°, ΡΠ΅ΠΌ Π±ΠΎΠ»ΡΡΠ΅ ΡΠΈΠ»Π° ΡΠ³Π»Π°ΠΆΠΈΠ²Π°Π½ΠΈΡ.
- sigmaX ΠΈ sigmaY. ΠΡΠ»ΠΈ ΡΡΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΎΡΡΠ°Π²ΠΈΡΡ ΡΠ°Π²Π½ΡΠΌΠΈ 0, ΡΠΎ ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠ°ΡΡΡΠΈΡΠ°Π½ΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ.
ΠΠΎΠ»ΡΡΠ΅ ΠΏΡΠΎ ΡΠ°Π·ΠΌΡΡΠΈΠ΅ Π·Π΄Π΅ΡΡ.
Π ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠΎΠ²
Π ΠΈΡΡΠ΅ΠΌ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠΈΒ β ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΠ±Π²ΠΎΠ΄ΠΈΠΌ ΠΌΠΎΡΠ΄ΠΎΡΠΊΡ ΠΆΡΠ»ΡΡΠΌ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠΎΠΌ
import cv2 output = image.copy() cv2.rectangle(output, (2600, 800), (4100, 2400), (0, 255, 255), 10) viewImage(output, "ΠΠ±Π²ΠΎΠ΄ΠΈΠΌ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠΎΠΌ Π»ΠΈΡΠΎ ΠΏΡΡΠΈΠΊΠ°")
ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ 5 ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ²:
- Π‘Π°ΠΌΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅.
- ΠΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ° Π²Π΅ΡΡ
Π½Π΅Π³ΠΎ Π»Π΅Π²ΠΎΠ³ΠΎ ΡΠ³Π»Π°
(x1, y1)
. - ΠΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ° Π½ΠΈΠΆΠ½Π΅Π³ΠΎ ΠΏΡΠ°Π²ΠΎΠ³ΠΎ ΡΠ³Π»Π°
(x2, y2)
. - Π¦Π²Π΅Ρ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ° (GBR/RGB Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠΉ ΡΠ²Π΅ΡΠΎΠ²ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ).
- Π’ΠΎΠ»ΡΠΈΠ½Π° Π»ΠΈΠ½ΠΈΠΈ ΠΏΡΡΠΌΠΎΡΠ³ΠΎΠ»ΡΠ½ΠΈΠΊΠ°.
Π ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π»ΠΈΠ½ΠΈΠΉ
ΠΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Ρ pexelsΠΠ²ΡΡ ΠΏΡΡΠΈΠΊΠΎΠ² ΡΠ°Π·Π΄Π΅Π»ΠΈΠΌ Π»ΠΈΠ½ΠΈΠ΅ΠΉ
import cv2 output = image.copy() cv2.line(output, (60, 20), (400, 200), (0, 0, 255), 5) viewImage(output, "2 ΠΏΡΡΠΈΠΊΠ°, ΡΠ°Π·Π΄Π΅Π»ΡΠ½Π½ΡΠ΅ Π»ΠΈΠ½ΠΈΠ΅ΠΉ")
Π€ΡΠ½ΠΊΡΠΈΡ line
ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ 5 ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ²:
- Π‘Π°ΠΌΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΠΈΡΡΠ΅ΡΡΡ Π»ΠΈΠ½ΠΈΡ.
- ΠΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ° ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΠΎΡΠΊΠΈ
(x1, y1)
. - ΠΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ° Π²ΡΠΎΡΠΎΠΉ ΡΠΎΡΠΊΠΈ
(x2, y2)
. - Π¦Π²Π΅Ρ Π»ΠΈΠ½ΠΈΠΈ (GBR/RGB Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠΉ ΡΠ²Π΅ΡΠΎΠ²ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ).
- Π’ΠΎΠ»ΡΠΈΠ½Π° Π»ΠΈΠ½ΠΈΠΈ.
Π’Π΅ΠΊΡΡ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ
ΠΡΡ ΠΎΠ΄Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ Π½Π°Π΄ΠΏΠΈΡΠΈΠΠ°Π΄ΠΏΠΈΡΡ Π½Π° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ
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 ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ²:
- ΠΠ΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅.
- Π’Π΅ΠΊΡΡ Π΄Π»Ρ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ.
- ΠΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΠ° Π½ΠΈΠΆΠ½Π΅Π³ΠΎ Π»Π΅Π²ΠΎΠ³ΠΎ ΡΠ³Π»Π° Π½Π°ΡΠ°Π»Π° ΡΠ΅ΠΊΡΡΠ°
(x, y)
. - ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ ΡΡΠΈΡΡ.
- Π Π°Π·ΠΌΠ΅Ρ ΡΡΠΈΡΡΠ°.
- Π¦Π²Π΅Ρ ΡΠ΅ΠΊΡΡΠ° (GBR/RGB Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠΉ ΡΠ²Π΅ΡΠΎΠ²ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ).
- Π’ΠΎΠ»ΡΠΈΠ½Π° Π»ΠΈΠ½ΠΈΠΉ Π±ΡΠΊΠ².
Π Π°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π½ΠΈΠ΅ Π»ΠΈΡ
ΠΠ° ΡΡΠΎΡ ΡΠ°Π· Π±Π΅Π· ΠΏΡΡΠΈΠΊΠΎΠ².
Π€ΠΎΡΠΎ Ρ 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 ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°:
- ΠΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π² Π³ΡΠ°Π΄Π°ΡΠΈΠΈ ΡΠ΅ΡΠΎΠ³ΠΎ.
- ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ
scaleFactor
. ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ Π»ΠΈΡΠ° ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π΄ΡΡΠ³ΠΈΡ , ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π±Π»ΠΈΠΆΠ΅, ΡΠ΅ΠΌ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅. ΠΡΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΊΠΎΠΌΠΏΠ΅Π½ΡΠΈΡΡΠ΅Ρ ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Ρ. - ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠΊΠΎΠ»ΡΠ·ΡΡΠ΅Π΅ ΠΎΠΊΠ½ΠΎ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ². ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ
minNeighbors
ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π²ΠΎΠΊΡΡΠ³ Π»ΠΈΡΠ°. Π’ΠΎ Π΅ΡΡΡ ΡΠ΅ΠΌ Π±ΠΎΠ»ΡΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°, ΡΠ΅ΠΌ Π±ΠΎΠ»ΡΡΠ΅ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ, ΡΡΠΎΠ±Ρ ΠΎΠ½ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ» ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΊΠ°ΠΊ Π»ΠΈΡΠΎ. Π‘Π»ΠΈΡΠΊΠΎΠΌ ΠΌΠ°Π»Π΅Π½ΡΠΊΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ²Π΅Π»ΠΈΡΠΈΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π»ΠΎΠΆΠ½ΡΡ ΡΡΠ°Π±Π°ΡΡΠ²Π°Π½ΠΈΠΉ, Π° ΡΠ»ΠΈΡΠΊΠΎΠΌ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΡΠ΄Π΅Π»Π°Π΅Ρ Π°Π»Π³ΠΎΡΠΈΡΠΌ Π±ΠΎΠ»Π΅Π΅ ΡΡΠ΅Π±ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠΌ. 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()
ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡΡ ΠΊΠΎΠ½ΡΡΡΡ ΠΈΠ· ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΡΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΎΠ½ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ Π΄Π²ΠΎΠΈΡΠ½ΡΠΌΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ½Π°ΡΠ°Π»Π° ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΏΠΎΡΠΎΠ³ΠΎΠ²ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ, ΡΠ΅Π±ΡΠ° Π‘ΠΎΠ±Π΅Π»Ρ ΠΈ Ρ. Π.
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ ΠΊΠΎΠ΄ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ° ΠΊΠΎΠ½ΡΡΡΠΎΠ² β
|
ΠΡΡ ΠΎΠ΄:
ΠΡ Π²ΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ Π² ΡΡΠ½ΠΊΡΠΈΠΈ 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 — ΡΡΠΎ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΡ ΠΊΡΠΎΠΌΠΎΠΊ. ΠΠ½ Π±ΡΠ» ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½ ΠΠΆΠΎΠ½ΠΎΠΌ Π€. ΠΡΠ½Π½ΠΈ Π²
- . ΠΡΠΎ ΠΌΠ½ΠΎΠ³ΠΎΡΡΠ°ΠΏΠ½ΡΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ, ΠΈ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΡΠ°ΠΏ.
Π‘Π½ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΡΡΠΌΠ°
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠ΅ ΠΊΡΠ°Π΅Π² ΡΡΠ²ΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΊ ΡΡΠΌΡ Π² ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ, ΠΏΠ΅ΡΠ²ΡΠΌ ΡΠ°Π³ΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΡΠΌΠ° Π² ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π³Π°ΡΡΡΠΎΠ²ΡΠΊΠΎΠ³ΠΎ ΡΠΈΠ»ΡΡΡΠ° 5×5.{-1} \ bigg (\ frac {G_y} {G_x} \ bigg) \]
ΠΠ°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ° Π²ΡΠ΅Π³Π΄Π° ΠΏΠ΅ΡΠΏΠ΅Π½Π΄ΠΈΠΊΡΠ»ΡΡΠ½ΠΎ ΠΊΡΠ°ΡΠΌ. ΠΠ½ ΠΎΠΊΡΡΠ³Π»ΡΠ΅ΡΡΡ Π΄ΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΡΠ΅ΡΡΡΠ΅Ρ ΡΠ³Π»ΠΎΠ², ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΡ Π²Π΅ΡΡΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ΅, Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΈ Π΄Π²Π° Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΡΠ½ΡΡ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ.
ΠΠ΅ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΏΠΎΠ΄Π°Π²Π»Π΅Π½ΠΈΠ΅
ΠΠΎΡΠ»Π΅ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π²Π΅Π»ΠΈΡΠΈΠ½Ρ ΠΈ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π΄Π»Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ Π»ΡΠ±ΡΡ Π½Π΅ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΡΡ ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π½Π΅ ΡΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΊΡΠ°Ρ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΠΈΠΊΡΠ΅Π»Π΅ ΠΏΠΈΠΊΡΠ΅Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΡΡΡ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ ΠΎΠ½ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΌ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌΠΎΠΌ Π² Π΅Π³ΠΎ ΠΎΠΊΡΠ΅ΡΡΠ½ΠΎΡΡΠΈ Π² Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ°.ΠΡΠΎΠ²Π΅ΡΡΡΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½ΠΈΠΆΠ΅:
ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
Π’ΠΎΡΠΊΠ° Π Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π½Π° ΠΊΡΠ°Ρ (Π² Π²Π΅ΡΡΠΈΠΊΠ°Π»ΡΠ½ΠΎΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ). ΠΠ°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ° Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊ ΠΊΡΠ°Ρ. Π’ΠΎΡΠΊΠΈ B ΠΈ C Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡΡ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΠΎΡΠΊΠ° A ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅ΡΡΡ Ρ ΡΠΎΡΠΊΠ°ΠΌΠΈ B ΠΈ C, ΡΡΠΎΠ±Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ, ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ Π»ΠΈ ΠΎΠ½Π° Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ. ΠΡΠ»ΠΈ ΡΡΠΎ ΡΠ°ΠΊ, ΠΎΠ½ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΡΡ Π΄Π»Ρ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΡΡΠ°ΠΏΠ°, Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΠ½ ΠΏΠΎΠ΄Π°Π²Π»ΡΠ΅ΡΡΡ (ΠΎΠ±Π½ΡΠ»ΡΠ΅ΡΡΡ).
ΠΠΎΡΠΎΡΠ΅ Π³ΠΎΠ²ΠΎΡΡ, Π²Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΠ΅ Π΄Π²ΠΎΠΈΡΠ½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Ρ Β«ΡΠΎΠ½ΠΊΠΈΠΌΠΈ ΠΊΡΠ°ΡΠΌΠΈΒ».
ΠΠΎΡΠΎΠ³ΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π³ΠΈΡΡΠ΅ΡΠ΅Π·ΠΈΡΠ°
ΠΠ° ΡΡΠΎΠΌ ΡΡΠ°ΠΏΠ΅ ΡΠ΅ΡΠ°Π΅ΡΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠ· ΡΠ΅Π±Π΅Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ²Π»ΡΡΡΡΡ ΡΠ΅Π±ΡΠ°ΠΌΠΈ, Π° ΠΊΠ°ΠΊΠΈΠ΅ Π½Π΅Ρ.ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ½Ρ Π΄Π²Π° ΠΏΠΎΡΠΎΠ³ΠΎΠ²ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ: 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 ()
Π‘ΠΌ. ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π½ΠΈΠΆΠ΅:
ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅
ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠ΅ΡΡΡΡΡ
- ΠΠ΅ΡΠ΅ΠΊΡΠΎΡ ΠΊΡΠ°Ρ Canny Π² ΠΠΈΠΊΠΈΠΏΠ΅Π΄ΠΈΠΈ
- Π£ΡΠ΅Π±Π½ΠΎΠ΅ ΠΏΠΎΡΠΎΠ±ΠΈΠ΅ ΠΏΠΎ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΡ Canny Edge ΠΎΡ ΠΠΈΠ»Π»Π° ΠΡΠΈΠ½Π°, 2002.
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΡ
- ΠΠ°ΠΏΠΈΡΠΈΡΠ΅ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΡΡΠΎΠ±Ρ Π½Π°ΠΉΡΠΈ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠ΅ ΠΊΡΠ°Ρ Canny, ΠΏΠΎΡΠΎΠ³ΠΎΠ²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π΄Π²ΡΡ ΡΡΠ΅ΠΊΠ±Π°ΡΠΎΠ². Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ½ΡΡΡ Π²Π»ΠΈΡΠ½ΠΈΠ΅ ΠΏΠΎΡΠΎΠ³ΠΎΠ²ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ.
ΠΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠ΅ Canny Edge — OpenCV-Python Tutorials 1 Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ
Π¦Π΅Π»Ρ
Π ΡΡΠΎΠΉ Π³Π»Π°Π²Π΅ ΠΌΡ ΡΠ·Π½Π°Π΅ΠΌ ΠΎ
- ΠΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΡ ΠΊΡΠ°Ρ Canny
- ΡΡΠ½ΠΊΡΠΈΠΉ OpenCV Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ: cv2.ΠΠ°Π½Π½ΠΈ ()
Π’Π΅ΠΎΡΠΈΡ
Canny Edge Detection — ΡΡΠΎ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΡ ΠΊΡΠΎΠΌΠΎΠΊ. ΠΠ½ Π±ΡΠ» ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½ ΠΠΆΠΎΠ½ΠΎΠΌ Π€. ΠΡΠ½Π½ΠΈ Π² 1986 Π³ΠΎΠ΄Ρ. ΠΡΠΎ ΠΌΠ½ΠΎΠ³ΠΎΡΡΠ°ΠΏΠ½ΡΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ, ΠΈ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΡΡΠ°ΠΏ.
- Π‘Π½ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΡΡΠΌΠ°
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠ΅ ΠΊΡΠ°Π΅Π² ΡΡΠ²ΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΊ ΡΡΠΌΡ Π² ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ, ΠΏΠ΅ΡΠ²ΡΠΌ ΡΠ°Π³ΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΡΠΌΠ° Π² ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π³Π°ΡΡΡΠΎΠ²ΡΠΊΠΎΠ³ΠΎ ΡΠΈΠ»ΡΡΡΠ° 5×5. ΠΡ ΡΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ ΡΡΠΎ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ Π³Π»Π°Π²Π°Ρ .
- ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ° ΠΈΠ½ΡΠ΅Π½ΡΠΈΠ²Π½ΠΎΡΡΠΈ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ
Π‘Π³Π»Π°ΠΆΠ΅Π½Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π·Π°ΡΠ΅ΠΌ ΡΠΈΠ»ΡΡΡΡΠ΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ΄ΡΠ° Π‘ΠΎΠ±Π΅Π»Ρ ΠΊΠ°ΠΊ Π² Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½ΠΎΠΌ, ΡΠ°ΠΊ ΠΈ Π² Π²Π΅ΡΡΠΈΠΊΠ°Π»ΡΠ½ΠΎΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΠ΅ΡΠ²ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΡΡ Π² Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½ΠΎΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ () ΠΈ Π²Π΅ΡΡΠΈΠΊΠ°Π»ΡΠ½ΠΎΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ ().ΠΠ· ΡΡΠΈΡ Π΄Π²ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π½Π°ΠΉΡΠΈ Π³ΡΠ°Π΄ΠΈΠ΅Π½Ρ ΠΊΡΠ°Ρ ΠΈ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΈΠΊΡΠ΅Π»Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
ΠΠ°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ° Π²ΡΠ΅Π³Π΄Π° ΠΏΠ΅ΡΠΏΠ΅Π½Π΄ΠΈΠΊΡΠ»ΡΡΠ½ΠΎ ΠΊΡΠ°ΡΠΌ. ΠΠ½ ΠΎΠΊΡΡΠ³Π»ΡΠ΅ΡΡΡ Π΄ΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΡΠ΅ΡΡΡΠ΅Ρ ΡΠ³Π»ΠΎΠ², ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΠΈΡ Π²Π΅ΡΡΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ΅, Π³ΠΎΡΠΈΠ·ΠΎΠ½ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΠΈ Π΄Π²Π° Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΡΠ½ΡΡ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ.
- ΠΠ΅ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΏΠΎΠ΄Π°Π²Π»Π΅Π½ΠΈΠ΅
ΠΠΎΡΠ»Π΅ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π²Π΅Π»ΠΈΡΠΈΠ½Ρ ΠΈ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π΄Π»Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ Π»ΡΠ±ΡΡ Π½Π΅ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΡΡ ΠΏΠΈΠΊΡΠ΅Π»Π΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ Π½Π΅ ΡΠΎΡΡΠ°Π²Π»ΡΡΡ ΠΊΡΠ°Ρ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΠΈΠΊΡΠ΅Π»Π΅ ΠΏΠΈΠΊΡΠ΅Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΡΡΡ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ ΠΎΠ½ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΌ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌΠΎΠΌ Π² Π΅Π³ΠΎ ΠΎΠΊΡΠ΅ΡΡΠ½ΠΎΡΡΠΈ Π² Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ°.ΠΡΠΎΠ²Π΅ΡΡΡΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Π½ΠΈΠΆΠ΅:
Π’ΠΎΡΠΊΠ° Π Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π½Π° ΠΊΡΠ°Ρ (Π² Π²Π΅ΡΡΠΈΠΊΠ°Π»ΡΠ½ΠΎΠΌ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ). ΠΠ°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ° Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊ ΠΊΡΠ°Ρ. Π’ΠΎΡΠΊΠΈ B ΠΈ C Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡΡ Π³ΡΠ°Π΄ΠΈΠ΅Π½ΡΠ°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΠΎΡΠΊΠ° A ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅ΡΡΡ Ρ ΡΠΎΡΠΊΠ°ΠΌΠΈ B ΠΈ C, ΡΡΠΎΠ±Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ, ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ Π»ΠΈ ΠΎΠ½Π° Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ. ΠΡΠ»ΠΈ ΡΡΠΎ ΡΠ°ΠΊ, ΠΎΠ½ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΡΡ Π΄Π»Ρ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΡΡΠ°ΠΏΠ°, Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΠ½ ΠΏΠΎΠ΄Π°Π²Π»ΡΠ΅ΡΡΡ (ΠΎΠ±Π½ΡΠ»ΡΠ΅ΡΡΡ).
ΠΠΎΡΠΎΡΠ΅ Π³ΠΎΠ²ΠΎΡΡ, Π²Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΠ΅ Π΄Π²ΠΎΠΈΡΠ½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ Ρ Β«ΡΠΎΠ½ΠΊΠΈΠΌΠΈ ΠΊΡΠ°ΡΠΌΠΈΒ».
- ΠΠΎΡΠΎΠ³ΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π³ΠΈΡΡΠ΅ΡΠ΅Π·ΠΈΡΠ°
ΠΠ° ΡΡΠΎΠΌ ΡΡΠ°ΠΏΠ΅ ΡΠ΅ΡΠ°Π΅ΡΡΡ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΈΠ· ΡΠ΅Π±Π΅Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ²Π»ΡΡΡΡΡ ΡΠ΅Π±ΡΠ°ΠΌΠΈ, Π° ΠΊΠ°ΠΊΠΈΠ΅ Π½Π΅Ρ.ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ½Ρ Π΄Π²Π° ΠΏΠΎΡΠΎΠ³ΠΎΠ²ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ: 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
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 | |
ΠΡΠΈΠ±Π»ΠΈΠΆΠ°Π΅Ρ ΡΠ»Π»ΠΈΠΏΡΠΈΡΠ΅ΡΠΊΡΡ Π΄ΡΠ³Ρ ΠΊ ΠΏΠΎΠ»ΠΈΠ»ΠΈΠ½ΠΈΠΈ. |