郑州好的网站建设公司排名,专业微信网站建设,wordpress首页文章显示分类,职业技能培训网视频处理在OpenCV中处于极为重要的地位#xff0c;目标实时跟踪等各种实时图像处理算法都是以视频为基础。从相机捕获视频首先我们来了解一下使用电脑自带的相机来进行捕获视频。通常#xff0c;我们必须使用摄像机捕获实时流。OpenCV提供了一个非常简单的界面来执行此操作。…视频处理在OpenCV中处于极为重要的地位目标实时跟踪等各种实时图像处理算法都是以视频为基础。从相机捕获视频首先我们来了解一下使用电脑自带的相机来进行捕获视频。通常我们必须使用摄像机捕获实时流。OpenCV提供了一个非常简单的界面来执行此操作。让我们从相机捕获视频(我使用笔记本电脑上的内置网络摄像头)我们需要了解几个函数cap cv2.VideoCapture(0)VideoCapture()中参数是0表示打开笔记本的内置摄像头参数是视频文件路径则打开视频如cap cv2.VideoCapture(../test.avi)当然了如果你外接的有其他的摄像头那就可以选用其他的参数例如1从而调用它。ret,frame cap.read()cap.read()按帧读取视频ret,frame是获cap.read()方法的两个返回值。其中ret是布尔值如果读取帧是正确的则返回True如果文件读取到结尾它的返回值就为False。frame就是每一帧的图像是个三维矩阵我们都知道视频是由一帧一帧的图像连续组成的OpenCV在对图像处理时就是对每一帧的图像进行快速处理。cv2.waitkey()waitKey()方法本身表示等待键盘输入参数是1表示延时1ms切换到下一帧图像对于视频而言参数为0如cv2.waitKey(0)只显示当前帧图像相当于视频暂停,参数过大如cv2.waitKey(1000)会因为延时过久而卡顿感觉到卡顿。c得到的是键盘输入的ASCII码esc键对应的ASCII码是27即当按esc键是if条件句成立。release()调用release()释放摄像头调用destroyAllWindows()关闭所有图像窗口。现在我们首先进行代码实验之后会进行一些说明import numpy as npimport cv2 as cvcap cv.VideoCapture(0)if not cap.isOpened():print(Cannot open camera)exit()while True:# Capture frame-by-frameret, frame cap.read()# if frame is read correctly ret is Trueif not ret:print(Cant receive frame (stream end?). Exiting ...)break# Our operations on the frame come here# gray cv.cvtColor(frame, cv.COLOR_BGR2GRAY)# Display the resulting framecv.imshow(frame, gray)if cv.waitKey(1) ord(q):break# When everything done, release the capturecap.release()cv.destroyAllWindows()isOpened可以确定摄像头是否被打开如果打开则继续如果未成功打开则自动退出。前面的时候我们已经讲过frame所指代的就是摄像头视频的每一帧图像所以在显示时我们也是显示每一帧。如果对每一帧图像都进行灰度化处理那么所显示的视频就是灰度化视频当然关于灰度化现在还没有讲到但是可以先做个小实验我们来看代码import numpy as npimport cv2 as cvcap cv.VideoCapture(0)if not cap.isOpened():print(Cannot open camera)exit()while True:# Capture frame-by-frameret, frame cap.read()# if frame is read correctly ret is Trueif not ret:print(Cant receive frame (stream end?). Exiting ...)break# Our operations on the frame come heregray cv.cvtColor(frame, cv.COLOR_BGR2GRAY)# Display the resulting framecv.imshow(frame, gray)if cv.waitKey(1) ord(q):break# When everything done, release the capturecap.release()cv.destroyAllWindows()大家自己实验体验一下效果。或许有的人已经发现了我们的视频跟实际中好像是相反的属于镜像效果我们可以取消这种效果在这里需要介绍一个函数后面在图像增强部分也会介绍到cv2.flip ()函数原型flip(src, flipCode[, dst])src代表输入的图像我么你来看一下flipCode的参数表现在我们加入这行代码import numpy as npimport cv2 as cvcap cv.VideoCapture(0)if not cap.isOpened():print(Cannot open camera)exit()while True:# Capture frame-by-frameret, frame cap.read()frame cv.flip(frame, 1)# if frame is read correctly ret is Trueif not ret:print(Cant receive frame (stream end?). Exiting ...)break# Our operations on the frame come heregray cv.cvtColor(frame, cv.COLOR_BGR2GRAY)# Display the resulting framecv.imshow(frame, gray)if cv.waitKey(1) ord(q):break# When everything done, release the capturecap.release()cv.destroyAllWindows()再实验会发现图像已经没有那种镜像效果了。从文件播放视频从文件播放视频与从摄像机捕获视频相同只是将摄像机索引更改为视频文件名。另外在显示框架时请使用适当的时间cv.waitKey()。如果太少则视频将非常快而如果太高则视频将变得很慢(嗯这就是显示慢动作的方式)。正常情况下25毫秒就可以了。给出实例代码import cv2 as cvcap cv.VideoCapture(test.avi)while cap.isOpened():ret, frame cap.read()# if frame is read correctly ret is Trueif not ret:print(Cant receive frame (stream end?). Exiting ...)breakcv.imshow(frame, frame)if cv.waitKey(25) ord(q):breakcap.release()cv.destroyAllWindows()保存视频当我们想要保存图像的时候这非常简单只需使用cv2.imwrite()。而当我们想要保存视频的时候需要做更多的工作。这次我们创建一个VideoWriter对象。我们应该指定输出文件名(例如output.avi)。然后我们应指定FourCC代码(下一段中的详细信息)。然后应传递每秒的帧数(fps)和帧大小。最后一个是isColor标志。如果为True则编码器需要彩色框否则将与灰度框一起使用。FourCC是一个4字节的代码用于指定视频编码器以及****。可用代码列表可在fourcc.org中找到它取决于平台。在Fedora中DIVXXVIDMJPGX264WMV1WMV2。(最好使用XVID。MJPG可以生成大尺寸的视频。X264提供非常小的尺寸的视频)在Windows中DIVX(尚待测试和添加)在OSX中MJPG(.mp4)DIVX(.avi)X264(.mkv)。FourCC代码作为MJPG的cv.VideoWriter_fourcc(MJPG)or cv.VideoWriter_fourcc(*MJPG)传递。以下代码从摄像机捕获在垂直方向上翻转每一帧然后保存视频import numpy as npimport cv2 as cvcap cv.VideoCapture(0)# Define the codec and create VideoWriter objectfourcc cv.VideoWriter_fourcc(*XVID)out cv.VideoWriter(output.avi, fourcc, 20.0, (640, 480))while cap.isOpened():ret, frame cap.read()if not ret:print(Cant receive frame (stream end?). Exiting ...)breakframe cv.flip(frame, 1)# write the flipped frameout.write(frame)cv.imshow(frame, frame)if cv.waitKey(1) ord(q):break# Release everything if job is finishedcap.release()out.release()cv.destroyAllWindows()大家可以自己尝试演示效果。视频处理的部分基本上就结束了以上介绍到的将是以后学习中非常重要的基础。而事实上OpenCV中对于视频的处理也有更多的操作现在介绍最后一个函数VideoCapture.get()由于前面我们已经指定cap cv.VideoCapture(0)所以调用此函数只需用cap.get()get中将传入参数给出参数表共有18个参数而至于相关的代码请大家自己实验可以使用print函数输出视频的详细信息。