Display image of numpy / opencv / matplotlib in kiwi

How to display image in standard numpy / opencv / matplotlib format in Kivy? Kivy uses a different image memory structure, and I cannot figure out which one.

The following code works perfectly fine. Image was captured using cv2 VideoCapture. I think the image is BGR, array sizes (360, 480, 3):

ret, image = video_capture.read() cv2.imshow('image', image) cv2.waitKey() 

Attempting to display it using the following code produces erratic results:

  video_texture = Texture.create(size=image.shape[:2]) video_texture.blit_buffer(image.tostring(), colorfmt='rgb', bufferfmt='ubyte') # ... video_panel = self.ids['video_panel'] with video_panel.canvas: Rectangle(texture=video_texture, pos=video_panel.pos, size=video_panel.size) 
+6
source share
2 answers

Found the correct conversion. Probably suboptimal:

  ret, image = video_capture.read() image = np.rot90(np.swapaxes(image, 0, 1)) video_texture = Texture.create(size=(image.shape[1], image.shape[0]), colorfmt='rgb') video_texture.blit_buffer(image.tostring(), colorfmt='bgr', bufferfmt='ubyte') 
+4
source

I found that the rotation can also be done using the numpy flipud () function, not sure if it is actually faster (I'm not that kind of experience with python / numpy), but for some it might be more logical to read the 90 degree rotation and swapaxes.

+3
source

All Articles