【发布时间】:2017-01-09 15:22:09
【问题描述】:
我目前正在尝试从视频中获取帧(使用 openCV2),然后使用 Kivy 在应用中显示它们。
由于不同的图像格式,我不得不求助于将图像从 openCV2 保存到磁盘,然后在 Kivy 中读取,这是一个不优雅的解决方案,偶尔会导致崩溃(Kivy 部分试图访问图像在它完全保存完成之前)
我正在尝试直接传递图像,不涉及磁盘访问。目前,我正在尝试使用 cv2.imencode 将图像从 openCV2 保存到缓冲区中,然后使用 Texture.blit_buffer 将缓冲区转换为 kivy 纹理
目前,图像提取如下:
video = cv2.VideoCapture(videourl)
success, image = video.read()
success2, buffer = cv2.imencode('.jpg', image)
虽然纹理创建看起来像:
tex = Texture.create()
tex.blit_buffer(buffer, colorfmt='rgb', bufferfmt='ubyte')
但是,我收到以下错误:
ValueError: Buffer has wrong number of dimensions (expected 1, got 2)
据此,我猜它期望数组是一维的。我是否只需要将 openCV2 图像(存储为 numpy n 维数组)转换为一维数组?如果是这样,我还需要做什么来确保图像正确复制?
提前致谢,
【问题讨论】: