Python 在Kivy中显示numpy/opencv/matplotlib图像
如何在Kivy中以标准numpy/opencv/matplotlib格式显示图像?Kivy使用不同的图像内存布局,我不知道是哪一个 下面的代码工作得非常好。该图像是使用cv2视频捕获技术拍摄的。我认为图像是BGR,阵列尺寸是(360、480、3): 尝试使用以下代码显示会产生混乱的结果:Python 在Kivy中显示numpy/opencv/matplotlib图像,python,opencv,kivy,Python,Opencv,Kivy,如何在Kivy中以标准numpy/opencv/matplotlib格式显示图像?Kivy使用不同的图像内存布局,我不知道是哪一个 下面的代码工作得非常好。该图像是使用cv2视频捕获技术拍摄的。我认为图像是BGR,阵列尺寸是(360、480、3): 尝试使用以下代码显示会产生混乱的结果: video_texture = Texture.create(size=image.shape[:2]) video_texture.blit_buffer(image.tostring(),
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)
找到了正确的转换。可能不太理想:
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')
我发现旋转也可以使用numpy函数flipud()完成,不确定它是否真的更快(我对python/numpy没有太多经验),但对于一些人来说,这可能比90度旋转和交换更符合逻辑
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')