input_video_width = int(video_read_cap.get(cv2.CAP_PROP_FRAME_WIDTH)) input_video_height = int(video_read_cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) input_video_fps = int(video_read_cap.get(cv2.CAP_PROP_FPS)) input_video_fourcc = int(cv2.VideoWriter_fourcc(*'mp4v'))
时间: 2023-08-09 11:06:12 浏览: 131
这段代码是用来获取输入视频的宽度、高度、帧率和 FourCC 编码格式的。其中 `cv2.CAP_PROP_FRAME_WIDTH` 和 `cv2.CAP_PROP_FRAME_HEIGHT` 分别表示视频帧的宽度和高度,`cv2.CAP_PROP_FPS` 表示视频的帧率,`cv2.VideoWriter_fourcc` 用来指定编码格式,通常使用 MPEG-4 编码格式,即 `'mp4v'`。这些信息会在后续的视频处理中使用到。
相关问题
if __name__ == "__main__": unet = Unet() mode = "fps" video_path = "ID01.mp4" video_save_path = "ID01dect3.mp4" video_fps = 50.0 test_interval = 1000 dir_origin_path = "img/" dir_save_path = "img_out/" if mode == "predict": seg_img = np.zeros((np.shape(pr)[0],np.shape(pr)[1],3)) for c in range(self.num_classes): seg_img[:, :, 0] += ((pr == c)*( self.colors[c][0] )).astype('uint8') seg_img[:, :, 1] += ((pr == c)*( self.colors[c][1] )).astype('uint8') seg_img[:, :, 2] += ((pr == c)*( self.colors[c][2] )).astype('uint8') ''' while True: img = input('Input image filename:') try: image = Image.open(img) except: print('Open Error! Try again!') continue else: r_image = unet.detect_image(image) r_image.show() elif mode == "video": capture=cv2.VideoCapture(video_path) if video_save_path!="": fourcc = cv2.VideoWriter_fourcc(*'XVID') size = (int(capture.get(cv2.CAP_PROP_FRAME_WIDTH)), int(capture.get(cv2.CAP_PROP_FRAME_HEIGHT))) out = cv2.VideoWriter(video_save_path, fourcc, video_fps, size) ref, frame = capture.read() if not ref: raise ValueError("未能正确读取摄像头(视频),请注意是否正确安装摄像头(是否正确填写视频路径)。") fps = 0.0 while(True): t1 = time.time() # 读取某一帧 ref, frame = capture.read() if not ref: break # 格式转变,BGRtoRGB frame = cv2.cvtColor(frame,cv2.COLOR_BGR2RGB) # 转变成Image frame = Image.fromarray(np.uint8(frame)) # 进行检测 frame = np.array(unet.detect_image(frame)) # RGBtoBGR满足opencv显示
这段代码是一个使用Unet模型进行图像分割的程序。其中,`mode`变量可以设置为`predict`或`video`,分别代表单张图片的预测和视频流的分割。
在`predict`模式下,程序会读取一个图片,然后使用Unet模型进行分割,最后将分割结果显示出来。
在`video`模式下,程序会读取一个视频文件,然后对每一帧进行分割,最后将分割后的视频保存下来。
在进行分割时,程序会将分割结果可视化为彩色图像,其中每一类的像素点会被标记为不同的颜色。
cv2.VideoWriter
cv2.VideoWriter是OpenCV中的一个类,用于将一系列图像(帧)合成为视频文件。它可以将图像以特定的编解码器压缩为视频,也可以保存为未压缩的视频。常见的编解码器包括MPEG-4、XVID、MJPG等。通过设置帧率、视频大小和编解码器等参数,可以对视频的质量和大小进行调整。
使用方法如下:
```python
import cv2
# 打开视频文件
cap = cv2.VideoCapture('input_video.mp4')
# 获取视频的宽度和高度
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
# 创建VideoWriter对象
out = cv2.VideoWriter('output_video.avi', cv2.VideoWriter_fourcc('M','J','P','G'), 30, (width, height))
# 读取视频帧,并写入输出文件
while(cap.isOpened()):
ret, frame = cap.read()
if ret==True:
out.write(frame)
cv2.imshow('frame',frame)
if cv2.waitKey(25) & 0xFF == ord('q'):
break
else:
break
# 释放资源
cap.release()
out.release()
cv2.destroyAllWindows()
```
在上述代码中,我们首先使用cv2.VideoCapture打开输入视频文件,然后获取视频的宽度和高度。接着,我们使用cv2.VideoWriter创建VideoWriter对象,指定输出视频文件的名称、编解码器、帧率和视频大小等参数。之后,我们读取输入视频的每一帧,将其写入输出视频文件,并使用cv2.imshow显示当前帧。最后,释放资源并关闭窗口。
阅读全文