版权声明:学无止境,好好学习 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;
}