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

Bagaimana untuk Menukar Imej PIL kepada Array NumPy dan Kembali?

DDD
DDDasal
2024-11-23 07:33:08396semak imbas

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)

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)

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

Hanya tetapkan tatasusunan yang diubah suai pada imej:

pic = Image.fromarray(pix)

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!

Kenyataan:
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