Domowe efekty specjalne - podmiana tła
28.09.2011 - Filip Mróz
Wyświetlanie obrazu z kameryPierwszym krokiem podczas pracy z kamerą jest jej poprawna instalacja. Instalujemy sterowniki, a następnie podłączamy kamerę. Dobrze jest sprawdzić czy wszystko działa, używając dostarczonego z kamerą programu albo za pomocą małej aplikacji AMCap.
Kamera działa, pora podłączyć się do niej za pośrednictwem OpenCV. Jest to niezwykle proste i, co ważne, kod jest niezależny od rodzaju używanej kamery czy interfejsu. Tworzymy nowy projekt, nazwijmy go #include <cstdio> using namespace std; #include "opencv2/highgui/highgui.hpp" using namespace cv; VideoCapture camera; int main(int argc, char *argv[]) { camera.open(0); if(!camera.isOpened()){ printf("Cannot connect to the camera!\n"); getchar(); return -1; } else { printf("Connection established!\n"); getchar(); } return 0; } Program próbuje się połączyć z kamerą o identyfikatorze 0 i informuje o rezultacie. Jeśli identyfikator zwiększymy poza liczbę kamer podłączonych do komputera to podłączy się do ostatniej dostępnej.
Kolejnym krokiem jest pobranie aktualnego obrazu z kamery i wyświetlenie go. Wystarczy zadeklarować obiekt typu printf("Connection established!\n"); Mat inputImage; camera >> inputImage; imshow("Camera Image", inputImage); waitKey(0);
Sukces! Udało nam się z poziomu C++ wykorzystać kamerę do zrobienia zdjęcia. Wyświetlanie wideo z kameryPora ożywić trochę program i napisać pętlę, która będzie wyświetlać aktualny obraz z kamery na żywo. Najpierw dodajmy stałą regulującą prędkość odświeżania: const int FPS = 30; Następnie dodajmy pętlę, która powtarza wcześniej napisaną operację wyświetlania, do momentu naciśnięcia klawisza 'k': char key=0; while(key!='k') { camera >> inputImage; imshow("Camera Image", inputImage); key = waitKey(1000/FPS); }
Sporo kamer domyślnie przesyła obraz o rozdzielczości 320x240. Możemy temu zaradzić, zwiększając rozdzielczość (jeśli kamera na to pozwala) poprzez dodanie dwóch komend bezpośrednio po nawiązaniu połączenia: camera.set(CV_CAP_PROP_FRAME_WIDTH,640); camera.set(CV_CAP_PROP_FRAME_HEIGHT,480); Mamy teraz program, który potrafi wyświetlać w czasie rzeczywistym obraz z kamery. Kolejnym krokiem będzie zapamiętanie obrazu tła. (3 ocen) |
Copyright © 2008-2010 Wrocławski Portal Informatyczny
design: rafalpolito.com