Krzysztof Krawiec


Home

Research:

edit SideBar

Strona laboratorium

Zajęcia 1

Wstęp

Python

Python to stosunkowo prosty język programowania. Na zajęciach z Przetwarzania Obrazów będzie potrzebna znajomość tylko jego podstaw (używana wersja 2.7).

Oficjalna strona języka Python: http://python.org/
Dokumentacja wersji 2.7: http://docs.python.org/2.7
Poznanie języka warto zacząć od jakiegoś tutoriala, np:

Dostępne są również materiały w języku polskim, np.:

NumPy

Biblioteka do Pythona zawierająca m.in. obsługę tablic wielowymiarowych. Wszystkie przetwarzane na zajęciach obrazy będą tablicami obsługiwanymi przez NumPy.

Oficjalna strona NumPy: http://numpy.scipy.org/
Dokumentacja: http://docs.scipy.org/doc/
Tutorial: http://www.scipy.org/Tentative_NumPy_Tutorial

OpenCV

OpenCV to bardzo rozbudowana biblioteka graficzna implementująca ponad 500 algorytmów przetwarzania i rozpoznawania obrazów. Jest ona zaimplementowana w języku C/C++ z interfejsami m.in. do języka Pythona.

Oficjalna strona OpenCV: http://opencv.willowgarage.com
Dokumentacja OpenCV 2.3: http://opencv.itseez.com/

OpenCV od wersji 2.3 w Pythonie do reprezentowania obrazów używa tablic z pakietu NumPy. Dlatego wszystkie podstawowe operacje na obrazach (np. odczytanie wartości jakiegoś piksela) można wykonywać tak jak na zwykłych tablicach wielowymiarowych.

Mini-tutorialik

Python

Python - można działać albo w trybie interaktywnym albo w edytorze napisać program w pliku cośtam.py i go uruchomić (najlepiej z konsoli bo w przypadku błędu wyświetli informację gdzie go szukać).

Najlepiej używać jakiegoś edytora przystosowanego do języka Python - pod systemem Windows jest np. Python IDLE.

Cechy języka Python:

  • rozróżnia duże i małe litery
  • nie trzeba deklarować zmiennych, ich typ jest ustawiany dynamicznie
  • wcięcia grupują instrukcje (np. w blokach if lub for)

W trybie interaktywnym po wpisaniu dowolnego wyrażenia (uruchomienia funkcji) Python wypisuje obliczony wynik.

Zmienne:

a = 12

przypisanie zmiennej a odpowiedniej wartości (liczba całkowita)

b = 12.34       # a od krzyżyka mamy jakis komentarz...

przypisanie zmiennej b wartości zmiennoprzecinkowej

print a, b

wyświetlenie (na konsoli) wartości obu zmiennych

c = 1,2,3

stworzenie tzw. krotki (ang. tuple)

print c, c[1]

wyświetlenie całej krotki oraz tylko jego drugiego (indeksujemy od zera) elementu

def dodaj(z1, z2):
    return z1 + z2 # linie wcięte należą do bloku funkcji

tworzy funkcję sumującą oba argumenty (ważne jest wcięcie wszystkich instrukcji)

dodaj(1,2)

wywołuje odpowiednią funkcję

for i in range(10):
    print i,  # przecinek - wypisywanie w tej samej linii

wyświetli: 0 1 2 3 4 5 6 7 8 9

NumPy

from numpy import *

wczytanie pakietu numpy (wszystkie funkcje będą dostępne w aktualnej przestrzeni nazw)

tab = zeros((3,5), uint8)

stworzenie macierzy (tablicy dwuwymiarowej) z 3 wierszami i 5 kolumnami; każdy element tablicy jest 8-bitową liczbą bez znaku (wartości 0-255)

tab[1,3] = 5  # drugi wiersz, czwarta kolumna

ustawienie nowej wartości pojedynczemu elementowi tablicy (indeksowanie od ZERA)

tab[1,3] = 257  # wartość z poza zakresu typu uint8!!

jaka będzie wartość ustawianego elementu?

Indeksowanie
tab = arange(0,12).reshape((4,3))

Wycięcie pierwszego wiersza:

tab[0,:] # konstrukcja ":" oznacza cały możliwy zakres

Wycięcie zakresu wierszy:

tab[1:3,:] # od wiersza o indeksie 1 do wierszy o indeksie <3

Przypisanie nowych wartości elementom ze środkowej kolumny:

tab[:,1] = [-1,-2,-3,-4]

OpenCV 2.3.1

import cv2

wczytanie pakietu OpenCV 2.3 (wszystkie funkcje będą dostępne poprzez nazwę cv2)

img = cv2.imread("c:/OpenCV2.3.1/samples/c/lena.jpg")

wczytanie przykładowego obrazka

img.shape

wymiary tablicy img - w przypadku obrazków kolorowych trzeci wymiar reprezentuje kolory w przestrzeni BGR

cv2.imshow("tytuł okna", img) # stworzenie okna z obrazkiem
cv2.waitKey()                 # ważna funkcja!!!
cv2.destroyAllWindows()       # zamknięcie wszystkich okien

Funkcja waitKey() odpowiada za obsługę okienek (ich rysowanie/odświeżanie/interakcję z użytkownikiem). Funkcja zwraca kod klawisza który został naciśnięty.

img = zeros((100,100,3), uint8)
img[10,10,0] = 255 # Blue
img[10,10,1] = 255 # Green
img[10,10,2] = 255 # Red

img[20,20] = (0, 255, 255) # kolor żółty

cv2.imshow("okno", img)
cv2.waitKey()
cv2.destroyAllWindows()


Powered by PmWiki