Bagaimana cara mendapatkan saluran gambar dengan python?

Kami akan memulai kode dengan mengimpor modul cv2, sehingga kami memiliki akses ke fungsionalitas pemrosesan gambar

import cv2

Kemudian kita akan membaca gambar berwarna asli dari sistem file dengan memanggil fungsi imread. Fungsi ini menerima jalur input ke file dan mengembalikan gambar sebagai ndarray. Gambar dibaca dalam format BGR

Kami akan membaca gambar yang ditunjukkan di bawah ini pada gambar 1. Ini terdiri dari 3 persegi panjang, satu di Biru (B=255, G=0, R=0), satu di Hijau (B=0, G=255, R=0) dan satu lagi di Merah (B=0, G= . Latar belakangnya hitam (B=0, G=0, R=0)

Bagaimana cara mendapatkan saluran gambar dengan python?
Bagaimana cara mendapatkan saluran gambar dengan python?
Gambar 1 – Gambar yang akan digunakan untuk membagi saluran

Kode untuk membaca gambar dapat dilihat di bawah ini

img = cv2.imread('C:/Users/N/Desktop/bgr.png') 
_

Sekarang, untuk membagi gambar menjadi tiga salurannya, kita hanya perlu memanggil fungsi dari modul cv2, meneruskan gambar asli kita sebagai input

Fungsi ini akan mengembalikan daftar dengan tiga saluran. Setiap saluran direpresentasikan sebagai ndarray dengan dua dimensi, yang berarti nantinya kita dapat menampilkannya sebagai gambar skala abu-abu

Kami akan membongkar setiap elemen daftar dalam variabel yang berbeda

blue, green, red = cv2.split(img)

Untuk menyelesaikannya, kami akan menampilkan setiap saluran di jendela yang berbeda

cv2.imshow('blue', blue)
cv2.imshow('green', green)
cv2.imshow('red', red)

cv2.waitKey(0)
cv2.destroyAllWindows()

Kode terakhir dapat dilihat di bawah ini

import cv2 

img = cv2.imread('C:/Users/N/Desktop/bgr.png') 

blue, green, red = cv2.split(img)


cv2.imshow('blue', blue)
cv2.imshow('green', green)
cv2.imshow('red', red)

cv2.waitKey(0)
cv2.destroyAllWindows()
_

Untuk menguji kode, cukup jalankan di alat pilihan Anda. Dalam kasus saya, saya akan menggunakan IDLE, sebuah IDE Python

Anda harus mendapatkan input yang mirip dengan gambar 1

Bagaimana cara mendapatkan saluran gambar dengan python?
Bagaimana cara mendapatkan saluran gambar dengan python?
Gambar 2 – Keluaran program dengan 3 saluran terdekomposisi

Hal pertama yang dapat diperhatikan adalah, seperti yang disebutkan sebelumnya, gambar berada dalam skala abu-abu

Kemudian, untuk setiap gambar dari setiap saluran, hanya persegi panjang dengan warna yang sama yang ditampilkan dengan warna putih penuh. Untuk memahami alasannya, mari kita analisis gambar asli lebih detail

Pertama kita perlu mempertimbangkan bahwa piksel latar belakang hitam memiliki nilai sama dengan 0 untuk semua saluran. (B=0, G=0, R=0). Jadi, ketika kita mendekomposisi setiap piksel dari area ini dalam tiga saluran, semuanya akan memiliki nilai 0, yang sesuai dengan hitam dalam gambar skala abu-abu.

Jika kita melihat piksel dalam persegi panjang biru dari gambar berwarna asli, itu akan memiliki nilai saluran biru sama dengan 255 dan sisanya sama dengan 0. (B=255, G=0, R=0)

Jadi, jika kami menampilkan gambar saluran biru di jendela, piksel ini akan sama dengan 255 dan karena ini adalah gambar skala abu-abu, itu sesuai dengan warna putih. Untuk gambar saluran Hijau dan Merah, piksel ini akan sama dengan 0 dan karena merupakan gambar skala abu-abu, piksel ini sesuai dengan warna hitam

Inilah sebabnya, pada gambar saluran biru, kita melihat persegi panjang putih dimana pada gambar aslinya adalah persegi panjang Biru. Di gambar saluran lain, kami melihat warna hitam di area tersebut

Secara alami, rasional ini berlaku untuk piksel pada persegi panjang lain dan saluran yang sesuai

Menampilkan saluran berwarna

Pada bagian sebelumnya kita melihat bagaimana menguraikan gambar dalam tiga salurannya dan kemudian bagaimana menampilkan setiap saluran dalam sebuah jendela. Namun, seperti yang terlihat, setiap saluran berkorespondensi dengan ndarray dua dimensi yang, saat ditampilkan, diinterpretasikan sebagai gambar skala abu-abu

Jika kami ingin menampilkan setiap saluran sebagai gambar berwarna, kami dapat melakukan hal berikut

  • Pisahkan gambar asli menjadi tiga saluran;
  • Buat gambar skala abu-abu "kosong" yang akan mewakili "saluran kosong";
  • Untuk saluran tertentu, buat gambar BGR yang akan berisi saluran itu dan kosongkan dua saluran lainnya

Kita akan mulai dengan mengimpor modul cv2 dan numpy. Modul numpy akan dibutuhkan untuk membuat "saluran kosong"

Setelah itu, kita akan membaca gambar aslinya dan membaginya, seperti yang kita lakukan sebelumnya

import cv2 
import numpy

img = cv2.imread('C:/Users/N/Desktop/bgr.png') 

blue, green, red = cv2.split(img)

Kemudian kita akan membuat “channel kosong” dengan memanggil fungsi zeros dari modul numpy. Ini akan mengembalikan array ndarray baru dengan bentuk yang ditentukan dan diisi dengan nol

Bentuk array baru (dimensinya) ditentukan sebagai tuple yang dilewatkan sebagai input pertama dari fungsi zeros

Secara alami, kami ingin tinggi dan lebar "saluran kosong" ini cocok dengan yang dari saluran lain. Kita dapat menggunakan atribut bentuk dari salah satu saluran ini untuk mengatur bentuk "saluran kosong" kita. Anda dapat mempelajari lebih lanjut tentang atribut ini di sini

Selain mengatur bentuk, kita juga perlu mengatur tipe ndarray yang dikembalikan oleh fungsi zeros. Itu harus dari tipe uint8

Anda dapat memeriksa di bawah ini cara memanggil fungsi tersebut

zeros = numpy.zeros(blue.shape, numpy.uint8)
_

Untuk membuat gambar BGR dari tiga saluran terpisah, kita hanya perlu memanggil fungsi, meneruskan tupel dengan saluran sebagai input

Jadi, untuk membuat gambar BGR dari saluran Biru, elemen pertama dari tuple harus saluran Biru dan sisanya harus menjadi "saluran kosong"

blueBGR = cv2.merge((blue,zeros,zeros))

Prosedurnya sama untuk saluran lainnya

greenBGR = cv2.merge((zeros,green,zeros))
redBGR = cv2.merge((zeros,zeros,red))
_

Untuk menyelesaikan, kami akan menampilkan tiga gambar yang dihasilkan

cv2.imshow('blue BGR', blueBGR)
cv2.imshow('green BGR', greenBGR)
cv2.imshow('red BGR', redBGR)

cv2.waitKey(0)
cv2.destroyAllWindows()
_

Kode terakhir dapat dilihat di bawah ini

img = cv2.imread('C:/Users/N/Desktop/bgr.png') 
_0

Setelah menjalankan kode, Anda akan mendapatkan hasil yang mirip dengan gambar 3

Bagaimana cara mendapatkan saluran gambar dengan python?
Bagaimana cara mendapatkan saluran gambar dengan python?
Gambar 3 – Menampilkan 3 saluran berwarna

Secara alami, ada pendekatan lain untuk mencapai hasil ini, seperti menyalin gambar asli dan memusatkan dua saluran untuk mendapatkan yang ketiga diwarnai. Meskipun demikian, karena di sini kita membahas prosedur pemisahan, kita telah melihat cara mendapatkan setiap saluran berwarna dengan menggunakan fungsi penggabungan

Bagaimana cara mendapatkan saluran merah dari suatu gambar dengan Python?

Berikut adalah urutan langkah-langkah untuk mengekstrak saluran merah dari sebuah gambar. .
Baca gambar menggunakan cv2. imread()
imread() mengembalikan array BGR (Biru-Hijau-Merah). .
Ekstrak saluran merah saja dengan mengiris array

Bagaimana cara mengetahui berapa banyak saluran yang dimiliki suatu gambar?

Untuk mendapatkan nomor saluran, kami telah menggunakan kelas OpenCV bernama 'channels()' . Saat kita melewatkan matriks gambar sebagai objek dari kelas 'channels()', ini memberi saluran nilai integer. Program berikut menghitung jumlah saluran dan menampilkannya di jendela konsol.

Bagaimana cara mengekstrak saluran RGB?

Ekstrak saluran warna gambar RGB .
Pilih gambar dalam format JPEG
Pilih saluran warna untuk diekstrak. Merah. Hijau. Biru. Merah dan hijau. Merah dan biru. Biru dan Hijau
Pengaturan kompresi

Bagaimana cara memisahkan gambar dari saluran dengan Python?

split() digunakan untuk membagi gambar berwarna/multisaluran menjadi gambar satu saluran terpisah.