DLLki można ściągnąć tutaj
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.
Wiele modułów:
Praktyczne zapoznanie się z biblioteką warto zacząć od oficjalnych tutoriali (ze strony z dokumentacją):
Indeks C++ - tutaj znajduje się spis wszystkich(?) funkcji/typów/itp. z API.
Tutaj (pdf) można znaleźć "ściągę" z API C++ do biblioteki.
#include "opencv2/core/core.hpp" #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" using namespace cv; int main(int argc, char* argv[]) { // wczytaj jako obraz 3-kanałowy (BGR, nie RGB!) Mat image = imread("lena.jpg"); <- uwaga na plik z obrazkiem if (image.empty()) // nie udało się wczytać return 1; // wczytaj jako obraz w odcieniach szarości (1 kanał) Mat grey = imread("lena.jpg", 0); // stwórz okienka z obrazkami imshow("obrazek 1", image); imshow("obrazek 2", grey); // wyświetlaj i obsługuj okienka // (są one prawidłowo odświeżana TYLKO w trakcie // działania poniższej funkcji) waitKey(0); // 0 - czekaj na klawisz // x - czekaj na klawisz lub x ms return 0; }
Mat - klasa do przechowywania obrazków i macierzy (z automatycznym zwalnianiem pamięci)
imread - wczytuje obraz z pliku (domyślnie 3 kanały: BGR)
imshow - tworzy okienko z obrazkiem
waitKey - czeka na klawisz oraz umożliwia obsługę okienek
Kompilatorowi należy podać ścieżkę w której ma szukać plików nagłówkowych biblioteki (np. ścieżka_do/OpenCV2.3/include
)
Linkerowi należy podać ścieżkę w której ma szukać bibliotek OpenCV (np. ścieżka_do/OpenCV2.3/lib
) oraz konkretne moduły biblioteki które ma zlinkować - w powyższym przykładzie będą to:
opencv_core230.lib opencv_highgui220.lib opencv_imgproc230.lib
(wersja release biblioteki)
opencv_core230d.lib opencv_highgui220d.lib opencv_imgproc230d.lib
(wersja debug biblioteki)
Do uruchomienia potrzebne są biblioteki .dll - jeśli OpenCV nie był instalowany to ścieżki do tych bibliotek nie są ustawione w zmiennych środowiskowych. Dlatego najprościej skopiować je (OpenCV2.3/bin) do katalogu z projektem.
Przy uruchamianiu np. z Visual Studio należy zwrócić uwagę gdzie jest ustawiony "working directory" i tam wgrać biblioteki .dll oraz plik z obrazkiem.
Typ elementów macierzy określa się w trakcie jej tworzenia poprzez odpowiednią stałą:CV_
<liczba bitów><typ>C
<liczba kanałów>
Przykład:
Proszę spojrzeć do ściągi (C++ Cheatsheet.pdf)
image.at<TYP>(WIERSZ, KOLUMNA)
- uwaga na współrzędne: najpierw nr wiersza potem kolumny!
Przykładowo:image.at<Vec3b>(11,22)[0] = 255;
spowoduje ustawienie wartości pierwszego (0) kanału (niebieski w formacie BGR) piksela o współrzędnych (x=22,y=11) na 255
saturate_cast
saturate_cast<TYP>
- "nasyca" wartość do odpowiedniego zakresu zależnego od typu
cvtColor
. Następnie wyświetl tylko kanał Hue (do wyodrębnienia pojedynczego kanału użyj mixChannels
albo split
).
absdiff
, add
, multiply
, sqrt
itp.) a nie na pojedynczych pikselach jak w poprzednim ćwiczeniu.
Mat::convertTo
).
compare
lub absdiff
i sum
.
getTickCount
i getTickFrequency
.