一、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
灰度处理成功,并且保存图片成功
三、读取摄像头、视频文件
人脸识别,人脸支付领域应用比较多
交通领域车辆车牌识别
-
cv2.VideoCapture() 从摄像头获取视频流
-
capture.get() 获取帧的属性
-
capture.isOpened() 判断摄像头是否打开
-
cv2.waitKey(20) & 0xFF == ord(‘q’) 键盘输入q退出
-
cv2.waitKey(20) & 0xFF == ord(‘c’) 键盘输入c截取帧
-
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介绍
-
视频编码:
fourcc = cv2.VideoWriter_fourcc(*‘XVID’) -
灰度写入视频文件
cv2.VideoWriter(args.video_output, fourcc, int(fps), (int(frame_width), int(frame_height)), False)文章来源:https://www.toymoban.com/news/detail-836026.html
实战代码:文章来源地址https://www.toymoban.com/news/detail-836026.html
# 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()
到了这里,关于opencv从视频文件读取视频内容,从摄像头读取保存视频内容的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!