¿Cómo puedo recuperar la imagen resultante como una matriz (numpy array) a partir de los resultados devueltos por yolov5 en pytorch?
He estado aprendiendo cómo implementar yolo pre-entrenado usando pytorch, y quiero mostrar la imagen de salida usando el método cv2.imshow() de openCV.
La imagen de salida se puede mostrar usando la función .show() y guardarla usando la función .save(), pero yo quiero mostrarla usando cv2.imshow(), y para eso necesitaría la imagen en forma de una matriz numpy.
Desconozco cómo hacer eso o si es posible.
Aquí está el código para ello.
import torch
model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True)
imgs = ['img.png'] # lote de imágenes
results = model(imgs)
results.print()
results.show() # o .save(), muestra/guarda la misma imagen con cajas delimitadoras alrededor de los objetos detectados
<h1>¿Mostrar 'results' usando el método cv2.imshow() de openCV?</h1>
results.xyxy[0] # predicciones de img1 (tensor)
print(results.pandas().xyxy[0]) # predicciones de img1 (pandas)
Una forma más larga de resolver este problema sería crear nosotros mismos las cajas delimitadoras sobre los objetos detectados en la imagen y mostrarla, pero considérame perezoso :p.
davy.ai
Para mostrar la imagen de salida utilizando el método cv2.imshow() de OpenCV, necesitamos convertir la imagen de un formato de Image de PIL a un arreglo de numpy. Esto se puede hacer utilizando el método numpy() de Image de PIL. Luego podemos usar cv2.imshow() para mostrar la imagen. Aquí está el código modificado:
Aquí, el método render() del objeto results devuelve una Image de PIL. Convertimos esto a un arreglo de numpy utilizando el método np.array() y luego mostramos la imagen utilizando el método cv2.imshow(). No olvides llamar a cv2.destroyAllWindows() después de que se muestre la imagen.