基于OpenCV和C++的控制台播放视频

目录

一、 运行环境

VScode=1.74.3
OpenCV=4.5.2
MinGW=8.1.0
我是使用OpenCV配合vscode的C++的环境,用VS比较简单一点,不用编译OpenCV(我电脑内存不多,实在不想装VS)
为C++配置OpenCV参考教程
配置教程

二、 实现思路

思路

三、 实现代码

代码主要是跟着B站上面的一个视频写的,但是那个视频不是很全,全靠一点一点的暂停看

#include <opencv2/opencv.hpp>
#include <iostream>
#include<windows.h>

using namespace cv;
using namespace std;

int main()
{
    
    VideoCapture video;//打开视频文件
    bool ret =video.open("./firework.mp4");
    if (ret==false){
        cout<<"video open failed!";}
    else cout<<"video open successed!";
    // while(1){

    // }
    int framecount=video.get(CAP_PROP_FRAME_COUNT);//视频帧数
    int fps=video.get(CAP_PROP_FPS);
    int cols=video.get(CAP_PROP_FRAME_WIDTH);
    int rows=video.get(CAP_PROP_FRAME_HEIGHT);
    char charImgs[]=" .,-^:;+*=#%@";//字符元素表


    int hSize=20;
    int wSize=11;

    int width=cols/wSize;
    int height=rows/hSize;
  

    char cmd[512];
    sprintf_s(cmd,sizeof(cmd),"mode con cols=%d lines=%d",width,height);
    system(cmd);

    //申请内存
    int frameSize=height*(width+1)+1;
    char * data=(char *)malloc(frameSize * framecount);
    if(data==NULL){
        cout<<"memerory not enough!";
    }

    Mat frameImg;
    Mat grayImg;
    for(int n=0;n<framecount;n++){
        char* p=data+n*frameSize;
        int k=0;
        video.read(frameImg);
        cvtColor(frameImg,grayImg,COLOR_BGR2GRAY);
    for(int row=0;row<rows-hSize;row+=hSize){
        for(int col=0;col<cols-wSize;col+=wSize){
            int value=grayImg.at<uchar>(row,col);
            p[k++]=charImgs[value/20];

        }
        p[k++]='\n';
    }
    p[k++]=0;
    system("cls");
    cout<<"reading: "<<n+1<<"/"<<framecount<<endl;
    }
    //播放
    HANDLE h=GetStdHandle(STD_OUTPUT_HANDLE);
    COORD pos={0,0};
   
    while(1){
        for (int  i = 0; i < framecount; i++)
        {
            /* code */
            char * p=data+i*frameSize;
            SetConsoleCursorPosition(h,pos);
            cout<<p;
            Sleep(1500/fps);
        }      
    }

    return 0;
}

四、 执行结果

将视频素材firework.mp4与.exe文件放在同一目录下,运行.exe文件
在这里插入图片描述
在这里插入图片描述

五、源码及附件

链接:https://pan.baidu.com/s/1WQEUSU_EtBxwt-6kyfujhg
提取码:N12K

六、总结

综上,写这个最难的不是代码,而是环境的配置,断断续续的找教程,试了四个,最主要的还是要学会看日志文件,先前没有这种思想,后面静下心来加上翻译,发现日志文件也不是很难懂,后面慢慢的根据日志上面出现的问题一条一条解决。其实中途想过放弃,用python写,导入opencv包一句命令的事,后来想想年轻多折腾折腾不是坏事。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

A Tiger

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值