Domowe efekty specjalne - podmiana tła

28.09.2011 - Filip Mróz
TrudnośćTrudność

Efekt końcowy

Zauważmy, że program jest aktualnie bardzo prosty i na wiele sposobów można go ulepszyć. Przedtem jednak dodajmy ostatni szlif, dopisując opcję nagrywania pliku wideo z wyjściowym obrazem. OpenCV udostępnia do tego klasę VideoWriter która pozwala zapisywać wideo klatka po klatce. Będziemy potrzebować trzech nowych zmiennych: na obiekt klasy VideoWriter, na ścieżkę do pliku wyjściowego oraz na informację, czy dodać aktualną klatkę do wideo:
const string recordedMoviePath = "recorded.avi";
VideoWriter recordedMovie;
bool isRecording;
Niech klawisz "r" służy do rozpoczęcia i zakończenia nagrywania oraz niech nowe nagranie zastępuje stare. Dzięki temu kod obsługujący nagrywanie będzie bardzo zwięzły. Na początku dodajmy informacje o funkcjonalności nowego klawisza:
printf("Press 'r' to start and stop recording\n");
Oraz jego obsługę:
case 'r':
	if(isRecording == true) {
		isRecording = false;
		printf("Recording has been stoped!\n");
	}
	else {
		recordedMovie.open(recordedMoviePath,0,FPS,Size(640,480));
		isRecording = true;
		printf("Recording has started!\n");
	}
break;
 
Parametr 0 funkcji open oznacza, że nie będziemy używać żadnej kompresji. Następny parametr, czyli ilość klatek na sekundę, powinien być mniejszy niż FPS, ponieważ FPS ustala tylko długość przerwy między kolejnymi iteracjami pętli i nie wlicza czasu, jaki program spędza nad tworzeniem obrazu, który chcemy zapisać. Użycie FPS oznacza, że zapisany film przy odtworzeniu będzie prawdopodobnie mocno przyśpieszony. Aby temu zaradzić, można albo wykorzystać do jego spowolnienia jakiś inny program, albo metodą prób i błędów zmniejszyć parametr.

Ostatni kawałek kodu (i najważniejszy!) dodaje aktualną klatkę do recordMovie:
if(isRecording==true) {
	recordedMovie << resultImage;
}
Końcową wersję kodu można znaleźć w paczce ze źródłami w pliku: main6_nagrywanie.cpp
Dotarliśmy prawie do końca artykułu i mamy gotowy program. Na jego podstawie można już uzyskać całkiem ciekawe efekty (tzn. zgrany zostanie tylko rezultat, lewa strona została dodana poglądowo).



5
Twoja ocena: Brak Ocena: 5 (3 ocen)

Copyright © 2008-2010 Wrocławski Portal Informatyczny

design: rafalpolito.com