Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimana untuk Menukar Imej PIL kepada Array NumPy dan Kembali?

Bagaimana untuk Menukar Imej PIL kepada Array NumPy dan Kembali?

DDD
Lepaskan: 2024-11-23 07:33:08
asal
476 orang telah melayarinya

How to Convert a PIL Image to a NumPy Array and Back?

Menukar Imej PIL kepada NumPy Array

Masalah:

Bagaimana anda boleh menukar Imej PIL kepada tatasusunan NumPy kepada melakukan transformasi mengikut piksel yang lebih pantas, dan kemudian muatkannya semula ke dalam Imej PIL selepas mengubah suai tatasusunan?

Jawapan:

Penukaran kepada Tatasusunan NumPy:

Untuk menukar Imej PIL kepada tatasusunan NumPy, gunakan kod berikut:

import numpy as np
from PIL import Image

pic = Image.open("foo.jpg")
pix = np.array(pic)
Salin selepas log masuk

Ini akan mencipta susunan bentuk 3D (tinggi, lebar, saluran) yang mengandungi nilai piksel.

Penukaran Kembali ke Imej PIL:

Untuk memuatkan tatasusunan yang diubah suai kembali ke dalam Imej PIL, terdapat pelbagai cara :

1. Menggunakan Image.putdata():

Tukar tatasusunan kembali kepada jujukan tuple:

data = list(tuple(pixel) for pixel in pix)
pic.putdata(data)
Salin selepas log masuk

2. Menggunakan Image.fromarray() (PIL 1.1.6 atau lebih tinggi):

Hanya tetapkan tatasusunan yang diubah suai pada imej:

pic = Image.fromarray(pix)
Salin selepas log masuk

Nota Tambahan:

  • Kaedah getdata() Imej PIL mengembalikan tatasusunan yang diratakan, jadi anda perlu membentuknya semula untuk mendapatkan tatasusunan 3D.
  • Susun atur NumPy daripada np.array(pic) mempunyai paksi saluran sebagai dimensi terakhir, manakala kaedah getdata() menganggap paksi saluran sebagai yang pertama dimensi.
  • Kaedah Image.fromarray() menyediakan penukaran yang lebih pantas, terutamanya untuk imej yang besar.

Atas ialah kandungan terperinci Bagaimana untuk Menukar Imej PIL kepada Array NumPy dan Kembali?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan