PIL 이미지를 NumPy 어레이로 변환하는 방법
Image
로 왔다 갔다 하면 NumPy 배열보다 할 수 .PixelAccess
NumPy를 사용하다
pic = Image.open("foo.jpg")
pix = numpy.array(pic.getdata()).reshape(pic.size[0], pic.size[1], 3)
PIL에 해야 하나요?Image
레이이 수정 ?? ??? pic.putdata()
아, 아, 아, 아, 아, 아, 아, 아, 아.
당신은 정확히 어느 putdata()
동작하지 않습니다.가 하고
>>> pic.putdata(a)
Traceback (most recent call last):
File "...blablabla.../PIL/Image.py", line 1185, in putdata
self.im.putdata(data, scale, offset)
SystemError: new style getargs format but argument is not a tuple
그 이유는putdata
일련의 튜플을 예상하면 숫자 배열이 됩니다....
>>> data = list(tuple(pixel) for pixel in pix)
>>> pic.putdata(data)
작동하지만 매우 느립니다.
PIL 1.1.6에서는 이미지와 numpy 어레이를 '적절하게' 변환하는 방법은 다음과 같습니다.
>>> pix = numpy.array(pic)
다만, 결과 어레이의 형식이 다릅니다(3-d 어레이 또는 이 경우는 행/열/열).
배열 할 수 거예요.pic.putdata(pix)
수도 있습니다.Image.fromarray(pix)
.
.I
★★★★★★★★★★★★★★★★★★:
>>> I = numpy.asarray(PIL.Image.open('test.jpg'))
해 주세요I
그런 다음 다시 이미지로 변환합니다.
>>> im = PIL.Image.fromarray(numpy.uint8(I))
출처: FFT, Python을 사용하여 Numpy 이미지 필터링
어떤 이유로 명시적으로 실행하는 경우 이 페이지의 correlation.zip에는 getdata()를 사용하는 pil2array() 및 array2pil() 함수가 있습니다.
Python 3.5에서 Peaker 4.1.1 (FIL의 후속 버전)을 사용하고 있습니다.People과 Numpy의 변환은 간단합니다.
from PIL import Image
import numpy as np
im = Image.open('1.jpg')
im2arr = np.array(im) # im2arr.shape: height x width x channel
arr2im = Image.fromarray(im2arr)
가지 해야 할 은 베개 의 베개입니다.im
메이저인 반면 스타일의 numpy는 입니다.im2arr
이 함수는요, 이 함수는요.Image.fromarray
이미 이 점을 고려하고 있습니다.그것은,arr2im.size == im.size
★★★★★★★★★★★★★★★★★」arr2im.mode == im.mode
를 참조해 주세요.
배열을 할 때 를 들어 된 numpy 배열을 처리할 때는 HxWxC 데이터 형식을 해야 합니다.im2arr = np.rollaxis(im2arr, 2, 0)
★★★★★★★★★★★★★★★★★」im2arr = np.transpose(im2arr, (2, 0, 1))
CxHxW로 하다.
다음과 같이 이미지를 numpy 배열로 변환해야 합니다.
import numpy
import PIL
img = PIL.Image.open("foo.jpg").convert("L")
imgarr = numpy.array(img)
이미지 변환 및
import numpy as np
from PIL import Image
def pilToNumpy(img):
return np.array(img)
def NumpyToPil(img):
return Image.fromarray(img)
오늘 사용한 예는 다음과 같습니다.
import PIL
import numpy
from PIL import Image
def resize_image(numpy_array_image, new_height):
# convert nympy array image to PIL.Image
image = Image.fromarray(numpy.uint8(numpy_array_image))
old_width = float(image.size[0])
old_height = float(image.size[1])
ratio = float( new_height / old_height)
new_width = int(old_width * ratio)
image = image.resize((new_width, new_height), PIL.Image.ANTIALIAS)
# convert PIL.Image into nympy array back again
return array(image)
이미지가 Blob 형식(예: 데이터베이스에 저장됨)으로 저장된 경우 Billal Begueradj에서 설명한 것과 동일한 기술을 사용하여 이미지를 Blobs에서 바이트 배열로 변환할 수 있습니다.
내 경우 db 테이블의 blob 열에 저장된 이미지가 필요했습니다.
def select_all_X_values(conn):
cur = conn.cursor()
cur.execute("SELECT ImageData from PiecesTable")
rows = cur.fetchall()
return rows
그런 다음 도우미 함수를 만들어 데이터 집합을 np.array로 변경했습니다.
X_dataset = select_all_X_values(conn)
imagesList = convertToByteIO(np.array(X_dataset))
def convertToByteIO(imagesArray):
"""
# Converts an array of images into an array of Bytes
"""
imagesList = []
for i in range(len(imagesArray)):
img = Image.open(BytesIO(imagesArray[i])).convert("RGB")
imagesList.insert(i, np.array(img))
return imagesList
그 후 뉴럴 네트워크에서 byteArrays를 사용할 수 있게 되었습니다.
plt.imshow(imagesList[0])
def imshow(img):
img = img / 2 + 0.5 # unnormalize
npimg = img.numpy()
plt.imshow(np.transpose(npimg, (1, 2, 0)))
plt.show()
피처(비정규화)를 스퀴즈한 후 이미지를 numpy() 함수로 해석하면 이미지를 numpy로 변환할 수 있습니다.
언급URL : https://stackoverflow.com/questions/384759/how-do-i-convert-a-pil-image-into-a-numpy-array
'programing' 카테고리의 다른 글
dict(또는 다른 Python 객체)를 저장하려면 어떻게 피클을 사용해야 합니까? (0) | 2022.09.30 |
---|---|
Java 클래스 파일 작성은 결정적입니까? (0) | 2022.09.30 |
원격 연결이 간헐적임 (0) | 2022.09.30 |
사전의 구성원에 액세스하기 위해 점 ". "을(를) 사용하는 방법 (0) | 2022.09.30 |
php 실행 파일 경로 php.validate를 설정하는 방법.php가 도커 컨테이너 내에 설정되어 있는 경우 vscode에서 executablePath를 사용할 수 있습니까? (0) | 2022.09.29 |