#include <QCoreApplication>
#include <opencv2\opencv.hpp>
#include <iostream>
#include <QDebug>
using namespace std;
using namespace cv;
#define qdebug qDebug()<<"["<<__FILE__<<":"<<__LINE__<<"]"<<":"
int main(int argc, char *argv[])
{
//QCoreApplication a(argc, argv);
Mat img;
VideoCapture video("rtmp://172.18.25.222:1935/shaobing/livestream2"); //使用某个摄像头
//读取视频
//VideoCapture video;
//video.open("cup.mp4");
if (!video.isOpened()) // 判断是否调用成功
{
qdebug << "打开摄像头失败,请确实摄像头是否安装成功";
return -1;
}
video >> img; //获取图像
//检测是否成功获取图像
if (img.empty()) //判断有没有读取图像成功
{
qdebug << "没有获取到图像";
return -1;
}
bool isColor = (img.type() == CV_8UC3); //判断相机(视频)类型是否为彩色
VideoWriter writer;
int codec = VideoWriter::fourcc('M', 'J', 'P', 'G'); // 选择编码格式
//OpenCV 4.0版本设置编码格式
//int codec = CV_FOURCC('M', 'J', 'P', 'G');
double fps = 25.0; //设置视频帧率
string filename = "live.avi"; //保存的视频文件名称
writer.open(filename, codec, fps, img.size(), isColor); //创建保存视频文件的视频流
if (!writer.isOpened()) //判断视频流是否创建成功
{
qdebug << "打开视频文件失败,请确实是否为合法输入";
return -1;
}
while (1)
{
//检测是否执行完毕
if (!video.read(img)) //判断能都继续从摄像头或者视频文件中读出一帧图像
{
qdebug << "摄像头断开连接或者视频读取完成" ;
break;
}
writer.write(img); //把图像写入视频流
//writer << img;
imshow("Live", img); //显示图像
char c = waitKey(50);
if (c == 27) //按ESC案件退出视频保存
{
break;
}
}
// 退出程序时刻自动关闭视频流
video.release();
writer.release();
// system("color F0"); //更改输出界面颜色
// VideoCapture video(0);
// if (video.isOpened())
// {
// qdebug << "视频中图像的宽度=" << video.get(CAP_PROP_FRAME_WIDTH) << endl;
// qdebug << "视频中图像的高度=" << video.get(CAP_PROP_FRAME_HEIGHT) << endl;
// qdebug << "视频帧率=" << video.get(CAP_PROP_FPS) << endl;
// qdebug << "视频的总帧数=" << video.get(CAP_PROP_FRAME_COUNT);
// }
// else
// {
// qdebug << "请确认视频文件名称是否正确" << endl;
// return -1;
// }
// while (1)
// {
// Mat frame;
// video >> frame;
// if (frame.empty())
// {
// break;
// }
// imshow("video", frame);
// waitKey(1000 / video.get(CAP_PROP_FPS));
// }
return 0;
//return a.exec();
}
OpenCV拉流显示和保存
最新推荐文章于 2023-06-26 11:43:15 发布