Comment convertir un tableau python numpy en image RGB avec Opencv 2.4?
j'ai cherché des questions similaires, mais je n'ai rien trouvé d'utile car la plupart des solutions utilisent des versions plus anciennes D'OpenCV.
j'ai un tableau numpy 3D, et je voudrais l'afficher et/ou le sauvegarder comme une image BGR en utilisant OpenCV (cv2).
comme un bref exemple, supposons que j'ai:
import numpy, cv2
b = numpy.zeros([5,5,3])
b[:,:,0] = numpy.ones([5,5])*64
b[:,:,1] = numpy.ones([5,5])*128
b[:,:,2] = numpy.ones([5,5])*192
ce que je voudrais faire c'est enregistrer et afficher b comme une image couleur similaire à:
cv2.imwrite('color_img.jpg', b)
cv2.imshow('Color image', b)
cv2.waitKey(0)
cv2.destroyAllWindows()
cela ne fonctionne pas, probablement parce que le type de données de b n'est pas correct, mais après une recherche substantielle, Je ne peux pas trouver comment le changer pour le bon. Si vous pouvez offrir n'importe quels conseils, il serait grandement apprécié!
4 réponses
Vous n'avez pas besoin de convertir à partir de numpy
array Mat
parce que OpenCV cv2
module peut accepter numpy
array.
La seule chose que vous devez prendre en charge est que {0,1} est mappé à {0,255} et toute valeur supérieure à 1 en numpy
array est égal à 255. Vous devez donc diviser par 255 dans votre code, comme indiqué ci-dessous.
img = numpy.zeros([5,5,3])
img[:,:,0] = numpy.ones([5,5])*64/255.0
img[:,:,1] = numpy.ones([5,5])*128/255.0
img[:,:,2] = numpy.ones([5,5])*192/255.0
cv2.imwrite('color_img.jpg', img)
cv2.imshow("image", img);
cv2.waitKey();
Les images c, d, e et f dans le spectacle suivant, couleur de la conversion, ils se trouvent également être des tableaux numpy <type 'numpy.ndarray'>
:
import numpy, cv2
def show_pic(p):
''' use esc to see the results'''
print(type(p))
cv2.imshow('Color image', p)
while True:
k = cv2.waitKey(0) & 0xFF
if k == 27: break
return
cv2.destroyAllWindows()
b = numpy.zeros([200,200,3])
b[:,:,0] = numpy.ones([200,200])*255
b[:,:,1] = numpy.ones([200,200])*255
b[:,:,2] = numpy.ones([200,200])*0
cv2.imwrite('color_img.jpg', b)
c = cv2.imread('color_img.jpg', 1)
c = cv2.cvtColor(c, cv2.COLOR_BGR2RGB)
d = cv2.imread('color_img.jpg', 1)
d = cv2.cvtColor(c, cv2.COLOR_RGB2BGR)
e = cv2.imread('color_img.jpg', -1)
e = cv2.cvtColor(c, cv2.COLOR_BGR2RGB)
f = cv2.imread('color_img.jpg', -1)
f = cv2.cvtColor(c, cv2.COLOR_RGB2BGR)
pictures = [d, c, f, e]
for p in pictures:
show_pic(p)
# show the matrix
print(c)
print(c.shape)
voir ici pour plus d'informations: http://docs.opencv.org/modules/imgproc/doc/miscellaneous_transformations.html#cvtcolor
OU vous pouvez:
img = numpy.zeros([200,200,3])
img[:,:,0] = numpy.ones([200,200])*255
img[:,:,1] = numpy.ones([200,200])*255
img[:,:,2] = numpy.ones([200,200])*0
r,g,b = cv2.split(img)
img_bgr = cv2.merge([b,g,r])
Vous êtes à la recherche pour scipy.misc.toimage
:
import scipy.misc
rgb = scipy.misc.toimage(np_array)
si quelqu'un d'autre veut simplement afficher une image noire en arrière-plan, ici par exemple pour 500x500 px:
import cv2
import numpy as np
black_screen = np.zeros([500,500,3])
cv2.imshow("Simple_black", black_screen)
cv2.waitKey(0)