opencv从视频文件读取视频内容,从摄像头读取保存视频内容

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: opencv从视频文件读取视频内容,从摄像头读取保存视频内容

一、argparse模块

1. 定义

(1)argparse模块使编写用户友好的命令行接口变得容易。

(2)程序定义了它需要的参数,而argparse将找出如何从sys.argv中解析这些参数。

(3)argparse模块还会自动生成帮助和使用消息,并在用户给程序提供无效参数时发出错误信息。

2. 讲解

import argparse # 导入库

parser = argparse.ArgumentParser() # 获取所有参数

parser.add_argument(“-n1”, “–number one”, help=“第一个参数”, type=int) # 添加参数1


parser.add_argument(“-n2”, “–number two”, help=“第二个参数”, type=int) # 添加参数2

args = parser.parse_args() # 解析所有参数

实战:

import argparse        # 导入库
parser = argparse.ArgumentParser()    # 获取所有参数

# print(parser)

#添加参数
#第一个参数
parser.add_argument('number1',help='第一个参数',type=int)
#第二个参数
parser.add_argument('number2',help='第二个参数',type=int)

#解析参数
args = parser.parse_args()

#获取参数
print('第一个参数',args.number1)
print('第二个参数',args.number2)
print('所有参数',args)

注意,我们运行该代码时,需要在命令行运行

下面我们就运用这个argparse来动态加载我们指定的图片

import cv2
import argparse

#加载参数
parse = argparse.ArgumentParser()

#添加参数
parse.add_argument('path_image',help='path to input the image')

#解析参数
args = parse.parse_args()

#加载图片,方式一
image = cv2.imread(args.path_image)
#展示图片
cv2.imshow('image',image)


#加载图片,方式二。将图片路径转换成字典形式
args_dict = vars(parse.parse_args()) #{'path_image':'123.png'}
image2 = cv2.imread(args_dict['path_image'])
#展示图片
cv2.imshow('image2',image2)

#等待
cv2.waitKey(0)
#关闭窗口
cv2.destroyAllWindows()

终端命令行运行

python 03.read_picture.py 123.png

两种方式都展示了照片

这样,当我们读取不同图片时,就可以在命令行动态指定,不需要我们经常修改代码

二、读取、处理、保存图片

1.读取图片

cv2.imread()

2.灰度处理

cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

3.保存图片

cv2.imwrite(img2_path, gray_img) #img_path: 图片路径,gray_img: 处理后的图片

import cv2
import argparse

#加载参数
parse = argparse.ArgumentParser()

#添加参数
parse.add_argument('ori_image',help='path to input the image')
parse.add_argument('out_image',help='save the new image')

#解析参数
args = parse.parse_args()

#加载图片。将图片路径转换成字典形式
args_dict = vars(parse.parse_args()) #{'path_image':'123.png'}
image = cv2.imread(args_dict['ori_image'])

#图片灰度处理
gray_image = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)

#保存处理后的图片
cv2.imwrite(args_dict['out_image'],gray_image)

#显示图片
cv2.imshow('ori_image',image)
cv2.imshow('out_image',gray_image)

cv2.waitKey(0)
cv2.destroyAllWindows()

命令行执行

python .\04.图片处理.py .\123.png 234.png

灰度处理成功,并且保存图片成功

三、读取摄像头、视频文件

人脸识别,人脸支付领域应用比较多

交通领域车辆车牌识别

  1. cv2.VideoCapture() 从摄像头获取视频流
  2. capture.get() 获取帧的属性
  3. capture.isOpened() 判断摄像头是否打开
  4. cv2.waitKey(20) & 0xFF == ord(‘q’) 键盘输入q退出
  5. cv2.waitKey(20) & 0xFF == ord(‘c’) 键盘输入c截取帧
  6. capture.release() 释放资源

项目实战

1.从摄像头读取

import cv2
import argparse

parser = argparse.ArgumentParser()
parser.add_argument("index_camera", help="the camera ID", type=int)
args = parser.parse_args()
print("the camera index :", args.index_camera)

capture = cv2.VideoCapture(args.index_camera) # 视频捕获

frame_width = capture.get(cv2.CAP_PROP_FRAME_WIDTH) # 帧的宽度
frame_height = capture.get(cv2.CAP_PROP_FRAME_HEIGHT) # 帧的高度
fps = capture.get(cv2.CAP_PROP_FPS) # 每秒的帧数
print("帧的宽度: {}".format(frame_width))
print("帧的高度: {}".format(frame_height))
print("FPS: {}".format(fps))

if capture.isOpened() is False:
    print("Error Camera !")

# 读取视频直到关闭
while capture.isOpened():
    # 通过摄像头,一帧一帧的捕获
    ret, frame = capture.read()
    if ret is True:
        # 显示捕获的帧
        cv2.imshow("frame", frame)
        # 将捕获的帧转化为灰度的帧
        gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        # 显示灰度的帧
        cv2.imshow("gray frame", gray_frame)
        # 键盘输入q,退出视频捕获,关闭摄像头
        if cv2.waitKey(20) & 0xFF == ord('q'):
            break
    else:
        break

# 释放
capture.release()
cv2.destroyAllWindows()

#运行流程

Terminal —> python read_camera.py 0

由于我这台台式机没安装摄像头,所以没有输出视频

正常有摄像头电脑会显示出视频

并输出相关我们打印的数据


2.从视频文件读取视频内容

# 1 加载库

import cv2
import argparse

# 2 获取参数
parser = argparse.ArgumentParser()

# 3 添加参数
parser.add_argument("video_path", help="the path to the video file")

# 4 解析参数
args = parser.parse_args()

# 5 加载视频文件
capture = cv2.VideoCapture(args.video_path)

#获取视频参数
frame_width = capture.get(cv2.CAP_PROP_FRAME_WIDTH) # 帧的宽度
frame_height = capture.get(cv2.CAP_PROP_FRAME_HEIGHT) # 帧的高度
fps = capture.get(cv2.CAP_PROP_FPS) # 每秒的帧数

print("视频宽度: {}".format(frame_width))
print("视频高度: {}".format(frame_height))
print("FPS: {}".format(fps))



# 6 读取视频
ret, frame = capture.read() # ret 是否读取到了帧(图片)


while ret:
    cv2.imshow("video", frame)
    #一旦读取到,就继续一帧一帧地往下读取
    ret, frame = capture.read() # 继续读取帧
    if cv2.waitKey(20) & 0xFF == ord('q'):
        break


capture.release()
cv2.destroyAllWindows() # 关闭

命令行执行

python .\06.从视频文件读取视频.py .\buildings.mp4

视频可以顺利播放

3.保存从摄像头读取的视频

api介绍

  1. 视频编码:

fourcc = cv2.VideoWriter_fourcc(*‘XVID’)

灰度写入视频文件

cv2.VideoWriter(args.video_output, fourcc, int(fps), (int(frame_width), int(frame_height)), False)

实战代码:

# 1 导入库
import cv2
import argparse

# 2 获取参数
parser = argparse.ArgumentParser()

# 3 添加参数
parser.add_argument("video_output", help="the path to the output video")

# 4 解析参数
args = parser.parse_args()

# 5 捕获摄像头
capture = cv2.VideoCapture(0)

# 6 是否打开了摄像头
if capture.isOpened() is False:
    print("Camera Error !")

# 7 获取帧的属性:宽,高,以及fps
frame_width = capture.get(cv2.CAP_PROP_FRAME_WIDTH) # 宽
frame_height = capture.get(cv2.CAP_PROP_FRAME_HEIGHT) # 高
fps = capture.get(cv2.CAP_PROP_FPS)

# 8 对视频进行编码
fourcc = cv2.VideoWriter_fourcc(*"XVID")

#false表示灰度方式写入
output_gray = cv2.VideoWriter(args.video_output, fourcc, int(fps), (int(frame_width), int(frame_height)), False)

# 9 读取摄像头
while capture.isOpened():
    ret, frame = capture.read() # 一帧一帧地读取
    if ret is True:
        # 10 将读取到的帧转换为灰度
        gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        # 11 将转换后的帧写入都新的视频文件中
        output_gray.write(gray_frame)
        # 12 显示视频
        cv2.imshow("gray", gray_frame)
        # 13 等待或按q退出
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    else:
        break

# 14 释放资源
capture.release()
output_gray.release()
cv2.destroyAllWindows()


相关文章
|
1月前
|
编解码 数据安全/隐私保护 计算机视觉
Opencv学习笔记(十):同步和异步(多线程)操作打开海康摄像头
如何使用OpenCV进行同步和异步操作来打开海康摄像头,并提供了相关的代码示例。
72 1
Opencv学习笔记(十):同步和异步(多线程)操作打开海康摄像头
|
1月前
|
计算机视觉
Opencv学习笔记(八):如何通过cv2读取视频和摄像头来进行人脸检测(jetson nano)
如何使用OpenCV库通过cv2模块读取视频和摄像头进行人脸检测,并提供了相应的代码示例。
81 1
|
1月前
|
编解码 计算机视觉 Python
Opencv学习笔记(九):通过CV2将摄像头视频流保存为视频文件
使用OpenCV库通过CV2将摄像头视频流保存为视频文件,包括定义视频编码格式、设置保存路径、通过write写入视频文件,并提供了相应的Python代码示例。
118 0
|
3月前
|
计算机视觉 索引
OpenCv实时设置摄像头参数/获得摄像头参数值的方法论
这篇文章提供了一个OpenCV的实例教程,展示了如何使用`createTrackbar()`函数实时设置和获取摄像头参数值,如饱和度、Gamma和亮度,并通过回调函数在程序中连续修改这些参数。
|
1月前
|
缓存 监控 计算机视觉
视频监控笔记(三):opencv结合ffmpeg获取rtsp摄像头相关信息
本文介绍了如何使用OpenCV结合FFmpeg获取RTSP摄像头信息,包括网络架构、视频监控系统组成、以及如何读取和显示网络摄像头视频流。
41 1
|
1月前
|
计算机视觉 Python
python利用pyqt5和opencv打开电脑摄像头并进行拍照
本项目使用Python的PyQt5和OpenCV库实现了一个简单的摄像头应用。用户可以通过界面按钮打开或关闭摄像头,并实时预览视频流。点击“拍照”按钮可以捕捉当前画面并保存为图片文件。该应用适用于简单的图像采集和处理任务。
99 0
python利用pyqt5和opencv打开电脑摄像头并进行拍照
|
1月前
|
编解码 关系型数据库 计算机视觉
Opencv学习笔记(十一):opencv通过mp4保存为H.264视频
本文介绍了如何在OpenCV中通过使用cisco开源的openh264库来解决不支持H.264编码的问题,并提供了完整的代码示例。
60 0
Opencv学习笔记(十一):opencv通过mp4保存为H.264视频
|
3月前
|
计算机视觉 索引
OpenCV读取视频失败<无可用信息,未为 opencv_world453.dll 加载任何符号> cv::VideoCapture
本文介绍了解决OpenCV读取视频失败的错误,指出问题通常由视频路径错误或摄像头索引错误导致,并提供了相应的解决方法。
OpenCV读取视频失败<无可用信息,未为 opencv_world453.dll 加载任何符号> cv::VideoCapture
|
4月前
|
机器学习/深度学习 XML 计算机视觉
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习库,它提供了大量的函数和工具,用于处理图像和视频数据。
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习库,它提供了大量的函数和工具,用于处理图像和视频数据。
|
1月前
|
计算机视觉
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
这篇文章详细介绍了OpenCV库中的图像二值化函数`cv2.threshold`,包括二值化的概念、常见的阈值类型、函数的参数说明以及通过代码实例展示了如何应用该函数进行图像二值化处理,并展示了运行结果。
322 0
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解