【欢迎关注编码小哥,学习更多实用的编程方法和技巧】
代码举例:
//opencv加载本地视频文件的2种方法
//方法一:
#if 0
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
//using namespace cv;
int main()
{
// 创建VideoCapture对象
cv::VideoCapture capture;
// 打开视频文件
capture.open("D:/opencv/videos/xxx.mp4");
// 检查视频是否成功打开
if (!capture.isOpened())
{
std::cout << "无法打开视频!" << std::endl;
return -1;
}
std::cout << "视频加载成功" << std::endl << std::endl;
// 获取视频信息 - 帧宽和帧高
double frameWidth = capture.get(cv::CAP_PROP_FRAME_WIDTH);
double frameHeight = capture.get(cv::CAP_PROP_FRAME_HEIGHT);
std::cout << "视频帧宽为: " << frameWidth << std::endl;
std::cout << "视频帧高为: " << frameHeight << std::endl;
// 获取视频信息 - 帧率
double frameRate = capture.get(cv::CAP_PROP_FPS);
std::cout << "视频帧率为: " << frameRate << std::endl;
// 获取视频信息 - 总帧数
double totalFrames = capture.get(cv::CAP_PROP_FRAME_COUNT);
std::cout << "视频总帧数为: " << totalFrames << std::endl;
// 循环读取视频帧
cv::Mat frameImg;
long nCount = 1;
while (true)
{
// 读取当前帧
capture >> frameImg;
// 显示当前帧
if (!frameImg.empty())
{
imshow("当前帧", frameImg);
if (char(cv::waitKey(int(1000 / frameRate))) == 'q') // 按'q'键退出
break;
}
else
{
break;
}
nCount++;
}
// 释放视频资源
capture.release();
cv::waitKey(1);
cv::destroyAllWindows();
return 0;
}
#endif
//方法二:
#if 0
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main()
{
// 创建VideoCapture对象
VideoCapture capture;
// 打开视频文件
capture.open("D:/opencv/videos/big_buck_bunny.mp4");
// 检查视频是否成功打开
if (!capture.isOpened())
{
std::cout << "无法打开视频!" << std::endl;
return -1;
}
std::cout << "视频加载成功" << std::endl << std::endl;
// 获取视频信息 - 帧宽和帧高
double frameWidth = capture.get(CAP_PROP_FRAME_WIDTH);
double frameHeight = capture.get(CAP_PROP_FRAME_HEIGHT);
std::cout << "视频帧宽为: " << frameWidth << std::endl;
std::cout << "视频帧高为: " << frameHeight << std::endl;
// 获取视频信息 - 帧率
double frameRate = capture.get(CAP_PROP_FPS);
std::cout << "视频帧率为: " << frameRate << std::endl;
// 获取视频信息 - 总帧数
double totalFrames = capture.get(CAP_PROP_FRAME_COUNT);
std::cout << "视频总帧数为: " << totalFrames << std::endl;
// 循环读取视频帧
Mat frameImg;
int nCount = 1;
while (true)
{
// 读取当前帧
capture >> frameImg;
// 显示当前帧
if (!frameImg.empty())
{
imshow("当前帧", frameImg);
if (char(waitKey(int(1000 / frameRate))) == 'q') // 按'q'键退出
break;
}
else
{
break;
}
nCount++;
}
// 释放视频资源
capture.release();
waitKey(1);
destroyAllWindows();
return 0;
}
#endif
//从摄像头读取视频流
#if 0
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main()
{
// 创建VideoCapture对象
VideoCapture capture;
// 打开摄像头
capture.open(0,CAP_DSHOW);
// 检查摄像头是否成功打开
if (!capture.isOpened())
{
std::cout << "无法打开摄像头!" << std::endl;
return -1;
}
std::cout << "摄像头加载成功" << std::endl << std::endl;
// 获取摄像头信息 - 帧宽和帧高
double frameWidth = capture.get(CAP_PROP_FRAME_WIDTH);
double frameHeight = capture.get(CAP_PROP_FRAME_HEIGHT);
std::cout << "摄像头帧宽为: " << frameWidth << std::