我有gstreamer缓冲区,喜欢在python多处理中转换为cv2帧
Gstreamer
在一个进程中从相机获取缓冲区,然后使用Multprocessing.Array
Gstreamer gets buffer in one process as
processing=Multiprocess.process(target=imageprocess, args=(sharedarray,))
sharedarray=Array['d',6220800,dtype=np.uint8]
sample = sink.emit("pull_sample")
buf=sample.get_buffer()
sharedarray=np.frombuffer(buffer=buf.extract_dup(0,buf.get_size()),dtype=np.uint8)
我检查了一下,共享数组的长度为6220800。
然后在另一个过程中
def imageprocess(img):
image=np.frombuffer(img,dtype=np.uint8)
cv2.imshow('image ', image.reshape(1080,1920,3))
如果我将dtype = np.uint8设置为 无法将大小为49766400的数组重塑为形状(1080,1920,3)。
如果我设置dtype = np.float64,但我的图像是黑色的,则没有错误。
在此问题中如何获得正确的图像? 我可以在cv2中将图像类型从double转换为char,但是想知道为什么源包含uint8和np。frombuffer无法直接检索uint8。