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

文章目录

相关链接

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基础教程------视频的读取与写入(超详细+附代码)

c 复制代码
#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

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我们改改代码,试着输出一下灰度视频流

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简化的比较多,大致上也是调用算子。

相关推荐
汉克老师14 分钟前
GESP7级C++考试语法知识(二、指数函数(3、综合练习)
c++·算法·数学建模·指数函数·gesp7级·复利
伊布拉西莫15 分钟前
LangChain LCEL源码深度剖析
python·langchain
用心_承载未来16 分钟前
从“复制链接→打开APP“到“一键解析“:我做了个短视频去水印工具
python·去水印·短视频去水印
TYUT_xiaoming19 分钟前
yolo模型训练
人工智能·python·yolo
C++ 老炮儿的技术栈21 分钟前
Ubuntu root账号自动登陆
linux·运维·服务器·c语言·c++·ubuntu·visual studio
Irissgwe1 小时前
map/set/multimap/multiset 的底层逻辑与实现
数据结构·c++·算法·二叉树·stl·c·红黑树
MageGojo1 小时前
百度热搜API接入实战:数据结构解析与工程化调用指南
python·数据抓取·api集成·热点数据·接口调试
TechWayfarer1 小时前
查IP归属地接入实战:保险理赔如何做动态风险监控与预警
网络·python·tcp/ip·安全·flask
凡人叶枫1 小时前
Effective C++ 条款39:明智而审慎地使用 private 继承
java·数据库·c++·嵌入式开发
speop1 小时前
AMD | task02
python