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
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!