QT--Opencv视频

提示:本文为学习记录,若有错误,请联系作者


前言

什么时候才可以实现财富自由


前面我们都知道opencv对图像处理,以下是对视频处理。

一、opencv包含的头文件

opencv3
主要头文件是…/include/opencv2/opencv.hpp;
它只是调用每个OpenCV模块的头文件:
#包括“opencv2/core/core_c.h”旧C数据结构和算术例程
“opencv2/core/core.hpp”新C++数据结构和算术例程
“opencv2/flann/miniflann.hpp”近似最近邻匹配函数
“OPENCV2/imgproc/imgproc_c.h”旧C图像处理函数
“opencv2/imgproc/imgproc.hpp”新C++图像处理函数
“opencv2/video/photo。特定于处理和恢复照片的算法
“opencv2/video/video.hpp”视频跟踪和背景分割程序
“opencv2/features2d/features2d.hpp”二维特征跟踪支持
“opencv2/objdetect/objdetect.hpp”级联人脸检测器;潜在SVM;猪;平面补丁检测器
“opencv2/calib3d/calib3d.hpp”校准和立体
“opencv2/ml/ml.hpp”机器学习:聚类,模式识别
“opencv2/objdetect/objdetect.hpp 2/higgui/highgui_c.h旧C图像显示,滑块,鼠标交互,I/O
“opencv2/highgui/highgui.hpp”新的C++图像显示,滑块,按钮,鼠标,I/O
“opencv2/contrib/contrib.hpp”用户贡献的代码:肉检测,模糊均值移跟踪,旋转图像,自相似功能

二、使用步骤

1.读取视频

要捕获视频,你需要创建一个 VideoCapture 对象。它的参数可以是设备索引或视频文件的名称。设备索引就是指定哪个摄像头的数字。正常情况下,一个摄像头会被连接(就像我的情况一样)。所以简单地传0(或-1)。你可以通过传递1来选择第二个相机,以此类推。在此之后,你可以逐帧捕获。

相机中读取视频
新建一个Videocapture
cap = cv::vidocapture(0)
if(cap.isopened == false )//检查是否初始化
{
    
    return false;}
else{
    
    
frame = cap.read()//正确读取了帧是true
gray = cv.cvtcolor(frame,cv.COLOR_BGR2GRAY)
cv,show('frame',gray)
if(cv.waitkey = ord('q'))
break;
}

用 cap.get(propId) 方法访问该视频的某些功能,其中propId是0到18之间的一个数字。每个数字表示视频的属性(如果适用于该视频),并且可以显示完整的详细信息在这里看到:cv::VideoCapture::get()。其中一些值可以用cap.set(propId,value) 进行修改。value是你想要的新值。

例如,可以通过 cap.get(cv.CAP_PROP_FRAME_WIDTH) 和 cap.get(cv.CAP_PROP_FRAME_HEIGHT)检查框架的宽度和高度。默认情况下,它的分辨率为640x480。但我想将其修改为320x240。只需使用和即可。

ret = cap.set(cv.CAP_PROP_FRAME_WIDTH,320) and ret = 
cap.set(cv.CAP_PROP_FRAME_HEIGHT,240)

2.播放视频

它与从相机捕获相同,只是用视频文件名更改摄像机索引。另外,在显示框架时,请使用适当的时间 cv.waitKey() 。如果太小,则视频将非常快,而如果太大,则视频将变得很慢。正常情况下25毫秒就可以了。

cap = cv.VideoCapture('vtest.avi')
while cap.isOpened():
ret ,frame = cap.read();
gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
 cv.imshow('frame', gray)
 if cv.waitKey(1) == ord('q'):
 break
cap.release()
cv.destroyAllWindows()

3.保存视频

捕捉一个视频,一帧一帧地处理,我们想要保存这个视频。对于图像,它非常简单,只需使用 cv.imwrite()。这里还需要做一些工作。这次我们创建一个 VideoWriter 对象。我们应该指定输出文件名(例如: output.avi)。然后我们应该指定 FourCC 代码(详见下一段)。然后传递帧率的数量和帧大小。最后一个是颜色标志。如果为True ,编码器期望颜色帧,否则它与灰度帧一起工作

cv.VideoWriter('output.avi', fourcc, 20.0, (640, 480))

4.cv.waitKey()

cv.waitKey()是一个键盘绑定函数。其参数是以毫秒为单位的时间。该函数等待任何键盘事件指定的毫秒。如果您在这段时间内按下任何键,程序将继续运行。如果0被传递,它将无限期地等待一次敲击键。它也可以设置为检测特定的按键,例如,如果按下键 a 等

if cv.waitKey(1) == ord('a'):
 break

总结

善于总结,多进一步。

猜你喜欢

转载自blog.csdn.net/m0_51988927/article/details/131662042