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:
-
np.uint32
OpenCV no admite el tipo de datos (admiteuint8
,int8
,uint16
,int16
,int32
,float32
,float64
) -
cv.CvtColor
no puede manejar matrices numpy, por lo que ambos argumentos deben convertirse al tipo OpenCV.cv.fromarray
haz esta conversión. - 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)