Abstrakcyjny

Abstrakcyjny
Celem tego dokumentu jest pomoc czytelnikowi w rozpoczęciu pracy z biblioteką wizji komputerowej OpenCV w systemie Linux. OpenCCV to biblioteka wieloplatformowa, ale ten artykuł będzie skupił się wyłącznie na OpenCV za pomocą systemu operacyjnego Linux (chociaż tylko instalacja biblioteki OpenCV i kamery wideo jest specyficzna dla platformy, wszystkie przykłady w tym artykule powinny skompilować na dowolnej platformie, na której na dowolnej platformie, gdzie OpenCV jest poprawnie zainstalowany, taki jak Mac OS, Windows MS i itp.). Czytnik będzie prowadzony przez przewodnik krok po kroku, jak instalować i korzystać z niektórych podstawowych funkcji biblioteki OpenCV, takich jak wyświetlanie obrazów, odtwarzanie wideo lub korzystanie z kamery wideo do przetwarzania strumienia wejściowego wideo.

Konwencje użyte w tym artykule:

  • $ - Wykonanie w wierszu poleceń przez niepewnego użytkownika
  • # - Wykonanie w wierszu poleceń przez superuser
  • Rzeczywiste polecenie, które ma być wykonane w wierszu poleceń lub kodzie programu, który ma zostać skompilowany
  • WYJŚCIE: Dane wyjściowe wytworzone w wierszu polecenia przez wykonanie polecenia
  • NOTATKA: Notatki ogólne i dodatkowe informacje

Wstęp

Krótko mówiąc, wizja komputerowa jest dziedziną naukową, która próbuje dostarczyć komputera. Ta dziedzina naukowa szybko się rozwijała w ostatnich latach. Wśród badaczy wzrost ten wynika z wielu ulepszeń algorytmów wizji i wśród hobbystów wizji komputerowej. Biblioteka OpenCV odgrywa doskonałą rolę w dziedzinie wizji komputerowej, ponieważ pomaga znacznie obniżyć koszty i czas przygotowania środowiska badawczego wizji komputerowej potrzebne studentom, hobbystom i profesjonalistom. OpenCV zapewnia również proste w użyciu funkcje, aby wykonać pracę w prosty, skuteczny i elegancki sposób. OpenCV został założony przez Intel, a później został przekształcony w projekt open source dostępny teraz w SourceForge.internet. Biblioteka OpenCV ma dostępność wieloplatformową i jest częściowo napisana w języku C ++ i C. Pomimo faktu, że ta biblioteka jest dostępna w wielu dystrybucjach Linux z odpowiednich repozytoriów pakietów, w tym artykule będziemy próbować zainstalować i użyć biblioteki OpenCV opracowanej z kodu źródłowego pobranego z Sourceforge.Strona internetowa netto.

Przyczyny skompilowania kodu źródłowego mogą obejmować:

  • Nowa wersja 2.0.0 niedawno wydane i więcej dostępnych funkcji
  • niektóre naprawione błędy, które wpłynęły na Linux OpenCV 1.0.0 wersji (takie jak cvgetcaptureproperty () itp. )
  • Dostępne jest więcej obsługi dla OpenCV 2.0.0 wersja niż dla poprzedniego 1.0.0 wersja

Ten artykuł rozpocznie się od instalacji OpenCV na Debian 5.0 (Lenny). Później czytelnik zostanie prowadzony przez szereg przykładów, jak używać OpenCV do wyświetlania obrazu, odtwarzania wideo i użycia kamery do przechwytywania strumienia wejściowego wideo.

Instalacja

W poniższej sekcji opisano proces instalacji biblioteki OpenCV, budując binarie z kodu źródłowego dostępnego w Sourceforge.internet. Wykazana tutaj procedura instalacji została przetestowana na Debian 5.0 (Lenny) i Ubuntu 9.10 (Karmic Koala). Rzeczywista procedura instalacji powinna być podobna lub dokładnie taka sama dla większości dystrybucji Linux od pierwszego kroku, w którym zależności pakietów są instalowane z odpowiednich repozytoriów dystrybucji Debian i Ubuntu. W systemie RPM Linux możesz skonsultować się z narzędziem zarządzania pakietami Red Hat (RPM) w celu uzyskania alternatywnych warunków wstępnych OpenCV opisanych w następnej sekcji.

Wymagania wstępne

Po pierwsze, należy zrobić instalację wymaganych wymagań wymaganych przez OpenCV Library. Lista zależności można nieco zmodyfikować zgodnie z Twoimi potrzebami:

  • libavformat -dev - pliki programistyczne dla libavformat biblioteka formatu plików FFMPEG
  • Libgtk2.0 -dev - pliki programistyczne dla biblioteki graficznej interfejsu użytkownika GTK+
  • PKG -CONFIG - Zarządzaj flagami kompilacji i łącz dla bibliotek
  • LibsWscale -dev - Pliki programistyczne dla libsscale biblioteka skalowania wideo FFMPEG
  • CMake-system międzyplatformowy, open source System używany do kompilacji kodu źródłowego
  • BZIP2-wysokiej jakości kompresor pliku blokowego używany do wyodrębnienia pliku źródłowego OpenCV

Poniższe polecenie Linux automatycznie pobiera i zainstaluje wszystkie wymagane pakiety i jego zależności:

# apt-get instaluj libavformat-dev libgtk2.0-dev pkg-config cmake libsscale-dev bzip2

Uzyskanie kodu źródłowego OpenCV

Obecna wersja biblioteki OpenCV w momencie pisania to wersja 2.0.0. Możesz pobrać kod źródłowy OpenCV, wskazując swoją przeglądarkę internetową na OpenCV-Sourceforge.Net lub użyj polecenia WGET, aby uzyskać kod źródłowy bezpośrednio w wierszu poleceń:

$ wget http: // pobieranie.Źródło.net/projekt/openCvlibrary/openCV-Unix/2.0/openCv-2.0.0.smoła.BZ2

Wyodrębnij kod źródłowy OpenCV

Niezależnie od tego, czy używasz przeglądarki internetowej, czy narzędziem WGET do pobrania kodu źródłowego biblioteki OpenCV, powinieneś skończyć z openCV-2.0.0.smoła.BZ2 Tarball w twoim obecnym katalogu roboczym. Następnym krokiem jest wyodrębnienie plików źródłowych za pomocą polecenia TAR. Poniższe polecenie Linux wyodrębni wszystkie pliki na OpenCv-2.0.0 Directory:

$ tar xvjf opencv-2.0.0.smoła.BZ2

Nowy OpenCv-2.0.0 katalogu (ok. 67 MB) powinien być teraz dostępny w bieżącym katalogu roboczym i będzie zawierać wszystkie niezbędne pliki źródłowe dla kompilacji.

Kompilacja i instalacja binarów OpenCV

Aby skompilować kod źródłowy OPENCV, użyjemy open source, tworząc system CMake. Ustal zostaną ustawione następujące flagi kompilacji konfiguracji CMake:

  • Cmake_build_type = wydanie: cmake będzie sulid projekt wydania
  • Cmake_install_prefix =/usr/local: Directory, który ma być używany jako miejsce docelowe instalacji
  • Build_python_support: Włącz obsługę Python

NOTATKA: Narzędzie CMake domyślnie nie zapewnia sposobu odinstalowania projektu od systemu. Jeśli potrzebujesz odinstalowania OpenCCV od systemu, należy wprowadzić odpowiednie zmiany przed przejściem do kompilacji.

Przejdź do OpenCv-2.0.0 Katalog zawierający kod źródłowy:

$ CD OpenCv-2.0.0/

Utwórz i przejdź do nowego katalogu, który będzie używany przez CMake. I W tym przypadku nazwa katalogu jest taka sama jak typ projektu, „Wydanie”:

$ mkdir wydanie; Wydanie CD

Użyj CMake, aby utworzyć pliki konfiguracyjne z opisanymi powyżej flagami konfiguracyjnymi:

NOTATKA: Flaga cmake_install_prefix można ustawić na dowolną żądaną ścieżkę instalacji

cmake -d cmake_build_type = release -d cmake_install_prefix =/usr/local -d build_python_support = on… 

Po wykonaniu polecenia cmake podsumowanie instalacji będzie wyświetlane i będzie wyglądać podobnie do tego poniżej.

WYJŚCIE:
- Ogólna konfiguracja dla OpenCV 2.0.0 ====================================
-
- Kompilator:
- C ++ Flagi (wydanie): -WALL -pthread -ffunkcja -function -o3 -dndebug -fomit -frame -winter -o3 -ffast -Math -mmmx -dndebug
- C ++ Flagi (debugowanie): -WALL -pthread -factions -g -O0 -Ddebug -d_debug
- Flagi Linkera (wydanie):
- Flagi Linkera (debugowanie):
-
- GUI:
- GTK+ 2.X: 1
- GTHREAD: 1
-
- Obraz I/O:
- JPEG: True
- PNG: True
- TIFF: Fałsz
- Jasper: False
-
- Wideo I/O:
- DC1394 1.X: 0
- DC1394 2.X: 0
- FFMPEG: 1
- Kodec: 1
- Format: 1
- Util: 1
- SWScale: 1
- Gentoo w stylu: 1
- Gstreamer: 0
- UNICAP:
- V4L/V4L2: 1/1
- Xine: 0
-
- Interfejsy:
- Stary Python: 0
- Python: On
- Użyj IPP: nie
- Wybuduj dokumentację 0
-
- Instaluj ścieżkę: /usr /lokalne
-
- CVCONFIG.H jest w:/home/sandbox/opencv-2.0.0/wydanie
- -
-
- Konfigurowanie gotowego
- Generowanie gotowego
- Pliki kompilacji zostały zapisane na:/home/sandbox/openCv-2.0.0/wydanie

Kiedy wykonanie polecenia CMake nie wywołało żadnych błędów, jesteśmy gotowi skompilować kod źródłowy.:

NOTATKA: Podczas procesu kompilacji pojawi się wiele komunikatów ostrzegawczych. Te komunikaty ostrzegawcze można zignorować, chyba że wpływają one na preferowane ustawienia środowiska OpenCV!

$ MAK

Jeśli na terminalu nie wyświetlono żadnych błędów, a okno dialogowe postępu [100%] podczas procesu kompilacji, jesteśmy gotowi zainstalować biblioteki OpenCV. Instalacja jest opcjonalna, o ile zmienna środowiskowa LD_LIBRARY_PATH. Jeśli chcesz zainstalować OpenCV w /usr /lokal, jak ustawiono przez CMake Flags powyżej, wykonaj następujące polecenie Linux:

# Zrób instalację

Eksportuj prawidłową ścieżkę do zmiennej środowiskowej LD_Library_Path i użyj LDConfig do dynamicznego połączenia z biblioteką OpenCV:

$ Export Ld_Library_Path =/usr/local/lib/: $ ld_library_path
# ldconfig

Jeśli nie chcesz instalować biblioteki OpenCV, powinieneś po prostu wyeksportować prawidłową ścieżkę do katalogu kompilacji biblioteki OpenCV, aby poinformować system, gdzie znajduje się biblioteka. Załóżmy, że Twój nowy katalog wydawania znajduje się pod adresem ~/opencv-2.0.0/Wydanie wtedy Twoja ścieżka eksportu będzie wyglądać tak:

$ Export LD_LiBRARY_PATH = ~/OpenCv-2.0.0/release/: $ ld_library_path
# ldconfig

To kończy procedurę instalacji biblioteki openCV. Aby uzyskać dodatkowe informacje na temat instalacji OPENCV, odwiedź instalację instalacji OpenCV.

Przykłady OpenCV

Bez przedłużenia dyskusji na temat wizji komputerowej i jak jest ona powiązana z OpenCV. Jeśli jesteś zainteresowany bardziej intensywnym wprowadzeniem do wizji komputerowej i openCV, polecam książkę: „Uczenie się OpenCV: Wizja komputerowa z biblioteką OpenCV autorstwa Gary'ego Bradskiego i Adriana Kaehlera”.

Konwersja obrazu

Zacznijmy od czegoś naprawdę prostego i to 7 wierszy kodu do konwersji obrazu między następującymi typami obrazów:

  • Windows Bitmap - BMP, DIB
  • Pliki JPEG - JPEG, JPG, JPE
  • Przenośna grafika sieciowa - PNG
  • Przenośny format obrazu - PBM, PGM, PPM
  • Sun Rasters - SR, RAS
  • Pliki tiff - tiff, tif

Poniższy program zaakceptuje dwa argumenty wiersza poleceń, obraz źródłowy i obraz docelowy. Obraz źródłowy będzie przechowywany jako typ obrazu określony przez rozszerzenie pliku obrazu docelowego. Zapisz następujący kod w pliku o nazwie konwersja obrazu.C :

#include "highgui.H"
int main (int argc, char ** argv)
Iplimage* img = cvloadimage (argv [1]);
CvSaveImage (argv [2], IMG);
cvreleaseImage (& IMG);
return0;

Kod źródłowy naszego nowego programu jest gotowy i oto część kompilacji. Zakładając, że zapisałeś swój pierwszy program OpenCV jako konwersję obrazu.c Możesz skompilować swój program z następującym poleceniem Linux:

$ g ++ 'pkg-config opencv--cflags--libs' conversion.C -O -konwersja obrazu

Po udanej kompilacji w bieżącym katalogu roboczym utworzono nowy plik binarny. Zanim przetestujemy ten nowy program, potrzebujemy przykładowego obrazu:

$ wget -o obraz.png http: // www.Linuxconfig.org/szablony/rhuk_milkyway/images/mw_joomla_logo.png

WGET pobrał i zapisał obraz obrazu.PNG do twojego bieżącego katalogu, a teraz możemy próbować przekonwertować ten obraz na dowolny typ obrazu wymieniony powyżej. Poniższe polecenie Linux przekonwertuje typ obrazu PNG na JPG. Zakładając, że kompilacja programu nie wywołała żadnych błędów, a plik binarny jest zapisywany jako konwersja obrazu, możesz konwertować między dwoma typami obrazów za pomocą następujące polecenie Linux:

$ .obraz /konwersja obrazu.Obraz PNG.jpg

Aby potwierdzić, że obraz został przekonwertowany, do wyświetlania typu pliku dla danego pliku można użyć polecenia pliku jako argument:

$ PLIK IMAGE.*

WYJŚCIE:
obraz.JPG: Dane obrazu JPEG, JFIF Standard 1.01
obraz.PNG: obraz PNG, 270 x 105, 8-bitowy/kolor RGBA, nie interlacyjny

Kiedy ponownie spojrzysz na polecenie kompilacji, możesz zauważyć, że do pobrania lokalizacji biblioteki OpenCV użyto narzędzia PKG -config. Dlatego można skonstruować alternatywne polecenie dla powyższego bez użyteczności PKG-config, aby wyglądać tak jak to:

G ++ -i/usr/local/include/openCV -l/usr/local/lib \
-LCXCORE -LCV -LHIGHGUI -LCVAUX -LML CONVERVERSIVERS.C -O -konwersja obrazu

Jednak w obu przypadkach polecenie kompilacji utworzy niechciane zależności biblioteki:

$ LDD Conwersja obrazu | Grep Local

WYJŚCIE:
libcxcore.Więc.2.0 =>/usr/local/lib/libcxcore.Więc.2.0 (0xB7CCC000)
libcv.Więc.2.0 =>/usr/local/lib/libcv.Więc.2.0 (0xb7a7a000)
Libhighgui.Więc.2.0 =>/usr/local/lib/libhighgui.Więc.2.0 (0xb7a3f000)
libcvaux.Więc.2.0 =>/usr/local/lib/libcvaux.Więc.2.0 (0xb793b000)
libml.Więc.2.0 =>/usr/local/lib/libml.Więc.2.0 (0xb78d8000)

Nasz program zależy od Highgui OpenCV.Biblioteka H, ​​a zatem włączenie zależności -lcvaux -lml -lcxcore i -lcv do polecenia kompilacji nie jest konieczne. Skrócona wersja polecenia kompilacji będzie wyglądać tak:

$ g ++ -i/usr/local/include/opencv -lhighgui -konwersja obrazu.C -O -konwersja obrazu

W związku z tym zmniejszono zależność od biblioteki programu:

$ LDD Conwersja obrazu | Grep Local

WYJŚCIE:
Libhighgui.Więc.2.0 =>/usr/local/lib/libhighgui.Więc.2.0 (0xb7f61000)
libcxcore.Więc.2.0 =>/usr/local/lib/libcxcore.Więc.2.0 (0xb7a75000)
libcv.Więc.2.0 =>/usr/local/lib/libcv.Więc.2.0 (0xb7823000)

Odtąd od Ciebie zależy, w jaki sposób kompilujesz następujące przykłady w tym artykule. Należy pamiętać, że pierwsze polecenie kompilacji, w tym PKG-Config, będzie w stanie skompilować wszystkie przykłady. Może jednak powodować binarny z nadmiernymi zależnościami.

Wyświetlić obraz

W tym momencie mogliśmy przekonwertować typ obrazu i potwierdzić jego meta opis przez polecenie pliku. Czas wyświetlić obraz na ekranie i wizualnie potwierdzić, że został poprawnie przekonwertowany. Poniższy program wyświetli obraz na ekranie:

#include "highgui.H"
int main (int argc, char ** argv)
// CVLOADIMAGE określa typ obrazu i tworzySastructure z odpowiednim rozmiarem
Iplimage* img = cvloadimage (argv [1]);
// Utwórz okno. Nazwa okna jest określana przez dostarczony argument
cvNamedWindow (argv [1], cv_window_autosize);
// Wyświetl obraz wewnątrz i okno. Nazwa okna jest określana przez dostarczony argument
cvshowimage (argv [1], IMG);
// Poczekaj na czas nieokreślony na klawisze
cvwaitkey (0);
// Zwolnij wskaźnik do obiektu
cvreleaseImage (& IMG);
// Zniszcz okno
cvdestroydwindow (argv [1]);

NOTATKA: Wróć do sekcji konwersji obrazu powyżej, jeśli potrzebujesz pomocy w tym, jak skompilować ten program OpenCV.

Wykonanie tego programu wyświetlania obrazu za pomocą obrazu.JPG wyprodukowane w poprzedniej sekcji wyświetli ten obraz na ekranie:

$ Display-Image Obraz.jpg

WYJŚCIE:

Gaussian gładki

Możesz także spróbować utworzyć prostą transformację obrazu za pomocą metody gładkiej gaussa. Dodaj następujący wiersz do kodu obrazu wyświetlania przed wywołaniem funkcji CVSHIMAGE:

cvNamedWindow (argv [1], cv_window_autosize);
CVSMOOTH (IMG, IMG, CV_GAUSSIAN, 9, 9);

cvshowimage (argv [1], IMG);

i dodaj jako pierwszy wiersz do swojego programu „#include”.Dyrektywa H ”.

Będzie to zawierać gładką metodę Gaussian wyśrodkowaną na każdym pikselu z obszarem 9 x 9 w obrazie wyjściowym. Po skonwinowaniu i wykonaniu zostanie przedstawione następujące dane wyjściowe:
WYJŚCIE:

Odtwórz wideo

Ta sekcja zawiera kod programu, który utworzy prosty odtwarzacz wideo za pomocą biblioteki OpenCV. Przykładowy film, drzewo.AVI można znaleźć w OpenCv-2.0.0 Katalog, w którym wyodrębniłeś jego pliki źródłowe (OpenCv-2.0.0/próbki/c/drzewo.avi):

#include "cv.H"
#include "highgui.H"
// Zainicjuj zmienne globalne
int g_slider_position = 0; // Pozycja paska
Cvcapture* g_capture = null; // Struktura, aby utworzyć wejście wideo
// Procedura, którą można wywołać, gdy użytkownik przesuwa suwak Trackbar
void onTrackbarslide (int pos)
cvsetCaptureProperty (
G_Capture,
CV_CAP_PROP_POS_FRAME,
poz
);

int main (int argc, char ** argv)
// Utwórz okno o odpowiednim rozmiarze. Nazwa systemu Windows jest określona według nazwy pliku
// dostarczone jako argument
cvNamedWindow (argv [1], cv_window_autosize);
// Otwórz wideo
g_capture = cvCreateFileCapture (argv [1]);
// Ustaw pozycję odczytu w jednostkach ramek i pobieraj całkowitą liczbę ramek
int frames = (int) cvgetcaptureProperty (
G_Capture,
Cv_cap_prop_frame_count
);
// nie tworz Treackbar, jeśli wideo nie zawiera informacji
// o liczbie ramek
if (ramki!= 0)
cvCreateTrackbar
"Pozycja",
Argv [1],
& g_slider_position,
ramki,
OntrackBarslide
);

// Wyświetl ramkę wideo według ramki
Rama iplimage*;
while (1)
frame = cvQueryFrame (g_capture);
Jeśli( !ramka) przerwa;
cvShowimage (argv [1], ramka);
// Ustaw pasek ścieżki na bieżącą pozycję ramki
cvsetTrackbarpos („pozycja”, argv [1], g_slider_position);
g_slider_position ++;
char c = cvwaitkey (33);
// rezygnuj, jeśli ESC zostanie naciśnięty
if (c == 27) przerwa;

// wolna pamięć
cvreleasecapture (& g_capture);
cvdestroydwindow (argv [1]);
zwrot (0);

NOTATKA: Wróć do sekcji konwersji obrazu powyżej, jeśli potrzebujesz pomocy w tym, jak skompilować ten program OpenCV.

Wykonaj nowy program OpenCV i jako argument Podaj plik wideo:

 $ ./video-player ~/opencv-2.0.0/próbki/c/drzewo.Avi

WYJŚCIE:

Wejście z kamery wideo

Celem tej sekcji jest zapewnienie kilku prostych wskazówek, jak skonfigurować aparat w systemie Linux i jak potwierdzić, że kamera wideo jest prawidłowo rozpoznawana przez system. Kiedy aparat będzie gotowy, otrzymasz prosty program, który jest w stanie wyświetlić wideo za pomocą kamery wideo jako wejścia.

W tym artykule użyłem logitech, Inc. Kamera QuickCam Pro 9000. Instalacja tego aparatu na Debian 5.0 lub Ubuntu 9.10 (Karmic Koala) System był prostą procedurą wtyczki i odtwarzania. Oto kilka wskazówek, jak potwierdzić, że aparat został rozpoznany przez system:

NOTATKA:
Twoje wyjście będzie inne !

$ lsusb

WYJŚCIE:
Bus 002 Urządzenie 003: ID 046D: 0990 Logitech, Inc. QuickCam Pro 9000
Bus 002 Urządzenie 001: ID 1D6B: 0002 Linux Foundation 2.0 Hub root
Bus 001 Urządzenie 002: ID 045E: 00D1 Microsoft Corp. Mysz optyczna z kołem pochylenia
Bus 001 Urządzenie 001: ID 1D6B: 0001 Linux Foundation 1.1 Hub root

Polecenie LSUSB ujawnia typ aparatu podłączony do systemu. Wyjście polecenia LSUSB nie jest konieczne oznacza, że ​​aparat jest teraz gotowy do użycia. Zobaczmy, czy niektóre moduły są powiązane z wideo:

$ lsmod | Video Grep

WYJŚCIE:
UVCViDEO 45800 0
compat_ioctl32 1312 1 uvcvideo
Videodev 27520 1 UVCViDEO
v4l1_compat 12260 2 uvcvideo, videodev
USBCORE 118192 7 SND_USB_AUDIO, SND_USB_LIB, UVCVIDEO, USBHID, EHCI_HCD, OHCI_HCD

To wygląda bardzo obiecująco. Mój aparat używa modułu UVCVideo. Jeśli nie widzisz żadnego Ouptuta lub widzisz tylko wyjście niezwiązane z urządzeniem aparatu, może być konieczne ponowne skompilację jądra lub zainstalować odpowiedni moduł.

Teraz musimy znaleźć plik urządzenia odpowiadający aparatu. Aby to zrobić, używamy narzędzia XAWTV:

NOTATKA: Jeśli polecenie XAWTV nie jest niewiarygodne, musisz zainstalować pakiet XAWTV.

$ xawtv -hwscan

WYJŚCIE:
To jest XAWTV-3.95.DFSG.1, działający na Linux/i686 (2.6.26-2-686)
Szukam dostępnych urządzeń
Port 65-96
Typ: xvideo, skaler obrazów
Nazwa: Blitter wideo NV

/dev/video0: OK [-Device/dev/video0]
Typ: V4L2
Nazwa: aparat UVC (046d: 0990)
Flagi: przechwytywanie

Plik urządzenia zaspokajany moją kamerą to /dev /video0 . Możesz także zobaczyć błąd na terminalu, mówiąc: Open /dev /video0: odmowa uprawnień. Aby rozwiązać ten problem, musisz uczynić swoją część grupy „wideo”. Teraz sprawdź aparat z następującym poleceniem Linux:

$ xawtv -c /dev /video0

Jeśli miałeś pewne problemy w niektórych poprzednich krokach, oto kilka linków, które mogą pomóc w rozwiązaniu problemu:

  • Kompatybilność kamery Linux OpenCV
  • Linux kamera internetowa Howto
  • Obsługiwane kamery za pomocą sterowników SPCA5XX
  • Obsługiwane kamery za pomocą sterowników UVCVideo

Korzystanie z aparatu z biblioteką OpenCV jest proste, ponieważ pisanie programu do odtwarzania wideo. Skopiuj wcześniej utworzony kod źródłowy programu odtwarzacza wideo i linia zmiany:

Cvcapture* capture = cvCreateFileCapture (argv [1]);
Do:
Cvcapture* capture = cvCreateCameracapture (0);

Więc cały kod będzie wyglądał podobnie do tego poniżej:

#include "highgui.H"
int main (int argc, char ** argv)
cvNamedWindow („przykład2”, cv_window_autosize);
Cvcapture* capture = cvCreateCameracapture (0);
Rama iplimage*;
while (1)
ramka = cvQueryFrame (przechwytywanie);
Jeśli( !ramka) przerwa;
cvShowimage („przykład2”, ramka);
char c = cvwaitkey (33);
if (c == 27) przerwa;

cvreleasecapture (i przechwytywanie);
CVDestroydWindow („przykład2”);

Zauważ, że funkcja cvCreateCameracapture () nie wzięła żadnego konkretnego pliku ani argumentu urządzenia. W takim przypadku OpenCV zacznie używać pierwszej dostępnej kamery w twoim systemie. Skompiluj i wykonaj ten program, a jeśli wszystko do tego momentu poszło dobrze, powinieneś zobaczyć się na ekranie.

NOTATKA: Wróć do sekcji konwersji obrazu powyżej, jeśli potrzebujesz pomocy w tym, jak skompilować ten program OpenCV.

Napisz plik AVI z aparatu

Ostatni przykład będzie próbował odczytać wejście z aparatu i zapisać go do pliku. W międzyczasie program wyświetli również okno ze strumieniem wideo wprowadzania kamery. Wejście wideo jest zapisywane w pliku dostarczonym jako argument w wierszu poleceń. Zastosowany kodek jest określony przez Fourcc (kod czterech znaków) MJPG, który w tym przypadku jest ruch JPEG. Ten przykładowy program jest bardzo podstawowy i jest dużo miejsca na poprawę:

#włączać 
#włączać
Main (int argc, char* argv [])
Cvcapture* capture = null;
capture = cvCreateCameracapture (0);
Iplimage *frame = cvqueryFrame (capture);
// Uzyskaj rozmiar ramki do użycia przez strukturę pisarza
CVSIZE Rozmiar = CVSIZE (
(int) cvgetCaptureProperty (Capture, CV_CAP_PROP_FRAME_WIDTH),
(int) cvgetCaptureProperty (Capture, CV_CAP_Prop_Frame_Height)
);
// Deklaruj strukturę pisarza
// Użyj Fourcc (kod czterech znaków) MJPG, kodek Motion JPEG
// plik wyjściowy jest określony przez pierwszy argument
Cvvideowriter *pisarz = cvCreatevideowriter (
Argv [1],
CV_FOURCC („M”, „J”, „P”, „G”),
30, // Ustaw FPS
rozmiar
);
// Utwórz nowe okno
CvNamedWindow („Nagrywanie… Press ESC, aby się zatrzymać !", Cv_window_autosize);
// pokaż przechwytywanie w oknie i zapisz do pliku
// nagraj, aż użytkownik trafił na klucz ESC
while (1)
frames = cvQueryFrame (przechwytywanie);
Jeśli( !ramki) przerwa;
CVSHOWIMAGE („Nagrywanie… Press ESC, aby się zatrzymać !", ramki);
CvWriteFrame (pisarz, ramki);
char c = cvwaitkey (33);
if (c == 27) przerwa;

CVREleaseVideowriter (i pisarz);
cvreleasecapture (i przechwytywanie);
CVDestroydWindow („Nagrywanie… Press ESC, aby się zatrzymać !");
return0;

Zakładając, że zapisałeś i skompilowałeś ten program jako „Save-C-C-Enput”, możesz przełożyć nagrywanie wideo do pliku wideo.avi z tym poleceniem:
NOTATKA: Wróć do sekcji konwersji obrazu powyżej, jeśli potrzebujesz pomocy w tym, jak skompilować ten program OpenCV.

$ ./Zapisz plik wideo z wejściem z kamery.Avi

Wniosek

Ten artykuł powinien dać ci dobry początek biblioteki OpenCV z perspektywy instalacji. Przedstawione przykłady nie mają wiele wspólnego z samą wizją komputerową, ale raczej zapewniają dobrą podstawę do instalacji OpenCV. Nawet z tych prostych przykładów OpenCV jasne jest również, że OpenCV jest wysoce cywilizowaną biblioteką, ponieważ z kilkoma wierszami kodu OpenCV można osiągnąć świetne wyniki. Twój komentarz do tego artykułu jest bardzo mile widziany, ponieważ może mieć duży wpływ na jakość artykułu. Wystąpi więcej na temat OpenCV, więc bądźcie czujni, podskakując do Linuxconfig.Org RSS Feed (lewy górny róg).

Powiązane samouczki Linux:

  • Rzeczy do zainstalowania na Ubuntu 20.04
  • Jak podwójnie rozruch Kali Linux i Windows 10
  • Najlepsze oprogramowanie do edycji wideo w Linux
  • Rzeczy do zrobienia po zainstalowaniu Ubuntu 20.04 Focal Fossa Linux
  • Wprowadzenie do automatyzacji, narzędzi i technik Linuksa
  • Najlepszy czytnik PDF dla Linux
  • Jak uzyskać adres MAC w Linux
  • Mint 20: Lepsze niż Ubuntu i Microsoft Windows?
  • Manjaro Linux Windows 10 Dual Boot
  • Linux Pliki konfiguracyjne: Top 30 Najważniejsze