Bagaimana cara mengubah gambar rgb dengan python?
Paket Pillow adalah fork dari library 5 yang lebih lama, yang merupakan singkatan dari Python Imaging Library. Paket ini memungkinkan Anda memuat dan bekerja dengan gambar yang ada, dan juga memungkinkan Anda membuat gambar baru dan mengisi piksel secara terprogram. Ini memungkinkan untuk membuat filter foto Anda sendiri, membuat alat penyesuaian gambar Anda sendiri, dan menjelajahi karya seni yang dihasilkan secara digital Show
Memasang BantalAnda dapat menginstal Bantal di OS apa pun menggunakan pip. (Pip tercakup dalam bab-bab proyek, jika Anda belum sampai sejauh itu. ) Jalankan perintah ini di jendela terminal _Anda mungkin perlu menggunakan perintah python3 alih-alih python, atau perintah apa pun yang Anda gunakan untuk memulai sesi terminal Python di sistem Anda Memuat GambarAnda dapat membuka gambar yang ada hanya dalam beberapa baris kode. Di sini kita akan membuka sebuah gambar, dan mendapatkan beberapa informasi bermanfaat tentang gambar tersebut Untuk menjalankan kode ini, buat folder di suatu tempat di sistem Anda bernama photo_work, atau semacamnya. Di folder itu, buat dua folder lagi bernama original_images dan modified_images. Sebaiknya gunakan salinan gambar, jadi Anda tidak mengubah atau menghancurkan gambar yang mungkin Anda pedulikan secara tidak sengaja. Sebaiknya pisahkan gambar asli Anda dari gambar yang dimodifikasi, jadi Anda selalu memulai dengan gambar yang sama saat menjalankan kode Masukkan kode ini, dengan nama file yang sesuai dengan gambar Anda. Jika Anda ingin menggunakan gambar yang sama dengan yang saya gunakan di sini, Anda dapat menemukannya di folder beyond_pcc saat mengunduh sumber daya untuk buku tersebut
Kami mengimpor kelas _6 dari perpustakaan PIL, yang dipasang sebagai bagian dari Bantal. Kami menentukan nama file dan jalur file dari gambar asli, sehingga kami dapat menggunakan jalur yang berbeda untuk gambar yang dimodifikasi nanti. Kami kemudian memanggil fungsi _7. Setelah gambar dibuka, kita bisa mendapatkan beberapa informasi tentang gambar tersebut; . Kemudian kami menampilkan gambar iniIni output teksnya
Baris terakhir menggunakan penampil gambar sistem Anda untuk menampilkan gambar. Anda dapat melihat dari nama file di penampil (tmpt8sb9_sb. PNG dalam kasus saya), bahwa Bantal membuat file sementara untuk menampilkan gambar saat ini Sejauh ini, kami belum melakukan apa pun untuk mengubah gambar Menjelajahi Data PikselMeneliti Piksel PertamaSebelum bekerja dengan banyak piksel, mari kita lihat satu piksel tunggal. Kode berikut memuat semua piksel dalam gambar, lalu mencetak data piksel untuk piksel pertama dalam gambar _Metode 8 memuat semua piksel ke dalam struktur data Bantal kustom yang memungkinkan kita bekerja dengan semua piksel menggunakan koordinat x, y. Piksel pada (0, 0) berada di sudut kiri atas gambar. Untuk menentukan satu piksel, Anda menggunakan tanda kurung siku berisi nilai x dan y dari piksel yang ingin Anda periksa. Inilah hasilnya _Setiap piksel direpresentasikan sebagai tupel dengan tiga elemen, sesuai dengan komponen RGB dari warna piksel. Kita dapat melihat bahwa piksel ini memiliki komponen merah 31, komponen hijau 52, dan komponen biru 21. Anda dapat memasukkan nilai-nilai ini ke alat warna online dan melihat warna piksel ini jika Anda penasaran Memeriksa Banyak PikselAnda biasanya ingin bekerja dengan lebih dari satu piksel. Seringkali, ini dilakukan dengan satu set loop bersarang, yang berulang pada kolom dan baris gambar. Kode berikut mengulang semua piksel di bagian kiri atas 10px kali 10px dari gambar _Untuk melihat beberapa piksel, kita mengulang nilai 10 x pertama dan nilai 10 y pertama. Artinya, pertama-tama kita akan memeriksa piksel di (0, 0), lalu piksel di (0, 1), lalu piksel di (0, 2). Ini adalah awal dari baris atau piksel pertama. Ketika kita mencapai (0, 9), nilai x akan bertambah 1 dan nilai y akan mulai kembali dari 0. Kami kemudian akan mulai di baris kedua. (1, 0), lalu (1, 1), diikuti oleh (1, 2). Inilah beberapa baris pertama dari output
Piksel semakin cerah saat kita berpindah dari wilayah bayangan ke wilayah berumput Melihat Semua PikselUntuk melihat semua piksel, kita perlu mengulang seluruh gambar. Untuk melakukan ini, kita hanya perlu mengubah batasan loop di akhir program sebelumnya. Inilah loop yang dimodifikasi
Kita mengulang semua nilai x pada lebar gambar, dan kemudian mengulang semua nilai y pada tinggi gambar. Outputnya terlihat persis sama dengan contoh sebelumnya, kecuali terus dan terus Ada 1560 * 811 = 1.265.160 piksel pada gambar ini. Pencetakan adalah salah satu operasi paling lambat yang dapat Anda lakukan, jadi Anda mungkin ingin menekan Ctrl-C untuk menghentikan keluaran daripada menunggu semua piksel bergulir Membuat Salinan yang TepatSebelum memodifikasi gambar, pastikan kita cukup menyalin gambar. Kemudian kita dapat yakin bahwa kode kita untuk memodifikasi gambar asli akan didasarkan pada reproduksi gambar asli yang akurat Menghasilkan Gambar BaruKode berikut menghasilkan gambar baru, dengan mode warna dan ukuran yang sama dengan gambar aslinya
Fungsi 9 membuat gambar baru. Ini membutuhkan mode warna, yang kami atur agar sesuai dengan mode gambar asli. Itu juga membutuhkan ukuran, ditentukan sebagai tuple dengan lebar dan tinggi. Kami melewati dimensi gambar asli kami. Jika Anda tidak menentukan warna dasar, gambar baru dimulai dengan semua piksel hitamMenyalin semua Piksel ke Gambar BaruSekarang mari salin semua data piksel dari gambar asli ke gambar baru
Saat saya menjalankan kode ini, gambar dengan nama file tmpdmq72fv3. PNG muncul, tetapi terlihat persis seperti gambar aslinya Menyimpan Gambar BaruJika Anda ingin menyimpan gambar baru setelah melihatnya, Anda dapat memanggil metode 0 dengan nama file atau jalur file. Ini kode untuk melakukan itu 0Kode ini menambahkan awalan modified_ ke nama file asli, dan menyimpannya di folder modified_images sehingga berada di tempat yang berbeda dari gambar aslinya. Pendekatan ini menghindari penulisan gambar asli Anda secara tidak sengaja Operasi ini bisa lambat, karena Pillow harus menulis setiap piksel ke disk. Di sistem saya, untuk gambar sebesar ini, butuh waktu sekitar 20 detik. Anda mungkin ingin menghindari panggilan _0 sampai Anda tahu kode Anda melakukan apa yang Anda inginkanMenyalin Nilai RGB IndividuJika Anda mencoba membuat filter foto atau melakukan pekerjaan manipulasi gambar lainnya, Anda mungkin ingin bekerja dengan masing-masing komponen RGB dari setiap piksel. Kode berikut menarik nilai komponen RGB dari setiap piksel, dan menyalin nilai individual ini ke setiap piksel dalam gambar baru Sebagian besar program tidak berubah, jadi inilah loop yang digunakan untuk membuat gambar baru _1Kami pertama-tama menarik piksel asli, dan menetapkannya ke 2. Kami kemudian menetapkan elemen pertama tupel piksel ke 3, yang kedua ke 4, dan yang ketiga ke 5. Sekarang kami memiliki akses mudah ke setiap komponen warna dari setiap piksel pada gambar asliKami membuat tiga variabel baru. 6, 7, dan 8. Kami menggunakan ini untuk membuat piksel baru, yang merupakan tuple yang berisi tiga nilai komponen RGB yang kami inginkan untuk piksel ini. Kemudian kami menetapkan piksel baru ini ke titik yang sesuai di 9Hasilnya adalah salinan persis dari gambar asli, seperti yang kita buat sebelumnya. Namun, pendekatan ini memberi kami banyak fleksibilitas dalam cara kami ingin memodifikasi gambar. Anda dapat menggunakan aturan apa pun yang Anda inginkan untuk menyetel nilai 6, 7, dan 8. Anda dapat menaikkan nilai aslinya, Anda dapat menurunkannya, Anda hanya dapat mengubah beberapa di antaranya. Jika Anda menyetel semuanya ke nilai yang sama menurut beberapa aturan, Anda akan mendapatkan gambar hitam putihMencerahkan GambarMari buat satu modifikasi pada gambar. Kami akan mencerahkan gambar, yang sesuai dengan peningkatan semua nilai komponen untuk setiap piksel Sekali lagi, sebagian besar kode tidak berubah. Inilah lingkaran yang mencerahkan gambar _2Kami menetapkan faktor kecerahan, yang akan kami gandakan setiap nilai komponen RGB. Jika ini sama dengan 1, kami akan mendapatkan salinan persis dari gambar tersebut. Jika lebih besar dari 1 kita akan mendapatkan gambar yang lebih terang, dan jika kurang dari 1 kita akan mendapatkan gambar yang lebih gelap. Nilai 1. 4 mungkin lebih tinggi dari yang Anda inginkan untuk tujuan artistik, tetapi saya ingin benar-benar jelas bahwa gambar baru lebih cerah daripada aslinya Nilai komponen dalam model warna ini harus berupa bilangan bulat, jadi kami membungkus fungsi 3 di sekitar operasi perkalian untuk setiap piksel. Hasilnya adalah gambar yang lebih cerah, yang dapat Anda lihat dengan melihat aslinya di sebelah gambar yang dicerahkan Jika Anda ingin sedikit bersenang-senang dengan ini, coba tukar nilai merah dan hijau, atau ganti ketiga nilai tersebut. Anda masih harus melihat beruang, tetapi mereka harus terlihat sangat berbeda Mulai Dari Gambar KosongJika mau, Anda dapat memulai dengan gambar kosong dan menentukan piksel sesuai dengan algoritme apa pun yang Anda pilih Berikut kode untuk membuat gambar kosong baru _3Kami menetapkan ukuran untuk gambar baru kami, dan mengatur mode ke 4. Kemudian kami memanggil _9, seperti yang Anda lihat sebelumnyaKami mendapatkan gambar yang semuanya hitam, dengan dimensi yang kami tentukan Untuk mendemonstrasikan cara sederhana bekerja dengan kanvas kosong, kami akan menetapkan nilai komponen setiap piksel secara acak _4Kami mengimpor dari modul _7, yang mengembalikan bilangan bulat acak di antara batas yang Anda berikan. Kami kemudian memuat piksel seperti yang Anda lihat sebelumnya, sehingga kami dapat bekerja dengan setiap piksel satu per satu. Kali ini kami tidak membaca piksel apa pun dalam loop, karena kami tidak mendasarkan piksel baru kami dari gambar yang ada. Dalam loop kami memilih nilai acak antara 0 dan 255 untuk masing-masing komponen RGB, dan kami membuat piksel dari nilai-nilai ini. Kemudian kami mengatur piksel saat iniHasilnya adalah sebuah gambar dimana setiap warna benar-benar acak Jika Anda melihat gambar ini di browser file, Anda akan melihat bahwa ini memakan lebih banyak memori daripada gambar lain dengan dimensi yang sebanding. Misalnya gambar hitam kosong membutuhkan memori sekitar 19 KB, sedangkan gambar berwarna acak membutuhkan memori hampir 3 MB. Itu karena gambar yang benar-benar acak tidak dapat dikompresi sama sekali. Tidak ada wilayah serupa untuk dikompresi, jadi detail setiap piksel harus disimpan satu per satu Kata AkhirIni hanya menyentuh apa yang Anda bisa dengan perpustakaan pemrosesan gambar. Saya belum menunjukkan beberapa hal yang mungkin, karena jauh lebih menyenangkan untuk mencobanya sendiri daripada membacanya di sini. Misalnya, Anda dapat membuat filter foto sendiri dan menjalankannya pada gambar Anda sendiri. Anda dapat menghasilkan gambar yang berisi semua kemungkinan warna. Anda dapat melakukan analisis yang lebih kompleks, seperti menemukan tepian dan mempertajam gambar. Anda bahkan dapat menulis kode yang mengidentifikasi, katakanlah, semua cacing es dalam sebuah gambar Pekerjaan ini adalah dasar bagaimana aplikasi seperti Instagram dan alat seperti Photoshop dibuat. Nikmati penjelajahan Anda, dan jika Anda membuat sesuatu yang menarik, silakan bagikan. Saya @ehmatthes di Twitter, dan Anda juga dapat mengirimi saya email di ehmatthes@gmail Bagaimana Anda mengubah warna gambar dengan Python?Menggunakan modul ImageColor, kita juga dapat mengonversi warna ke format RGB (rgb tuple) karena rgb sangat nyaman untuk melakukan operasi yang berbeda. Untuk melakukannya, kita akan menggunakan ImageColor. metode getgrb() .
Bagaimana Anda mengonversi ke RGB dengan Python?def hex_to_rgb(hex) rgb = [] untuk i dalam (0, 2, 4) desimal = int(hex[i. i+2], 16) rgb. tambahkan (desimal) tupel kembali (rgb) Apakah ada fungsi RGB di Python?Numpy, Matplotlib, dan turtle adalah contoh library Python yang dapat digunakan untuk menghasilkan warna . Tiga rona utama sistem warna RGB adalah merah, hijau, dan biru. Nilainya berkisar dari 0 hingga 255. Ketiga warna ini dapat dikombinasikan untuk menghasilkan warna yang berbeda.
Bagaimana Anda membaca gambar dalam RGB dengan Python?Untuk membaca gambar dengan Python menggunakan OpenCV, gunakan cv2. imread() fungsi. imread() mengembalikan matriks 2D atau 3D berdasarkan jumlah saluran warna yang ada dalam gambar. . IMREAD_COLOR membaca gambar dengan warna RGB tetapi tidak ada saluran transparansi. . IMREAD_GRAYSCALE membaca gambar sebagai gambar abu-abu |