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

相关推荐
cherub.7 分钟前
深入解析信号量:定义与环形队列生产消费模型剖析
linux·c++
Suyuoa10 分钟前
附录2-pytorch yolov5目标检测
python·深度学习·yolo
暮色_年华21 分钟前
Modern Effective C++item 9:优先考虑别名声明而非typedef
c++
重生之我是数学王子29 分钟前
QT基础 编码问题 定时器 事件 绘图事件 keyPressEvent QT5.12.3环境 C++实现
开发语言·c++·qt
神仙别闹43 分钟前
基于C#和Sql Server 2008实现的(WinForm)订单生成系统
开发语言·c#
我们的五年1 小时前
【Linux课程学习】:进程程序替换,execl,execv,execlp,execvp,execve,execle,execvpe函数
linux·c++·学习
好看资源平台1 小时前
网络爬虫——综合实战项目:多平台房源信息采集与分析系统
爬虫·python
做人不要太理性1 小时前
【C++】深入哈希表核心:从改造到封装,解锁 unordered_set 与 unordered_map 的终极奥义!
c++·哈希算法·散列表·unordered_map·unordered_set
程序员-King.1 小时前
2、桥接模式
c++·桥接模式
chnming19872 小时前
STL关联式容器之map
开发语言·c++