PIL dengan Python dari gampang susah

Untuk sampai ke algoritma pemrosesan yang kompleks, ada baiknya menganalisis skema standar, yang saya sarankan untuk mulai.

Untuk memproses contoh, gambar dengan set warna yang berbeda akan digunakan:

gambar

Untuk memulai, kita membutuhkan dua modul perpustakaan:

from PIL import Image, ImageDraw 

Siapkan alat untuk pekerjaan yang nyaman di masa depan:

 image = Image.open('test.jpg') #   draw = ImageDraw.Draw(image) #     width = image.size[0] #   height = image.size[1] #   pix = image.load() #    

Mari kita mulai


Kami akan memproses gambar dalam format RGB. PIL juga mendukung bekerja dengan format 1, L, P, RGB, RGBA, CMYK, YCbCr, LAB, HSV, I, F.

Nilai piksel dalam gambar diatur dalam format: (x, y), (merah, hijau, biru) , di mana x, y adalah koordinat, dan nilai numerik RGB berada dalam kisaran 0 hingga 255. Artinya, kami bekerja dengan gambar 8-bit.

Skala abu-abu


Rona abu-abu muncul dalam kasus persamaan semua palet warna, jadi kita perlu mendapatkan nilai rata-rata aritmatika dalam ketiga poin:

 for x in range(width): for y in range(height): r = pix[x, y][0] #     g = pix[x, y][1] # b = pix[x, y][2] # sr = (r + g + b) // 3 #  draw.point((x, y), (sr, sr, sr)) #  image.save("result.jpg", "JPEG") #    

gambar
Nuansa sedikit
Mata manusia merasakan spektrum warna yang berbeda dengan cara yang berbeda. Tidak ada yang akan memberi Anda formula yang tepat, karena persepsi warna berbeda untuk setiap orang, tetapi jika Anda tertarik, Anda dapat membaca lebih lanjut di sini dan di sini .


Pembalikan


Pembalikan diperoleh dengan mengurangi warna saat ini dari 255:

 for x in range(width): for y in range(height): r = pix[x, y][0] g = pix[x, y][1] b = pix[x, y][2] draw.point((x, y), (255 - r, 255 - g, 255 - b)) 

gambar

Inversi Grayscale


Menggabungkan dua algoritma sebelumnya, Anda dapat menulis kode berikut:

 for x in range(width): for y in range(height): r = pix[x, y][0] g = pix[x, y][1] b = pix[x, y][2] sr = (r + g + b) // 3 draw.point((x, y), (255 - sr, 255 - sr, 255 - sr)) 

gambar

Inversi Grayscale Selektif


Untuk algoritme ini, Anda perlu menentukan nilai ambang, yang akan saya ambil untuk 100:

 for x in range(width): for y in range(height): r = pix[x, y][0] g = pix[x, y][1] b = pix[x, y][2] if (r+g+b)>100: #    100 ,    sr = (r + g + b) // 3 draw.point((x, y), (255-sr, 255-sr, 255-sr)) else: #    sr = (r + g + b) // 3 draw.point((x, y), (sr, sr, sr)) 

gambar

Kesimpulan


Dalam artikel berikut, saya ingin berbicara tentang cara pendekatan penyaringan gambar secara lebih lokal dengan membaginya menjadi beberapa area, serta menunjukkan kemungkinan DFS yang menarik dalam algoritme pemrosesan gambar

Source: https://habr.com/ru/post/id451074/


All Articles