1.cv2.cvtColor()
cv2.cvtColor(src, code[, dst[, dstCn]])
其中:
src
:输入图像。code
:色彩空间转换代码。例如,cv2.COLOR_BGR2RGB
将一个 BGR 颜色空间的图像转换为 RGB 颜色空间的图像,cv2.COLOR_BGR2GRAY
将一个 BGR 颜色空间的图像转换为灰度图像。dst
:输出图像,可选参数。如果不提供此参数,则结果将存储在src
中。dstCn
:输出图像中的通道数。如果此参数为零或与输入图像的通道数不同,则输出图像中的通道数将根据code
参数自动确定。
例如,将一张 BGR
格式的图片转换为 RGB
格式,代码如下:
-
import cv2 img = cv2.imread("image.jpg") # 加载 BGR 格式图片 img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 转换为 RGB 格式
这里,
cv2.imread()
是 OpenCV 库中读取图像的函数。默认情况下,它读取的图像格式为BGR
。cv2.cvtColor()
函数用于将BGR
格式的图像转换为RGB
格式。cv2.VideoCapture读出的帧格式默认是BGR格式,即每个像素由蓝色、绿色和红色三个分量组成。
2.cv2.VideoCapture
cv2.VideoCapture(index or filename, apiPreference=None)
其中参数 index
为设备索引或视频文件名,如果需要打开摄像头则使用设备索引,一般情况下设备索引为 0 或 1,如果需要打开视频文件则使用文件名。参数 apiPreference
表示视频编程接口的偏好,可以为 cv2.CAP_ANY
、cv2.CAP_VFW
、cv2.CAP_DSHOW
、cv2.CAP_MSMF
等。函数返回一个 cv2.VideoCapture
对象,通过该对象可以获取视频帧并进行处理。
示例:
import cv2
# 打开摄像头,设备索引为0
cap = cv2.VideoCapture(0)
while True:
# 读取一帧视频
ret, frame = cap.read()
# 显示帧
cv2.imshow('frame', frame)
# 等待按键事件
key = cv2.waitKey(1)
if key == ord('q'):
break
# 释放资源
cap.release()
cv2.destroyAllWindows()
3.cap.read()
ret, frame = cap.read()
cap.read()
是 OpenCV 中用来读取视频帧的函数,它会从 cv2.VideoCapture
对象 cap
中读取一帧视频数据,返回两个值:
ret
:bool 类型,表示是否成功读取到一帧视频,成功为 True,失败为 False。frame
:numpy.ndarray 类型,表示读取到的一帧视频数据,它的格式一般是 BGR,可以使用cv2.cvtColor
函数将其转换为其他格式,如 RGB。
4.
frame = torch.from_numpy(frame.transpose((2, 0, 1))).float()
在cv2中,读取到的视频帧一般是numpy数组格式,维度顺序为高度、宽度和通道数(H×W×C),而在PyTorch中,输入数据通常是张量格式,维度顺序为通道数、高度和宽度(C×H×W)。因此,我们需要将读取到的视频帧的维度顺序从(H×W×C)转换为(C×H×W)
这行代码将 frame
转换为 PyTorch 中的张量,并且将通道维度放在了最前面。具体来说,这里首先使用 numpy.transpose()
函数将通道维度(默认为最后一维)移到第一维,然后使用 torch.from_numpy()
函数将 numpy.ndarray
转换为 PyTorch 张量,最后将张量的类型转换为 float
。
该代码的作用是将 OpenCV 读取的视频帧转换为 PyTorch 张量,方便后续使用 PyTorch 进行模型训练等操作。