我目前正在尝试从视频中获取帧数(使用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维数组)转换为单维数组吗?如果是这样,我还需要做些什么来确保图像正确复制?
提前感谢,
答案 0 :(得分:0)
通过
压缩缓冲区buffer.flatten()
它应该有用。