156 votes

comment convertir une image RVB en tableau numpy?

J'ai une image RVB. Je veux le convertir en tableau numpy. j'ai fait ce qui suit

 im = cv.LoadImage("abc.tiff")
a = numpy.asarray(im)

Il crée un tableau sans forme. Je suppose que c'est un objet iplimage.

187voto

Andrey Kamaev Points 14888

Vous pouvez utiliser une nouvelle interface python OpenCV (si je ne me trompe pas, elle est disponible depuis OpenCV 2.2). Il utilise nativement des tableaux numpy :

 import cv2
im = cv2.imread("abc.tiff",mode='RGB')
print type(im)

résultat:

 <type 'numpy.ndarray'>

100voto

David Poole Points 1003

PIL (Python Imaging Library) et Numpy fonctionnent bien ensemble.

J'utilise les fonctions suivantes.

 from PIL import Image
import numpy as np

def load_image( infilename ) :
    img = Image.open( infilename )
    img.load()
    data = np.asarray( img, dtype="int32" )
    return data

def save_image( npdata, outfilename ) :
    img = Image.fromarray( np.asarray( np.clip(npdata,0,255), dtype="uint8"), "L" )
    img.save( outfilename )

Le 'Image.fromarray' est un peu moche parce que je coupe les données entrantes à [0,255], les convertit en octets, puis crée une image en niveaux de gris. Je travaille principalement en gris.

Une image RVB serait quelque chose comme :

  outimg = Image.fromarray( ycc_uint8, "RGB" )
 outimg.save( "ycc.tif" )

89voto

Rishabh Agrahari Points 817

Vous pouvez également utiliser matplotlib pour cela.

 from matplotlib.image import imread

img = imread('abc.tiff')
print(type(img))

production: <class 'numpy.ndarray'>

46voto

belvederef Points 500

À partir d'aujourd'hui, votre meilleur pari est d'utiliser :

 img = cv2.imread(image_path)   # reads an image in the BGR format
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)   # BGR -> RGB

Vous verrez que img sera un tableau numpy de type :

 <class 'numpy.ndarray'>

17voto

slizb Points 153

Réponse tardive, mais j'en suis venu à préférer le imageio aux autres alternatives

 import imageio
im = imageio.imread('abc.tiff')

Semblable à cv2.imread() , il produit un tableau numpy par défaut, mais sous forme RVB.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X