首页 > 其他分享 >opencv

opencv

时间:2024-08-16 10:16:03浏览次数:12  
标签:视频 frame cv2 opencv 参数 VideoCapture cv

一、读取视频

  读取视频文件与在OpenCV中读取图像文件非常相似,区别在于我们使用了cv2.videocapture。

1.1读取视频需要用到的函数

  视频写入函数 cv.VideoWriter()
  读取视频 cv.VideoCapture.read()
  写入视频 cv.VideoWriter.write(frame)
  打开,判断是否打开isOpened () open()
  获取参数,更改参数 cv.VideoCapture.get(propId)       cv.VideoCapture.set(propId, value)
  释放视频 cv.VideoCapture.release()
————————————————

VideoCapture参数可以选择文件路径,例如:cv2.VideoCapture('test_video.mp4')
isOpened()判断是否打开,cv.VideoCapture.open用来打开一段视频流,例如:cv.VideoCapture.open('test_video.mp4'),如果设备或者视频被打开,则会返回true
————————————————

 

 1 import cv2
 2 import matplotlib.pyplot as plt
 3 import numpy as np
 4 
 5 
 6 vc = cv2.VideoCapture(r'C:\Users\19225\PycharmProjects\test\src\user\media\1.mp4')
 7 # 检查视频是否打开正确
 8 if vc.isOpened():
 9     open, frame = vc.read()
10 else:
11     open = False
12 
13 # 逐帧读取和处理视频
14 while open:
15     # ret表示帧是否被正确读取,frame读取到的帧
16     ret, frame = vc.read()
17     if frame is None:
18         break
19     if ret == True:
20         gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
21         cv2.imshow('result', gray)
22         # 等待100秒,用户摁q键退出
23         if cv2.waitKey(100) & 0xFF == ord('q'):
24             break
25 # 释放资源和关闭窗口q
26 vc.release()
27 cv2.destroyAllWindows()

 

二、从摄像头获取视频

 1 # 创建VideoCapture对象,用创建的对象去做之后的操作
 2 cap = cv2.VideoCapture(0)
 3 # 检测有无摄像头正常使用
 4 # 这是一个必要的验证,当cap为空的时候,后续调用会报错。
 5 if not cap.isOpened():
 6     print("Cannot open camera")
 7     exit()
 8 
 9 # 获取视频流是一个连续的循环过程,一直在获取,不是说获取到一帧就可以了
10 while True:
11     # 通过创建的VideoCapture对象逐帧获取视频,会返回两个参数,ret返回true和false代表是否正常获取到帧,以及视频是否结束
12     # frame代表获取到的帧
13     ret, frame = cap.read()
14     # if frame is read correctly ret is True
15     if not ret:
16         print("不能正常读取视频帧")
17         break
18     # 将获取到的视频帧,也就是一幅幅图像,转为灰度图
19     gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
20     # 展示
21     cv2.imshow('frame', gray)
22     # q退出获取视频流
23     if cv2.waitKey(1) == ord('q'):
24         break
25 # 释放资源
26 cap.release()
27 cv2.destroyAllWindows()

 

 

三、通过opencv获取视频设备的参数,设置新参数

cv.VideoCapture.get( propId ) 获取设备参数,propld填写cv2提供的参数选项,官网提供了70种可以查询的参数。返回值就是改参数的值,如果查询的参数不存在或者不支持,不报错,会返回0 。

 1 import cv2 as cv
 2 
 3 # 创建VideoCapture对象,用创建的对象去做之后的操作
 4 cap2 = cv.VideoCapture(0)
 5 
 6 while True:
 7     # 获取设备参数,cv.CAP_PROP_FRAME_WIDTH,CAP_PROP_FRAME_HEIGHT是cv2提供的参数选项
 8     width, height = cap2.get(cv.CAP_PROP_FRAME_WIDTH), cap2.get(cv.CAP_PROP_FRAME_HEIGHT)
 9     # 我这里是1280.0 720.0
10     print(width, height)
11 
12     # 以原分辨率的两倍来捕获
13     cap2.set(cv.CAP_PROP_FRAME_WIDTH, width * 2)
14     cap2.set(cv.CAP_PROP_FRAME_HEIGHT, height * 2)
15     _, frame2 = cap2.read()
16 
17     gray_double = cv.cvtColor(frame2, cv.COLOR_BGR2GRAY)
18     # 展示
19     cv.imshow('doubel read', gray_double)
20     # q退出获取视频流
21     if cv.waitKey(1) == ord('q'):
22         break
23 # 释放资源
24 cap2.release()
25 cv.destroyAllWindows()

 

四、录制视频并保存

 

1.定义编码方式,创建VideoWriter对象,有五个参数,VideoWriter (const String &filename, int fourcc, double fps, Size frameSize, bool isColor=true)分别是:
输出的文件名,如’output.avi’
编码方式FourCC码
帧率FPS
要保存的分辨率大小
最后一个是isColor标志。如果它是 “True”,编码器就会期待彩色帧,否则就会使用灰阶帧。
2.定义一个VideoCapture
3.执行写入函数将VideoCapture捕获的内容按照设定好的方式写入指定位置

 

 知识点补充

视频编码是将视频信号转换为数字信号的过程,以便在数字媒体设备上存储和传输。
常见编码方式有

1 H.264:H.264是一种广泛使用的视频编码标准,也称为AVC(Advanced Video Coding)。它支持高质量视频压缩,并可提供高清晰度视频和流媒体。
2 H.265:H.265,也称为HEVC(High Efficiency Video Coding),是一种新的视频编码标准,它比H.264提供更高的压缩比和更好的图像质量。
3 MPEG-2:MPEG-2是一种广泛使用的视频编码标准,用于数字电视、DVD和蓝光光盘等高清晰度视频。
4 MPEG-4:MPEG-4是一种支持视频、音频和多媒体内容的编码标准,也用于流媒体和网络视频。
5 VP9:VP9是一种由Google开发的视频编码标准,它提供比H.264更好的压缩效率和图像质量,并支持4K和8K视频。
6 AV1:AV1是一种由Alliance for Open Media开发的新一代开放视频编码标准,旨在提供更高的压缩效率和更好的图像质量。
7 
8 FourCC是一种用于标识视频编解码器的四个字符代码,通常由四个大写字母组成,用于标识视频解码器和编码器。例如,MPEG-4视频格式的FourCC代码是“MP4V”,H.264视频格式的FourCC代码是“H264”。FourCC代码的好处是在视频编辑和处理软件中,可以选择正确的解码器,从而确保视频文件可以正确地播放和编辑,并且在不同的平台和应用程序之间进行交互。
9 ————————————————

 

标签:视频,frame,cv2,opencv,参数,VideoCapture,cv
From: https://www.cnblogs.com/liuliu1/p/18362366

相关文章

  • OpenCV/CV2,PIL,Tensor之间如何互相转化
    参考资料:torchvision文档众所周知OpenCV/CV2和PIL是Python领域最常使用的图像处理库,而PytorchTensor则是我们在深度学习领域接触最多的张量数据结构,知道这几种格式之间的相互转化方式是非常有必要的。三类,一共6种相互转化的链路,下面一一道来:1.OpenCV/CV2(ndar......
  • opencv关键点检测
    特征匹配主要是基于两种相似度较高的图片,通过opencv里面提供的特征匹配方法来进行特征点之间的匹配和映射特征点由关键点和描述子两部分组成。例如:在一张图像中计算SIFT特征点时,是指提取SIFT关键点,并计算SIFT描述子两件事。关键点是指特征点在图像里的位置,有些特征点还具有方向......
  • 【OpenCV教程】OpenCV中对矩阵的常用操作
    @目录1.全零矩阵2.全一矩阵3.单位矩阵4.矩阵转置5.求逆矩阵6.逗号式分隔创建矩阵7.矩阵定义(只列出常用的)7.1数据类型Scalar8.通过ptr与at函数遍历矩阵8.1Vec类型9.通过迭代器遍历矩阵(easybutveryveryslow)1.全零矩阵CV_NODISCARD_STDstaticMatExprMat::zeros(intr......
  • 【树莓派学习笔记2】opencv常用的视觉方案,特征颜色提取,模式匹配,图形映射函数
    本文主要介绍opencv里面一些常用的视觉方案,所需的全部代码均在如下1.给视觉单独开一个进程持续运行并更新全局变量#获取并处理图像defget_image():whileTrue:#开全局变量处理,分理处红绿蓝globalimage,image_red,image_green,image_blue......
  • opencv图像去雾
    1、何恺明的暗通道去雾算法     论文原文:SingleImageHazeRemovalUsingDarkChannelPrior|IEEEJournals&Magazine|IEEEXplore     参考博客:[论文阅读](11)ACE算法和暗通道先验图像去雾算法(Rizzi|何恺明老师)_暗通道去雾算法_Eastmount的博客......
  • OpenCV图像处理——直线拟合并找出拟合直线的起点与端点
    引言对轮廓进行分析,除了可以对轮廓进行椭圆或者圆的拟合之外,还可以对轮廓点集进行直线拟合。在OpenCV中,直线拟合通常是通过cv::fitLine函数实现的,该函数采用最小二乘法对一组2D或3D点进行直线拟合。对于2D点集,拟合结果是一个cv::Vec4f类型的向量,包含了直线的方......
  • OpenCV(cv::waitKey())
    目录1.函数解析参数返回值2.示例3.说明4.注意事项cv::waitKey()是OpenCV库中的一个函数,用于等待用户的键盘输入。它在处理图像和视频时非常有用,特别是在显示图像窗口时,用于控制图像的显示和响应用户输入。1.函数解析intcv::waitKey(intdelay=0);参数delay:......
  • OpenCV-图片操作
    一.多种形态学形态学变换(MorphologicalTransformations)是一种基于形状的简单变换,它的处理对象通常是二值化图像。形态学变换有两个输入,一个输出:输入为原图像、核(结构化元素),输出为形态学变换后的图像。1.核核(kernel)其实就是一个小区域,通常为3*3、5*5、7*7大小,有着其自己......
  • Debian下使用OpenCV库保存摄相头数据为图片(arm)
    在《移植OpenCV3.1到BBB-Debian》一文件中配置好的环境为前提(后期不特别说明,ARM版的例子均以该环境为基础),编写使用OpenCV库保存WEBCAM的数据为图片的代码,下面是相应的源码和编译配置文件(都保存在SaveCamPic目录下):1.源码scp.cpp#include<stdio.h>#include<sys/stat.h>#in......
  • OpenCv学习-python
    一.OpenCv介绍简介OpenCV(OpenSourceComputerVisionLibrary:opencv官网地址)是一个开源的基于BSD许可的库,它包括数百种计算机视觉算法。文档OpenCV2.xAPI描述的是C++API,相对还有一个基于C语言的OpenCV1.xAPI,后者的描述在文档opencv1.x.pdf中。OpenCV具有模块化结......