Saltar al contenido

Conversión de Numpy Array a OpenCV Array

Solución:

Su código se puede arreglar de la siguiente manera:

import numpy as np, cv
vis = np.zeros((384, 836), np.float32)
h,w = vis.shape
vis2 = cv.CreateMat(h, w, cv.CV_32FC3)
vis0 = cv.fromarray(vis)
cv.CvtColor(vis0, vis2, cv.CV_GRAY2BGR)

Breve explicación:

  1. np.uint32 OpenCV no admite el tipo de datos (admite uint8, int8, uint16, int16, int32, float32, float64)
  2. cv.CvtColor no puede manejar matrices numpy, por lo que ambos argumentos deben convertirse al tipo OpenCV. cv.fromarray haz esta conversión.
  3. Ambos argumentos de cv.CvtColor debe tener la misma profundidad. Así que cambié el tipo de fuente a 32bit float para que coincida con el destino.

También le recomiendo que use la versión más nueva de OpenCV Python API porque usa matrices numpy como tipo de datos principal:

import numpy as np, cv2
vis = np.zeros((384, 836), np.float32)
vis2 = cv2.cvtColor(vis, cv2.COLOR_GRAY2BGR)

Esto es lo que funcionó para mí …

import cv2
import numpy as np

#Created an image (really an ndarray) with three channels 
new_image = np.ndarray((3, num_rows, num_cols), dtype=int)

#Did manipulations for my project where my array values went way over 255
#Eventually returned numbers to between 0 and 255

#Converted the datatype to np.uint8
new_image = new_image.astype(np.uint8)

#Separated the channels in my new image
new_image_red, new_image_green, new_image_blue = new_image

#Stacked the channels
new_rgb = np.dstack([new_image_red, new_image_green, new_image_blue])

#Displayed the image
cv2.imshow("WindowNameHere", new_rgbrgb)
cv2.waitKey(0)

La solución más sencilla sería utilizar Pillow lib:

from PIL import Image

image = Image.fromarray(<your_numpy_array>.astype(np.uint8))

Y puedes usarlo como imagen.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *