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

相关推荐
千天夜5 分钟前
使用UDP协议传输视频流!(分片、缓存)
python·网络协议·udp·视频流
测试界的酸菜鱼8 分钟前
Python 大数据展示屏实例
大数据·开发语言·python
我是谁??9 分钟前
C/C++使用AddressSanitizer检测内存错误
c语言·c++
羊小猪~~12 分钟前
神经网络基础--什么是正向传播??什么是方向传播??
人工智能·pytorch·python·深度学习·神经网络·算法·机器学习
放飞自我的Coder42 分钟前
【python ROUGE BLEU jiaba.cut NLP常用的指标计算】
python·自然语言处理·bleu·rouge·jieba分词
发霉的闲鱼42 分钟前
MFC 重写了listControl类(类名为A),并把双击事件的处理函数定义在A中,主窗口如何接收表格是否被双击
c++·mfc
小c君tt1 小时前
MFC中Excel的导入以及使用步骤
c++·excel·mfc
xiaoxiao涛1 小时前
协程6 --- HOOK
c++·协程
正义的彬彬侠1 小时前
【scikit-learn 1.2版本后】sklearn.datasets中load_boston报错 使用 fetch_openml 函数来加载波士顿房价
python·机器学习·sklearn
张小生1801 小时前
PyCharm中 argparse 库 的使用方法
python·pycharm