← Back to blog
#computer-vision#opencv#ultralytics#bounding-box#yolo

Beda format bounding box xywh OpenCV dan Ultralytics bikin bug

Perbedaan format titik (x, y) antara OpenCV dan Ultralytics pada bounding box sering menjadi sumber bug yang membingungkan dalam computer vision.

Riki Zulkarnain
Riki Zulkarnain2026-10-07
Beda format bounding box xywh OpenCV dan Ultralytics bikin bug
13 views
3 min read♥2 likes

Belajar computer vision ternyata menyimpan banyak kejutan kecil yang bikin aku pusing. Di awal materi, model seperti MNIST dan CNN hanya melakukan image classification, yaitu satu gambar satu jawaban untuk menebak angka atau isi kelas gambar. Namun, dalam computer vision tingkat lanjut, model tidak hanya menjawab gambar ini berisi apa, tapi juga benda itu ada di mana, bentuknya seperti apa, dan bergerak ke mana. Dari sinilah konsep bounding box dan pemrosesan video mulai memegang peran penting dalam setiap baris kode yang kutulis.

#Memahami Gambar dan Warna di OpenCV

Sebelum masuk ke deteksi objek, aku perlu tahu bagaimana komputer melihat gambar. Gambar berwarna berukuran 1280 kali 720 disimpan sebagai array NumPy dengan bentuk tinggi, lebar, dan tiga channel warna. Perhatikan urutan tinggi dulu baru lebar. Ini sering membuat aku bingung, karena saat menulis ukuran gambar orang biasanya menyebut lebar dulu, sedangkan shape di NumPy mengembalikan tinggi dulu. Selain itu, OpenCV menyimpan warna dengan urutan BGR, bukan RGB seperti matplotlib dan hampir semua library lain. Akibatnya, warna merah di OpenCV ditulis sebagai (0, 0, 255). Gambar dari cv2.imread harus diubah dulu dengan cv2.cvtColor menggunakan cv2.COLOR_BGR2RGB sebelum ditampilkan agar warna merah dan biru tidak tertukar. Kesalahan kecil ini sering muncul dan membuat bingung jika tidak diingat baik-baik.

#Mengenal Berbagai Format Bounding Box

Bounding box adalah kotak persegi panjang yang membungkus satu benda. Satu kotak cukup ditulis dengan empat angka, tapi ada beberapa format yang sering dipakai di berbagai notebook. Titik (0, 0) ada di pojok kiri atas gambar, dan nilai y makin besar ke bawah. Ini merupakan kebalikan dari grafik matematika di sekolah. Format pertama adalah xyxy yang berisi pojok kiri atas dan pojok kanan bawah. Ada juga format ternormalisasi seperti xywh tapi dibagi ukuran gambar sehingga nilainya berada di antara nol sampai satu, biasa ditemukan di file label dataset YOLO. Salah membaca format ini adalah sumber bug yang sangat umum saat aku mencoba menggambar hasil deteksi objek ke layar.

#Jebakan Format OpenCV dan Ultralytics

Masalah besar muncul ketika aku mencampur kode dari library yang berbeda untuk mendeteksi objek. Bounding box punya format yang berbeda. OpenCV memakai (x, y) sebagai pojok kiri atas, sedangkan Ultralytics memakai (x, y) sebagai titik tengah kotak. Keduanya sama-sama memakai width dan height. Perhatikan bahwa xywh Ultralytics dan format x, y, w, h dari OpenCV memakai nama yang mirip tapi artinya jelas berbeda. Yang satu menggunakan titik tengah, sedangkan yang lain menggunakan pojok kiri atas. Di notebook, seringkali ada fungsi khusus yang tugasnya mengubah titik tengah menjadi pojok kiri atas sebelum menggambar kotak dengan fungsi rectangle dari OpenCV. Selain itu, semua notebook video memakai pola yang sama untuk memproses file video. Video 30 FPS berisi 30 gambar per detik, di mana kita membaca setiap frame, menjalankan model, lalu menulisnya kembali ke file output.

#Penutup

Kesalahan membaca format bounding box adalah hal yang wajar terjadi saat aku mulai mendalami computer vision. Kunci utamanya adalah selalu memeriksa dokumentasi library yang dipakai, apakah koordinat (x, y) merujuk ke pojok kiri atas atau ke titik tengah kotak. Dengan memahami perbedaan mendasar antara OpenCV dan Ultralytics ini, aku bisa menghindari bug aneh dan memastikan hasil deteksi objek digambarkan dengan tepat pada frame video.