opencv实现视频的读取操作

版权声明:学无止境,好好学习 https://blog.csdn.net/m0_38116269/article/details/88861401

1.自己安装了opencv4和opencv2版本。系统自带的是opencv3版本。目前遇到的问题是,在opencv4版本下面,运行demo是可以调用opencv4的,但是,一旦更换到自己的文件目录下面就不行了,现在准备解决这个问题。
先参考参考这个:https://blog.csdn.net/ye987/article/details/80135738
感觉主要还是自己的CMakeLists.txt写的有问题。
根据上面的博客解决了。根本不需要export。
2.自己编写读取视频的代码。
VidioCapture的用法可以参考samples/cpp/videocapture_basic.cpp这个cpp,待会再学习,先放着标记一下。
(C++) A basic sample on using the %VideoCapture interface can be found at
OPENCV_SOURCE_CODE/samples/cpp/videocapture_starter.cpp这里也有。
成功了!附上我的代码吧

/**note:能够实现读取视频并且显示
 * filename:readVideo.cpp
 * system: Ubuntu18.04 LTS
 * opencv version: 4.0.1
 * example: ./readVidio /home/your_video_path/vidio.avi
 * cmake
 * */
#include <opencv2/opencv.hpp> //将opencv库函数引用进去
#include <iostream>
//#include <sstream> //这个没用到
//#include <iomanip>

using namespace cv;
using namespace std;
static void help(){
    cout << "Please input: ./readVideio <your vidio path>" << endl; //教你如何输入
}

int main(int argc, char* argv[]){
    cout << "hello, let's begin!" << endl;
    if(argc != 2){
        cout << "wrong !" << endl; // 判断输入元素个数对不对
    }
    const string myVideio = argv[1]; //接收视频
    VideoCapture capVideo(myVideio); //捕捉
    if(!capVideo.isOpened()){//看看视频打开了没有
        cout << "No is Vidio or directory!" << myVideio << endl; 
        return -1;
    } 
    //读取视频的高度和宽度
    Size myVideoSize = Size((int)capVideo.get(CAP_PROP_FRAME_HEIGHT),
                            (int)capVideo.get(CAP_PROP_FRAME_WIDTH));
    cout << "the Vidio's height is:" << myVideoSize.height
         << ", width is:" << myVideoSize.width
         << ", totally frame number is:" << capVideo.get(CAP_PROP_FRAME_COUNT) << endl;
    const char* WIN_NAME = "My Video";
    //设置显示窗口的名字和大小
    namedWindow(WIN_NAME, WINDOW_AUTOSIZE);
    Mat myFrame;
    int frameNum = -1;
    while(1){
        capVideo >> myFrame; //单帧读取
        if(myFrame.empty()){ //这个读取完毕的判断条件,读完最后一帧就退出循环
            cout<<"Finished!"<<endl;
            break;
        }
        ++frameNum; //记录读到第几帧了
        if(frameNum % 10 == 0){ //每10帧打印在屏幕上
            cout << "Frame:" << frameNum << "#"<<endl;
        }
        imshow(WIN_NAME, myFrame); //显示图像
        waitKey(5); //每一帧等待5ms继续进行下一帧的操作,这个里面的数值越大,播放越慢

    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/m0_38116269/article/details/88861401