1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Qt获取大华摄像头监控画面(RTSP流方式)

Qt获取大华摄像头监控画面(RTSP流方式)

时间:2019-08-10 16:11:33

相关推荐

Qt获取大华摄像头监控画面(RTSP流方式)

一、与摄像头建立连接

1.RTSP格式

//格式rtsp://username:password@<address>:<port>/Streaming/Channels<id>?channel=1&subtype=0//举例rtsp://admin:admin123456@10.0.10.21:554/cam/realmonitor?channel=1&subtype=0

2.测试连接可行性(使用VLC media player)

1.打开VLC

2.打开网络串流(Ctrl + N)

3.输入rtsp://admin:admin123456@10.0.10.21:554/cam/realmonitor?channel=1&subtype=0,点击播放

4.观察是否有监控画面显示。如果没有,检查大华摄像头是否正常启动;如果有监控画面,说明连接可正常建立,获取大华监控画面具有可行性。

二、连接、接收视频帧

1.rtsp地址

std::string url = "rtsp://admin:admin123456@10.0.10.21:554/cam/realmonitor?channel=1&subtype=0";

2.声明

cv::VideoCapture m_capture; //!< 用于帧捕获的对象cv::Mat m_frame; //!< 捕获到的帧cv::Mat m_buffFrame; //!< 缓存的非空白帧

3.建立连接

void DefaultCamera::init(){try{m_capture.open(url);}catch (const std::exception &e){std::cerr << e.what() << std::endl;}if (m_capture.isOpened()){std::cout << "[DefaultCamera] is opened" << std::endl;m_run = true;// 捕获成功, 于是开始实时读取帧数据std::thread _t(&DefaultCamera::readFrame, this);_t.detach();}else{std::cout << "[DefaultCamera] is not opened" << std::endl;}}

4.接收帧

void DefaultCamera::readFrame(){bool _error = m_capture.read(m_frame);if (m_frame.empty())m_frame = m_buffFrame;elsem_buffFrame = m_frame;}

5.提供接口

cv::Mat DefaultCamera::getCurrentFrame(){return m_frame.clone();}

三、将视频帧转成图片

1.调用接口获取最新帧

QImage exit_image = cameraToImage(exitCamera->getCurrentFrame());

2.帧转成图片

QImage EntranceExitCamera::cameraToImage(const cv::Mat& cvImg){QImage qImg;int _type = cvImg.type();//int channels = cvImg.channels();if (_type == CV_8UC3) //三通道彩色图像{cv::cvtColor(cvImg, cvImg, CV_BGR2RGB);qImg = QImage((const unsigned char*)(cvImg.data), cvImg.cols, cvImg.rows, static_cast<int>(cvImg.step), QImage::Format_RGB888).copy();}else if (_type == CV_8UC1) //单通道灰度图{qImg = QImage((const unsigned char*)(cvImg.data), cvImg.cols, cvImg.rows, static_cast<int>(cvImg.step), QImage::Format_Grayscale8).copy();}else //默认按照四通道RGBA处理{cv::cvtColor(cvImg, cvImg, CV_BGRA2RGBA);qImg = QImage((const unsigned char*)(cvImg.data), cvImg.cols, cvImg.rows, static_cast<int>(cvImg.step), QImage::Format_RGBA8888).copy();}return qImg;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。