Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Kivy中显示numpy/opencv/matplotlib图像_Python_Opencv_Kivy - Fatal编程技术网

Python 在Kivy中显示numpy/opencv/matplotlib图像

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(),

如何在Kivy中以标准numpy/opencv/matplotlib格式显示图像?Kivy使用不同的图像内存布局,我不知道是哪一个

下面的代码工作得非常好。该图像是使用cv2视频捕获技术拍摄的。我认为图像是BGR,阵列尺寸是(360、480、3):

尝试使用以下代码显示会产生混乱的结果:

    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')