Wykrywanie ruchu na kamerce

0

Witam,

Pisze program którego jedną z opcji będzie wykrywanie ruchu na kamerce i właśnie z tym mam największe problemy, przeszukałem już google i całe 4p i nie znalazłem nic konkretnego, powiem ile już mam odbieram obraz z kamerki i wyświetlam go na Panelu (capCreateCaptureWindow) lecz panel nie ma Canvasa, więc musze przenosić obraz z panela na Image (GetWindowDC) i tutaj pojawia się pierwsze moje pytanie, czy istnieje sposób by obraz z kamery był od razu wyświetlany na jakimś komponencie posiadającym Canvas? (nie interesuje mnie TForm). Tutaj na forum wyczytałem ze do takiej operacji najlepiej zmieniać format pixeli na 4 bitowy...ale pojawia się kolejny problem, ponieważ (zapomniałem zaznaczyć że pobieranie obrazu z Panela wywołuje Timer, może nie jest to najlepsza metoda ale lepszej nie znam) No a wracajac do formatu pixela to jak wrzucam Image1->Picture->Bitmap->PixelFormat=pf4bit; do timera by zmieniał każdą klatkę to nic się nie dzieje, nawet nie chce odbierać klatek z Panela, a bez tego program nie chce działać bo porównywanie obrazu 24bitowego nie daje efektu.

Trochę się rozpisałem więc dla osób nie lubiących opaśnych tekstów, moje pytania w skrócie :D

  • Czy da się za pomocą funkcji capCreateCaptureWindow stworzyć okno którego rodzicem będzie TImage lub jakiś inny komponent posiadający Canvas
  • Jak najlepiej zmieniać format pixela na 4 bitowy w każdej kolejnej pobranej klatce

No myśle że to na razie tyle pytań, gratuluje osobą których chciało się to przeczytać i które to zrozumiały, starałem się pisać jasno

Pozdrawiam

0

;)

cholera napisałem ci 30 linijek z odpowiedziłą.. ale z rozmachu zamknałem okno ;)

w skrócie napiszę na co warto zwrócić uwagę :

a) Klasa do obsługi kamerki aviCap z SDK windowsa ( ograniczenia przy podejściu obiektowym )
b) Detekcja na podstawie luminancji ( ask wikipedia )
c) Jeżeli chcesz tylko detekcję ruchu, bez przechwytywania to wystarczy stworzyc podrzedne okno
w głównej aplikacji capCreateCaptureWindow() , połaczyć sie capConnectDevice() a następnie
capPreview() ustawic na true. Wtedy przekazywany jest obraz bezpośrednio z kamerki
(nieskompresowany). Pamiętaj o ustawieniu dwóch struktur: CapDevice i coś tam jeszcze....
d) Uważaj na pułapkę związaną z zawieszaniem urządzenia ( jak nie zrobisz capDisconnect(); da się
to jakoś obejść ;) ale nie przyłozyłem do tego wagi z braku czasu. (Trzeba wtyczkę wyciągnąć)
e) Lepiej zabierz sie za to z MFC, bo WinApi to jak golenie szkłem ()()
f) Jeżeli chcesz przechwytywać sekwencje nie ma z tym większego problemu ( czas reakcji w
niektorych urządzeniach jest widoczny ;) 1 sec rozbłysk i ustawienie paramtrów na
nowo==przesiadka na Creative jak ci zależy )

gg: 2301029 ;) to ci moge podesłać trochę kodu.

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