πŸš€Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° OpenCV:Бэмплы

πŸš€Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° OpenCV:Бэмплы

@python_lounge

Π˜ΠΌΠΏΠΎΡ€Ρ‚ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ OpenCV

  • ΠŸΠ΅Ρ€Π²ΠΎΠ΅, Ρ‡Ρ‚ΠΎ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ β€” это ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ. Π•ΡΡ‚ΡŒ нСсколько ΠΏΡƒΡ‚Π΅ΠΉ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°, самый распространённый β€” это ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅:
import cv2
  • Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ†ΠΈΡŽ для ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° Π΄Π°Π½Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ:
from cv2 import cv2

Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ°, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ сохранСниС изобраТСния

def loading_displaying_saving():
    img = cv2.imread('girl.jpg', cv2.IMREAD_GRAYSCALE)
    cv2.imshow('girl', img)
    cv2.waitKey(0)
    cv2.imwrite('graygirl.jpg', img)

Для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ изобраТСния ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ cv2.imread(), Π³Π΄Π΅ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ указываСтся ΠΏΡƒΡ‚ΡŒ ΠΊ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ, Π° Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, ΠΌΡ‹ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ, Π² ΠΊΠ°ΠΊΠΎΠΌ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΌ пространствС ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ нашС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² RGB β€” cv2.IMREAD_COLOR, Π² ΠΎΡ‚Ρ‚Π΅Π½ΠΊΠ°Ρ… сСрого β€” cv2.IMREAD_GRAYSCALE. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π΄Π°Π½Π½Ρ‹ΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ cv2.IMREAD_COLOR. Данная функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ 2D (для изобраТСния Π² ΠΎΡ‚Ρ‚Π΅Π½ΠΊΠ°Ρ… сСрого) Π»ΠΈΠ±ΠΎ 3D (для Ρ†Π²Π΅Ρ‚Π½ΠΎΠ³ΠΎ изобраТСния) массив NumPy. Π€ΠΎΡ€ΠΌΠ° массива для Ρ†Π²Π΅Ρ‚Π½ΠΎΠ³ΠΎ изобраТСния: высота x ΡˆΠΈΡ€ΠΈΠ½Π° x 3, Π³Π΄Π΅ 3 β€” это Π±Π°ΠΉΡ‚Ρ‹, ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π±Π°ΠΉΡ‚Ρƒ Π½Π° ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΈΠ· ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚. Π’ изобраТСниях Π² ΠΎΡ‚Ρ‚Π΅Π½ΠΊΠ°Ρ… сСрого всё Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‰Π΅: высота x ΡˆΠΈΡ€ΠΈΠ½Π°.


Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ cv2.imshow() ΠΌΡ‹ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π½Π° нашСм экранС. Π’ качСствС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‘ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ нашСго ΠΎΠΊΠ½Π°, Π° Π²Ρ‚ΠΎΡ€Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΠ»ΠΈ с диска, ΠΎΠ΄Π½Π°ΠΊΠΎ, Ссли ΠΌΡ‹ Π΄Π°Π»Π΅Π΅ Π½Π΅ ΡƒΠΊΠ°ΠΆΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ cv2.waitKey(), Ρ‚ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎ закроСтся. Данная функция останавливаСт Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π΄ΠΎ наТатия клавиши, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ. Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ любая клавиша Π±Ρ‹Π»Π° засчитана пСрСдаётся 0. Π‘Π»Π΅Π²Π° прСдставлСно ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΎΡ‚Ρ‚Π΅Π½ΠΊΠ°Ρ… сСрого, Π° справа Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ RGB:


concatenate_two_girl



И, Π½Π°ΠΊΠΎΠ½Π΅Ρ†, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ cv2.imwrite() записываСм ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² Ρ„Π°ΠΉΠ» Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ jpg(данная Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ всС популярныС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ:png, tiff,jpeg,bmp ΠΈ Ρ‚.Β Π΄., поэтому ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ нашС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π² любом ΠΈΠ· этих Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ²), Π³Π΄Π΅ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ пСрСдаётся нСпосрСдствСнно само Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅, Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ.


Доступ ΠΊ пиксСлям ΠΈ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠΌΠΈ


Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ высоту, ΡˆΠΈΡ€ΠΈΠ½Ρƒ ΠΈ количСство ΠΊΠ°Π½Π°Π»ΠΎΠ² Ρƒ изобраТСния ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ shape:


print("Высота:"+str(img.shape[0]))
print("Π¨ΠΈΡ€ΠΈΠ½Π°:" + str(img.shape[1]))
print("ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΊΠ°Π½Π°Π»ΠΎΠ²:" + str(img.shape[2]))


Π’Π°ΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρƒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Π² ΠΎΡ‚Ρ‚Π΅Π½ΠΊΠ°Ρ… сСрого img.shape[2] Π±ΡƒΠ΄Π΅Ρ‚ нСдоступно, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π΄Π°Π½Π½Ρ‹Π΅ изобраТСния прСдставлСны Π² Π²ΠΈΠ΄Π΅ 2D массива.


Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ пиксСля, Π½Π°ΠΌ просто Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ x ΠΈ y пиксСля, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ нас интСрСсуСт. Π’Π°ΠΊΠΆΠ΅ Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° OpenCV Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΊΠ°Π½Π°Π»Ρ‹ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° RGB Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ ΠΌΡ‹ Π΄ΡƒΠΌΠ°Π΅ΠΌ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… красного, Π·Π΅Π»Π΅Π½ΠΎΠ³ΠΎ ΠΈ синСго, Ρ‚ΠΎ OpenCV Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΈΡ… Π² порядкС синСго, Π·Π΅Π»Π΅Π½ΠΎΠ³ΠΎ ΠΈ красного Ρ†Π²Π΅Ρ‚ΠΎΠ²:


(b, g, r) = img[0, 0]
print("ΠšΡ€Π°ΡΠ½Ρ‹ΠΉ: {}, Π—Π΅Π»Ρ‘Π½Ρ‹ΠΉ: {}, Π‘ΠΈΠ½ΠΈΠΉ: {}".format(r, g, b))


CΠ½Π°Ρ‡Π°Π»Π° ΠΌΡ‹ Π±Π΅Ρ€Ρ‘ΠΌ пиксСль, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ располоТСн Π² Ρ‚ΠΎΡ‡ΠΊΠ΅ (0,0). Π”Π°Π½Π½Ρ‹ΠΉ пиксСль, Π΄Π° ΠΈ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ пиксСль, прСдставлСны Π² Π²ΠΈΠ΄Π΅ ΠΊΠΎΡ€Ρ‚Π΅ΠΆΠ°. Π—Π°ΠΌΠ΅Ρ‚ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… располоТСны Π² порядкС b, g ΠΈ r. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ строкС Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° Π½Π° экран. Как ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ, доступ ΠΊ значСниям пиксСлСй довольно прост, Ρ‚Π°ΠΊΠΆΠ΅ просто ΠΌΠΎΠΆΠ½ΠΎ ΠΈ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ значСниями пиксСлСй:


img[0, 0] = (255, 0, 0)
(b, g, r) = img[0, 0]
 print("ΠšΡ€Π°ΡΠ½Ρ‹ΠΉ: {}, Π—Π΅Π»Ρ‘Π½Ρ‹ΠΉ: {}, Π‘ΠΈΠ½ΠΈΠΉ: {}".format(r, g, b))


Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΉ строкС ΠΌΡ‹ устанавливаСм Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ пиксСля (0, 0) Ρ€Π°Π²Π½Ρ‹ΠΌ (255, 0, 0), Π·Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ снова Π±Π΅Ρ€Ρ‘ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΠΎΠ³ΠΎ пиксСля ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π΅Π³ΠΎ Π½Π° экран, Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΌΠ½Π΅ Π½Π° консоль Π²Ρ‹Π²Π΅Π»ΠΎΡΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:


ΠšΡ€Π°ΡΠ½Ρ‹ΠΉ: 251, Π—Π΅Π»Ρ‘Π½Ρ‹ΠΉ: 43, Π‘ΠΈΠ½ΠΈΠΉ: 65
ΠšΡ€Π°ΡΠ½Ρ‹ΠΉ: 0, Π—Π΅Π»Ρ‘Π½Ρ‹ΠΉ: 0, Π‘ΠΈΠ½ΠΈΠΉ: 255


Report Page