Skocz do zawartości

[Programowanie] OpenCV prosty program


Pomocna odpowiedź

Napisano

Witam

Mam problem z Open CV , jestem początkujący i potrzebuje Waszej pomocy.

Ogólnie problem polega na tym iż nie mogę znaleźć informacji jak programować obraz wyświetlony w okienku kamery.

 

#include <opencv\cv.h>
#include <opencv\highgui.h>

using namespace std;
using namespace cv;

int main(){

// pobranie zasobu kamery, parametr mowi o tym ktora kamere wybieramy
// w przypadku gdy w systemie dostepna jest wiecej niz jedna
CvCapture* vid = cvCreateCameraCapture(0);

// tworzymy okno wyswietlajace obraz
cvNamedWindow("plik wideo", CV_WINDOW_AUTOSIZE);

// odczytanie pierwszej klatki - niezbedne do prawidlowego odczytania wlasciwosci pliku
// przy uzyciu funkcji cvGetCaptureProperty
cvQueryFrame(vid);

// ustalamy wartosc fps - najlepiej wieksza niz maksymalna deklarowana przez producenta
// Jezeli wartosc bedzie za mala, obraz bedzie pojawial sie z opoznieniem
double fps =  50;

int odstep_miedzy_klatkami = 1000 / fps;

while (true)
{
// pobranie kolejnej klatki
IplImage* ramka = cvQueryFrame(vid);

// jezeli nie jest pusta to wyswietlamy
if (ramka != 0)
cvShowImage("plik wideo", ramka);
else
break; 
// czekamy przez okreslony czas
int c = cvWaitKey(odstep_miedzy_klatkami);

// jezeli nacisnieto klawisz 'k', konczymy wyswietlanie
if (c == 'k')
break; 
}

// zwolnienie zasobow
cvDestroyAllWindows();
cvReleaseCapture(&vid);
}

mam Obraz i potrzebuje wyznaczyć w nim elementy w których będzie się coś działo .

IMG_5564a2c322b961835.jpg

a potrzebuje wyznaczyć na obrazie takie elementy

IMG_5564a292d55b5891.jpg

.

Jeżeli pojawi się coś w danym kwadracie to chciałbym wysłać portem szeregowym USB cokolwiek na zewnątrz nawet kodem ASCI dowolny znak bądź liczbę w zależności, który w którym kwadracie pojawił się ruch.

Jeżeli ktoś ma jakieś lektury bądź inne materiały to przyjmę wszystko tylko trochę słabo z angielskim jestem w stanie zapłacić za kursy jeżeli ktoś ma dostęp do takich.

Bardzo proszę o pomoc ?

Pozdrawiam

Programuję w Ruby i ten kod mnie nieco zszokował. Bardzo ciężko to się czyta.

Polecam zainteresować się Ruby, jest spooooro przykładów do OpenCV, choćby: https://github.com/ruby-opencv/ruby-opencv/blob/master/examples

#!/usr/bin/env ruby
# face_detect.rb
require "rubygems"
require "opencv"

include OpenCV

window = GUI::Window.new("face detect")
capture = CvCapture.open
detector = CvHaarClassifierCascade::load("./data/haarcascades/haarcascade_frontalface_alt.xml")

loop {
 image = capture.query
 detector.detect_objects(image).each { |rect|
   image.rectangle! rect.top_left, rect.bottom_right, :color => CvColor::Red
 }
 window.show image
 break if GUI::wait_key(100)
}

Ja sprawdzałbym podobieństwo wybranych obszarów w kolejnych klatkach obrazu. Jeśli wystąpiłyby jakieś różnice to mamy wykryty ruch. Wszystko znajdziesz w dokumentacji od OpenCV.

Ps. jeśli piszesz w C++ to używaj interfejsu dla tego języka, a nie dla C. Jest dużo bardziej przyjemny w obsłudze 🙂

może ktoś mi przykład pokazać/przytoczyć chodziarz jakiś , ponieważ czytam już 2 tydzień i nic nie mogę sensownego znaleźć odnośnie tego zagadnienia.

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...