Python3 OpenCV imshow()字节字符串

时间:2019-04-14 22:43:49

标签: python-3.x cv2

我从相机中得到了一个字节串,我想在不保存的情况下使用OpenCV显示帧(节省时间)。我已经检查了以下问题:Python OpenCV load image from byte string,但收到错误消息failed to import cv from cv2

打印(帧):b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00\x01\...

我的代码(在c循环中):

frame = # need to convert bytestring for imshow()
cv2.imshow('image', frame)
cv2.waitKey(1)

另外,如果我只是将其保存为文件,然后使用cv2.imread(..)进行加载,则代码也可以工作,但是最好的方法是跳过filesave和加载。

因此,由于cv已从OpenCV3中删除,因此这不再起作用。

nparr = np.fromstring(frame, np.uint8)
img_np = cv2.imdecode(nparr, cv2.IMREAD_COLOR)

img_ipl = cv.CreateImageHeader((img_np.shape[1], img_np.shape[0]), cv.IPL_DEPTH_8U, 3)
cv.SetData(img_ipl, img_np.tostring(), img_np.dtype.itemsize * 3 * img_np.shape[1])

cv2.imshow('image', img_ipl)
cv2.waitKey(1)

然后如何在不创建临时文件的情况下传递字节串?

2 个答案:

答案 0 :(得分:0)

import numpy as np
import cv2

# Load image as string from file/database
fd = open('foo.jpg')
img_str = fd.read()
fd.close()

#Convert to images
image = np.fromstring(im_str, np.uint8).reshape( h, w, nb_planes )
cv2.imshow('Output', image)

答案 1 :(得分:0)

因此,找到了解决方案:

# converting bytestring frame into imshow argument
nparr = np.fromstring(frame, np.uint8)
frame = cv2.imdecode(nparr, cv2.IMREAD_COLOR)

cv2.imshow('image', frame)
cv2.waitKey(1)