文章目录
- 相关链接
- 视频流读取
-
- C++
- CSharp
- Python
- 总结
相关链接
C++&Python&Csharp in OpenCV 专栏
【2022B站最好的OpenCV课程推荐】OpenCV从入门到实战 全套课程(附带课程课件资料+课件笔记)
OpenCV 教程中文文档|OpenCV中文
OpenCV教程中文文档|W3Cschool
OpenCV基础教程——视频的读取与写入(超详细+附代码)
视频流读取
我之前写过一篇基于Python的,我现在重新写一次
Python+OpenCV 零基础学习笔记(4-5):计算机图形基础+Python相对文件路径+OpenCV图像+OpenCV视频
如果你想要一个简单的B站视频流下载器,这里推荐一个
哔哩下载姬downkyi_v1.6.1 下载
如果想获取视频流,B站上面随便搜一下就可以
卓特视觉视频素材 B站账号
于我何方 B站账号
比如我这里下载一个视频素材
【4K】群山无版权视频素材-6
C++
OpenCV基础教程——视频的读取与写入(超详细+附代码)
#include <opencv2/opencv.hpp> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc.hpp> #include<iostream> using namespace std; using namespace cv; int main() { VideoCapture video("D:/workSpace/OpenCV/HellOpenCV/Resources/video/test.mp4"); //video.open(""); auto isOpen = false; Mat frame; if (video.isOpened()) { //读取第一帧视频 isOpen = video.read(frame); } else { cout<< "不存在此视频" << endl; } while (isOpen) { //不断的判断下一帧是否为空 isOpen = video.read(frame); //如果为空则跳出循环 if(frame.empty()){ break; } imshow("C++", frame); int keyValue = waitKey(10); //27是ESC的ASCLL码,按下ESC退出 if (keyValue == 27) { break; } } cout << "播放结束" << endl; //释放视频流 video.release(); //关闭所有窗口 destroyAllWindows(); return 0; }
CSharp
internal class Program { static void Main(string[] args) { VideoCapture video = new("D:/workSpace/OpenCV/HellOpenCV/Resources/video/test.mp4"); //video.open(""); var isOpen = false; Mat frame = new Mat(); if (video.IsOpened()) { //读取第一帧视频 isOpen = video.Read(frame); } else { Console.WriteLine("不存在此视频"); } while (isOpen) { //不断的判断下一帧是否为空 isOpen = video.Read(frame); //如果为空则跳出循环 if (frame.Empty()) { break; } Cv2.ImShow("CSharp", frame); int keyValue =Cv2.WaitKey(10); //27是ESC的ASCLL码,按下ESC退出 if (keyValue == 27) { break; } } Console.WriteLine("播放结束"); //释放视频流 video.Release(); //关闭所有窗口 Cv2.DestroyAllWindows(); } }
Python
Python我们改改代码,试着输出一下灰度视频流
# %% # 导入包 import cv2 import matplotlib.pyplot as plt import numpy as np # 导入视频 input_video = {} # 下载好的视频文件 input_video['vc'] = cv2.VideoCapture('D:/workSpace/OpenCV/HellOpenCV/Resources/video/test.mp4') # 判断是否读取成功 if input_video['vc'].isOpened(): # Python语法,元组读取 input_video['open'] = input_video['vc'].read() else: input_video['open'] = False # 循环帧读取,两个退出条件:视频播放完/输入'ESC'退出 while input_video['open']: open,frame = input_video['vc'].read() if frame is None: break; if open: # 我们先播放灰度图像 gray = cv2.cvtColor(frame) # 打开一个名为result的窗口,播放帧 cv2.imshow('result',gray) # 这个是特殊组合,waiteKey指每帧的时间,输入'esc'退出视频播放 if cv2.waitKey(10) & 0xff == 27: break; # 释放视频输入流 input_video['vc'].release(); # 关闭所有窗口 cv2.destroyAllWindows();
这里图像显示有点问题,分辨率不对。我后面有空去网上找找解决方案
总结
详细的可以看这个博客,介绍的比较全面
OpenCV基础教程——视频的读取与写入(超详细+附代码)
经过这次代码书写,我发现确实,算子基本差不多,尤其是C++和Csharp,跑通了C++,Csharp也差不多就通了。Python简化的比较多,大致上也是调用算子。