ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° для ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° изобраТСния Π½Π° любой ΡƒΠ³ΠΎΠ»: Rotation Pilot — Rotation Pilot 1.00

ΠŸΡ€Π΅Ρ†ΠΈΠ·ΠΈΠΎΠ½Π½Ρ‹ΠΉ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ растрового изобраТСния Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΡƒΠ³ΠΎΠ» / Π₯Π°Π±Ρ€ΠŸΠΎΠ²ΠΎΡ€ΠΎΡ‚ растрового изобраТСния Π½Π° ΡƒΠ³Π»Ρ‹, ΠΊΡ€Π°Ρ‚Π½Ρ‹Π΅ 90Β°, ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ гСомСтричСского Ρ†Π΅Π½Ρ‚Ρ€Π° изобраТСния – Π·Π°Π΄Π°Ρ‡Π° Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Π°Ρ ΠΈ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ Π±Π΅Π· ΠΏΠΎΡ‚Π΅Ρ€ΠΈ качСства простым ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ пиксСля.

Для ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° растрового изобраТСния Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΡƒΠ³ΠΎΠ» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ быстрыС Π½ΠΎ Π½Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹, Π΄Π°ΡŽΡ‰ΠΈΠ΅ ΠΏΡ€ΠΈΠ΅ΠΌΠ»Π΅ΠΌΡƒΡŽ для практичСских Ρ†Π΅Π»Π΅ΠΉ Π°ΠΏΠΏΡ€ΠΎΠΊΡΠΈΠΌΠ°Ρ†ΠΈΡŽ с ΠΏΠΎΡ‚Π΅Ρ€Π΅ΠΉ качСства (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, этот).
Π”ΠΎΠ²ΠΎΠ»ΡŒΠ½ΠΎ Π΄Π°Π²Π½ΠΎ, ΠΈΠ· чисто спортивного интСрСса, мСня заинтСрСсовала Π·Π°Π΄Π°Ρ‡Π° максимально Ρ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° растрового изобраТСния Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΡƒΠ³ΠΎΠ». К соТалСнию, ΠΌΠ½Π΅ Π½ΠΈΠ³Π΄Π΅ Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π½Π°ΠΉΡ‚ΠΈ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ, поэтому ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ собствСнноручно. Π”Π°ΠΆΠ΅ Ссли Π² ΠΈΡ‚ΠΎΠ³Π΅ я Β«ΠΈΠ·ΠΎΠ±Ρ€Ρ‘Π» вСлосипСд», Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, ΠΊΠ°ΠΊ ΠΌΠ½Π΅ каТСтся, получился достаточно интСрСсным, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ.

НиТС ΠΌΡ‹ рассмотрим Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΏΡ€Π΅Ρ†ΠΈΠ·ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° растрового изобраТСния Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΡƒΠ³ΠΎΠ» ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ³ΠΎ Ρ†Π΅Π½Ρ‚Ρ€Π° с ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ потСрями.

Π’Ρ‹Ρ€Π°ΠΆΠ°ΡŽ Π±Π»Π°Π³ΠΎΠ΄Π°Ρ€Π½ΠΎΡΡ‚ΡŒ Π₯Π°Ρ€Ρ‡Π΅Π½ΠΊΠΎ Владиславу Π’Π»Π°Π΄ΠΈΠΌΠΈΡ€ΠΎΠ²ΠΈΡ‡Ρƒ Π·Π° ΠΎΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ ΠΏΠΎΠΌΠΎΡ‰ΡŒ.

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

Алгоритм


Из Π²Ρ‹ΡˆΠ΅ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠ³ΠΎ рисунка Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ послС ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° растрового изобраТСния, Ρ†Π²Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ пиксСля ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ изобраТСния опрСдСляСтся слоТСниСм Ρ†Π²Π΅Ρ‚ΠΎΠ² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… «осколков» Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… пиксСлСй исходного изобраТСния, ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ площадям ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… «осколков». ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² ΠΎΠ±Ρ‰Π΅ΠΌ Π²ΠΈΠ΄Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ нашСй Π·Π°Π΄Π°Ρ‡ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΈ всСх «осколков» для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ пиксСля исходного изобраТСния ΠΈ ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ Ρ†Π²Π΅Ρ‚ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ пиксСля ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ изобраТСния ΠΈΠ· Ρ†Π²Π΅Ρ‚ΠΎΠ² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… «осколков».

Π’ качСствС ΠΌΠΎΠ΄Π΅Π»ΠΈ пиксСля исходного изобраТСния ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ со стороной = 1, с Ρ‚Π°ΠΊΠΈΠΌΠΈ обозначСниями ΡƒΠ³Π»ΠΎΠ²:

i1 β€” самый ΠΏΡ€Π°Π²Ρ‹ΠΉ ΡƒΠ³ΠΎΠ»;
i2 β€” самый Π½ΠΈΠΆΠ½ΠΈΠΉ ΡƒΠ³ΠΎΠ»;
i3 β€” самый Π»Π΅Π²Ρ‹ΠΉ ΡƒΠ³ΠΎΠ»;
i4 β€” самый Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ ΡƒΠ³ΠΎΠ».

МодСлью ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ изобраТСния Π±ΡƒΠ΄Π΅Ρ‚ сСтка ΠΈΠ· ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΈ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… Π»ΠΈΠ½ΠΈΠΉ с расстояниСм ΠΌΠ΅ΠΆΠ΄Ρƒ линиями = 1.

ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Ρ†Π΅Π½Ρ‚Ρ€Π° ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° растрового изобраТСния, Π² Ρ‚Π°ΠΊΠΎΠΌ прСдставлСнии, ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½Ρ‹ ΠΏΠ°Ρ€ΠΎΠΉ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… вСщСствСнных чисСл. Π’ΠΎ Π΅ΡΡ‚ΡŒ Ρ†Π΅Π½Ρ‚Ρ€ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° Π² нашСй Π·Π°Π΄Π°Ρ‡Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π»Π΅ΠΆΠ°Ρ‚ΡŒ Π½Π΅ Π² гСомСтричСском Ρ†Π΅Π½Ρ‚Ρ€Π΅ пиксСля ΠΈ Π½Π΅ Π² Ρ‚ΠΎΡ‡ΠΊΠ΅ пСрСсСчСния Π»ΠΈΠ½ΠΈΠΉ сСтки, Π° Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠ΅ Π΄Π΅ΠΊΠ°Ρ€Ρ‚ΠΎΠ²Ρ‹Ρ… ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΡ€ΠΈ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π΅ растрового изобраТСния ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ пиксСля поворачиваСтся Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΡƒΠ³ΠΎΠ» (ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ†Π΅Π½Ρ‚Ρ€Π° этого пиксСля) ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ Π·Π°Π΄Π°Ρ‡Ρƒ для ΠΎΠ΄Π½ΠΎΠ³ΠΎ пиксСля, Π° ΠΏΠΎΡ‚ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ пиксСля исходного изобраТСния.

ΠŸΠΎΠ²ΠΎΡ€ΠΎΡ‚ растрового изобраТСния ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½Π° Π΄Π²Π΅ части:
1. ΠŸΠΎΠ²ΠΎΡ€ΠΎΡ‚ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ пиксСля исходного изобраТСния ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ†Π΅Π½Ρ‚Ρ€Π° этого ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π° Π½Π° Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ ΡƒΠ³ΠΎΠ».
2. Π‘ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Ρ†Π΅Π½Ρ‚Ρ€Π° ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π° пиксСля Π² соотвСтствии с ΡƒΠ³Π»ΠΎΠΌ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° изобраТСния ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ†Π΅Π½Ρ‚Ρ€Π° ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° изобраТСния Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ занял своё ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° сСткС ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ изобраТСния.
ΠŸΡ€ΠΈ этом сСтка ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ изобраТСния рассСкаСт ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ пиксСля исходного изобраТСния Π½Π° «осколки» Π² количСствС 4, 5 ΠΈΠ»ΠΈ 6 ΡˆΡ‚ΡƒΠΊ.

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


УсловныС обозначСния здСсь ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅:
β€” Ρ†ΠΈΡ„Ρ€Ρ‹ Π² ячСйках ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ Π½ΠΎΠΌΠ΅Ρ€Π° ΡƒΠ³Π»ΠΎΠ² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π° пиксСля, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΏΠ°Π»ΠΈ Π² Π΄Π°Π½Π½ΡƒΡŽ ячСйку сСтки ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ изобраТСния послС ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° изобраТСния;
β€” Π·Π΅Π»Ρ‘Π½Ρ‹ΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½Ρ‹ ячСйки, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΏΠ°Π»ΠΈ участки пиксСля ΠΈ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ оставили Ρ‚Π°ΠΌ ΠΏΠΎ «осколку»;
β€” ΠΆΡ‘Π»Ρ‚Ρ‹ΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠΌ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½Ρ‹ ячСйки, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅, Π² зависимости ΠΎΡ‚ условий,

ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ (Π° ΠΌΠΎΠ³ΡƒΡ‚ ΠΈ Π½Π΅ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ) «осколки» ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π° пиксСля, ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Π½Π΅ ΡƒΠ³Π»Π°ΠΌΠΈ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π°, Π° сторонами ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π°.

Для наглядности ΠΏΡ€ΠΈΠ²Π΅Π΄Ρƒ ΠΎΠ΄Π½Ρƒ ΠΈΠ· Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π²Π°Ρ€ΠΈΠ°Ρ†ΠΈΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° β„–3:

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

Π€ΠΎΡ€ΠΌΡƒΠ»Π° 1

Π­Ρ‚Π° Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для расчёта ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΏΠ»ΠΎΡ‰Π°Π΄ΠΈ «осколка», Π½ΠΎ Π΅Ρ‘ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для быстрого расчёта Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΠ»ΠΎΡ‰Π°Π΄Π΅ΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½Π°ΠΌ Π·Π°Π²Π΅Π΄ΠΎΠΌΠΎ извСстно, Ρ‡Ρ‚ΠΎ ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ всСго пиксСля = 1.
Π’ качСствС Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π²ΠΎ всСх Ρ„ΠΎΡ€ΠΌΡƒΠ»Π°Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ высоты, ΠΎΠΏΡƒΡ‰Π΅Π½Π½Ρ‹Π΅ ΠΈΠ· ΡƒΠ³Π»ΠΎΠ² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π° Π½Π° сСтку ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ изобраТСния, ΠΏΠΎ Ρ‚ΠΎΠΉ простой ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅, Ρ‡Ρ‚ΠΎ расчёт этих высот сводится ΠΊ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎΠΌΡƒ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΡŽ Π΄Ρ€ΠΎΠ±Π½ΠΎΠΉ части числового значСния ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΡƒΠ³Π»Π° ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π° пиксСля.
Π€ΠΎΡ€ΠΌΡƒΠ»Π° 2


Данная Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°Ρ… 1 ΠΈ 2.
Π€ΠΎΡ€ΠΌΡƒΠ»Π° 3

Часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠ°Ρ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° β€” ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° быстро вычисляСтся. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΡƒΠ³ΠΎΠ» ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ² для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ пиксСля β€” всС тригономСтричСскиС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·, ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ всСх пиксСлСй, ΠΈ Π΄Π°Π»Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эти значСния Π² Ρ†ΠΈΠΊΠ»Π΅ ΠΊΠ°ΠΊ константы.
Π€ΠΎΡ€ΠΌΡƒΠ»Π° 4

Π­Ρ‚Π° Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° вычисляСтся Π² Π΄Π²Π° этапа. Π‘Π½Π°Ρ‡Π°Π»Π° вычисляСтся Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² скобках. Если ΠΎΠ½ΠΎ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Ρ‚ΠΎ вычисляСтся ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ. Если Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅, Π·Π½Π°Ρ‡ΠΈΡ‚ ΠΎΡ‚ пиксСля Π½Π΅ отсСкаСтся «осколок», ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΡƒΠ³Π»ΠΎΠΌ сСтки ΠΈ стороной ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π° ΠΈ дальнСйшиС вычислСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ смысла.

Π‘ ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ всСго Π²Ρ‹ΡˆΠ΅ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ, Π² ΠΎΠ±Ρ‰Π΅ΠΌ Π²ΠΈΠ΄Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:
1. Π—Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ Π­Π’Πœ исходноС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.
2. РассчитываСм Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ изобраТСния Π² пиксСлях.

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

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°


На основании ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π±Ρ‹Π»Π° написана ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° для Windows. Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΊΠΎΠ΄Ρ‹ Π½Π° Object Pascal ΠΈ скомпилированный исполняСмый Ρ„Π°ΠΉΠ» ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ здСсь.

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.
По Π½Π°ΠΆΠ°Ρ‚ΠΈΡŽ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ Β«Open…Β» открываСтся Π΄ΠΈΠ°Π»ΠΎΠ³ Π²Ρ‹Π±ΠΎΡ€Π° BMP-Ρ„Π°ΠΉΠ»Π°. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π±ΠΈΡ‚ΠΌΠ°ΠΏΡ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ с 24-Π±ΠΈΡ‚Π½ΠΎΠΉ ΠΏΠ°Π»ΠΈΡ‚Ρ€ΠΎΠΉ. ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ отобраТаСтся Π² ΠΎΠΊΠ½Π΅. Π’ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ ΠΎΠΊΠ½Π° выводится ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ изобраТСния.

Π’ ΠΏΠΎΠ»Π΅ Β«AngleΒ» задаётся ΡƒΠ³ΠΎΠ» ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° Π² градусах – любоС ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ число.

Π’ качСствС дСсятичного раздСлитСля ΠΏΡ€ΠΈ Π²Π²ΠΎΠ΄Π΅ Π΄Ρ€ΠΎΠ±Π½Ρ‹Ρ… чисСл ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использована ΠΊΠ°ΠΊ Ρ‚ΠΎΡ‡ΠΊΠ°, Ρ‚Π°ΠΊ ΠΈ запятая.

Π Π°Π΄ΠΈΠΎΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌΠΈ Β«CWΒ» ΠΈ Β«CCWΒ» задаётся Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ вращСния: Β«ΠΏΠΎ часовой стрСлкС» ΠΈ Β«ΠΏΡ€ΠΎΡ‚ΠΈΠ² часовой стрСлки», соотвСтствСнно.

Π’ Π±Π»ΠΎΠΊΠ΅ Β«Background colorΒ» ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ Ρ†Π²Π΅Ρ‚ Ρ„ΠΎΠ½Π°, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π±ΡƒΠ΄ΡƒΡ‚ ΡΠΌΠ΅ΡˆΠΈΠ²Π°Ρ‚ΡŒΡΡ Π³Ρ€Π°Π½ΠΈΡ‡Π½Ρ‹Π΅ пиксСли изобраТСния. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ†Π²Π΅Ρ‚ Ρ„ΠΎΠ½Π° – Ρ‡Ρ‘Ρ€Π½Ρ‹ΠΉ.

Π’ полях Β«Centre XΒ» ΠΈ Β«Centre YΒ» Π·Π°Π΄Π°ΡŽΡ‚ΡΡ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Ρ†Π΅Π½Ρ‚Ρ€Π° ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π°. ΠŸΡ€ΠΈ этом слСдуСт ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½Π°Ρ‡Π°Π»ΠΎ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ находится Π² Π»Π΅Π²ΠΎΠΌ Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ ΡƒΠ³Π»Ρƒ изобраТСния ΠΈ Y увСличиваСтся Π²Π½ΠΈΠ·. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ†Π΅Π½Ρ‚Ρ€ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° устанавливаСтся Π² гСомСтричСском Ρ†Π΅Π½Ρ‚Ρ€Π΅ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ изобраТСния.

По Π½Π°ΠΆΠ°Ρ‚ΠΈΡŽ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ Β«RotateΒ» Π»ΠΈΠ±ΠΎ ΠΏΠΎ Π½Π°ΠΆΠ°Ρ‚ΠΈΡŽ Π½Π° ΠΊΠ»Π°Π²ΠΈΡˆΡƒ Enter ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ поворачиваСтся Π½Π° Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ ΡƒΠ³ΠΎΠ» ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ†Π΅Π½Ρ‚Ρ€Π° ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° ΠΈ отобраТаСтся Π² ΠΎΠΊΠ½Π΅. ΠŸΠΎΠ²ΠΎΡ€ΠΎΡ‚ изобраТСния Π½Π° ΡƒΠ³Π»Ρ‹, ΠΊΡ€Π°Ρ‚Π½Ρ‹Π΅ 90Β°, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΠΏΠΎ ΡƒΠΏΡ€ΠΎΡ‰Ρ‘Π½Π½ΠΎΠΉ схСмС, ΠΏΡƒΡ‚Ρ‘ΠΌ простого прСобразования ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ пиксСлСй исходного изобраТСния, ΠΏΡ€ΠΈ этом значСния Β«Centre XΒ» ΠΈ Β«Centre YΒ» ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ.

ВрСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π² сСкундах отобраТаСтся ΠΏΠΎΠ΄ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ Β«RotateΒ».

Π§Π΅Ρ€Π΅Π· ΠΊΠ½ΠΎΠΏΠΊΡƒ Β«Save…» ΠΏΠΎΠ²Ρ‘Ρ€Π½ΡƒΡ‚ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² BMP-Ρ„Π°ΠΉΠ».

Если ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ помСщаСтся Π² ΠΎΠΊΠ½Π΅ – ΠΎΠ½ΠΎ подгоняСтся ΠΊ Π³Ρ€Π°Π½ΠΈΡ†Π°ΠΌ ΠΎΠΊΠ½Π° API-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ StretchBlt – поэтому ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ΅ качСство Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΎΠΊ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ сохранённому BMP-Ρ„Π°ΠΉΠ»Ρƒ.
Для ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° изобраТСния Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΡƒΠ³ΠΎΠ» Π΅Π³ΠΎ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ β€” поворачиваСтся ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ· Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°, Π° Π½Π΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΡ‘Π½Π½ΠΎΠ΅ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π² ΠΎΠΊΠ½Π΅.

Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ с Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌΠΈ 1024 Ρ… 768 Π½Π° машинС с чСтырёхядСрным процСссором 2,67 Π“Π“Ρ† поворачиваСтся Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΡƒΠ³ΠΎΠ», Π² срСднСм, ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, Π·Π° 0,5 сСкунды. Π˜Π·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ с Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌΠΈ 4000 Ρ… 4000 β€” ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π·Π° 10 сСкунд. ВрСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° для Ρ€Π°Π·Π½Ρ‹Ρ… ΡƒΠ³Π»ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ Π² связи с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ Ρ€Π°Π·Π½Ρ‹Ρ… ΡƒΠ³Π»Π°Ρ… дробится Π½Π° Ρ€Π°Π·Π½ΠΎΠ΅ количСство «осколков», Π½Π° вычислСниС ΠΏΠ»ΠΎΡ‰Π°Π΄Π΅ΠΉ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… суммарно тратится, соотвСтствСнно, Ρ€Π°Π·Π½ΠΎΠ΅ врСмя.

ΠŸΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ массив, содСрТащий ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ†Π²Π΅Ρ‚Π΅ пиксСлСй ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΠΎΠ³ΠΎ изобраТСния Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ числа с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π½Π° Ρ‚ΠΈΠΏΠ΅ extended (10 Π±Π°ΠΉΡ‚), поэтому ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ (ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ 5000 Ρ… 5000 пиксСлСй) ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΎΡˆΠΈΠ±ΠΊΡƒ пСрСполнСния памяти. Π£Π»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠ² ΠΌΠ΅Π½Π΅Π΅ Ρ‚ΠΎΡ‡Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ сохраняя Ρ†Π΅Π»ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ числа сразу Π² ΠΈΡ‚ΠΎΠ³ΠΎΠ²Ρ‹ΠΉ Π±ΠΈΡ‚ΠΌΠ°ΠΏ, оставляя Π²ΠΎ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΌ массивС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄Ρ€ΠΎΠ±Π½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ.

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


ΠŸΡ€ΠΎΠ²Π΅Π΄Ρ‘ΠΌ ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π°Π½Π°Π»ΠΈΠ· Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€Π΅Ρ†ΠΈΠ·ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Photoshop.
ВСст 1

Для ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ тСста я взял ΠΎΡ‡Π΅Π½ΡŒ простоС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ β€” Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΡƒΡŽ линию Ρ‡Ρ‘Ρ€Π½ΠΎΠ³ΠΎ Ρ†Π²Π΅Ρ‚Π° Ρ‚ΠΎΠ»Ρ‰ΠΈΠ½ΠΎΠΉ 1 пиксСль ΠΈ Π΄Π»ΠΈΠ½ΠΎΠΉ 10 пиксСлСй, ΡΠΌΠ΅Ρ‰Ρ‘Π½Π½ΡƒΡŽ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ†Π΅Π½Ρ‚Ρ€Π° Π±Π΅Π»ΠΎΠ³ΠΎ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π° с Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌΠΈ 100 Ρ… 100 пиксСлСй:

ПослС Ρ‡Π΅Π³ΠΎ я ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΠ» Π΄Π°Π½Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚ΠΎΡ‡ΠΊΠΈ с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ (0, 0) Π½Π° 3Β° ΠΏΠΎ часовой стрСлкС. Π’ΠΎΡ‡ΠΊΠ° (0, 0) Π²Ρ‹Π±Ρ€Π°Π½Π° ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ, судя ΠΏΠΎ ΠΌΠΎΠΈΠΌ экспСримСнтам, Photoshop ΠΏΠΎΠ²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ этой Ρ‚ΠΎΡ‡ΠΊΠΈ. Π’ΠΎΡ‚ ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ (ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΎ Π² 24 Ρ€Π°Π·Π°):

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

Photoshop 7.0.1

Photoshop CS6 (64 Bit)
Алгоритм Photoshop Π΄Π°Ρ‘Ρ‚ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΡΡ‚Π½ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ, ΠΏΡ€Π΅Ρ†ΠΈΠ·ΠΈΠΎΠ½Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ нСсколько Β«Ρ€Π°Π·ΠΌΡ‹Π²Π°Π΅Ρ‚Β» ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. Но Π² Ρ†Π΅Π»ΠΎΠΌ, ΠΏΡ€ΠΈ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΎΡ†Π΅Π½ΠΊΠ΅, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ получаСтся ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ. ΠŸΠΎΠΏΡƒΡ‚Π½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π°, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π² Photoshop, Π½Π΅ ΠΏΡ€Π΅Ρ‚Π΅Ρ€ΠΏΠ΅Π» Π·Π° 10 Π»Π΅Ρ‚ сущСствСнных ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.

ВСст 2

Для Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ тСста я Π²Ρ‹Π±Ρ€Π°Π» Ρ‚ΡŽΠ»ΡŒΠΏΠ°Π½ ΠΈΠ· стандартного дистрибутива Win7:

ПослС ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° Π΄Π°Π½Π½ΠΎΠ³ΠΎ изобраТСния Π½Π° 5Β° ΠΏΠΎ часовой стрСлкС ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ гСомСтричСского Ρ†Π΅Π½Ρ‚Ρ€Π° я суммировал Ρ†Π²Π΅Ρ‚ всСх пиксСлСй Π² Ρ€Π°Π·Ρ€Π΅Π·Π΅ ΠΊΠ°Π½Π°Π»ΠΎΠ² RGB. Π’ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ для ΠΏΡ€Π΅Ρ†ΠΈΠ·ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Photoshop:

ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π»
ΠŸΡ€Π΅Ρ†ΠΈΠ·ΠΈΠΎΠ½Π½Ρ‹ΠΉ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚
(Π΄ΠΎ округлСния)
ΠŸΡ€Π΅Ρ†ΠΈΠ·ΠΈΠΎΠ½Π½Ρ‹ΠΉ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚
(послС округлСния)
Photoshop CS6
R = 33381406
G = 27933900
B = 11239213
R = 33381406,0000004 (~0)
G = 27933899,9999997 (~0)
B = 11239212,9999999 (~0)
R = 33382786 (1380)
G = 27933920 (20)
B = 11238086 (-1127)
R = 33387726 (6320)
G = 27950823 (16923)
B = 11245937 (6724)
Числа Π² скобках ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠ΅ ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΠΎΠ³ΠΎ показатСля ΠΎΡ‚ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π°.
Π¦Π²Π΅Ρ‚ изобраТСния послС ΠΏΡ€Π΅Ρ†ΠΈΠ·ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° ΠΈ Π΄ΠΎ округлСния практичСски Π½Π΅ помСнялся β€” Ρ‡Π΅Π³ΠΎ ΠΈ слСдовало ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ.
Π‘Π°ΠΌΠΎΠ΅ большоС ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅, Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ случаС, ΠΌΡ‹ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅ΠΌ ΠΏΠΎ ΠΊΠ°Π½Π°Π»Ρƒ G для Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Photoshop. Π’ ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π½ΠΎΠΌ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ это ΠΎΡ‚ΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅ составляСт всСго 0,06%, поэтому Β«Π½Π° Π³Π»Π°Π·Β» ΠΎΠ½ΠΎ Π½Π΅ Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ, Π½ΠΎ ΠΈΠ· сообраТСний ΠΏΠ΅Ρ€Ρ„Π΅ΠΊΡ†ΠΈΠΎΠ½ΠΈΠ·ΠΌΠ° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρƒ Photoshop получаСтся Ρ…ΡƒΠΆΠ΅, Ρ‡Π΅ΠΌ Ρƒ ΠΏΡ€Π΅Ρ†ΠΈΠ·ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°.
Π’Π°ΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠΊΡ€ΡƒΠ³Π»Π΅Π½ΠΈΠ΅ Ρ†Π²Π΅Ρ‚Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ пиксСля Π² ΠΏΡ€Π΅Ρ†ΠΈΠ·ΠΈΠΎΠ½Π½ΠΎΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅ Π΄ΠΎ цСлочислСнного значСния, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ для Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° BMP, Π½Π΅ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠΌΠΎ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°Π΅Ρ‚ Ρ‡Π°ΡΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ†Π²Π΅Ρ‚Π΅.

Для Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ сравнСния Π΄Π²ΡƒΡ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ΠΏΡ€ΠΈΠ²Π΅Π΄Ρƒ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ изобраТСния,

ΠΏΠΎΠ²Ρ‘Ρ€Π½ΡƒΡ‚ΠΎΠ³ΠΎ Π½Π° 5Β° ΠΏΠΎ часовой стрСлкС, соотвСтствСнно, Photoshop’ΠΎΠΌ:

ΠΈ ΠΏΡ€Π΅Ρ†ΠΈΠ·ΠΈΠΎΠ½Π½Ρ‹ΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ:

Π‘Ρ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π°Π½Π°Π»ΠΈΠ· ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Photoshop Π»ΡƒΡ‡ΡˆΠ΅ сохраняСт контрастныС элСмСнты изобраТСния, Π½ΠΎ ΠΏΡ€ΠΈ этом создаёт Β«ΠΎΡ€Π΅ΠΎΠ»Ρ‹Β» искаТённого Ρ†Π²Π΅Ρ‚Π°. ΠŸΡ€Π΅Ρ†ΠΈΠ·ΠΈΠΎΠ½Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π½Π΅ искаТаСт Ρ†Π²Π΅Ρ‚ Π½ΠΎ ΠΏΡ€ΠΈ этом нСсколько Β«Ρ€Π°Π·ΠΌΡ‹Π²Π°Π΅Ρ‚Β» ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅.

Π’Ρ‹Π²ΠΎΠ΄Ρ‹


1. ΠŸΡ€Π΅Ρ†ΠΈΠ·ΠΈΠΎΠ½Π½Ρ‹ΠΉ ΠΈ ΠΏΡ€ΠΈ этом ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ быстрый ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ растрового изобраТСния Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΡƒΠ³ΠΎΠ» β€” Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½. Для мСня остаётся Π·Π°Π³Π°Π΄ΠΊΠΎΠΉ вопрос, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π² ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… графичСских Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°Ρ… Π½Π΅Ρ‚ ΠΎΠΏΡ†ΠΈΠΈ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡ€Π΅Π΄Π΅Π»ΡŒΠ½ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ Π·Π° Ρ‡ΡƒΡ‚ΡŒ большСС врСмя.

2. НСсмотря Π½Π° ΠΏΡ€Π΅Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ рассмотрСнного Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°, ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ изобраТСния, Ρ‚.Π΅. ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ Π½Π° ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½Ρ‹ΠΉ ΡƒΠ³ΠΎΠ» Π±Π΅Π· ΠΏΠΎΡ‚Π΅Ρ€ΠΈ качСства β€” Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠΊΡ€ΡƒΠ³Π»Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ значСния Ρ†Π²Π΅Ρ‚Π° (Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ числа с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ запятой) Π½Π΅ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠΌΠΎ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°Π΅Ρ‚ Ρ‡Π°ΡΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ†Π²Π΅Ρ‚Π΅.

3. Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ восприятия контрастных Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ Π»ΡƒΡ‡ΡˆΠΈΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π΄Π°Ρ‘Ρ‚ ΠΏΠΎΠ΄ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Photoshop. ΠŸΡ€Π΅Ρ†ΠΈΠ·ΠΈΠΎΠ½Π½Ρ‹ΠΉ ΠΆΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΈΠΌΠ΅Π΅Ρ‚ смысл ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π² Ρ‚Π΅Ρ… случаях, ΠΊΠΎΠ³Π΄Π° Π²Π°ΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ максимум ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ Ρ†Π²Π΅Ρ‚Π΅ изобраТСния.

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

Как ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚ΡŒ снятоС Π²ΠΈΠ΄Π΅ΠΎ Π½Π° любой ΡƒΠ³ΠΎΠ» ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π½Π° ПК

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· нас хотя Π±Ρ‹ Ρ€Π°Π· Π² ΠΆΠΈΠ·Π½ΠΈ снимал Π²ΠΈΠ΄Π΅ΠΎ, ΠΏΠΎ ошибкС ΠΏΠ΅Ρ€Π΅Π²Π΅Ρ€Π½ΡƒΠ² ΠΊΠ°ΠΌΠ΅Ρ€Ρƒ. Π’Π°ΠΊΠΎΠ΅ происходит ΠΈ с Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π°ΠΌΠΈ смартфонов, ΠΈ с Ρ‚Π΅ΠΌΠΈ, ΠΊΡ‚ΠΎ снимаСт Π½Π° Ρ„ΠΎΡ‚ΠΎΠ°ΠΏΠΏΠ°Ρ€Π°Ρ‚. И Ссли это ΡΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ с Π²Π°ΠΌΠΈ, Ρ‚ΠΎ Π·Π½Π°ΠΉΡ‚Π΅, Ρ‡Ρ‚ΠΎ ситуация ΠΏΠΎΠΏΡ€Π°Π²ΠΈΠΌΠ°. Π’Π°ΠΌ всСго лишь Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ снятоС Π²ΠΈΠ΄Π΅ΠΎ ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π²ΠΈΠ΄Π΅ΠΎΡ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€.

Π’ инструкции Π½ΠΈΠΆΠ΅ ΠΌΡ‹ расскаТСм, ΠΊΠ°ΠΊ быстро ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π²ΠΈΠ΄Π΅ΠΎ Π½Π° 90 градусов ΠΈΠ»ΠΈ Π½Π° любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΡƒΠ³ΠΎΠ» – Π² зависимости ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹ Π΄Π΅Ρ€ΠΆΠ°Π»ΠΈ ΠΊΠ°ΠΌΠ΅Ρ€Ρƒ Π²ΠΎ врСмя ΡΡŠΡ‘ΠΌΠΊΠΈ. ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ эффСкт вращСния, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²ΠΈΠ΄Π΅ΠΎ ΠΏΠ»Π°Π²Π½ΠΎ ΠΏΠΎΠ²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π»ΠΎΡΡŒ ΠΏΠΎ часовой ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΡ‚ΠΈΠ² часовой стрСлки Π²ΠΎ врСмя проигрывания.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ всё описанноС Π² инструкции, Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ ΠΈ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π²ΠΈΠ΄Π΅ΠΎΡ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ VSDC Π½Π° свой ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€. Π­Ρ‚ΠΎ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ бСсплатная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° для Windows ПК, ΠΈ Ссли Π²Ρ‹ Π½Π΅Ρ€Π΅Π΄ΠΊΠΎ Π½ΡƒΠΆΠ΄Π°Π΅Ρ‚Π΅ΡΡŒ Π² инструмСнтС для ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²ΠΊΠΈ отснятых ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ², VSDC пригодится Π²Π°ΠΌ Π΅Ρ‰Ρ‘ Π½Π΅ Ρ€Π°Π·.

CΠΊΠ°Ρ‡Π°Ρ‚ΡŒ Π²ΠΈΠ΄Π΅ΠΎΡ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ VSDC

Как ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π²ΠΈΠ΄Π΅ΠΎ Π½Π° 90 градусов ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π½Π° ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅

Π˜Ρ‚Π°ΠΊ, Π² VSDC доступны 2 ΠΎΠΏΡ†ΠΈΠΈ: стандартный ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ Π²ΠΈΠ΄Π΅ΠΎ Π½Π° 90 градусов ΠΏΠΎ часовой ΠΈ ΠΏΡ€ΠΎΡ‚ΠΈΠ² часовой стрСлки, Π° Ρ‚Π°ΠΊΠΆΠ΅ «эффСкт вращСния». Начнём с ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ.

ЗапуститС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ Π½ΡƒΠΆΠ½Ρ‹ΠΉ Π²ΠΈΠ΄Π΅ΠΎΡ„Π°ΠΉΠ». Π’ Π²Π΅Ρ€Ρ…Π½Π΅ΠΌ мСню Β«Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΈ Ρ€Π°Π·Π±ΠΈΠ²ΠΊΠ°Β» Π²Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Π΄Π²Π΅ ΠΊΠ½ΠΎΠΏΠΊΠΈ для ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° Π²ΠΈΠ΄Π΅ΠΎ Π½Π° 90 градусов. Π©Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΠΎ Ρ‚ΠΎΠΉ, Ρ‡Ρ‚ΠΎ соотвСтствуСт Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΌΡƒ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ, ΠΈ Π²Ρ‹ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΆΠ΅Π»Π°Π΅ΠΌΡ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚.

Как ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π²ΠΈΠ΄Π΅ΠΎ Π½Π° Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ ΡƒΠ³ΠΎΠ»

Иногда Π²Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚ΡŒ снятоС Π²ΠΈΠ΄Π΅ΠΎ Π½Π° ΡƒΠ³ΠΎΠ», ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΎΡ‚ 90 ΠΈ 180 градусов. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½ΠΎ ΠΊΠ°ΠΊ нСбольшим Π½Π°ΠΊΠ»ΠΎΠ½ΠΎΠΌ ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹ Π²ΠΎ врСмя ΡΡŠΡ‘ΠΌΠΊΠΈ, Ρ‚Π°ΠΊ ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ эффСкт Π²ΠΈΠ΄Π΅ΠΎ, снятого ΠΏΠΎΠ΄ Π½Π°ΠΊΠ»ΠΎΠ½ΠΎΠΌ. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это Π² VSDC:

  1. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π²ΠΈΠ΄Π΅ΠΎ Π½Π° сцСну ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹ΠΌ способом.
  2. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π²ΠΎ Π²ΠΊΠ»Π°Π΄ΠΊΡƒ ВидСоэффСкты —> Врансформация —> Π’Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅.
  3. Как Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ Π²Ρ‹Π±Π΅Ρ€Π΅Ρ‚Π΅ этот эффСкт, Π½Π° экранС появится Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰Π΅Π΅ ΠΎΠΊΠ½ΠΎ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. НаТмитС ОК.
  4. На Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ шкалС Π²Ρ‹ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚Π΅ Π½ΠΎΠ²ΡƒΡŽ Π²ΠΊΠ»Π°Π΄ΠΊΡƒ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ‰Ρ‘Π½ слой ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ Β«Π’Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ 1Β».
  5. ΠŸΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΊΠΈ Ρ‰Ρ‘Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΠΎ Π½Π΅ΠΌΡƒ ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Бвойства.
  6. Π’ ОкнС свойств, ΠΏΡ€ΠΎΠΊΡ€ΡƒΡ‚ΠΈΡ‚Π΅ Π±Π΅Π³ΡƒΠ½ΠΎΠΊ Π²Π½ΠΈΠ· Π΄ΠΎ поля Β«Π£Π³ΠΎΠ» ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π°Β» ΠΈ Π·Π°Π΄Π°ΠΉΡ‚Π΅ ΠΆΠ΅Π»Π°Π΅ΠΌΡ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, ΠΊΠ°ΠΊ это ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½Π° ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΈ Π½ΠΈΠΆΠ΅.

Как ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΊΠ°Π΄Ρ€ Π² Π²ΠΈΠ΄Π΅ΠΎ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π²ΠΎ врСмя проигрывания

Если ваша Π·Π°Π΄Π°Ρ‡Π° – ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π²ΠΈΠ΄Π΅ΠΎ Π½Π° любой ΡƒΠ³ΠΎΠ» Π²ΠΎ врСмя проигрывания Π² Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, Π²Π°ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ стоит ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ описанный Π²Ρ‹ΡˆΠ΅ эффСкт вращСния:

  1. РазмСститС курсор Π½Π° Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ шкалС нСпосрСдствСнно Π² Ρ‚ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹ ΠΏΠ»Π°Π½ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ эффСкт вращСния.
  2. ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π²ΠΎ Π²ΠΊΠ»Π°Π΄ΠΊΡƒ ВидСоэффСкты —> Врансформация —> Π’Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅.
  3. Π’ этот Ρ€Π°Π·, ΠΎΠ΄Π½Π°ΠΊΠΎ, ΠΊΠΎΠ³Π΄Π° Π½Π° экранС появится Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‰Π΅Π΅ ΠΎΠΊΠ½ΠΎ с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Β«ΠžΡ‚ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ курсора».
  4. Π—Π°Ρ‚Π΅ΠΌ ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Окно свойств ΠΈ настройтС ΡƒΠ³ΠΎΠ» ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π°.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²ΠΈΠ΄Π΅ΠΎ автоматичСски повСрнётся Π²ΠΎ врСмя проигрывания Π² ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Π²Π°ΠΌΠΈ ΠΌΠΎΠΌΠ΅Π½Ρ‚. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ всё выглядит Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π²Ρ‹ Π·Π°Π΄ΡƒΠΌΡ‹Π²Π°Π»ΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΡ€Π°ΡΠ½ΡƒΡŽ ΠΊΠ½ΠΎΠΏΠΊΡƒ прСдпросмотра, Ρ€Π°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΡƒΡŽ Π½Π°Π΄ шкалой Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Как ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ услоТнённый эффСкт вращСния ΠΊ Π²ΠΈΠ΄Π΅ΠΎ

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

Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ, снова ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚Π΅ видСоэффСкт Врансформация —> Π’Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΈ ΠΎΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Окно свойств. Π’ ОкнС свойств Ρ‰Ρ‘Π»ΠΊΠ½ΠΈΡ‚Π΅ Π½Π° ΠΈΠΊΠΎΠ½ΠΊΡƒ β€œβ€¦β€, Ρ€Π°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΡƒΡŽ Π½Π°ΠΏΡ€ΠΎΡ‚ΠΈΠ² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Β«Π£Π³ΠΎΠ» ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π°Β». На шкалС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ откроСтся новая Π²ΠΊΠ»Π°Π΄ΠΊΠ° – Π² Π½Π΅ΠΉ Π²Ρ‹ Π±ΡƒΠ΄Π΅Ρ‚Π΅ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Ρ‚Ρ€Π°Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ вращСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π° Ρ‚Π°ΠΊΠΆΠ΅ смоТСтС Π·Π°Π΄Π°Ρ‚ΡŒ Ρ‚Π΅ΠΌΠΏ ΠΈ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅.

Π’ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ Ρ‚Ρ€Π°Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это, Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Π½Π° ΠΈΠΊΠΎΠ½ΠΊΡƒ Π² Π²ΠΈΠ΄Π΅ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ Ρ‡Π΅Ρ€Ρ‚Ρ‹. Она располоТСна ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠΎΠ»Π΅ΠΌ β€œΠ£Π³ΠΎΠ» поворота” ΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ β€œβ€¦β€. ПослС наТатия Π½Π° шкалС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π²Ρ‹ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚Π΅ Ρ€ΠΎΠ²Π½ΡƒΡŽ линию – это тСкущая траСктория вращСния. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Ρ‘, Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½Π°ΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ Ρ‚ΠΎΡ‡ΠΊΠΈ – это дСлаСтся Π΄Π²ΠΎΠΉΠ½Ρ‹ΠΌ Ρ‰Π΅Π»Ρ‡ΠΊΠΎΠΌ ΠΌΡ‹ΡˆΠΈ ΠΏΠΎ пространству Π½Π°Π΄ ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ Ρ‚Ρ€Π°Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠ΅ΠΉ. РазмСщая Π½ΠΎΠ²ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ Π½Π°Π΄ Ρ‚Ρ€Π°Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠ΅ΠΉ, Π²Ρ‹ Π·Π°Π΄Π°Ρ‘Ρ‚Π΅ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ вращСния ΠΏΠΎ часовой стрСлкС, Π° ΠΏΠΎΠ΄ Ρ‚Ρ€Π°Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠ΅ΠΉ – ΠΏΡ€ΠΎΡ‚ΠΈΠ². Π’Ρ‹Π±Ρ€Π°Π² Π»ΡŽΠ±ΡƒΡŽ ΠΈΠ· ΡƒΠΆΠ΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹Ρ… Ρ‚ΠΎΡ‡Π΅ΠΊ, Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅Ρ‚Π°ΡΠΊΠΈΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π² Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ, Π° Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΈΠ· Π½ΠΈΡ… – ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΈΠΊΠΎΠ½ΠΊΡƒ Β«Π£Π΄Π°Π»ΠΈΡ‚ΡŒ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°Β» Π² мСню инструмСнтов Π½Π°Π΄ шкалой Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Как ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ всСго с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ прСдпросмотра.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π²ΠΈΠ΄Π΅ΠΎ Π½Π° 90 градусов, ΠΏΠ΅Ρ€Π΅Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ снятоС Π²ΠΈΠ΄Π΅ΠΎ Π½Π° 180 градусов, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π° любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΡƒΠ³ΠΎΠ» Π΅Π΄ΠΈΠ½Ρ‹ΠΌ дСйствиСм ΠΈΠ»ΠΈ постСпСнно.

ΠœΡ‹ ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π°Π»ΠΈ Π΅Ρ‰Ρ‘ Ρ‚Ρ€ΠΈ инструкции ΠΏΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ с VSDC, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ вас Π·Π°ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΠΎΠ²Π°Ρ‚ΡŒ:

Subscribe to our YouTube channel and message us on Facebook if you have any questions!


ориСнтация Π² EXIF / Π₯Π°Π±Ρ€

Π― ΠΌΠ½ΠΎΠ³ΠΎ писал ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠ³ΠΎ зрСния ΠΈ машинного обучСния, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ систСмы распознавания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ распознавания Π»ΠΈΡ†. Π£ мСня Ρ‚Π°ΠΊΠΆΠ΅ Π΅ΡΡ‚ΡŒ опСнсорсная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° распознавания Π»ΠΈΡ† Π½Π° Python, которая ΠΊΠ°ΠΊ-Ρ‚ΠΎ вошла Π² Ρ‚ΠΎΠΏ-10 самых популярных Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ машинного обучСния Π½Π° Github. Всё это ΠΏΡ€ΠΈΠ²Π΅Π»ΠΎ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΈ Π² Python ΠΈ машинном Π·Ρ€Π΅Π½ΠΈΠΈ Π·Π°Π΄Π°ΡŽΡ‚ ΠΌΠ½Π΅ ΠΌΠ½ΠΎΠ³ΠΎ вопросов.

По ΠΎΠΏΡ‹Ρ‚Ρƒ, Π΅ΡΡ‚ΡŒ ΠΎΠ΄Π½Π° конкрСтная тСхничСская ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, которая Ρ‡Π°Ρ‰Π΅ всСго ставит людСй Π² Ρ‚ΡƒΠΏΠΈΠΊ. НСт, это Π½Π΅ слоТный тСорСтичСский вопрос ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с Π΄ΠΎΡ€ΠΎΠ³ΠΈΠΌΠΈ GPU. Π”Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΡ‡Ρ‚ΠΈ всС Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ Π² ΠΏΠ°ΠΌΡΡ‚ΡŒ изобраТСния ΠΏΠΎΠ²Ρ‘Ρ€Π½ΡƒΡ‚Ρ‹ΠΌΠΈ, Π΄Π°ΠΆΠ΅ Π½Π΅ подозрСвая ΠΎΠ± этом. А ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρ‹ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΎ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°ΡŽΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈΠ»ΠΈ Ρ€Π°ΡΠΏΠΎΠ·Π½Π°ΡŽΡ‚ Π»ΠΈΡ†Π° Π² ΠΏΠΎΠ²Ρ‘Ρ€Π½ΡƒΡ‚Ρ‹Ρ… изобраТСниях.


Когда Π²Ρ‹ Π΄Π΅Π»Π°Π΅Ρ‚Π΅ снимок, ΠΊΠ°ΠΌΠ΅Ρ€Π° рСгистрируСт ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π°, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° отобразится Π² ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ ΠΎΡ€ΠΈΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ:

Но ΠΊΠ°ΠΌΠ΅Ρ€Π° фактичСски Π½Π΅ ΠΏΠΎΠ²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΏΠΈΠΊΡΠ΅Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„Π°ΠΉΠ»Π°. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΈ изобраТСния Π² Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹Ρ… ΠΊΠ°ΠΌΠ΅Ρ€Π°Ρ… ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ построчно ΠΊΠ°ΠΊ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½Ρ‹ΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ пиксСлях, ΠΊΠ°ΠΌΠ΅Ρ€Π΅ ΠΏΡ€ΠΎΡ‰Π΅ всСгда ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ пиксСлях Π² ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΌ порядкС, нСзависимо ΠΎΡ‚ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ полоТСния Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π°.

Π­Ρ‚ΠΎ ΡƒΠΆΠ΅ Π·Π°Π±ΠΎΡ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ для просмотра — ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ Π΅Ρ‘ Π½Π° экранС. Наряду с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ самого изобраТСния, ΠΊΠ°ΠΌΠ΅Ρ€Π° Ρ‚Π°ΠΊΠΆΠ΅ сохраняСт ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅Β β€” настройки ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΈΠ²Π°, Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ мСстополоТСнии ΠΈ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΡƒΠ³ΠΎΠ» ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° ΠΊΠ°ΠΌΠ΅Ρ€Ρ‹. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° просмотра Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эту ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ для ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ отобраТСния.

НаиболСС распространённый Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ называСтся EXIF (сокращСниС ΠΎΡ‚ Exchangeable Image File Format). ΠœΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ EXIF Π²Π½Π΅Π΄Ρ€ΡΡŽΡ‚ΡΡ Π² ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ„Π°ΠΉΠ» jpeg. Π’Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡ… Π²ΠΈΠ΄Π΅Ρ‚ΡŒ Π½Π° экранС, Π½ΠΎ ΠΎΠ½ΠΈ Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ любой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ, которая Π·Π½Π°Π΅Ρ‚, Π³Π΄Π΅ ΠΈΡΠΊΠ°Ρ‚ΡŒ.

Π’ΠΎΡ‚ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ EXIF Π²Π½ΡƒΡ‚Ρ€ΠΈ JPEG-изобраТСния нашСго гуся ΠΈΠ· инструмСнта exiftool:

Π’ΠΈΠ΄ΠΈΡ‚Π΅ элСмСнт β€˜Orientation’? Он Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ просмотра, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π½Π° экранС ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ слСдуСт ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π½Π° 90 градусов ΠΏΠΎ часовой стрСлкС. Если ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π·Π°Π±ΡƒΠ΄Π΅Ρ‚ это ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π° Π±ΠΎΠΊΡƒ!


ΠœΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ EXIF ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ Π½Π΅ Π±Ρ‹Π»ΠΈ Ρ‡Π°ΡΡ‚ΡŒΡŽ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° JPEG. Π˜Ρ… Π²Π½Π΅Π΄Ρ€ΠΈΠ»ΠΈ Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΠΏΠΎΠ·ΠΆΠ΅, позаимствовав идСю ΠΈΠ· Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° TIFF. Для ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ совмСстимости эти ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹, Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π΅ ΡƒΡ‚Ρ€ΡƒΠΆΠ΄Π°ΡŽΡ‚ сСбя ΠΈΡ… Ρ€Π°Π·Π±ΠΎΡ€ΠΎΠΌ.

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Python для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с изобраТСниями, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ numpy, scipy, TensorFlow, Keras ΠΈ Ρ‚. Π΄., ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ сСбя Π½Π°ΡƒΡ‡Π½Ρ‹ΠΌΠΈ инструмСнтами для ΡΠ΅Ρ€ΡŒΡ‘Π·Π½Ρ‹Ρ… людСй, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΡ… с ΠΎΠ±Ρ‰ΠΈΠΌΠΈ массивами Π΄Π°Π½Π½Ρ‹Ρ…. Они Π½Π΅ заботятся ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ… ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ уровня, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ автоматичСский ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ, хотя это трСбуСтся практичСски для всСх Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΉ Π² ΠΌΠΈΡ€Π΅, снятых с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ соврСмСнных ΠΊΠ°ΠΌΠ΅Ρ€.

Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ изобраТСния практичСски любой питоновской Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚Π΅ исходныС Π΄Π°Π½Π½Ρ‹Π΅ изобраТСния Π±Π΅Π· ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π°. И ΡƒΠ³Π°Π΄Π°ΠΉΡ‚Π΅, Ρ‡Ρ‚ΠΎ происходит, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π² модСль обнаруТСния Π»ΠΈΡ† ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΡŽ Π½Π° Π±ΠΎΠΊΡƒ ΠΈΠ»ΠΈ Π²Π²Π΅Ρ€Ρ… Π½ΠΎΠ³Π°ΠΌΠΈ? Π”Π΅Ρ‚Π΅ΠΊΡ‚ΠΎΡ€ Π½Π΅ срабатываСт, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π²Ρ‹ Π΄Π°Π»ΠΈ Π΅ΠΌΡƒ ΠΏΠ»ΠΎΡ…ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅.

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… Π½ΠΎΠ²ΠΈΡ‡ΠΊΠΎΠ² ΠΈ студСнтов, Π½ΠΎ это Π½Π΅ Ρ‚Π°ΠΊ! Π”Π°ΠΆΠ΅ Π΄Π΅ΠΌΠΎ-вСрсия флагманского Vision API ΠΎΡ‚ Google Π½Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΎΡ€ΠΈΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ EXIF:


ДСмонстрация Google Vision API Π½Π΅ ΡƒΠΌΠ΅Π΅Ρ‚ ΠΏΠΎΠ²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡ€Ρ‚Ρ€Π΅Ρ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, снятоС со стандартного мобильного Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π°

И хотя Google Vision распознаёт ΠΊΠ°ΠΊΠΈΡ…-Ρ‚ΠΎ ΠΆΠΈΠ²ΠΎΡ‚Π½Ρ‹Ρ… Π½Π° Π±ΠΎΠΊΡƒ, Π½ΠΎ ΠΏΠΎΠΌΠ΅Ρ‡Π°Π΅Ρ‚ ΠΈΡ… ΠΎΠ±Ρ‰Π΅ΠΉ ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ Β«ΠΆΠΈΠ²ΠΎΡ‚Π½ΠΎΠ΅Β», ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠ΄Π΅Π»ΠΈ машинного зрСния Π³ΠΎΡ€Π°Π·Π΄ΠΎ слоТнСС Ρ€Π°ΡΠΏΠΎΠ·Π½Π°Ρ‚ΡŒ гуся Π½Π° Π±ΠΎΠΊΡƒ, Ρ‡Π΅ΠΌ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ гуся. Π’ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, Ссли ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠΎΠ΄Π°Ρ‡Π΅ΠΉ Π² модСль:

ΠŸΡ€ΠΈ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ ΠΎΡ€ΠΈΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ Google ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΏΡ‚ΠΈΡ† с Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ Β«Π³ΡƒΡΡŒΒ» ΠΈ Π±ΠΎΠ»Π΅Π΅ высоким ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ увСрСнности. Π“ΠΎΡ€Π°Π·Π΄ΠΎ Π»ΡƒΡ‡ΡˆΠ΅!

Π­Ρ‚ΠΎ супСрочСвидная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ явно Π²ΠΈΠ΄ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° Π±ΠΎΠΊΡƒ, ΠΊΠ°ΠΊ Π² этой дСмонстрации. Но ΠΈΠΌΠ΅Π½Π½ΠΎ здСсь всС становится ΠΊΠΎΠ²Π°Ρ€Π½Ρ‹ΠΌ β€” ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π²Ρ‹ этого Π½Π΅ Π²ΠΈΠ΄ΠΈΡ‚Π΅! ВсС Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° вашСм ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅ отобразят ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ ΠΎΡ€ΠΈΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, Π° Π½Π΅ ΠΊΠ°ΠΊ ΠΎΠ½ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ хранится Π½Π° дискС. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ваша модСль Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒΡΡ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, ΠΈ Π²Ρ‹ Π½Π΅ ΠΏΠΎΠΉΠΌΡ‘Ρ‚Π΅, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΆΠ΅ модСль Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚!


Finder Π½Π° Mac всСгда ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ с ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ΠΎΠΌ ΠΈΠ· EXIF. Π’Π°ΠΌ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° самом Π΄Π΅Π»Π΅ хранится Π½Π° Π±ΠΎΠΊΡƒ

Π­Ρ‚ΠΎ Π½Π΅ΠΈΠ·Π±Π΅ΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ массС ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… Ρ‚ΠΈΠΊΠ΅Ρ‚ΠΎΠ² Π½Π° Github: люди ΠΆΠ°Π»ΡƒΡŽΡ‚ΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹ с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ исходным ΠΊΠΎΠ΄ΠΎΠΌ сломаны, Π° ΠΌΠΎΠ΄Π΅Π»ΠΈ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ Ρ‚ΠΎΡ‡Π½Ρ‹. Но ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π³ΠΎΡ€Π°Π·Π΄ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ β€” ΠΎΠ½ΠΈ просто ΠΏΠΎΠ΄Π°ΡŽΡ‚ Π½Π° Π²Ρ…ΠΎΠ΄ ΠΏΠΎΠ²Ρ‘Ρ€Π½ΡƒΡ‚Ρ‹Π΅ ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Π²Ρ‘Ρ€Π½ΡƒΡ‚Ρ‹Π΅ Ρ„ΠΎΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ!


РСшСниС Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Python слСдуСт ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΡ€ΠΈΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ EXIF ΠΈ ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚ΡŒ изобраТСния, Ссли это Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ. Π­Ρ‚ΠΎ довольно просто ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Π½ΠΎ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅ ΡƒΠ΄ΠΈΠ²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ это для всСх ΠΎΡ€ΠΈΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΉ.

Π’ΠΎΡ‚ ΠΊΠΎΠ΄ для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ любого изобраТСния Π² массив numpy с ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΉ ΠΎΡ€ΠΈΠ΅Π½Ρ‚Π°Ρ†ΠΈΠ΅ΠΉ:

import PIL.Image
import PIL.ImageOps
import numpy as np


def exif_transpose(img):
    if not img:
        return img

    exif_orientation_tag = 274

    # Check for EXIF data (only present on some files)
    if hasattr(img, "_getexif") and isinstance(img._getexif(), dict) and exif_orientation_tag in img._getexif():
        exif_data = img._getexif()
        orientation = exif_data[exif_orientation_tag]

        # Handle EXIF Orientation
        if orientation == 1:
            # Normal image - nothing to do!
            pass
        elif orientation == 2:
            # Mirrored left to right
            img = img.transpose(PIL.Image.FLIP_LEFT_RIGHT)
        elif orientation == 3:
            # Rotated 180 degrees
            img = img.rotate(180)
        elif orientation == 4:
            # Mirrored top to bottom
            img = img.rotate(180).transpose(PIL.Image.FLIP_LEFT_RIGHT)
        elif orientation == 5:
            # Mirrored along top-left diagonal
            img = img.rotate(-90, expand=True).transpose(PIL.Image.FLIP_LEFT_RIGHT)
        elif orientation == 6:
            # Rotated 90 degrees
            img = img.rotate(-90, expand=True)
        elif orientation == 7:
            # Mirrored along top-right diagonal
            img = img.rotate(90, expand=True).transpose(PIL.Image.FLIP_LEFT_RIGHT)
        elif orientation == 8:
            # Rotated 270 degrees
            img = img.rotate(90, expand=True)

    return img


def load_image_file(file, mode='RGB'):
    # Load the image with PIL
    img = PIL.Image.open(file)

    if hasattr(PIL.ImageOps, 'exif_transpose'):
        # Very recent versions of PIL can do exit transpose internally
        img = PIL.ImageOps.exif_transpose(img)
    else:
        # Otherwise, do the exif transpose ourselves
        img = exif_transpose(img)

    img = img.convert(mode)

    return np.array(img)

ΠžΡ‚ΡΡŽΠ΄Π° Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ массив Π΄Π°Π½Π½Ρ‹Ρ… изобраТСния Π² Π»ΡŽΠ±ΡƒΡŽ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ машинного зрСния Python, которая ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ массив Π½Π° Π²Ρ…ΠΎΠ΄Π΅: Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Keras ΠΈΠ»ΠΈ TensorFlow.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° повсСмСстная, я ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π» эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π² качСствС pip-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΏΠΎΠ΄ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ΠΌ image_to_numpy. ΠœΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π΅Ρ‘ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

pip3 install image_to_numpy

Она Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с любой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ Python, исправляя Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ изобраТСния, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:
import matplotlib.pyplot as plt
import image_to_numpy
# Load your image file
img = image_to_numpy.load_image_file("my_file.jpg")
# Show it on the screen (or whatever you want to do)
plt.imshow(img)
plt.show()

Π‘ΠΌ. Ρ„Π°ΠΉΠ» readme для Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.

ΠΠ°ΡΠ»Π°ΠΆΠ΄Π°ΠΉΡ‚Π΅ΡΡŒ!

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° для ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° Π²ΠΈΠ΄Π΅ΠΎ Π½Π° 90, 180 ΠΈ 270 градусов

Автор ΡΡ‚Π°Ρ‚ΡŒΠΈ: Алина Π›ΠΈΡ…Π°Ρ‡Ρ‘Π²Π° 29 января 2019

ΠœΡ‹ всё Ρ€Π΅ΠΆΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°ΠΌΠ΅Ρ€ΠΎΠΉ, для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ½ΡΡ‚ΡŒ ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ событиС. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΠΎΠ΄ Ρ€ΡƒΠΊΠΎΠΉ оказываСтся смартфон ΠΈΠ»ΠΈ Ρ„ΠΎΡ‚ΠΎΠ°ΠΏΠΏΠ°Ρ€Π°Ρ‚. Но Ρ€ΠΎΠ»ΠΈΠΊ, отснятый Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ отобраТаСтся Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ – Π²ΠΈΠ΄Π΅ΠΎ получаСтся ΠΏΠ΅Ρ€Π΅Π²Π΅Ρ€Π½ΡƒΡ‚Ρ‹ΠΌ.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ расскаТСм ΠΎΠ± ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΌ соврСмСнном софтС, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сдСлаСт любоС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ. Π­Ρ‚ΠΎ удобная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° для ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° Π²ΠΈΠ΄Π΅ΠΎ Β«Π’ΠΈΠ΄Π΅ΠΎΠœΠΠ‘Π’Π•Π Β». Π’Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ любоС Π²ΠΈΠ΄Π΅ΠΎ Π½Π° 90, 180 ΠΈ 270 градусов, смоТСтС ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ качСство изобраТСния ΠΈ Π΄Π°ΠΆΠ΅ ΠΎΡ„ΠΎΡ€ΠΌΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π·Ρ€Π΅Π»ΠΈΡ‰Π½Ρ‹ΠΌΠΈ спСцэффСктами.

Π¨Π°Π³ 1. Установка ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π²ΠΈΠ΄Π΅ΠΎ-Ρ„Π°ΠΉΠ»ΠΎΠ²

Π—Π°ΠΉΠ΄ΠΈΡ‚Π΅ Π½Π° сайт ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ-производитСля: https://video-converter.ru/ ΠΈ скачайтС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ дистрибутив. ПослС Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π°Ρ€Ρ…ΠΈΠ²Π° установитС софт Π½Π° свой ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Β«ΠœΠ°ΡΡ‚Π΅Ρ€ установки». Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π½Π° ΠΌΠΎΠ½Ρ‚Π°ΠΆΠ½Ρ‹ΠΉ стол Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ с ПК ΠΈΠ»ΠΈ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ ΠΈΠ· ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π°.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° для ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° Π²ΠΈΠ΄Π΅ΠΎ Π’ΠΈΠ΄Π΅ΠΎ доступно для прСдпросмотра Π½Π° экранС справа

Π¨Π°Π³ 2. ΠŸΠΎΠ²ΠΎΡ€ΠΎΡ‚ Π²ΠΈΠ΄Π΅ΠΎ

Π’ Π»Π΅Π²ΠΎΠΌ ΡƒΠ³Π»Ρƒ экрана находится панСль инструмСнтов. Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π²ΠΊΠ»Π°Π΄ΠΊΡƒ Β«Π­Ρ„Ρ„Π΅ΠΊΡ‚Ρ‹Β» ΠΈ ΠΏΠ΅Ρ€Π΅Π΄ Π²Π°ΠΌΠΈ откроСтся встроСнный Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ видСозаписСй. НаТмитС ΠΊΠ½ΠΎΠΏΠΊΡƒ Β«ΠŸΠΎΠ²ΠΎΡ€ΠΎΡ‚ Π²ΠΈΠ΄Π΅ΠΎΒ». Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π΄Π°Ρ‚ΡŒ сторону (Π²ΠΏΡ€Π°Π²ΠΎ ΠΈΠ»ΠΈ Π²Π»Π΅Π²ΠΎ) ΠΈ ΡƒΠ³ΠΎΠ» ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° (ΠΎΡ‚ 90 Π΄ΠΎ 270 градусов). Установив Π½ΡƒΠΆΠ½Ρ‹Π΅ настройки, Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Β«ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒΒ».

ΠŸΠΎΠ²ΠΎΡ€ΠΎΡ‚ Π²ΠΈΠ΄Π΅ΠΎ Π’ΠΈΠ΄Π΅ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ прямо Π²ΠΎ врСмя воспроизвСдСния

Π¨Π°Π³ 3. Π£Π»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅ качСства Π²ΠΈΠ΄Π΅ΠΎΡ€ΠΎΠ»ΠΈΠΊΠ°

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° для ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° Π²ΠΈΠ΄Π΅ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ мноТСство Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π£Π»ΡƒΡ‡ΡˆΠΈΡ‚Π΅ качСство изобраТСния автоматичСски ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ «КомплСксноС ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΠ΅Β». Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ яркости, контраста, насыщСнности ΠΈ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ Ρ‚ΠΎΠ½, Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, пСрСдвигая ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ ΠΏΠΎ шкалС настройки.

Π¨Π°Π³ 4. ΠžΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΊΠ»ΠΈΠΏΠ° спСцэффСктами

Π£ΠΊΡ€Π°ΡΡŒΡ‚Π΅ Π²ΠΈΠ΄Π΅ΠΎ Π·Ρ€Π΅Π»ΠΈΡ‰Π½Ρ‹ΠΌΠΈ спСцэффСктами. ΠšΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ насчитываСт Π±ΠΎΠ»Π΅Π΅ 10 Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ². Π‘Π΄Π΅Π»Π°ΠΉΡ‚Π΅ Ρ€ΠΎΠ»ΠΈΠΊ ярким ΠΈ сочным, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ эффСкт насыщСнности, ΠΈΠ»ΠΈ, Π½Π°ΠΏΡ€ΠΎΡ‚ΠΈΠ², создайтС ΠΊΠΈΠ½ΠΎ Π² стилС Β«Π½ΡƒΠ°Ρ€Β» с эффСктами затСмнСния ΠΈ ΠΎΡ‚Ρ‚Π΅Π½ΠΊΠ°ΠΌΠΈ сСрого. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ спСцэффСкты ΠΊΠ°ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π°, Ρ‚Π°ΠΊ ΠΈ комплСксно, подбирая Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡƒΠ΄Π°Ρ‡Π½Ρ‹Π΅ сочСтания.

БпСцэффСкты для Π²ΠΈΠ΄Π΅ΠΎ Π­Ρ„Ρ„Π΅ΠΊΡ‚ Β«Π‘Ρ‚Π°Ρ€ΠΎΠ΅ ΠΊΠΈΠ½ΠΎΒ» Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Ρ€ΠΎΠ»ΠΈΠΊ ΠΎΡ‚Ρ‚Π΅Π½ΠΎΠΊ сСпии

Π¨Π°Π³ 5. И Π΅Ρ‰Π΅ нСсколько Ρ‚Ρ€ΡŽΠΊΠΎΠ²

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π» ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ возмоТности для рСдактирования ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠ»ΠΈΠΏΠ°. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±Ρ€Π΅Π·Π°Ρ‚ΡŒ Π²ΠΈΠ΄Π΅ΠΎ ΠΈ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π½Π° части, ΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ нСсколько Ρ„Π°ΠΉΠ»ΠΎΠ² (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π°ΡƒΠ΄ΠΈΠΎ) Π² ΠΎΠ΄ΠΈΠ½, ΠΊΠ°Π΄Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ любой тСкст ΠΈ Π³Ρ€Π°Ρ„ΠΈΠΊΡƒ. ЕдинствСнноС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ – ваша фантазия.

ΠšΠ°Π΄Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΠΈΠ΄Π΅ΠΎ Помимо стандартных ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΉ 4:3 ΠΈ 16:9, Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅

Π¨Π°Π³ 6. Экспорт Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π΅ΠΎ

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° для ΠΏΠ΅Ρ€Π΅Π²ΠΎΡ€ΠΎΡ‚Π° Π²ΠΈΠ΄Π΅ΠΎ ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ нСсколько Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² экспорта Ρ„Π°ΠΉΠ»Π°:

  • конвСртация Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π΅ΠΎ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ;
  • ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° Ρ€ΠΎΠ»ΠΈΠΊΠ° для ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π² сСти Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚;
  • запись Π²ΠΈΠ΄Π΅ΠΎ-Ρ„Π°ΠΉΠ»Π° Π½Π° DVD-диск.

Π”Π°Π½Π½Ρ‹ΠΉ софт ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ навсСгда Π·Π°Π±Ρ‹Ρ‚ΡŒ ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ…, связанных с Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ отснятым Π²ΠΈΠ΄Π΅ΠΎ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Π°ΠΌ Π½Π΅ придСтся Π΄ΡƒΠΌΠ°Ρ‚ΡŒ, Π² ΠΊΠ°ΠΊΠΎΠΌ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ ΠΈΠ»ΠΈ Ρ„ΠΎΡ‚ΠΎΠ°ΠΏΠΏΠ°Ρ€Π°Ρ‚ для Π³Ρ€Π°ΠΌΠΎΡ‚Π½ΠΎΠΉ съСмки. Благодаря ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Β«Π’ΠΈΠ΄Π΅ΠΎΠœΠΠ‘Π’Π•Π Β», Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊ ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π²ΠΈΠ΄Π΅ΠΎ Π½Π° 90 градусов ΠΈ Π±ΠΎΠ»Π΅Π΅, ΡƒΠΌΠ΅Π΅Ρ‚Π΅ Π·Π° считанныС ΠΌΠΈΠ½ΡƒΡ‚Ρ‹ ΡƒΠ»ΡƒΡ‡ΡˆΠ°Ρ‚ΡŒ качСство Ρ€ΠΎΠ»ΠΈΠΊΠ° ΠΈ ΡƒΠΊΡ€Π°ΡˆΠ°Ρ‚ΡŒ Π΅Π³ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ надписями ΠΈ спСцэффСктами.

Π‘ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ сСйчасВсСго 56 mb

Π£Π½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π²ΠΈΠ΄Π΅ΠΎ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚Π΅Ρ€

Всё Π΅Ρ‰Ρ‘ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π²ΠΈΠ΄Π΅ΠΎ, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² MPEG, AVI ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚? На ΠΏΠΎΠΌΠΎΡ‰ΡŒ вновь ΠΏΡ€ΠΈΠ΄Π΅Ρ‚ Β«Π’ΠΈΠ΄Π΅ΠΎΠœΠΠ‘Π’Π•Π Β». Π’Π΅Π΄ΡŒ это Π΅Ρ‰Π΅ ΠΈ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚Π΅Ρ€ Π²ΠΈΠ΄Π΅ΠΎ ΠΈ Π°ΡƒΠ΄ΠΈΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ с Π»Π΅Π³ΠΊΠΎΡΡ‚ΡŒΡŽ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΡ… ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ.

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ Π²ΠΈΠ΄Π΅ΠΎ Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ доступны практичСски всС извСстныС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹

Π’ Π±Π°Π·Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ хранится Π²Π½ΡƒΡˆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ арсСнал ΠΊΠΎΠ΄Π΅ΠΊΠΎΠ² ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² для ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚Π°Ρ†ΠΈΠΈ, начиная ΠΎΡ‚ самых вострСбованных ΠΈ заканчивая самыми Ρ€Π΅Π΄ΠΊΠΈΠΌΠΈ. К ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Π²Π°ΠΌ трСбуСтся ΡΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ скачанного Π°ΡƒΠ΄ΠΈΠΎ. Π’ этом случаС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ всСго Π·Π° ΠΎΠ΄ΠΈΠ½ ΠΊΠ»ΠΈΠΊ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΠ· WAV MP3 ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚.

Для Π²ΠΈΠ΄Π΅ΠΎΡ€ΠΎΠ»ΠΈΠΊΠΎΠ² Π²Ρ‹Π±ΠΎΡ€ возмоТностСй Π΅Ρ‰Ρ‘ большС. Π˜Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² стандартныС ΠΈ нСстандартныС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ Ρ‚ΠΈΠΏΠ° AVI ΠΈΠ»ΠΈ SWF, Π½ΠΎ ΠΈ Π°Π΄Π°ΠΏΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ для любой ΠΌΠΎΠ΄Π΅Π»ΠΈ смартфона/ΠΏΠ»Π°Π½ΡˆΠ΅Ρ‚Π°/консоли/ΠΏΠ»Π΅Π΅Ρ€Π°. Π’Π°ΠΊΠΆΠ΅ ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚Π΅Ρ€ оснащСн Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎΠΉ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Ρ€ΠΎΠ»ΠΈΠΊΠ° Π½Π° YouTube, MySpace, Π’ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π΅ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΌ извСстном сайтС. А Ссли Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ видСоряда ΠΈ ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π²ΡƒΠΊ – достаточно просто Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π² спискС ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰Π΅Π΅ Π°ΡƒΠ΄ΠΈΠΎΡ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ всСгда Π±ΡƒΠ΄Π΅Ρ‚Π΅ Π·Π½Π°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ Π²ΠΈΠ΄Π΅ΠΎ, Π½ΠΎ ΠΈ ΠΊΠ°ΠΊ Π² ΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠΈΠ΅ сроки ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€ΠΎΠ»ΠΈΠΊΠΈ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ.

АвтоматичСский ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ изобраТСния Π½Π° ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Π΅ / Π₯Π°Π±Ρ€Π˜ΡΡ‚ΠΎΡ€ΠΈΡ‡Π΅ΡΠΊΠΈ слоТилось Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ Ρƒ мСня Π½Π΅Ρ‚ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Π°. ВмСсто Π½Π΅Π³ΠΎ я ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽ Ρ‚Π΅Π»Π΅Π²ΠΈΠ·ΠΎΡ€. Π’Ρ€ΠΈΠ΄Ρ†Π°Ρ‚ΠΈ Π΄Π²ΡƒΡ… Π΄ΡŽΠΉΠΌΠΎΠ²Ρ‹ΠΉ Ρ‚Π΅Π»Π΅Π²ΠΈΠ·ΠΎΡ€. И Π½Π΅Ρ‚, я Π΅Ρ‰Π΅ Π½Π΅ окосоглазил. Π’ΠΏΠΎΠ»Π½Π΅ ΠΊΠΎΠΌΡ„ΠΎΡ€Ρ‚Π½ΠΎ Π·Π° Π½ΠΈΠΌ работаСтся, замСняСт ΠΌΠ½Π΅ сразу 2 ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Π°. Но Π΅ΡΡ‚ΡŒ Ρƒ Π½Π΅Π³ΠΎ ΠΎΠ΄Π½Π° нСприятная ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ. Когда я ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°ΡŽ свой Π»ΡŽΠ±ΠΈΠΌΡ‹ΠΉ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, ΠΊΠΎΠ΄ прСдставляСт собой ΡƒΠ·ΠΊΠΈΠΉ столбСц с Π»Π΅Π²ΠΎΠΉ стороны экрана. ΠŸΠΎΡ‡Ρ‚ΠΈ Π΄Π²Π΅ Ρ‚Ρ€Π΅Ρ‚ΠΈ экрана ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ пустыми ΠΈ Π½ΠΈΡ‡Π΅ΠΌ Π½Π΅ задСйствованными.

Π― Π΄ΠΎΠ»Π³ΠΎ с этим мирился, ΠΏΠΎΠΊΠ° Π½Π΅ вспомнил ΠΏΡ€ΠΎ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Ρ‹. А ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π½Π΅Ρ‚? Π§Π΅ΠΌ я Ρ…ΡƒΠΆΠ΅? Π’ΠΎΡ‚ Ρ‚ΠΎΠ³Π΄Π° я ΠΈ Ρ€Π΅ΡˆΠΈΠ» Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€Π΅ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Ρ‚ΡŒ своС Ρ€Π°Π±ΠΎΡ‡Π΅Π΅ мСсто. МоТно Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΡ€Π΅ΠΏΠ΅ΠΆ ΠΈ навсСгда пСрСвСсти ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ Π² Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Π½ΠΎ мСня это Π½Π΅ устраивало ΠΏΠΎ Ρ‚ΠΎΠΉ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅, Ρ‡Ρ‚ΠΎ Π½Π° ΠΌΠΎΠ΅ΠΌ Β«ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Π΅Β» я часто ΡΠΌΠΎΡ‚Ρ€ΡŽ Ρ„ΠΈΠ»ΡŒΠΌΡ‹. А Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΠΈΠ»ΡŒΠΌΡ‹, слава Π±ΠΎΠ³Ρƒ, ΠΏΠΎΠΊΠ° Π΅Ρ‰Π΅ Π½Π΅ ΡΠ½ΠΈΠΌΠ°ΡŽΡ‚. Π’ этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ появилась идСя приобрСсти ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π½Ρ‹ΠΉ ΠΊΡ€ΠΎΠ½ΡˆΡ‚Π΅ΠΉΠ½ ΠΈ ΠΏΠΎΠ²Π΅ΡΠΈΡ‚ΡŒ Ρ‚Π΅Π»Π΅Π²ΠΈΠ·ΠΎΡ€ Π½Π° стСну, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈ нСобходимости Π΅Π³ΠΎ Π²Π΅Ρ€Ρ‚Π΅Ρ‚ΡŒ. ИмСнно Ρ‚Π°ΠΊ я ΠΈ поступил.


Π’Π°ΠΊ Π»ΡƒΡ‡ΡˆΠ΅, Π½Π΅ ΠΏΡ€Π°Π²Π΄Π° Π»ΠΈ?

Π–ΠΈΡ‚ΡŒ стало Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅. Надо ΠΏΠΎΡ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ? Встал со стула, ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΠ» ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€, сСл ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ, Π²Π²Π΅Π» Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ
xrandr -o left ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΠΉ сСбС с ΠΊΠΎΠΌΡ„ΠΎΡ€Ρ‚ΠΎΠΌ. Π₯ΠΎΡ‡Π΅ΡˆΡŒ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΈΠ»ΡŒΠΌΠ΅Ρ†? Π‘Π΄Π΅Π»Π°ΠΉ Ρ‚ΠΎΠΆΠ΅ самоС, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π²Π΅Π΄ΠΈ ΡƒΠΆΠ΅ xrandr -o normal ΠΈ расслабляйся.

ВсС это мСня ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ устраивало, ΠΏΠΎΠΊΠ° ΠΌΠ½Π΅ просто Π½Π΅ Π½Π°Π΄ΠΎΠ΅Π»ΠΎ. НадоСло Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ эти ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. Π’ΡΡ‚Π°Π²Π°Ρ‚ΡŒ ΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ эту ΠΌΠ°Ρ…ΠΈΠ½Ρƒ, ΠΌΠ½Π΅, ΠΏΡ€Π°Π²Π΄Π°, Ρ‚ΠΎΠΆΠ΅ Π½Π°Π΄ΠΎΠ΅Π»ΠΎ, Π½ΠΎ Π½Π΅ ΠΌΠΎΡ‚ΠΎΡ€Ρ‡ΠΈΠΊ ΠΆΠ΅ ΠΏΡ€ΠΈΠ΄Π΅Π»Ρ‹Π²Π°Ρ‚ΡŒ ΠΊ Π½Π΅ΠΉ, Π²Π΅Ρ€Π½ΠΎ? А Π²ΠΎΡ‚ Π²Π²ΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄ я ΠΌΠΎΠ³ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π±Π΅Π· особых Π·Π°Ρ‚Ρ€Π°Ρ‚. Но ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρƒ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ Π±Ρ‹Π» ΠΏΠ΅Ρ€Π΅Π²Π΅Ρ€Π½ΡƒΡ‚? МоТно Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π·Π°ΠΌΠΎΡ€ΠΎΡ‡ΠΈΡ‚ΡŒΡΡ ΠΊΠ°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²ΠΎΡ‚ этот ΠΏΠ°Ρ€Π΅Π½ΡŒ, Π½ΠΎ это Π½ΠΈΠΊΠΎΠΌΡƒ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹Π΅ слоТности. Π’ качСствС интрфСйса взаимодСйствия я сразу Ρ€Π΅ΡˆΠΈΠ» ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΡ€Ρ‚ (Ссли Π½Π΅Ρ‚ встроСнного, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΊΡƒΠΏΠΈΡ‚ΡŒ Π°Π΄Π°ΠΏΡ‚Π΅Ρ€ usb-to-serial). Но ΠΊΠ°ΠΊ Π±Ρ‹Ρ‚ΡŒ с Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠΎΠΌ? А Ρ‚ΡƒΡ‚ Π΄Π΅Π»ΠΎ обстоит Π΅Ρ‰Π΅ ΠΏΡ€ΠΎΡ‰Π΅. Π― отыскал Π½ΠΈΠΊΠΎΠΌΡƒ Π½Π΅ Π½ΡƒΠΆΠ½Ρ‹ΠΉ Ρ‚ΡŽΠ±ΠΈΠΊ ΠΎΡ‚ Π³ΡƒΠ±Π½ΠΎΠΉ ΠΏΠΎΠΌΠ°Π΄Ρ‹, Π²Ρ‹Ρ‚Π°Ρ‰ΠΈΠ» мСталличСский ΡˆΠ°Ρ€ΠΈΠΊ ΠΈΠ· подшипника ΠΈ соорудил это:

Вюбик, с ΠΎΠ΄Π½ΠΎΠΉ стороны ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½Ρ‹ 2 ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π°, ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Π΅ ΠΊ ΠΏΠΈΠ½Π°ΠΌ TxD ΠΈ RxD ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡ€Ρ‚Π°.

Π’Π½ΡƒΡ‚Ρ€ΠΈ Ρ‚ΡŽΠ±ΠΈΠΊΠ° катаСтся мСталичСский ΡˆΠ°Ρ€ΠΈΠΊ. Если ΠΎΠ½ скатываСтся ΠΊ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π°ΠΌ, Ρ‚ΠΎ Π·Π°ΠΌΡ‹ΠΊΠ°Π΅Ρ‚ ΠΈΡ…, Ρ‚Π΅ΠΌ самым соСдиняя ΠΏΠΈΠ½Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΈ ΠΏΡ€ΠΈΠ΅ΠΌΠ° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡ€Ρ‚Π°. Вюбик Π²Π΅ΡˆΠ°Π΅Ρ‚ΡΡ ΠΏΠΎΠ·Π°Π΄ΠΈ Β«ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Π°Β» ΠΏΠΎΠ΄ ΡƒΠ³Π»ΠΎΠΌ Π² 45 градусов Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠΌ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΡˆΠ°Ρ€ΠΈΠΊ находится Π² бСсконтактном ΠΊΠΎΠ½Ρ†Π΅ Ρ‚ΡŽΠ±ΠΈΠΊΠ°, Π° ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π΅ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Π° Π² Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ, ΡˆΠ°Ρ€ΠΈΠΊ скатываСтся ΠΈ Π·Π°ΠΌΡ‹ΠΊΠ°Π΅Ρ‚ собой ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Ρ‹.

ΠžΡΡ‚Π°Π»ΠΎΡΡŒ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ. ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΎΡ‡Π΅Π½ΡŒ прост: Π² сСрийный ΠΏΠΎΡ€Ρ‚ ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ слово ΠΈ сразу ΠΆΠ΅ читаСтся. Если ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ…ΠΎΡ‚ΡŒ Ρ‡Ρ‚ΠΎ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π»Π°, Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Ρ‹ Π·Π°ΠΌΠΊΠ½ΡƒΡ‚Ρ‹, Π° Π·Π½Π°Ρ‡ΠΈΡ‚ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ находится Π² Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΌ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ‡Π΅Π³ΠΎ выполняСтся ΠΊΠΎΠΌΠ°Π½Π΄Π° xrandr -o left. ΠŸΡ€ΠΈ ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² Π³ΠΎΡ€ΠΈΠ·ΠΎΠ½Ρ‚Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ происходит Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠ΅ дСйствиС, Π½ΠΎ с ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ xrandr -o normal.

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Ρ€Π°Π· я написал скрипт Π½Π° ΠΌΠΎΠ΅ΠΌ любимом ΠΏΠΈΡ‚ΠΎΠ½Π΅. Π­Ρ‚ΠΎ Π±Ρ‹Π» Π΄Π²ΡƒΡ…ΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ монстр, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΆΡ€Π°Π», Ссли Π²Π΅Ρ€ΠΈΡ‚ΡŒ top, 120% CPU. ΠŸΠΎΡ‡Π΅ΠΌΡƒ Ρ‚Π°ΠΊ происходило, для мСня Π΄ΠΎ сих ΠΏΠΎΡ€ остаСтся Π·Π°Π³Π°Π΄ΠΊΠΎΠΉ. Π’ ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ² я Ρ€Π΅ΡˆΠΈΠ» ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° Π‘, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠΌΠΎΠ³Π»ΠΎ Π½Π΅ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊ сильно процСссор.

Π’ΠΎΡ‚, Π² ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ΅, ΠΈ всС. ΠžΡΡ‚Π°Π»ΠΎΡΡŒ лишь Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π² Π°Π²Ρ‚ΠΎΠ·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ.

РСшил ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ этим нСбольшим Π»Π°ΠΉΡ„Ρ…Π°ΠΊΠΎΠΌ с хабросообщСством. Π’Π΄Ρ€ΡƒΠ³ ΠΊΠΎΠΌΡƒ пригодится.

Код ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π½Π° Π³ΠΈΡ‚Ρ…Π°Π±Π΅.

Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΏΡ€ΠΎ грамматичСскиС ΠΈ ΠΏΡƒΠ½ΠΊΡ‚Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ ошибки отправляйтС, поТалуйста, Π² Π»ΠΈΡ‡Π½Ρ‹Π΅ сообщСния, Π΄Π°Π±Ρ‹ Π½Π΅ Π·Π°ΡΠΎΡ€ΡΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ.

UPD:
А Π²ΠΎΡ‚ ΠΊΠ°ΠΊ это выглядит Π² ΠΆΠΈΠ·Π½ΠΈ (ΠΏΡ€ΠΎΡˆΡƒ прощСния Π·Π° качСство):

Как ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π²ΠΈΠ΄Π΅ΠΎ | ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° для ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° Π²ΠΈΠ΄Π΅ΠΎ

Как ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π²ΠΈΠ΄Π΅ΠΎ Π½Π° 90 градусов ΠΈΠ»ΠΈ Π½Π° любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΡƒΠ³ΠΎΠ»

Никому Π½Π΅ нравится ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Β«ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚ΠΎΠ΅ Π½Π°Π±ΠΎΠΊΒ» Π²ΠΈΠ΄Π΅ΠΎ. Однако Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΌΠ΅Ρ€Ρƒ Π²ΠΎ врСмя съСмки Π΄Π΅Ρ€ΠΆΠ°Π»ΠΈ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ, часто обнаруТиваСтся ΡƒΠΆΠ΅ постфактум. Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Π² Ρ‚Π°ΠΊΠΎΠΌ случаС? НС стоит ΡΠΏΠ΅ΡˆΠΈΡ‚ΡŒ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ΅ Π²ΠΈΠ΄Π΅ΠΎ, вСдь всС ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΈΡΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ, Ссли Ρƒ вас ΠΏΠΎΠ΄ Ρ€ΡƒΠΊΠΎΠΉ Π΅ΡΡ‚ΡŒ нуТная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°.

Movavi Video Editor – это Π½Π΅ просто ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° для ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° Π²ΠΈΠ΄Π΅ΠΎ, это ΠΏΠΎΠ»Π½ΠΎΡ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ Π²ΠΈΠ΄Π΅ΠΎΡ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ свой Ρ„ΠΈΠ»ΡŒΠΌ. Благодаря ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ понятному интСрфСйсу Π½Π° русском языкС Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒΡΡ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π΅ составит Ρ‚Ρ€ΡƒΠ΄Π° Π΄Π°ΠΆΠ΅ для Π½ΠΎΠ²ΠΈΡ‡ΠΊΠ°.

Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊ Ρ€Π°Π·Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π²ΠΈΠ΄Π΅ΠΎ, скачайтС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈ слСдуйтС инструкции Π½ΠΈΠΆΠ΅.

Π‘ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ бСсплатно Π‘ΠΊΠ°Ρ‡Π°Ρ‚ΡŒ бСсплатно
  1. УстановитС Π’ΠΈΠ΄Π΅ΠΎΡ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ Movavi

    Π‘ΠΊΠ°Ρ‡Π°ΠΉΡ‚Π΅ ΠΈ запуститС установочный Ρ„Π°ΠΉΠ» ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Movavi Video Editor. ΠŸΡ€ΠΎΡ†Π΅ΡΡ установки Π·Π°ΠΉΠΌΠ΅Ρ‚ всСго ΠΏΠ°Ρ€Ρƒ ΠΌΠΈΠ½ΡƒΡ‚.

  2. Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π²ΠΈΠ΄Π΅ΠΎ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ

    ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π² Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅. Π—Π°Ρ‚Π΅ΠΌ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹, Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π½ΡƒΠΆΠ½Ρ‹ΠΉ Π²ΠΈΠ΄Π΅ΠΎΠΊΠ»ΠΈΠΏ ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ. Π’ΠΈΠ΄Π΅ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ автоматичСски Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ Π½Π° Π¨ΠΊΠ°Π»Ρƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ€Π°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΡƒΡŽ Π² Π½ΠΈΠΆΠ½Π΅ΠΉ части ΠΎΠΊΠ½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

  3. Π’Ρ‹Ρ€Π΅ΠΆΡŒΡ‚Π΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ Π²ΠΈΠ΄Π΅ΠΎ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚ΡŒ (ΠΏΠΎ ТСланию)

    Если Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ Ρ€ΠΎΠ»ΠΈΠΊΠ°, Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Ρ‹Ρ€Π΅Π·Π°Ρ‚ΡŒ Π΅Π³ΠΎ. УстановитС ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ Π² Π½Π°Ρ‡Π°Π»ΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, ΠΊΠ»ΠΈΠΊΠ½ΠΈΡ‚Π΅ ΠΏΡ€Π°Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ ΠΏΠΎ Π²ΠΈΠ΄Π΅ΠΎ Π½Π° Π¨ΠΊΠ°Π»Π΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ ΠΏΠΎ ΠΊΠ½ΠΎΠΏΠΊΠ΅ Π Π°Π·Ρ€Π΅Π·Π°Ρ‚ΡŒ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ установитС ΠΌΠ°Ρ€ΠΊΠ΅Ρ€ Π² ΠΊΠΎΠ½Π΅Ρ† Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π° ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚Π΅ ваши дСйствия. Π’Π°Ρˆ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΎΡ‚Π΄Π΅Π»Π΅Π½ с ΠΎΠ±Π΅ΠΈΡ… сторон, ΠΈ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π΅Π³ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

  4. ΠŸΠΎΠ²Π΅Ρ€Π½ΠΈΡ‚Π΅ Π²ΠΈΠ΄Π΅ΠΎ

    Π•ΡΡ‚ΡŒ Π΄Π²Π° способа ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚ΡŒ вашС Π²ΠΈΠ΄Π΅ΠΎ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΊΠ»ΠΈΠΏ Π½Π° 90, 180 ΠΈΠ»ΠΈ 360 градусов ΠΏΠΎ часовой стрСлкС, Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π΅Π³ΠΎ Π½Π° Π¨ΠΊΠ°Π»Π΅ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΈ Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ ΠŸΠΎΠ²ΠΎΡ€ΠΎΡ‚ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°Π·, сколько потрСбуСтся.

    Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ ΡƒΠ³ΠΎΠ» ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° для вашСго ΠΊΠ»ΠΈΠΏΠ°, Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ½ΠΎΠΏΠΊΡƒ ΠŸΠΎΠ²ΠΎΡ€ΠΎΡ‚ ΠΈ ΠΊΠ°Π΄Ρ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°ΠΉΡ‚Π΅ Π±Π΅Π³ΡƒΠ½ΠΎΠΊ Π£Π³ΠΎΠ», ΠΏΠΎΠΊΠ° Π½Π΅ достигнитС ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠ³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°. Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π²ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΡƒΠ³Π»Π° ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚Π° Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ ΠΏΠΎΠ»Π΅ справа ΠΎΡ‚ Π±Π΅Π³ΡƒΠ½ΠΊΠ°.

  5. Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚Π΅ Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ΅ Π²ΠΈΠ΄Π΅ΠΎ

    НаТмитС ΠΊΠ½ΠΎΠΏΠΊΡƒ Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈ Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΎΠ΄Π½Ρƒ ΠΈΠ· доступных ΠΎΠΏΡ†ΠΈΠΉ экспорта. Movavi Video Editor ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ всС популярныС Π²ΠΈΠ΄Π΅ΠΎΡ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ΅ Π²ΠΈΠ΄Π΅ΠΎ Π² AVI, MP4, 3GP, MOV ΠΈΠ»ΠΈ Π² любом Π΄Ρ€ΡƒΠ³ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅. Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π²ΠΈΠ΄Π΅ΠΎ для просмотра Π½Π° ΠΏΠ΅Ρ€ΡΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅, Π½ΠΎΡƒΡ‚Π±ΡƒΠΊΠ΅ ΠΈΠ»ΠΈ мобильном устройствС. Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ экспорт Π²ΠΈΠ΄Π΅ΠΎ, Π½Π°ΠΆΠΌΠΈΡ‚Π΅ Π‘Ρ‚Π°Ρ€Ρ‚. Π’ΠΎΡ‚ ΠΈ всС! Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅, ΠΊΠ°ΠΊΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ ΠΏΡ€ΠΎΡ‰Π΅ ΠΈ эффСктивнСС всСго ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π²ΠΈΠ΄Π΅ΠΎ.

Π’ΠΈΠ΄Π΅ΠΎΡ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ Movavi

Π‘ΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π²ΠΈΠ΄Π΅ΠΎ – ΠΏΡ€ΠΎΡ‰Π΅ простого!

  • Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ Π²ΠΈΠ΄Π΅ΠΎ, Ρ„ΠΎΡ‚ΠΎ ΠΈ Π°ΡƒΠ΄ΠΈΠΎ Π½Π° ΠΌΠΎΠ½Ρ‚Π°ΠΆΠ½ΠΎΠΌ столС

  • ДобавляйтС ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρ‹, Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ ΠΈ Ρ‚ΠΈΡ‚Ρ€Ρ‹

  • ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΠΉΡ‚Π΅ спСцэффСкты – Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π₯Ρ€ΠΎΠΌΠ°ΠΊΠ΅ΠΉ ΠΈ Π—Π°ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠ΅ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅

  • БохраняйтС Π²ΠΈΠ΄Π΅ΠΎ Π² любом популярном Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅

Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ инструкции

ΠžΡΡ‚Π°Π»ΠΈΡΡŒ вопросы?

ΠœΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ

90000 Rotate images (correctly) with OpenCV and Python 90001 90002 90003 90004 90002 Let me tell you an embarrassing story of 90006 how I 90007 wasted 90008 three weeks of research time 90009 during graduate school six years ago. 90004 90002 It was the end of my second semester of coursework. 90004 90002 I had taken all of my exams early and all my projects for the semester had been submitted. 90004 90002 Since my school obligations were essentially nil, I started experimenting with (automatically) identifying prescription pills in images, something I know a thing or two about (but back then I was just getting started with my research).90004 90002 At the time, my research goal was to find and identify methods to reliably quantify pills in a 90007 rotation invariant 90008 manner. Regardless of how the pill was rotated, I wanted the output feature vector to be (approximately) the same (the feature vectors will never be to 90007 completely identical 90008 in a real-world application due to lighting conditions, camera sensors, floating point errors , etc.). 90004 90002 After the first week I was making fantastic progress. 90004 90002 I was able to extract features from my dataset of pills, index them, and then 90007 identify 90008 my test set of pills regardless of how they were oriented … 90004 90002 … however, there was a problem: 90004 90002 90006 My method was only working with 90007 round, circular pills 90008 — I was getting completely nonsensical results for 90007 oblong pills.90008 90009 90004 90002 How could that be? 90004 90002 I racked my brain for the explanation. 90004 90002 Was there a flaw in the logic of my feature extraction algorithm? 90004 90002 Was I not matching the features correctly? 90004 90002 Or was it something else entirely … 90006 90007 like a problem with my image preprocessing. 90008 90009 90004 90002 While I might have been ashamed to admit this as a graduate student, the problem was the latter: 90004 90002 90006 I goofed up.90009 90004 90002 It turns out that during the image preprocessing phase, I was rotating my images incorrectly. 90004 90002 Since round pills have are approximately square in their aspect ratio, the rotation bug was not a problem for them. Here you can see a round pill being rotated a full 360 degrees without an issue: 90004 90063 90006 Figure 1: 90009 Rotating a circular pill does not reveal any obvious problems. 90002 But for oblong pills, they would be «cut off» in the rotation process, like this: 90004 90068 90006 Figure 2: 90009 However, rotating oblong pills using the OpenCV’s standard 90007 cv2.getRotationMatrix2D 90008 and 90007 cv2.warpAffine 90008 functions caused me some problems that were not immediately obvious. 90002 In essence, I was only quantifying 90007 part 90008 of the rotated, oblong pills; hence my strange results. 90004 90002 I spent 90007 three weeks 90008 and 90007 part of my Christmas vacation 90008 banging my head against the wall trying to diagnose the bug — only to feel quite embarrassed when I realized it was due to me being negligent with the 90084 cv2.rotate 90085 function. 90004 90002 You see, the size of the output image needs to be 90007 adjusted 90008, otherwise, the corners of my image would be cut off. 90004 90002 How did I accomplish this and squash the bug for good? 90004 90002 90006 To learn how to rotate images with OpenCV such that the 90007 entire 90008 image is included and 90007 none 90008 of the image is cut off, 90007 just keep reading. 90008 90009 90004 90103 Rotate images (correctly) with OpenCV and Python 90104 90002 In the remainder of this blog post I’ll discuss common issues that you may run into when rotating images with OpenCV and Python.90004 90002 Specifically, we’ll be examining the problem of what happens when the corners of an image are «cut off» during the rotation process. 90004 90002 To make sure we all understand this rotation issue with OpenCV and Python I will: 90004 90111 90112 Start with a simple example demonstrating the rotation problem. 90113 90112 Provide a rotation function that ensures images are not cut off in the rotation process. 90113 90112 Discuss how I resolved my pill identification issue using this method.90113 90118 90119 A simple rotation problem with OpenCV 90120 90002 Let’s get this blog post started with an example script. 90004 90002 Open up a new file, name it 90084 rotate_simple.py 90085, and insert the following code: 90004 90127 # import the necessary packages import numpy as np import argparse import imutils import cv2 # Construct the argument parse and parse the arguments ap = argparse.ArgumentParser () ap.add_argument ( «- i», «—image», required = True, help = «path to the image file») args = vars (ap.parse_args ()) 90128 90002 90006 Lines 2-5 90009 start by importing our required Python packages. 90004 90002 If you do not already have imutils, my series of OpenCV convenience functions installed, you’ll want to do that now: 90004 90135 $ pip install imutils 90128 90002 If you 90007 already 90008 have 90084 imutils 90085 installed, make sure you have upgraded to the latest version: 90004 90143 $ pip install —upgrade imutils 90128 90002 From there, 90006 Lines 8-10 90009 parse our command line arguments.We only need a single switch here, 90084 —image 90085, which is the path to where our image resides on disk. 90004 90002 Let’s move on to actually rotating our image: 90004 90153 # load the image from disk image = cv2.imread (args [ «image»]) # Loop over the rotation angles for angle in np.arange (0, 360, 15): rotated = imutils.rotate (image, angle) cv2.imshow ( «Rotated (Problematic)», rotated) cv2.waitKey (0) # Loop over the rotation angles again, this time ensuring # No part of the image is cut off for angle in np.arange (0, 360, 15): rotated = imutils.rotate_bound (image, angle) cv2.imshow ( «Rotated (Correct)», rotated) cv2.waitKey (0) 90128 90002 90006 Line 14 90009 loads the image we want to rotate from disk. 90004 90002 We then loop over various angles in the range 90007 [0, 360] 90008 in 15 degree increments (90006 Line 17 90009). 90004 90002 For each of these angles we call 90084 imutils.rotate 90085, which rotates our 90084 image 90085 the specified number of 90084 angle 90085 degrees about the center of the image.We then display the rotated image to our screen. 90004 90002 90006 Lines 24-27 90009 perform an identical process, but this time we call 90084 imutils.rotate_bound 90085 (I’ll provide the implementation of this function in the next section). 90004 90002 As the name of this method suggests, we are going to ensure the 90007 entire image 90008 is bound inside the window and none is cut off. 90004 90002 To see this script in action, be sure to download the source code using the 90006 90007 «Downloads» 90008 90009 section of this blog post, followed by executing the command below: 90004 90189 $ python rotate_simple.py —image images / saratoga.jpg 90128 90002 The output of using the 90084 imutils.rotate 90085 function on a non-square image can be seen below: 90004 90195 90006 Figure 3: 90009 An example of corners being cut off when rotating an image using OpenCV and Python. 90002 As you can see, the image is «cut off» when it’s rotated — the entire image is not kept in the field of view. 90004 90002 But if we use 90084 imutils.rotate_bound 90085 we can resolve this issue: 90004 90204 90006 Figure 4: 90009 We can ensure the entire image is kept in the field of view by modifying the matrix returned by 90007 cv2.getRotationMatrix2D 90008. 90002 Awesome, we fixed the problem! 90004 90002 So does this mean that we should 90007 always 90008 use 90084 .rotate_bound 90085 over the 90084 .rotate 90085 method? 90004 90002 What makes it so special? 90004 90002 And what’s going on under the hood? 90004 90002 I’ll answer these questions in the next section. 90004 90119 Implementing a rotation function that 90007 does not 90008 cut off your images 90120 90002 Let me start off by saying there is 90007 nothing 90008 wrong with the 90084 cv2.getRotationMatrix2D 90085 and 90084 cv2.warpAffine 90085 functions that are used to rotate images inside OpenCV. 90004 90002 In reality, these functions give us more freedom than perhaps we are comfortable with (sort of like comparing manual memory management with C versus automatic garbage collection with Java). 90004 90002 The 90084 cv2.getRotationMatrix2D 90085 function 90006 90007 does not care 90008 90009 if we would like the entire rotated image to kept. 90004 90002 It 90006 90007 does not care 90008 90009 if the image is cut off.90004 90002 And it 90006 90007 will not help you 90008 90009 if you shoot yourself in the foot when using this function (I found this out the hard way and it took 3 weeks to stop the bleeding). 90004 90002 Instead, what you need to do is understand 90007 what 90008 the rotation matrix is ​​and 90007 how 90008 it’s constructed. 90004 90002 You see, when you rotate an image with OpenCV you call 90084 cv2.getRotationMatrix2D 90085 which returns a matrix 90007 M 90008 that looks something like this: 90004 90271 90006 Figure 5: 90009 The structure of the matrix 90007 M 90008 returned by 90007 cv2.getRotationMatrix2D 90008. 90002 This matrix looks scary, but I promise you: it’s not. 90004 90002 To understand it, let’s assume we want to rotate our image 90281 degrees about some center 90282 coordinates at some 90007 scale 90008 (i.e., smaller or larger). 90004 90002 We can then plug in values ​​for 90287 and 90288: 90004 90002 90291 and 90292 90004 90002 That’s all fine and good for simple rotation — but it does not take into account what happens if an image is cut off along the borders.How do we remedy this? 90004 90002 The answer is inside the 90084 rotate_bound 90085 function in convenience.py of imutils: 90004 90300 def rotate_bound (image, angle): # Grab the dimensions of the image and then determine the # center (H, w) = image.shape [: 2] (CX, cY) = (w // 2, h // 2) # Grab the rotation matrix (applying the negative of the # Angle to rotate clockwise), then grab the sine and cosine # (I.e., the rotation components of the matrix) M = cv2.getRotationMatrix2D ((cX, cY), -angle, 1.0) cos = np.abs (M [0, 0]) sin = np.abs (M [0, 1]) # Compute the new bounding dimensions of the image nW = int ((h * sin) + (w * cos)) nH = int ((h * cos) + (w * sin)) # Adjust the rotation matrix to take into account translation M [0, 2] + = (nW / 2) — cX M [1, 2] + = (nH / 2) — cY # Perform the actual rotation and return the image return cv2.warpAffine (image, M, (nW, nH)) 90128 90002 On 90006 Line 41 90009 we define our 90084 rotate_bound 90085 function.90004 90002 This method accepts an input 90084 image 90085 and an 90084 angle 90085 to rotate it by. 90004 90002 We assume we’ll be rotating our image about its center 90007 (x, y) 90008 -coordinates, so we determine these values ​​on 90006 lines 44 and 45 90009. 90004 90002 Given these coordinates, we can call 90084 cv2.getRotationMatrix2D 90085 to obtain our rotation matrix 90007 M 90008 (90006 Line 50 90009). 90004 90002 However, to adjust for any image border cut off issues, we need to apply some manual calculations of our own.90004 90002 We start by grabbing the cosine and sine values ​​from our rotation matrix 90007 M 90008 (90006 Lines 51 and 52 90009). 90004 90002 This enables us to compute the new width and height of the rotated image, ensuring no part of the image is cut off. 90004 90002 Once we know the new width and height, we can adjust for translation on 90006 Lines 59 and 60 90009 by modifying our rotation matrix once again. 90004 90002 Finally, 90084 cv2.warpAffine 90085 is called on 90006 Line 63 90009 to rotate the actual image using OpenCV while ensuring none of the image is cut off.90004 90002 For some other interesting solutions (some better than others) to the rotation cut off problem when using OpenCV, be sure to refer to this StackOverflow thread and this one too. 90004 90119 Fixing the rotated image «cut off» problem with OpenCV and Python 90120 90002 Let’s get back to my original problem of rotating oblong pills and how I used 90084 .rotate_bound 90085 to solve the issue (although back then I had not created the 90084 imutils 90085 Python package — it was simply a utility function in a helper file) .90004 90002 We’ll be using the following pill as our example image: 90004 90360 90006 Figure 6: 90009 The example oblong pill we will be rotating with OpenCV. 90002 To start, open up a new file and name it 90084 rotate_pills.py 90085. Then, insert the following code: 90004 90367 # import the necessary packages import numpy as np import argparse import imutils import cv2 # Construct the argument parse and parse the arguments ap = argparse.ArgumentParser () ap.add_argument ( «- i», «—image», required = True, help = «path to the image file») args = vars (ap.parse_args ()) 90128 90002 90006 Lines 2-5 90009 import our required Python packages. Again, make sure you have installed and / or upgraded the imutils Python package before continuing. 90004 90002 We then parse our command line arguments on 90006 Lines 8-11 90009. Just like in the example at the beginning of the blog post, we only need one switch: 90084 —image 90085, the path to our input image. 90004 90002 Next, we load our pill image from disk and preprocess it by converting it to grayscale, blurring it, and detecting edges: 90004 90381 # load the image from disk, convert it to grayscale, blur it, # And apply edge detection to reveal the outline of the pill image = cv2.imread (args [ «image»]) gray = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY) gray = cv2.GaussianBlur (gray, (3, 3), 0) edged = cv2.Canny (gray, 20, 100) 90128 90002 After executing these preprocessing functions our pill image now looks like this: 90004 90385 90006 Figure 7: 90009 Detecting edges in the pill. 90002 The outline of the pill is clearly visible, so let’s apply contour detection to find the outline of the pill: 90004 90390 # find contours in the edge map cnts = cv2.findContours (edged.copy (), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) cnts = imutils.grab_contours (cnts) 90128 90002 We are now ready to extract the pill ROI from the image: 90004 90394 # ensure at least one contour was found if len (cnts)> 0: # Grab the largest contour, then draw a mask for the pill c = max (cnts, key = cv2.contourArea) mask = np.zeros (gray.shape, dtype = «uint8») cv2.drawContours (mask, [c], -1, 255, -1) # Compute its bounding box of pill, then extract the ROI, # And apply the mask (X, y, w, h) = cv2.boundingRect (c) imageROI = image [y: y + h, x: x + w] maskROI = mask [y: y + h, x: x + w] imageROI = cv2.bitwise_and (imageROI, imageROI, mask = maskROI) 90128 90002 First, we ensure that at least 90007 one 90008 contour was found in the edge map (90006 Line 26 90009). 90004 90002 Provided we have at least one contour, we construct a 90084 mask 90085 for the largest contour region on 90006 Lines 29 and 30 90009. 90004 90002 Our 90084 mask 90085 looks like this: 90004 90412 90006 Figure 8: 90009 The mask representing the entire pill region in the image.90002 Given the contour region, we can compute the 90007 (x, y) 90008 -coordinates of the bounding box of the region (90006 Line 34 90009). 90004 90002 Using both the bounding box and 90084 mask 90085, we can extract the actual pill region ROI (90006 Lines 35-38 90009). 90004 90002 Now, let’s go ahead and apply both the 90084 imutils.rotate 90085 and 90084 imutils.rotate_bound 90085 functions to the 90084 imageROI 90085, just like we did in the simple examples above: 90004 90435 # loop over the rotation angles for angle in np.arange (0, 360, 15): rotated = imutils.rotate (imageROI, angle) cv2.imshow ( «Rotated (Problematic)», rotated) cv2.waitKey (0) # Loop over the rotation angles again, this time ensure the # Entire pill is still within the ROI after rotation for angle in np.arange (0, 360, 15): rotated = imutils.rotate_bound (imageROI, angle) cv2.imshow ( «Rotated (Correct)», rotated) cv2.waitKey (0) 90128 90002 After downloading the source code to this tutorial using the 90006 90007 «Downloads» 90008 90009 section below, you can execute the following command to see the output: 90004 90443 $ python rotate_pills.py —image images / pill_01.png 90128 90002 The output of 90084 imutils.rotate 90085 will look like: 90004 90449 90006 Figure 9: 90009 Incorrectly rotating an image with OpenCV causes parts of the image to be cut off. 90002 Notice how the pill is cut off during the rotation process — we need to 90453 explicitly 90454 compute the new dimensions of the rotated image to ensure the borders are not cut off. 90004 90002 By using 90084 imutils.rotate_bound 90085, we can ensure that no part of the image is cut off when using OpenCV: 90004 90460 90006 Figure 10: 90009 By modifying OpenCV’s rotation matrix we can resolve the issue and ensure the entire image is visible.90002 Using this function I was 90007 finally 90008 able to finish my research for the winter break — but not before I felt quite embarrassed about my rookie mistake. 90004 90103 Summary 90104 90002 In today’s blog post I discussed how image borders can be cut off when rotating images with OpenCV and 90084 cv2.warpAffine 90085. 90004 90002 The fact that image borders can be cut off is 90007 not 90008 a bug in OpenCV — in fact, it’s how 90084 cv2.getRotationMatrix2D 90085 and 90084 cv2.warpAffine 90085 are designed. 90004 90002 While it may seem frustrating and cumbersome to compute new image dimensions to ensure you do not lose your borders, it’s actually a blessing in disguise. 90004 90002 OpenCV gives us 90007 so much control 90008 that we can modify our rotation matrix to make it do 90007 exactly 90008 what we want. 90004 90002 Of course, this requires us to know how our rotation matrix 90007 M 90008 is formed and what each of its components represents (discussed earlier in this tutorial).Provided we understand this, the math falls out naturally. 90004 90002 To learn more about image processing and computer vision, be sure to take a look at the PyImageSearch Gurus course where I discuss these topics in more detail. 90004 90002 90007 90006 Otherwise, I encourage you to enter your email address in the form below to be notified when future blog posts are published. 90009 90008 90004 90501 90002 90503 Download the Source Code and FREE 17-page Resource Guide 90504 90004 90002 Enter your email address below to get a.zip of the code and a 90006 FREE 17-page Resource Guide on Computer Vision, OpenCV, and Deep Learning. 90009 Inside you’ll find my hand-picked tutorials, books, courses, and libraries to help you master CV and DL! 90004 .90000 python — Is there a way i can detect the image orientation and rotate the image to the right angle? 90001 Stack Overflow 90002 90003 Products 90004 90003 Customers 90004 90003 Use cases 90004 90009 90010 90003 Stack Overflow Public questions and answers 90004 90003 Teams Private questions and answers for your team 90004 90003 Enterprise Private self-hosted questions and answers for your enterprise 90004 90003 Jobs Programming and related technical career opportunities 90004 90003 Talent Hire technical talent 90004 90003 Advertising Reach developers worldwide 90004 90009.90000 c # — How to rotate a BitmapSource by any angle? 90001 Stack Overflow 90002 90003 Products 90004 90003 Customers 90004 90003 Use cases 90004 90009 90010 90003 Stack Overflow Public questions and answers 90004 90003 Teams Private questions and answers for your team 90004 90003 Enterprise Private self-hosted questions and answers for your enterprise 90004 90003 Jobs Programming and related technical career opportunities 90004 90003 Talent Hire technical talent 90004 90003 Advertising Reach developers worldwide 90004 90009 .90000 How to rotate a 3D image by a random angle in python 90001 Stack Overflow 90002 90003 Products 90004 90003 Customers 90004 90003 Use cases 90004 90009 90010 90003 Stack Overflow Public questions and answers 90004 90003 Teams Private questions and answers for your team 90004 90003 Enterprise Private self-hosted questions and answers for your enterprise 90004 90003 Jobs Programming and related technical career opportunities 90004 90003 Talent Hire technical talent 90004 90003 Advertising Reach developers worldwide 90004 90009 .

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

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