将OpenCV2图像转换为Kivy Texture

时间:2017-01-09 15:22:09

标签: python opencv kivy

我目前正在尝试从视频中获取帧数(使用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图像(存储为n维n维数组)转换为单维数组吗?如果是这样,我还需要做些什么来确保图像正确复制?

提前感谢,

1 个答案:

答案 0 :(得分:0)

通过

压缩缓冲区
buffer.flatten()

它应该有用。