Zapis obrazu z kamery na USB

0

Witam!
Problem często zadawany na forach, niestety bez dokładniejszych odpowiedzi.
Jeśli macie jakieś materiały w tym temacie podzielcie się nimi ;)

Chce zapisać obraz z kamery
na dysku, ale nie chce go wyświetlać na ekranie.
Przy pomocy capCreateCaptureWindowpobieram obraz wyświetlam,
zapisuje, ale jak to zrobić bez wyświetlania ?!
Pozdrawiam!

0
EmF napisał(a)

Witam!
Problem często zadawany na forach, niestety bez dokładniejszych odpowiedzi.
Jeśli macie jakieś materiały w tym temacie podzielcie się nimi ;)

Chce zapisać obraz z kamery
na dysku, ale nie chce go wyświetlać na ekranie.
Przy pomocy capCreateCaptureWindowpobieram obraz wyświetlam,
zapisuje, ale jak to zrobić bez wyświetlania ?!
Pozdrawiam!

zakladajac ze piszesz w C++ i korzystasz z directshow, zbuduj sobie odpowiedni graf filtrow - z filtrem kamery jako sourcem i filewriterem jako destination a graph manager wyrenderuje polaczenia posrednie.

0
cc not logged napisał(a)

zakladajac ze piszesz w C++ i korzystasz z directshow, zbuduj sobie odpowiedni graf filtrow - z filtrem kamery jako sourcem i filewriterem jako destination a graph manager wyrenderuje polaczenia posrednie.

A jeżeli piszę w C/C++ i NIE KORZYSTAM z DirectShow?

Mam podobny problem. Chcę zczytać obraz z kamery i przesłać go dalej, ale bez wyświetlania. Niestety funkcje slużące do tego, a opisane np. tutaj http://winapi.org/index.php?option=com_content&task=view&id=126&Itemid=30, potrzebują uchwytu do okna. Niestety, bo jest to bardzo prosty i przyjemny sposób zczytania obrazu z kamery, a nie można go wykorzystać pisząc coś pod konsolę.

Da się to rozwiązać w podobny, prosty, sposób?

ps. Jakimś tam (ale brzydkim) rozwiązaniem, jest utworzenie okna, ale nie wyświetlanie go.

0

Niestety, bo jest to bardzo prosty i przyjemny sposób zczytania obrazu z kamery

.. i bardzo mało wydajny - 5 klatek/s maksymalnie, vfw to technologia z poprzedniej ery. Polecam przez DirectShow, ściagnij źródła jakiegos programiku, ktory to robi, na przykład VirtualVCR i wszystko bedziesz wiedziec.

Gdybys pisal w C#, to mialbys latwiej - na CodeProject jest gotowa biblioteka do przechwytywania obrazu z kamery z kodem zrodlowym i wyjasnieniami - z drugiej strony przetlumaczenie tego kodu na C++ tez nie byloby takie trudne.

0
othello napisał(a)

.. i bardzo mało wydajny - 5 klatek/s maksymalnie, vfw to technologia z poprzedniej ery. Polecam przez DirectShow, ściagnij źródła jakiegos programiku, ktory to robi, na przykład VirtualVCR i wszystko bedziesz wiedziec.

Gdybys pisal w C#, to mialbys latwiej - na CodeProject jest gotowa biblioteka do przechwytywania obrazu z kamery z kodem zrodlowym i wyjasnieniami - z drugiej strony przetlumaczenie tego kodu na C++ tez nie byloby takie trudne.

Może mało wydajny, ale po zastosowaniu kompresji np. jpeg, mogę zczytywać obraz z kamery i wysyłać go dalej po sieci z dobrym frame rate'em. I to zczytywanie jest bardzo proste w realizacji.

Wiem, że vfw to może nie najnowsza technologia, że są WIA, DirectShow, ale vfw jest najprostszy. Przeglądałem przykładowe programy w DirectShow i są strasznie długie i dosyć skomplikowane.

Co do CodeProject, to już przejrzałem cały :-) Może rzeczywiście coś przełożę z C#, w zasadzie większość przykładów, na które trafiłem i by się nadawały, były pisane w C#.

0

No do kamerki internetowej odswiezanej co sekunde to faktycznie moze i sie nada, ale sprobuj chociazby zrzucic obraz do pliku .avi z kompresją xvid to wtedy docenisz DirectShow :) Nie napisales do czego chcesz to wykorzystac

Przeglądałem przykładowe programy w DirectShow i są strasznie długie i dosyć skomplikowane.

Bo ja wiem? Zalezy co rozumiesz przez "dlugie". Wyswietlenie podglądu w oknie to ~150 linii kodu w C#. Natomiast schody zaczna sie, gdy zechcesz miec dostep do pojedynczych klatek obrazu, zeby na przyklad wysylac je przez siec, ale nie chce cie zniechecac :-) Ogolnie bedziesz musial zrozumiec jak dziala DirectShow, co to sa filtry itd...

Poza tym odswiezasz posta sprzed 1.5 roku :>

0
othello napisał(a)

No do kamerki internetowej odswiezanej co sekunde to faktycznie moze i sie nada, ale sprobuj chociazby zrzucic obraz do pliku .avi z kompresją xvid to wtedy docenisz DirectShow :) Nie napisales do czego chcesz to wykorzystac

Serwer główny zczytuje obraz z kamery internetowej, przesyła to do serwera pośredniczącego. Klient łączy się z serwerem głównym, serwer główny przekierowuje klienta do serwera pośredniczącego. Klient łączy się z serwerem pośredniczącym i odbiera strumień z kamery, który wędruje od serwera głownego do serwerów pośredniczących, a te rozsyłają je do klientów końcowych. To tak po krótce ;-)

othello napisał(a)

Bo ja wiem? Zalezy co rozumiesz przez "dlugie". Wyswietlenie podglądu w oknie to ~150 linii kodu w C#. Natomiast schody zaczna sie, gdy zechcesz miec dostep do pojedynczych klatek obrazu, zeby na przyklad wysylac je przez siec, ale nie chce cie zniechecac :-) Ogolnie bedziesz musial zrozumiec jak dziala DirectShow, co to sa filtry itd...

Poza tym odswiezasz posta sprzed 1.5 roku :>

Przeglądałem jakiś przykład w DirectShow, bodajże AmCap sample, bo wydawał mi się na temat, ale miał ok. 1700 linii :-/ Potrzebuję dostępu do pojedyńczych klatek, bo najprawdopodobniej będę je musiał kompresować, żeby zapewnić jako taką płynność obrazu, czyli w miarę znośny frame rate.

Odświeżam stary temat, bo zanim to zrobiłem, przejrzałem forum i uznałem, że bez sensu jest dodawanie kolejnego nowego wątku na ten sam temat. Na zbyt wiele takich wątków bez odpowiedzi natknąłem się na tym forum ;-)

0

Nie potrzebujesz dostępu do pojedynczych klatek. Skompresuj je normalnym kodekiem przy użyciu DirectShow. Na pewno będzie to mniej niż 1700 linii. DirectShow jest trudny do ogarnięcia z początku, ale po paru przykładach będziesz wiedział z czym to się je.

1 użytkowników online, w tym zalogowanych: 0, gości: 1