2 个回答
在python中,opencv中视频抽取的一帧是numpy数组,也就是ndarray对象,所以问题转化成了如何将numpy数组转化成图片,这个很简单。
另外一提,你和我一样喜欢import cv2 as cv,真棒。我因为这个写法经常被我的好buddy们吐槽hhh
在python中,个人最喜欢的基于numpy数组的图像IO包就是pillow和opencv-python了。
方法一:pillow
使用非opencv提供的图像IO方法记得检查:
- 通道数是否符合要求
- 颜色通道顺序是一致
- 像素级是否一样(一般都是255,也就是int8,归一化的还原就行)
pillow很方便,很稳定,下述代码会从我的HIK相机中采集一帧图片,然后存储到本地。
舍友都在睡觉,所以就给我的电容麦克风来个写真吧
import cv2 as cv
import numpy as np
from PIL import Image
cap = cv.VideoCapture(0)
ret, frame = cap.read()
# 通道转换
frame = np.concatenate([np.expand_dims(frame[..., i], 2) for i in [2, 1, 0]], axis=2)
img = Image.fromarray(frame)
img.save("microphone.png")
cap.release()
output:

方法二:opencv内置函数
import cv2 as cv
import numpy as np