Bagaimana cara mengubah warna latar belakang gambar dengan python?

EDIT (2020/06). Saya telah memperbarui contoh kode untuk menghapus beberapa bug dan meneruskan kompatibilitas ke python 3

Masalah pemrograman baru-baru ini di universitas, mengharuskan kami menganalisis tangkapan layar aplikasi Android dan mengambil data sebanyak mungkin darinya. Dalam posting ini saya akan menguraikan proses umum yang telah kami ambil untuk mengumpulkan warna latar belakang dari gambar yang diberikan menggunakan pustaka OpenCV dan Python

Teori

OpenCV memungkinkan kita untuk membuka gambar dan menyimpannya dalam array atau matriks 3 dimensi di mana sumbu x dan y menunjukkan lokasi piksel pada gambar dan sumbu z menunjukkan saluran warna RGB. Setiap piksel RGB berisi komponen merah 8 bit, komponen hijau 8 bit, dan komponen biru 8 bit. Saat digabungkan, mereka memberi kita warna piksel yang dimaksud. Nilai RGB (255, 255, 255) berarti intensitas setiap komponen warna dalam piksel ini adalah 255, yang merupakan intensitas maksimum nilai 8 bit yang dapat di desimal. Nilai RGB (255.255.255) menunjukkan warna putih seperti yang dilihat mata kita. Di ujung lain dari spektrum RGB ketika semua komponen RGB berada pada intensitas 0 i. e (0,0,0) layar akan menghasilkan piksel hitam

Pendekatan

Pendekatan Pertama

Tujuan kami dalam pendekatan pertama adalah untuk melihat apakah kami dapat mengetahui warna apa yang paling banyak muncul pada gambar sampel. Untuk mencapai ini, kita mulai dengan membagi gambar menjadi tiga saluran warna dan kemudian meratakan masing-masing saluran warna tersebut menjadi larik 1 dimensi. Kita sekarang memiliki tiga larik 1D (1 untuk setiap warna) yang dapat diulang sekaligus. Hasilnya disimpan sebagai Kunci. Pasangan nilai di mana kuncinya adalah RGB yang disimpan sebagai tupel dan nilainya adalah frekuensi. Kamus diurutkan berdasarkan nilai dan dicetak untuk memberikan daftar warna dari yang paling jarang sampai yang paling sering dan jumlah frekuensinya masing-masing

Pendekatan Kedua

Iterasi kedua dari solusi ini lebih berfokus pada apa yang akan terjadi dengan sampel dunia nyata yang tidak ideal, misalnya jika latar belakang gambar adalah gradien, bukan gambar tunggal yang solid. Dari pendekatan pertama kita dapat mengamati beberapa data menarik tentang berbagai jenis gambar untuk mengarahkan kita ke arah yang benar. Jika kita mengambil satu gambar latar belakang berwarna seperti bilah tindakan dari aplikasi Dropbox Android (gambar 1) dan menjalankannya melalui program, kita dapat melihat bahwa warna biru yang tepat muncul di sekitar 88% piksel pada gambar. Jika kami membandingkannya dengan apa yang kami temukan saat menganalisis bilah tindakan Facebook ini (gambar 2), yang memiliki latar belakang gradien, kami menemukan bahwa tidak ada warna di bilah tindakan Facebook yang memiliki kemunculan lebih dari ~3% pada gambar. Ini secara meyakinkan memberi tahu kami bahwa ada perbedaan statistik yang sangat besar antara kedua situasi dan memungkinkan kami untuk melanjutkan ke solusi berikutnya

Untuk mendeteksi latar belakang warna solid, kami hanya perlu menerapkan solusi 1 dalam kasus di mana piksel yang paling sering muncul, muncul lebih dari sekitar 50% dari waktu (nilai diperkirakan berdasarkan analisis heuristik beberapa sampel). Jika kami memilih warna yang paling sering muncul maka kami memiliki warna latar belakang kami di sebagian besar kasus ini. Jika kita ingin mendapatkan data yang bermakna dari gambar latar gradien, kita perlu melakukan hal-hal yang sedikit berbeda. Untuk tujuan proyek universitas ini, kami tidak perlu mereproduksi latar belakang gradien tetapi dapat menyelesaikannya dengan nilai rata-rata warna gradien. Untuk melakukan ini, kita dapat mengambil 10 warna paling umum pada gambar dan kemudian mengambil rata-rata dari 3 saluran warna untuk mendapatkan nilai warna rata-rata untuk latar belakang gambar. Anda mungkin juga memperhatikan bahwa kode asli untuk menghitung frekuensi telah sedikit disempurnakan untuk mengurangi kebutuhan untuk membagi gambar menjadi saluran dan meratakannya.

Hasil

Solusi 1

Solusi 2

Warna yang ditemukan untuk latar belakang Dropbox adalah RGB(0,125,227)

Warna latar Dropbox yang terdeteksi

Dan warna gradien rata-rata yang ditemukan di Bilah Tindakan Facebook adalah RGB(91.115.166)

Warna latar Facebook terdeteksi

Beberapa orang telah meminta versi dari pendekatan kedua yang benar-benar membuka jendela dan menunjukkan warna rata-rata jadi saya membuat intisari yang dimodifikasi ini untuk melakukan itu

Ini adalah proses mempartisi gambar digital menjadi beberapa segmen. Tujuan segmentasi adalah untuk menyederhanakan dan/atau mengubah representasi suatu citra menjadi sesuatu yang lebih bermakna dan lebih mudah untuk dianalisis. Segmentasi gambar biasanya digunakan untuk menemukan objek dan batas (garis, kurva, dll. ) dalam gambar. Ini memiliki banyak aplikasi luar biasa yang memecahkan berbagai masalah penglihatan komputer

PixelLib adalah perpustakaan yang dibuat untuk memastikan integrasi segmentasi gambar yang mudah dalam aplikasi kehidupan nyata. PixelLib sekarang mendukung fitur yang dikenal sebagai penyetelan gambar

Apa itu penyetelan Gambar?

Tidak ada apa-apa selain mengubah latar belakang gambar dengan latar belakang khusus atau menambahkan warna berbeda ke latar belakang atau mengonversi latar belakang menjadi skala abu-abu. Dan kami menggunakan model deeplabv3+ yang dilatih pada dataset pascalvoc. Model ini mendukung 20 kategori objek umum, yang berarti Anda dapat mengubah latar belakang objek tersebut dalam gambar

Bagaimana Anda mengubah warna latar belakang suatu gambar?

Cara mengubah warna latar belakang gambar dalam 4 langkah .
Unggah foto atau seret dan lepas ke editor dalam format JPG atau PNG
Pilih gambar dan klik tombol "Hapus BG" di bilah menu di atas gambar Anda
Klik tombol "BG Color" di bilah menu di atas gambar Anda dan ubah warna latar belakang

Bagaimana cara mengubah warna latar belakang di Matplotlib?

Untuk mengubah warna latar sumbu, kita dapat menggunakan metode set_facecolor() .

Bagaimana Anda membuat latar belakang menjadi putih dengan Python?

Dengan Python/OpenCV, konversi ke HSV. Dapatkan nilai HSV di pojok kiri atas. Lakukan ambang batas inRange() pada gambar HSV untuk membuat topeng. Gunakan mask untuk mengubah warna gambar asli menjadi putih dimana mask berwarna putih .

Bagaimana cara mengubah latar belakang gambar di OpenCV Python?

Langkah 1. Pertama-tama, impor pustaka OpenCV. Langkah 2. Sekarang, impor gambar dari komputer Anda. Langkah 3. Kemudian, baca gambar di OpenCV. Langkah 4. Kemudian, ubah latar belakang gambar menjadi latar belakang gambar abu-abu