当前位置: 首页 > news >正文

C++PythonC# 三语言OpenCV从零开发(4):视频流读取

文章目录

  • 相关链接
  • 视频流读取
    • 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简化的比较多,大致上也是调用算子。

http://www.lryc.cn/news/286827.html

相关文章:

  • vue element MessageBox.prompt this.$prompt组件禁止显示右上角关闭按钮,取消按钮,及点击遮罩层关闭
  • Oracle 日常健康脚本
  • leetcode670最大交换
  • XML 注入漏洞原理以及修复方法
  • x-cmd pkg | dasel - JSON、YAML、TOML、XML、CSV 数据的查询和修改工具
  • Oracle 19c RAC集群管理 ---------关键参数以及常用命令
  • 时限挑战——深度解析Pytest插件 pytest-timeout
  • Java入门篇:打造你的Java开发环境——从零开始配置IDEA与Eclipse
  • 文本批量处理大师:简化文本处理,释放无限生产力!
  • Go 方法
  • 深度学习与大数据在自然语言处理中的应用与进展
  • GPT4+Python近红外光谱数据分析及机器学习与深度学习建模
  • Java项目:12 Springboot的垃圾回收管理系统
  • HarmonyOS自定义弹出对话框CustomDialog并传递变量
  • React16源码: React中的renderRoot的错误处理的源码实现
  • 强化学习:MuJoCo机器人强化学习仿真入门(1)
  • 8.Gateway服务网关
  • JVM篇----第四篇
  • WPF引用halcon的HSmartWindowControlWPF控件一加上Name属性就,无缘无故运行后报错
  • Vue3组件库开发 之Button(2) 未完待续
  • k8s节点RouteCreated为false
  • Kafka(二)原理详解
  • Flutter 屏幕适配之相对尺寸适配
  • 在线预约小程序源码系统:适合任何行业的在线预约,快捷方便,省时省心 带完整的搭建教程
  • AI部署开发指南:用vs2019编译OnnxRuntime-v1.16.2
  • 【强化学习】QAC、A2C、A3C学习笔记
  • android usb2.0 协议基础(2)
  • C语言快速排序(非递归)图文详解
  • Java面试题136-150
  • 使用trace工具分析Mysql如何选择索引