2017-01-09 63 views
0

我目前正在尝试从视频中采用帧(使用openCV2),然后使用Kivy在应用中显示它们。由于不同的图像格式,我不得不求助于将图像从openCV2保存到磁盘,然后在Kivy中读取它,这是一个不雅的解决方案,偶尔会导致崩溃(其中Kivy部分尝试访问图像完成之前完成存储)将OpenCV2图像转换为Kivy纹理

我试图直接传递图像,没有涉及光盘访问。目前,我试图将图像从openCV2使用cv2.imencode保存到缓冲区中,然后将缓冲区转换成使用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) 

因此,我猜测它期望数组是1维的。我只需要将openCV2图像(将其存储为numpy n维数组)转换为单维数组?如果是这样,我还需要做些什么来确保图像正确复制?

在此先感谢,

回答

0

通过

buffer.flatten() 

扁平化的缓冲区,它应该工作。

+0

啊,它确实,谢谢。 –