Zajęcia 4 - Przetwarzanie lokalne
Zadania
- Przekonwertować kolorowy obrazek do innych przestrzeni barw używając funkcji (cv2.cvtColor). Obejrzeć każdy z wynikowych kanałów w osobnym oknie.
Uwaga! przed wyświetleniem jednego z kanałów należy go skopiować, tzn:
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
hue = hsv[:,:,0].copy() # kopiujemy!
show(hue)
- BGR -> gray (zamiana na odcienie szarości) [code = cv2.COLOR_BGR2GRAY]
- BGR -> HSV [code = cv2.COLOR_BGR2HSV]
- BGR -> HSL [code = cv2.COLOR_BGR2HLS]
- BGR -> YCrCb [code = cv2.COLOR_BGR2YCR_CB]
- Napisać funkcję która liczy i wyświetla histogram z obrazka jednokanałowego. Można użyć funkcji cv2.calcHist lub policzyć go "ręcznie" iterując po elementach macierzy i zliczając liczbę wystąpień każdej wartości (czyli odcienia szarości). Obliczony i znormalizowany histogram wyświetlić (stworzyć odpowiedni obrazek/macierz) w postaci słupków.
- Przefiltrować obraz używając filtru dolnoprzepustowego (GaussianBlur lub
blur
) oraz filtru medianowego (medianBlur
). Proszę przetestować działanie dla różnych rozmiarów okna używanymi przez te funkcje (rozmiar najlepiej ustawiać suwakiem) - uwaga na wartości - część funkcji akceptuje tylko nieparzysty rozmiar okna.
Proszę obserwować wpływ działania filtrów na histogram obrazu.
- Wczytaj ten obrazek jako jednokanałowy (
cv2.imread(scieżka, 0)
). Następnie sprawdź czy da się wyodrębnić z niego tylko napis (czarny obraz z białymi literami) używając zwykłego progowania przy pomocy funkcji cv2.threshold. Wartość progu ustawiaj za pomocą suwaka - obserwuj wynik działania.
- Spróbuj wyodrębnić napis z poprzedniego zadania używając tym razem funkcji cv2.adaptiveThreshold - podając odpowiednie parametry tym razem powinno się udać. Suwakami steruj rozmiarem okna oraz stałą
C
.
Przykładowe rozwiązanie zadań