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.:
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 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.
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:
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
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?
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]
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()