
Week-2: Introduction to OpenCV
Apa itu OpenCV? OpenCV merupakan sebuah library yang bisa kita gunakan untuk melakukan pengolahan gambar, video, atau pengolahan dari kamera secara realtime. OpenCV bersifat open-source, dan bisa digunakan untuk mengolah citra yang dikonversi dari analog ke digital sehingga kita bisa melakukan operasi-operasi pengolahan citra. Pemrosesan gambar bisa membantu kita untuk melakukan perbaikan kualitas gambar, menghilangkan noise, identifikasi gambar, deteksi warna, dan lain-lain.
Instalasi
Windows
- Download dan Install Anaconda Kamu dapat mengunjungi website anaconda
- Pilih versi 64-bit
- Ikuti proses instalasi dan pastikan checklist "Add Anaconda3 to my PATH environment variable"
- Membuat environtment baru
conda create --name opencv-env
- mengaktifkan environment
conda activate opencv-env
- install opencv pada environment yang telah dibuat
conda install -c conda-forge opencv
- Periksa Instalasi opencv
import cv2 as cv
cv.__version__
Ubuntu (Linux)
Python
Untuk OpenCV versi python bisa langsung diinstall memakai package manager apt, seperti berikut:
sudo apt install python3-opencv -y
C++
Untuk OpenCV C++ bisa memakai library ataupun install dari source. Untuk memudahkan kita hanya akan cover bagian library.
sudo apt install libopencv-dev -y
Konsep
Import Lib
Sebelum melakukan operasi menggunakan opencv pastikan pada baris awal telah mengimpor library
import cv2 as cv
print(cv.__version__)
Essential Function of OpenCV
Read, Display, Write Image
Read - Pembacaan suatu gambar dilakukan dengan fungsi imread().
cv.imread(filename, flags)
- filename: berisi path ke file gambar
- flags: opsional, berisi argumen-argumen yang membuat pemrosesan gambar lebih spesifik
Display - Jika ingin menampilkan suatu gambar, bisa dilakukan dengan fungsi imshow().
cv.imshow(windowname, image)
- windowname: berisi nama window yang akan ditampilkan
- image: berisi path ke variabel (Mat) gambar
Write - Penulisan suatu gambar dilakukan dengan fungsi imread().
cv.imwrite(filename, image)
- filename: berisi path untuk melakukan save
- image: berisi path ke variabel (Mat) gambar
Penggunaan
Berikut adalah penggunaan sederhana dari OpenCV yang menggunakan fungsi-fungsi diatas.
Jika teman-teman menggunakan python
import cv2 as cv
img = cv.imread("/your/path/folders") # read path
cv.imshow("Membaca Image", img) # display image path
cv.imwrite("image-1.jpg", img) # save to pwd path
cv.waitKey(0) # prevent to close or wait for a keystroke
cv.destroyAllWindows() # destroy all windows created
Jika teman-teman menggunakan CPP
// library
#include<opencv2/opencv.hpp>
#include<iostream>
// namespaces
using namespace std;
using namespace cv;
Mat img_grayscale = imread("test.jpg", 0); // read
imshow("grayscale image", img_grayscale); // display
waitKey(0); // wait for a keystroke
destroyAllWindows(); // Destroys all the windows created
imwrite("grayscale.jpg", img_grayscale); // write
Video di OpenCV
Kita bisa memakai VideoCapture() untuk melakukan pengambilan frame dari video/camera.
Jika teman-teman menggunakan python
import cv2 as cv
# load video by path
cap = cv.VideoCapture("/path/to/your/folders")
# load live video by webcam
cap = cv.VideoCapture(0) # 0 for main webcam ur first device, if u use 2 webcam u can change 0 or 1
# loop for video
while True:
isTrue, frame = cap.read() # read by frame
cv.imshow("Name Video", frame)
if cv.waitKey(20) & 0xFF == ord('q'): # stop video
break
cap.release() # post
cv.destroyAll### Ubuntu (Linux)
**Python**
Untuk OpenCV versi python bisa langsung diinstall memakai package manager apt, seperti berikut:
```bash
sudo apt install python3-opencv -y
C++
Untuk OpenCV C++ bisa memakai library ataupun install dari source. Untuk memudahkan kita hanya akan cover bagian library.
sudo apt install libopencv-dev -y
Konsep
Import Lib
Sebelum melakukan operasi menggunakan opencv pastikan pada baris awal telah mengimpor library
import cv2 as cv
print(cv.__version__)
Essential Function of OpenCV
Read, Display, Write Image
Read - Pembacaan suatu gambar dilakukan dengan fungsi imread().
cv.imread(filename, flags)
- filename: berisi path ke file gambar
- flags: opsional, berisi argumen-argumen yang membuat pemrosesan gambar lebih spesifik
Display - Jika ingin menampilkan suatu gambar, bisa dilakukan dengan fungsi imshow().
cv.imshow(windowname, image)
- windowname: berisi nama window yang akan ditampilkan
- image: berisi path ke variabel (Mat) gambar
Write - Penulisan suatu gambar dilakukan dengan fungsi imread().
cv.imwrite(filename, image)
- filename: berisi path untuk melakukan save
- image: berisi path ke variabel (Mat) gambar
Penggunaan
Berikut adalah penggunaan sederhana dari OpenCV yang menggunakan fungsi-fungsi diatas.
Jika teman-teman menggunakan python
import cv2 as cv
img = cv.imread("/your/path/folders") # read path
cv.imshow("Membaca Image", img) # display image path
cv.imwrite("image-1.jpg", img) # save to pwd path
cv.waitKey(0) # prevent to close or wait for a keystroke
cv.destroyAllWindows() # destroy all windows created
Jika teman-teman menggunakan CPP
// library
#include<opencv2/opencv.hpp>
#include<iostream>
// namespaces
using namespace std;
using namespace cv;
Mat img_grayscale = imread("test.jpg", 0); // read
imshow("grayscale image", img_grayscale); // display
waitKey(0); // wait for a keystroke
destroyAllWindows(); // Destroys all the windows created
imwrite("grayscale.jpg", img_grayscale); // write
Video di OpenCV
Kita bisa memakai VideoCapture() untuk melakukan pengambilan frame dari video/camera.
Jika teman-teman menggunakan python
import cv2 as cv
# load video by path
cap = cv.VideoCapture("/path/to/your/folders")
# load live video by webcam
cap = cv.VideoCapture(0) # 0 for main webcam ur first device, if u use 2 webcam u can change 0 or 1
# loop for video
while True:
isTrue, frame = cap.read() # read by frame
cv.imshow("Name Video", frame)
if cv.waitKey(20) & 0xFF == ord('q'): # stop video
break
cap.release() # post
cv.destroyAllWindows() # destroy
Jika teman-teman menggunakan CPP
cap = cv::VideoCapture(0);
while (cap.isOpened()) {
cv::Mat frame;
if (!cap.read(frame))
break;
cv::imshow("frame", frame);
if (cv::waitKey(30) == 'q')
break;
}
Color Spaces
BGR

Pada OpenCV format color yang digunakan adalah format BGR. Dimana format tersebut diset default yang digunakan oleh OpenCV untuk membaca dan menulis gambar. Color space ini memiliki elemen:
- Blue
- Green
- Red
RGB
Secara teori mirip dengan BGR. Akan tetapi minor difference terdapat pada posisi channel B dan R ditukar. Format ini merupakan format yang banyak perangkat gunakan untuk membaca dan mengeluarkan gambar. Apabila teman-teman menggunakan python dan menggunakan library matplotlib untuk menampilkan gambar maka format RGB yang akan dipakai. Pasalnya library matplotlib tidak mendukung format BGR dan perlu convertColor BGR2RGB. Color space ini memiliki elemen:
- Red
- Green
- Blue
HSV

Berbeda dengan Color space lainnya, HSV hanya menggunakan satu channel (Hue) untuk mendeskripsikan warna dan channel lainnya menggunakan warna. Biasanya color space ini berguna untuk menentukan warna tanpa dipengaruhi oleh cahaya.
Grayscale

Grayscale memperhitungkan semua aspek gambar dalam satu channel. Biasanya color space ini digunakan apabila tujuan pemrosesan gambar tidak memperhitungkan warna.
Untuk melakukan perubahan dalam color space sebuah gambar di OpenCV, dapat dilakukan melalui:
Jika teman-teman menggunakan python
cv.cvtColor(inputFile, outputFile, colorSpace)
colorSpaceRGB = COLOR_BGR2RGB
colorSpaceHSV = COLOR_BGR2HSV
colorSpaceGray = COLOR_BGR2GRAYSCALE
more information about colorSpace parameter: colorSpace documentation
Jika teman-teman menggunakan CPP
cvtColor(inputFile, outputFile, colorSpace)
Color Detection
Dalam melakukan deteksi warna di image, biasanya color space yang digunakan yaitu HSV. Berikut adalah contoh program untuk deteksi warna sekita hue 150:
mat framehsv
cv.cvtColor(frame, framehsv, COLOR_BGR2HSV)
hue = 150
thresh = 40
Scalar minHSV = cv.cvScalar(hue - thresh, hue - thresh, hue - thresh)
Scalar maxHSV = cv.cvScalar(hue + thresh, hue + thresh, hue + thresh)
Mat maskHSV, resultHSV
cv.inRange(brightHSV, minHSV, maxHSV, maskHSV)
cv.bitwise_and(brightHSV, brightHSV, resultHSV, maskHSV)
cv.imshow("Result of HSV:" resultHSV)
Mat framehsv;
cvtColor(frame, framehsv, COLOR_BGR2HSV);
int hue = 150;
int thresh = 40;
Scalar minHSV = cv::Scalar(hue - thresh, hue - thresh, hue - thresh)
Scalar maxHSV = cv::Scalar(hue + thresh, hue + thresh, hue + thresh)
Mat maskHSV, resultHSV;
inRange(brightHSV, minHSV, maxHSV, maskHSV);
bitwise_and(brightHSV, brightHSV, resultHSV, maskHSV);
imshow("Result HSV", resultHSV)
Compile Code
Jika teman-teman menggunakan python
conda env list # looking for ur env list
conda activate <your environment which was installed openCV > # activate your existing env
python3 <your name file.py >
Jika teman teman menggunakan CPP
g++ <file> -o main `pkg-config --cflags --libs opencv4`
🚀 Selamat belajar! Week berikutnya kita akan mulai eksplorasi Introduction to CNN!
References
Operasi Basic
https://docs.opencv.org/3.4/d3/df2/tutorial_py_basic_ops.html
Operasi Aritmetik
https://docs.opencv.org/3.4/d0/d86/tutorial_py_image_arithmetics.htmlWindows()
Akhirnya, kita telah mengulik dalam-dalam tentang OpenCV dan implementasinya menggunakan pendekatan coding. Nahh mungkin cukup sampe disini aja buat week kali ini pabila bingung bisa tanyain digrup or u can get in touch with me: https://wildanaziz.vercel.app/
🚀 Selamat belajar! Week berikutnya kita akan mulai eksplorasi Introduction to NN (Neural Network)!