GNU/Linux >> Znalost Linux >  >> Ubuntu

Spuštění vývoje počítačového vidění s OpenCV na Ubuntu

Zde popíšu, jak můžete nainstalovat OpenCV na váš systém Ubuntu, způsoby, jak můžete vytvářet programy C++ založené na této knihovně počítačového vidění s otevřeným zdrojovým kódem, číst ze souborů nebo fotoaparátu, provádět základní operace zpracování obrazu, kreslit nebo psát nějaké věci a ukládat naše práce.

Obsah

  • Úvod
    • O OpenCV
    • Požadavky
  • Instalace
    • Připravte svůj systém
    • Získejte OpenCV
    • Stavět
    • Konfigurovat
  • DevelopingwithOpenCV
    • Aplikace 1 – jednoduché okno
    • Sestavení terminálu
      • g++
      • vytvořit
      • CMake
    • KDevelop Build
    • Aplikace 2 – Načíst obrázek
    • Aplikace 3 – Načtení videa
    • Aplikace 4 – Kreslení a zpracování

Úvod

Toto je téma programování a některé předchozí znalosti programování v jakémkoli jazyce pomohou, nicméně představím všechny nástroje a příkazy potřebné k sestavení malých programů, takže každý, kdo má dobrou schopnost logického uvažování, může být schopen sestavit vzorky a mít z toho prospěch. .

Je to také úvodní materiál a nebude pokrývat složité programování nebo vědecké koncepty, místo toho se zaměřím na to, jak věci uvést do praxe, dám vám nějaký ukázkový kód, abyste si to sami vyzkoušeli, zvykli si na to a bavili se.

Doporučujeme vám otevřít referenční příručku API na jiné kartě a odkázat na ni, kdykoli najdete nový objekt, funkci nebo parametr ve zde poskytnutém kódu, jakmile jej poprvé sestavíte, pro lepší pochopení proveďte některé změny sami.

Také je dobré použít man a podívat se na oficiální dokumentaci každého ze zde uvedených nástrojů pro sestavení, souborů a podmínek.

Co je OpenCV

OpenCV je zkratka pro Open Source Computer Vision Library a jejím hlavním účelem je vytvořit standardizovaný přístup k problematice počítačového vidění. Poskytuje sadu modulů, které vám pomohou ve věcech, jako je lineární algebra, zpracování obrazu, strojové učení, abstrakce hardwaru, GUI na vysoké úrovni, stejně jako rozhraní pro OpenGL, OpenCL, CUDA a tak dále. Mějte také na paměti, že je šířen pod licencí BSD, což je docela tolerantní a dobré pro výzkumné i komerční účely.

Moduly, které budeme používat v našich programech, jsou.

  • Základní - základ OpenCV
  • HighGUI - Poskytuje poměrně jednoduché a užitečné grafické uživatelské rozhraní na vysoké úrovni
  • improc - Poskytuje možnosti zpracování obrazu

Požadavky

Toto jsou požadavky uvedené v dokumentech OpenCV, některé z nich jsou volitelné, ale vždy je dobré splnit všechny požadavky, když se cokoliv učíte.

  • GCC 4.4.x nebo novější
  • CMake 2.6 nebo vyšší
  • Git
  • GTK+2.x nebo vyšší, včetně záhlaví (libgtk2.0-dev)
  • pkg-config
  • Python 2.6 nebo novější a Numpy 1.5 nebo novější s balíčky pro vývojáře (python-dev, python-numpy)
  • vývojové balíčky ffmpeg nebo libav:libavcodec-dev, libavformat-dev, libswscale-dev
  • [volitelné] libtbb2 libtbb-dev, libdc1394 2.x, libjpeg-dev, libpng-dev, libtiff-dev, libjasper-dev, libdc1394-22-dev

Jak nainstalovat

V této první části článku vám ukážu, jak připravit váš systém, získat, sestavit a nainstalovat OpenCV a nějakou konfiguraci po instalaci

Připravit

Nejprve aktualizujte svou databázi apt

apt-get update

Nainstalujte věci ze sekce požadavků pomocí apt-get.

apt-get install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

Získejte OpenCV

Budeme používat OpenCV 2.4.11, otevřeme terminálovou relaci a použijeme wget následovně:

wget https://github.com/Itseez/opencv/archive/2.4.11.zip

Nejnovější verzi můžete také naklonovat později a podívejte se sem, je to migrační tutoriál, kde se můžete naučit, jak provést přechod mezi vydáními OpenCV.

git clone https://github.com/Itseez/opencv.git

Sestavte zdroje

Zadejte adresář balíčku

cd *2.4.11*

Vytvořte adresář pro naše sestavení OpenCV a zadejte jej

mkdir build && cd build

V adresáři sestavení jej připravte pomocí cmake.

cmake ..

Nyní, když máme Makefile, můžeme vytvořit a nainstalovat

make && make install

Jak nakonfigurovat

Otestujte, zda váš systém dokáže najít cesty OpenCV, spusťte následující příkaz:

 pkg-config --cflags --libs opencv

Pokud vám zobrazí chybovou zprávu, vaše proměnná prostředí PKG_CONFIG_PATH možná neukazuje na OpenCV a musíte do ní přidat cestu. Zkuste toto a test spustit ještě jednou

export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig"

Ke skriptu profilu můžete připojit poslední příkaz, abyste se vyhnuli nutnosti jej spouštět pokaždé, zkuste .bashrc:

vi ~/.bashrc

Vývoj s OpenCV

Nyní jsme připraveni spustit nějaký kód OpenCV, zde jsou některé ukázkové programy a základní přístup k tomu, jak je sestavit.

První aplikace – jednoduché okno

Tato první aplikace jednoduše otevře okno na obrazovce, není moc užitečná, ale je dobré otestovat instalaci a naučit se vytvářet aplikace OpenCV

main.cpp

//include high gui headers

#include "opencv2/highgui/highgui.hpp"

//we are using standard and OpenCV namespaces

using namespace cv;
using namespace std;

int main( int argc, const char** argv ){

//vytvoří okno s názvem theWindow

namedWindow("theWindow", CV_WINDOW_AUTOSIZE);

//počkejte, až uživatel stiskne nějakou klávesu

waitKey(0);

//zničí okno s názvem theWindow

zničitWindow("theWindow");

návrat 0;

}

Sestavení terminálu

Vytvořte adresář pro projekt

mkdir firstcv && cd firstcv

Vytvořte c++ soubor s Vi

vi main.cpp

nyní jej vytvořte přímo pomocí g++

g++ -o firstcv $(pkg-config --libs --cflags opencv) main.cpp

Vyrobit

Aplikace firstcv je poměrně jednoduchá a je snadné ji přímo sestavit, ale jak se kód stává složitým, vaše příkazy k sestavení se brzy stanou záhadnými, stejně jako čištění a obecná údržba se stává nepořádkem. Z tohoto důvodu používáme make

Vytvořte soubor s názvem Makefile s následujícím obsahem:

all:
g++ -o firstcv \
-I/usr/local/include/opencv  \
-L/usr/local/lib \
-lopencv_highgui \
-lopencv_core \
-lm \
main.cpp

clean:
rm firstcv

V podstatě zavolá kompilátor s připravenou sadou parametrů, když je all je cíl a odstraňte spustitelný soubor, když je cíl čistý , další podrobnosti o Makefile naleznete zde

Dalším faktem o make je, že pokud není zadáno žádné cílové ID, použije první cíl, takže k sestavení kódu stačí make:

make

CMake

Poslední přístup k sestavování aplikací, ale vytváření souborů Makefiles se také může stát složitým při sestavování napříč systémy. Své sestavení pak můžete vygenerovat pomocí CMake, jako to dělá samotný projekt OpenCV, zjednodušuje to správu sestavení a zvyšuje kompatibilitu napříč platformami.

Místo práce na Makefile nyní vytváříme soubor s názvem CMakeLists.txt s obsahem podobným tomuto:

cmake_minimum_required(VERSION 2.6)
project(firstcv)
include_directories("/usr/local/include")
find_package( OpenCV REQUIRED )
add_executable(firstcv main.cpp)
install(TARGETS firstcv RUNTIME DESTINATION bin)
target_link_libraries( firstcv ${OpenCV_LIBS} )

Říká:

cmake_minimum_required :minimální verze CMake je 2.6

projekt :jméno vašeho projektu

include_directories :Další zahrnuje cestu

najít_balíček :vyhledejte balíček OpenCV, jako jsme to udělali s pkg-config dříve

add_executable :výsledné binární soubory a jejich zdrojové soubory.

instalovat :Instalační cesta

target_link_libraries :Sdílené objekty k propojení, opět to funguje jako pkg-config

Poté vytvořte adresář sestavení a zadejte do něj.

mkdir build && cd build

Připravte si stavbu pomocí cmake

cmake ..

S Makefile v ruce to udělejte:

make

Stačí spustit svůj program

./firstcv

KDevelop build

Přestože můžete z konzolového terminálu sestavit celé systémy, můžete toho udělat mnohem více pomocí funkcí, jako je formátování kódu, odkaz na kód se zvýrazněním syntaxe, debugger a další pomocí IDE. KDevelop je skvělý, jednoduchý a já vám ukážu, jak vytvářet své projekty založené na jeho šabloně terminálové aplikace Cmake.

Klikněte na nabídku Projekt ->Nové ze šablony a poté vyberte Standardní v kategorii,Terminál u typu projektu a pojmenujte jej.

Jakmile je projekt vytvořen, změňte obsah souboru main.cpp na ten, který byl poskytnut dříve

Na panelu projektů poklepejte na název projektu, poté na soubor CMakeLists.txt a změňte jej podle sekce CMake.

Sestavte svůj projekt, klikněte na sestavit nebo stiskněte [F8] a spusťte jej pomocí [F9] , při prvním spuštění budete muset nastavit parametry běhu následovně

Nyní jste schopni sestavit kód OpenCV, pro další aplikace stačí zopakovat vytvoření projektu nebo nahradit zdroj souboru main.cpp.

Aplikace 2 – Zobrazit obrázek

Tato aplikace jednoduše zobrazí obsah obrazového souboru v okně

#include "opencv2/highgui/highgui.hpp"

using namespace cv;
using namespace std;

int main( int argc, const char** argv ){

//vytvoří objekt Mat a načte do něj obsah souboru linoxide.png

Mat img =imread("linoxide.png", CV_LOAD_IMAGE_UNCHANGED);

//pokud je img prázdný, zemře se stavem chybového ukončení

if (img.empty()){return -1;}

namedWindow("theWindow", CV_WINDOW_AUTOSIZE);

//zobrazit obrázek v okně

imshow("theWindow", img);

waitKey(0);

zničitWindow("theWindow");

návrat 0;

}

Zde běží program:

Aplikace 3 – Načíst video

Tentokrát budeme číst obsah přímo z naší kamery, je to jen několik změn v posledním kódu

#include "opencv2/opencv.hpp"

using namespace cv;
using namespace std;

int main( int argc, const char** argv ){

//Spustit kameru

VideoCapture cap(0); Mat img;

namedWindow("theWindow", CV_WINDOW_AUTOSIZE);

while(true){

//pokud nelze číst z fotoaparátu, program zaniká

if (!cap.read(img)) { return -1; }

imshow("theWindow", img);

if (waitKey(20) ==27) {return 0;}

}

}

Aplikace 4 – Zpracování obrazu

Nyní, když můžete načíst své obrázky a mít základní tok programu, pojďme to vylepšit, vytvořit nějaké ovládací prvky, nakreslit něco, co připomíná logo Linoxide, provést nějaké transformace obrázků a uložit je.

//we include High level GUI and Media I/O
#include "opencv2/highgui/highgui.hpp"

//Including Image processing capabilities
#include "opencv2/imgproc/imgproc.hpp"

//OpenCV core module is implicitly included

//we are using both standard and OpenCV namespaces
using namespace std;
using namespace cv;

int main(int argc, char **argv) {

//Spusťte zařízení pro záznam videa na čepici VideoCapture cap(0);

//Pokud nelze otevřít snímací zařízení, program zemře if(!cap.isOpened()){return -1;}

//Zde je náš rám Mat frame;

//Zde zobrazíme naše snímky pojmenovanéWindow("display", CV_WINDOW_AUTOSIZE);

//Toto okno podrží lišty pro změnu chování programu namedWindow("config", CV_WINDOW_AUTOSIZE);

//ve výchozím nastavení nebudeme invertovat rámec bool invertimg =false;

//nakreslíme skicu loga Linoxide bool draw =true;

// vytvoříme držák pro náš režim převrácení snímku int flipmode =0; // vytvořte trackbar pro změnu režimu převrácení cvCreateTrackbar("Flip Mode:", "config", &flipmode, 3);

//držitelé hodnot šířky a výšky pro změnu velikosti obrázku int screen_width =640; int screen_height =480;

//vytvoření trackbarů v konfiguračním okně pro změnu vlastností velikosti cvCreateTrackbar("Width:", "config", &screen_width, 1024); cvCreateTrackbar("Height:", "config", &screen_height, 768);

//vytvoří vektor parametrů komprese, který bude použit k pořízení snímku vektorukomprese_pars; komprese_pars.push_back(CV_IMWRITE_PNG_COMPRESSION); komprese_pars.push_back(9);

while(true){

if(!cap.read(frame)){return -1;} // nemohl přečíst snímek, program zemřel

//pokud je invertimg true, invertuje každý z prvků matice snížením jeho hodnoty z maximální možné if(invertimg ==true){ frame =Skalární::all(255) - frame; }

//převrátit snímek podle hodnot na liště režimu převrácení if(flipmode> 0){flip(frame,frame,1);} //flip horizontal if(flipmode> 1){flip(frame,frame,0);} //převrátit svisle, nyní je převráceno na oba směry if(flipmode> 2){flip(snímek,snímek,1);} //převrácení vodorovně, nyní pouze svislé

//změna velikosti snímku podle hodnot na lištách resize(frame,frame, Size(screen_width,screen_height) );

if (draw ==true){

//nakreslete bílý obdélník pro použití jako pozadí, barva je Skalární(B,G,R) obdélník(rám, Bod(5,25), Bod(140,70), Skalární(255,255,255), -1, 8, 0);

//tmavě-žlutý obdélník, všimněte si, že lze použít hodnotu alfa rectangle(frame, Point(5,25), Point(54,55), Scalar(00,225,255,0), -1, 8, 0);

//jasně modrý obdélník, tloušťka je záporná, takže bude zcela vyplněn obdélník(snímek, Bod(57,25), Bod(140,55), Skalární(255,225,100), -1, 8, 0);

//černý obdélník, začíná v bodě x5,y57, končí v x140,y70 obdélník(snímek, Bod(5,57), Bod(140,70), Skalární(0,0,0), -1, 8, 0 );

//napíšeme text na rámeček, oddělíme podle znaků písma a umístění putText(frame, "L ", Point(10,50), FONT_HERSHEY_SIMPLEX, 1, Scalar(0,0,0),2,0); putText(snímek, "IN", Bod(14,50), FONT_HERSHEY_SIMPLEX, 0,8, Skalární(0,0,0),2,0); putText(snímek, " O ", Bod(10,50), FONT_HERSHEY_SIMPLEX, 1, Skalární(255,255,255),2,0); putText(snímek, " XIDE", Bod(14,50), FONT_HERSHEY_SIMPLEX, 0,8, Skalární(255,255,255),2,0); putText(frame, "Linux Freedom Thoughts", Point(10,65), FONT_HERSHEY_PLAIN, 0,6, Skalární (255,255,255);0,0);

} //zobrazení našeho snímku v okně zobrazení imshow("display",frame);

switch(waitKey(10)){ case 27://[esc], ukončit program s úspěchem return 0; case 'i'://přepnout převrácení obrázku if (invertimg ==false){invertimg =true;}else {invertimg =false;} case 'd'://vykreslit Linoxide toggle if (draw ==false){draw =true;}else {draw =false;} case 's'://pořídit snímek, uložit do snapshot.png imwrite("snapshot.png", frame, compress_pars);

}

} //dokončit s úspěchem return 0;

}

Tady to je

Závěr

To je prozatím vše, měli byste být schopni vytvářet programy založené na knihovně OpenCV. Zde představené koncepty by vám měly poskytnout pochopení myšlenek knihovny. Ale to je jen začátek, můžete se ponořit do oficiálních návodů, jít hlouběji do referencí a ukázek OpenCV a podívat se na pokročilejší věci, jako je detekce objektů, detekce obličeje, sledování objektů, párování šablon, strojové učení, 3D mapování.

Děkuji za přečtení, doufám, že se vám bude líbit a budete s OpenCV dělat skvělé věci!


Ubuntu
  1. Začínáme s Vagrant na Ubuntu 14.10 – Průvodce pro začátečníky

  2. Jak změnit název hostitele na Ubuntu

  3. Jak nainstalovat OpenCV na Ubuntu 20.04?

  1. Jak nainstalovat nejnovější GIMP 2.9 Development Build na Ubuntu

  2. Ubuntu – Jak rozšířit linuxový oddíl s? (po úspěchu rozšíření:selhání spuštění počítače)?

  3. Velmi pomalé spouštění s Ubuntu 15.04?

  1. Jak nainstalovat OpenCV na Ubuntu 18.04

  2. Jak nainstalovat OpenCV na Ubuntu 20.04

  3. Nastavte vývojové prostředí Ruby on Rails pomocí Docker a Docker Compose na Ubuntu