GNU/Linux >> Belajar Linux >  >> Ubuntu

Memulai Pengembangan Computer Vision dengan OpenCV di Ubuntu

Di sini saya akan membahas bagaimana Anda dapat menginstal OpenCV pada sistem Ubuntu Anda, cara Anda dapat membangun program C++ berdasarkan Perpustakaan Visi Komputer Sumber Terbuka ini, membaca dari file atau kamera, melakukan operasi pemrosesan gambar dasar, menggambar atau menulis beberapa hal dan menyimpan bekerja.

Daftar Isi

  • Pengantar
    • Tentang OpenCV
    • Persyaratan
  • Memasang
    • Siapkan Sistem Anda
    • Dapatkan OpenCV
    • Bangun
    • Konfigurasikan
  • Berkembang dengan OpenCV
    • Aplikasi 1 - Jendela Sederhana
    • Pembangunan Terminal
      • g++
      • membuat
      • Membuat
    • KDevelop Build
    • Aplikasi 2 - Muat img
    • Aplikasi 3 - Muat video
    • Aplikasi 4 - Gambar dan proses

Pengantar

Ini adalah topik pemrograman, dan beberapa pengetahuan pemrograman sebelumnya dalam bahasa apa pun akan membantu, namun saya akan menyajikan semua alat dan perintah yang diperlukan untuk membangun program kecil, jadi siapa pun dengan keterampilan penalaran logika yang baik mungkin dapat membuat sampel dan mendapat manfaat darinya .

Selain itu, ini adalah materi pengantar, dan tidak akan mencakup pemrograman yang rumit atau konsep ilmiah, saya akan fokus pada bagaimana membuat sesuatu bekerja sebagai gantinya, memberi Anda beberapa kode contoh untuk Anda coba sendiri, menjadi terbiasa dan bersenang-senang.

Anda dianjurkan untuk membuka manual referensi API di tab lain dan merujuknya setiap kali Anda menemukan objek, fungsi, atau parameter baru pada kode yang disediakan di sini, setelah Anda pertama kali membuatnya, lakukan beberapa perubahan sendiri untuk pemahaman yang lebih baik.

Selain itu, sebaiknya gunakan man dan lihat dokumentasi resmi dari setiap alat build, file, dan istilah yang disajikan di sini.

Apa itu OpenCV

OpenCV adalah singkatan dari Open Source Computer Vision Library, dan tujuan utamanya adalah untuk menciptakan pendekatan standar untuk masalah visi komputer. Ini menyediakan satu set modul yang membantu Anda dalam hal-hal seperti aljabar linier, pemrosesan gambar, pembelajaran mesin, abstraksi perangkat keras, GUI tingkat tinggi, serta antarmuka ke OpenGL, OpenCL, CUDA dan sebagainya. Perlu juga diingat, bahwa itu didistribusikan di bawah lisensi BSD, yang cukup permisif dan baik untuk penelitian atau tujuan komersial.

Modul yang akan kita gunakan dalam program kita adalah.

  • Inti - dasar OpenCV
  • GUI Tinggi - Menyediakan antarmuka pengguna grafis tingkat tinggi yang cukup sederhana dan berguna
  • improc - Menyediakan kemampuan pemrosesan gambar

Persyaratan

Ini adalah persyaratan yang ditampilkan pada dokumen OpenCV, beberapa di antaranya opsional, tetapi selalu merupakan ide yang baik untuk memenuhi semua persyaratan saat mempelajari sesuatu.

  • GCC 4.4.x atau lebih baru
  • CMake 2.6 atau lebih tinggi
  • Git
  • GTK+2.x atau lebih tinggi, termasuk header (libgtk2.0-dev)
  • pkg-config
  • Python 2.6 atau lebih baru dan Numpy 1.5 atau lebih baru dengan paket pengembang (python-dev, python-numpy)
  • paket pengembangan ffmpeg atau libav:libavcodec-dev, libavformat-dev, libswscale-dev
  • [opsional] libtbb2 libtbb-dev, libdc1394 2.x, libjpeg-dev, libpng-dev, libtiff-dev, libjasper-dev, libdc1394-22-dev

Cara Memasang

Di bagian pertama artikel ini saya akan menunjukkan kepada Anda bagaimana mempersiapkan sistem Anda, mendapatkan, membangun dan menginstal OpenCV dan beberapa konfigurasi pasca-instal

Siapkan

Pertama perbarui database apt Anda

apt-get update

Instal hal-hal dari bagian persyaratan dengan 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

Dapatkan OpenCV

Kita akan menggunakan OpenCV 2.4.11, buka sesi terminal dan gunakan wget sebagai berikut:

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

Anda juga dapat mengkloning rilis terbaru nanti, dan lihat di sini, ini adalah tutorial migrasi tempat Anda dapat mempelajari cara membuat transisi antar rilis OpenCV.

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

Bangun Sumbernya

Masuk ke dalam direktori paket

cd *2.4.11*

Buat direktori untuk build, Open OpenCV kami dan masuk ke dalamnya

mkdir build && cd build

Di dalam direktori build, gunakan cmake untuk menyiapkannya.

cmake ..

Sekarang kita memiliki Makefile, kita dapat membuat dan instal

make && make install

Cara Mengonfigurasi

Uji apakah sistem Anda dapat menemukan jalur OpenCV, jalankan perintah berikut:

 pkg-config --cflags --libs opencv

Jika itu memberi Anda pesan kesalahan, variabel lingkungan PKG_CONFIG_PATH Anda mungkin tidak menunjuk ke OpenCV dan Anda harus menambahkan jalurnya. Coba jalankan ini dan tes sekali lagi

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

Anda dapat menambahkan perintah terakhir pada skrip profil untuk menghindari keharusan menjalankannya setiap saat, coba .bashrc:

vi ~/.bashrc

Berkembang dengan OpenCV

Kami sekarang siap untuk memulai beberapa kode OpenCV, berikut adalah beberapa contoh program dan pendekatan dasar tentang cara membangunnya.

Aplikasi Pertama - Jendela Sederhana

Aplikasi pertama ini cukup membuka jendela di layar, itu tidak banyak berguna, tapi bagus untuk menguji instalasi Anda dan belajar bagaimana membangun aplikasi 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 ){

//membuat jendela bernama theWindow

bernamaJendela("Jendela", CV_WINDOW_AUTOSIZE);

//tunggu pengguna menekan beberapa tombol

waitKey(0);

//hancurkan jendela bernama theWindow

destroyWindow("theWindow");

kembali 0;

}

Pembuatan terminal

Buat direktori untuk proyek

mkdir firstcv && cd firstcv

Buat c++ file dengan Vi

vi main.cpp

sekarang buat langsung dengan g++

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

Buat

Aplikasi firstcv cukup sederhana dan mudah untuk membangunnya secara langsung, namun ketika kode menjadi kompleks, perintah build Anda segera menjadi samar, juga pembersihan dan pemeliharaan umum menjadi berantakan. Untuk alasan ini kami menggunakan make

Buat file bernama Makefile dengan isi sebagai berikut:

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

clean:
rm firstcv

Ini pada dasarnya akan memanggil kompiler dengan seperangkat parameter yang disiapkan ketika semua adalah target dan hapus yang dapat dieksekusi ketika target bersih , untuk detail lebih lanjut tentang Makefile, lihat di sini

Fakta lain tentang make adalah jika tidak ada target id yang diberikan, maka akan menggunakan target pertama, jadi untuk membangun kode Anda hanya perlu make:

make

Membuat

Pendekatan terakhir untuk membangun aplikasi, tetapi pembuatan Makefile juga bisa menjadi rumit saat Anda membangun di seluruh sistem. Anda kemudian dapat membuat build Anda dengan CMake, seperti yang dilakukan oleh proyek OpenCV itu sendiri, ini menyederhanakan manajemen build dan meningkatkan kompatibilitas di seluruh platform.

Alih-alih mengerjakan Makefile, sekarang kami membuat file bernama CMakeLists.txt dengan konten yang mirip dengan ini:

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} )

Dikatakan:

cmake_minimum_required :versi CMake minimum adalah 2.6

proyek :nama proyek Anda

sertakan_direktori :Tambahan termasuk jalur

temukan_paket :cari paket OpenCV, seperti yang telah kita lakukan dengan pkg-config sebelumnya

tambahkan_yang dapat dieksekusi :binari yang dihasilkan dan file sumbernya.

pasang :Instal jalur

target_link_libraries :Objek yang dibagikan untuk ditautkan, sekali lagi berfungsi seperti pkg-config

Kemudian buat direktori build dan masuk ke dalamnya.

mkdir build && cd build

Siapkan bangunan Anda dengan cmake

cmake ..

Dengan Makefile di tangan, buatlah:

make

Jalankan saja program Anda

./firstcv

KDevelop build

Meskipun Anda dapat membangun seluruh sistem dari terminal konsol, Anda dapat melakukan lebih banyak lagi dengan menggunakan fitur-fitur seperti pemformatan kode, referensi kode sorotan sintaks, debugger, dan lainnya dengan menggunakan IDE. KDevelop sangat bagus, sederhana dan saya akan menunjukkan cara membuat proyek Anda berdasarkan template aplikasi terminal Cmake.

Klik menu Proyek ->Baru Dari Template , lalu pilih Standar di Kategori, Terminal pada jenis proyek dan beri nama.

Setelah proyek dibuat, ubah isi file main.cpp dengan yang disediakan sebelumnya

Pada panel proyek, klik dua kali pada nama proyek, lalu pada file CMakeLists.txt dan ubah sesuai dengan bagian CMake.

Bangun proyek Anda, klik buat atau tekan [F8] kunci dan jalankan dengan [F9] , saat pertama kali dijalankan, Anda perlu mengatur parameter run sebagai berikut

Sekarang Anda sudah bisa membangun kode OpenCV, untuk aplikasi selanjutnya Anda hanya perlu mengulang pembuatan proyek atau mengganti sumber file main.cpp.

Aplikasi 2 - Tampilkan Gambar

Aplikasi ini cukup menampilkan isi file gambar pada jendela

#include "opencv2/highgui/highgui.hpp"

using namespace cv;
using namespace std;

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

//membuat objek Mat dan memuat konten file linoxide.png di atasnya

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

//jika img kosong, mati dengan status keluar error

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

bernamaJendela("Jendela", CV_WINDOW_AUTOSIZE);

//tampilkan img di Jendela

imshow("Jendela", img);

waitKey(0);

destroyWindow("theWindow");

kembali 0;

}

Berikut adalah program yang sedang berjalan:

Aplikasi 3 - Muat Video

Kali ini kita akan membaca konten langsung dari kamera kita, hanya sedikit perubahan pada kode terakhir

#include "opencv2/opencv.hpp"

using namespace cv;
using namespace std;

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

//Aktifkan kamera

Tutup VideoCapture (0); Mat img;

bernamaJendela("Jendela", CV_WINDOW_AUTOSIZE);

sementara(benar){

//jika tidak bisa membaca dari kamera, program mati

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

imshow("Jendela", img );

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

}

}

Aplikasi 4 - Pemrosesan gambar

Sekarang Anda dapat memuat gambar Anda dan memiliki alur program dasar, mari tingkatkan ini, buat beberapa kontrol, gambar sesuatu yang menyerupai logo Linoxide, lakukan beberapa transformasi pada gambar dan simpan.

//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) {

//Memulai perangkat pengambilan video pada tutup VideoCapture cap(0);

//Jika tidak bisa membuka perangkat penangkap, program mati if(!cap.isOpened()){return -1;}

//Ini adalah bingkai bingkai Mat kami;

//Kami akan menampilkan frame kami di sini bernamaWindow("display", CV_WINDOW_AUTOSIZE);

//Jendela ini menahan trackbars untuk mengubah perilaku program bernamaWindow("config", CV_WINDOW_AUTOSIZE);

//secara default kita tidak akan membalikkan frame bool invertimg =false;

//kita akan menggambar sketsa logo Linoxide bool draw =true;

// buat dudukan untuk mode flip bingkai kita int flipmode =0; // buat trackbar untuk mengubah mode flip cvCreateTrackbar("Flip Mode:", "config", &flipmode, 3);

// pemegang nilai lebar dan tinggi untuk mengubah ukuran gambar int screen_width =640; int screen_height =480;

//buat trackbar jendela konfigurasi untuk mengubah properti ukuran cvCreateTrackbar("Width:", "config", &screen_width, 1024); cvCreateTrackbar("Tinggi:", "config", &screen_height, 768);

//membuat vektor parameter kompresi yang akan digunakan untuk mengambil vektor snapshot compression_pars; kompresi_pars.push_back(CV_IMWRITE_PNG_COMPRESSION); kompresi_pars.push_back(9);

sementara(benar){

if(!cap.read(frame)){return -1;} // tidak bisa membaca frame, program mati

//jika invertimg benar, balikkan setiap elemen matriks dengan mengurangi nilainya dari nilai maksimum yang mungkin if(invertimg ==true){ frame =Scalar::all(255) - frame; }

//membalik frame sesuai dengan nilai pada trackbar mode flip if(flipmode> 0){flip(frame,frame,1);} //flip horizontal if(flipmode> 1){flip(frame,frame,0);} //flip vertikal, sekarang dibalik ke dua arah if(flipmode> 2){flip(frame,frame,1);} //flip horizontal, sekarang hanya membalik vertikal

//mengubah ukuran frame sesuai dengan nilai pada trackbars resize(frame,frame, Size(screen_width,screen_height) );

if (gambar ==benar){

//menggambar persegi panjang putih untuk digunakan sebagai latar belakang, warnanya adalah Skalar(B,G,R) persegi panjang(bingkai, Titik(5,25), Titik(140,70), Skalar(255,255,255), -1, 8, 0);

//dark-yellow rectangle, perhatikan bahwa nilai alpha dapat digunakan rectangle(frame, Point(5,25), Point(54,55), Scalar(00,225,255,0), -1, 8, 0);

//persegi panjang biru cerah, ketebalannya negatif, sehingga akan terisi penuh persegi panjang(bingkai, Titik(57,25), Titik(140,55), Skalar(255,225,100), -1, 8, 0);

//persegi panjang hitam, mulai dari titik x5,y57, berakhir di x140,y70 persegi panjang(bingkai, Titik(5,57), Titik(140,70), Skalar(0,0,0), -1, 8, 0 );

//tulis teks pada frame, pisahkan berdasarkan karakter font dan posisi putText(frame, "L ", Point(10,50), FONT_HERSHEY_SIMPLEX, 1, Scalar(0,0,0),2,0); putText(bingkai, " IN ", Titik(14,50), FONT_HERSHEY_SIMPLEX, 0.8, Skalar(0,0,0),2,0); putText(bingkai, " O ", Titik(10,50), FONT_HERSHEY_SIMPLEX, 1, Skalar(255,255,255),2,0); putText(bingkai, " XIDE", Titik(14,50), FONT_HERSHEY_SIMPLEX, 0.8, Skalar(255.255.255),2,0); putText(frame, "Linux Freedom Thoughts", Point(10,65), FONT_HERSHEY_PLAIN, 0.6, Scalar(255,255,255),0,0);

} //tampilkan bingkai kita di jendela tampilan imshow("display",frame);

switch(waitKey(10)){ kasus 27://[esc], selesaikan program dengan sukses kembali 0; case 'i'://invert image toggle if (invertimg ==false){invertimg =true;}else {invertimg =false;} case 'd'://draw Linoxide toggle if (draw ==false){draw =true;}else {draw =false;} case 's'://ambil snapshot, simpan ke snapshot.png imwrite("snapshot.png", frame, compression_pars);

}

} //selesai dengan sukses return 0;

}

Ini dia

Kesimpulan

Itu saja untuk saat ini, Anda harus dapat membangun program berdasarkan perpustakaan OpenCV. Konsep-konsep yang diperkenalkan di sini seharusnya memberi Anda pemahaman tentang ide-ide di balik perpustakaan. Tapi itu baru permulaan, Anda dapat menggali tutorial resmi, mempelajari referensi dan sampel OpenCV lebih dalam dan melihat hal-hal yang lebih canggih, seperti deteksi objek, deteksi wajah, pelacakan objek, pencocokan template, pembelajaran mesin, pemetaan 3D.

Terima kasih telah membaca, saya harap Anda menyukainya dan membuat hal-hal hebat dengan OpenCV!


Ubuntu
  1. Dimulai dengan Vagrant di Ubuntu 14.10 - Panduan Pemula

  2. Bagaimana cara menginstal OpenCV di Ubuntu 20.04?

  3. Boot Sangat Lambat Dengan Ubuntu 15.04?

  1. Cara Menginstal Pengembangan GIMP 2.9 Terbaru di Ubuntu

  2. Bagaimana cara mengubah Hostname di Ubuntu

  3. Ubuntu – Bagaimana Memperpanjang Partisi Linux? (Setelah Sukses Memperpanjang :Gagal Mem-boot Komputer)?

  1. Cara Menginstal OpenCV di Ubuntu 18.04

  2. Cara Menginstal OpenCV di Ubuntu 20.04

  3. Siapkan lingkungan Pengembangan Ruby on Rails dengan Docker dan Docker Compose di Ubuntu