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_castsaturate_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.