Qt中设置、打开、捕获、显示网络及本地摄像头的方法

Qt中设置、打开、捕获、显示网络摄像头的方法:
一、打开网络摄像头并使用

void MainWindow::on_pushButton_clicked()
{
    Mat img;
    Mat img_2;
    cv::VideoCapture vcap;
    cv::Mat image;
    const std::string videoStreamAddress = getCamUrl().toStdString();
    std::cout << "Address:" <<videoStreamAddress<< std::endl;
  
    if(!vcap.open(videoStreamAddress)) {
        std::cout << "Error opening video stream or file" << std::endl;
    }
    cv::namedWindow("Output Window");
    for(;;) {
       if(!vcap.read(image)) {
            std::cout << "No frame" << std::endl;
            cv::waitKey();
        }
        if(!vcap.read(img)){
            cout<<"vedio read end!"<<endl;
            break;
        }
        if(!vcap.read(img_2)){
            cout<<"vedio read end!"<<endl;
            break;
        }
        cv::imshow("Output Window", image);
        if(cv::waitKey(1) >= 0) break;
        checkImage(img,img_2);
        qApp->processEvents();
    }
}
//获取摄像头url
QString MainWindow::getCamUrl(){
    QString ret="";
    switch (type) {
    case CAM_HK:
        ret=mkUrlHK();
        break;
    case CAM_DH:
        ret=mkUrlDH();
        break;
    case CAM_UV:
        ret=mkUrlUV();
        break;
    case CAM_WA:
        ret=mkUrlWA();
        break;
    case CAM_XLW:
        mkUrlXLW();
        break;
    default:
        break;
    }
    return ret;
}
QString MainWindow::mkUrlHK(){
    QString ret="";
    //boost::format fmt("rtsp://%1%:%2%@%3:%4/h264/ch1/%5%/av_stream");
    if(codec==CODEC_MAIN){
        ret=QString::asprintf("rtsp://%s:%s@%s:%s/h264/ch1/%s/av_stream", username.toLatin1().data(), password.toLatin1().data(), ip.toLatin1().data(), port.toLatin1().data(), "main");
        //fmt %username.toStdString() %password.toStdString() %ip.toStdString() %port.toStdString() %"main";

    } else {
        ret=QString::asprintf("rtsp://%s:%s@%s:%s/h264/ch1/%s/av_stream", username.toLatin1().data(), password.toLatin1().data(), ip.toLatin1().data(), port.toLatin1().data(), "sub");
        //fmt %username.toStdString() %password.toStdString() %ip.toStdString() %port.toStdString() %"sub";
    }
    //ret=QString::fromStdString(fmt.str());
    return ret;
}
QString MainWindow::mkUrlDH(){
    QString ret="";
    //boost::format fmt("rtsp://%1%:%2%@%3:%4/cam/realmonitor?channel=1&subtype=%5%");
    if(codec==CODEC_MAIN){
        ret=QString::asprintf("rtsp://%s:%s@%s:%s/cam/realmonitor?channel=1&subtype=%s", username.toLatin1().data(), password.toLatin1().data(), ip.toLatin1().data(), port.toLatin1().data(), "0");
        //fmt %username.toStdString() %password.toStdString() %ip.toStdString() %port.toStdString() %"0";
    } else {
        ret=QString::asprintf("rtsp://%s:%s@%s:%s/cam/realmonitor?channel=1&subtype=%s", username.toLatin1().data(), password.toLatin1().data(), ip.toLatin1().data(), port.toLatin1().data(), "1");
        //fmt %username.toStdString() %password.toStdString() %ip.toStdString() %port.toStdString() %"1";
    }
    //ret=QString::fromStdString(fmt.str());
    return ret;
}
QString MainWindow::mkUrlUV(){
    QString ret="";
    //boost::format fmt("rtsp://%1%:%2%@%3:%4/%5%");
    if(codec==CODEC_MAIN){
        //fmt %username.toStdString() %password.toStdString() %ip.toStdString() %port.toStdString() %"video1";
        ret=QString::asprintf("rtsp://%s:%s@%s:%s/%s", username.toLatin1().data(), password.toLatin1().data(), ip.toLatin1().data(), port.toLatin1().data(), "video1");
    } else {
        //fmt %username.toStdString() %password.toStdString() %ip.toStdString() %port.toStdString() %"video2";
        ret=QString::asprintf("rtsp://%s:%s@%s:%s/%s", username.toLatin1().data(), password.toLatin1().data(), ip.toLatin1().data(), port.toLatin1().data(), "video2");
    }
    //ret=QString::fromStdString(fmt.str());
    return ret;
}
QString MainWindow::mkUrlWA(){
    QString ret="";
    //boost::format fmt("rtsp://%1%:%2%@%3:%4/h264");
    //fmt %username.toStdString() %password.toStdString() %ip.toStdString() %port.toStdString();
    //ret=QString::asprintf("rtsp://%s:%s@%s:%s/h264", username.toLatin1().data(), password.toLatin1().data(), ip.toLatin1().data(), port.toLatin1().data());
    //ret=QString::fromStdString(fmt.str());
    if(codec==CODEC_MAIN){
        //fmt %username.toStdString() %password.toStdString() %ip.toStdString() %port.toStdString() %"video1";
        ret=QString::asprintf("rtsp://%s:%s@%s:%s/h264", username.toLatin1().data(), password.toLatin1().data(), ip.toLatin1().data(), "8557");//port.toLatin1().data()
    } else {
        //fmt %username.toStdString() %password.toStdString() %ip.toStdString() %port.toStdString() %"video2";
        ret=QString::asprintf("rtsp://%s:%s@%s:%s/h264", username.toLatin1().data(), password.toLatin1().data(), ip.toLatin1().data(), "8558");
    }

    return ret;
}
QString MainWindow::mkUrlXLW(){
    QString ret="";
    //boost::format fmt("rtsp://%1%:%2%@%3:%4/%5%");
    if(codec==CODEC_MAIN){
        //fmt %username.toStdString() %password.toStdString() %ip.toStdString() %port.toStdString() %"video1";
        ret=QString::asprintf("rtsp://%s:%s@%s:%s/%s", username.toLatin1().data(), password.toLatin1().data(), ip.toLatin1().data(), port.toLatin1().data(), "h264ESVideoTest");
    } else {
        //fmt %username.toStdString() %password.toStdString() %ip.toStdString() %port.toStdString() %"video2";
        ret=QString::asprintf("rtsp://%s:%s@%s:%s/%s", username.toLatin1().data(), password.toLatin1().data(), ip.toLatin1().data(), port.toLatin1().data(), "h264ESVideoTestSecond");
    }
    //ret=QString::fromStdString(fmt.str());
    return ret;
}

二、打开本地视频

void MainWindow::on_pushButton_clicked()
{
    Mat img;
    Mat img_2;
    VideoCapture cap("d://123.mp4");    //打开本地视频文件
    while(1){
           if(!cap.read(img)){
               cout<<"vedio read end!"<<endl;
                break;
            }
           if(!cap.read(img_2)){
               cout<<"vedio read end!"<<endl;
                break;
            }
            checkImage(img,img_2);
            qApp->processEvents();
        }
}
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Qt网络摄像头播放器是一种基于Qt开发工具的视频播放器,可以用于实时播放网络摄像头的视频流。常见的做法是将从网络摄像头拉流过来的视频流重新推送到流媒体服务器心,以实现对多个监控摄像头的统一管理和对外访问接口的提供。对于推流程序来说,不需要解码和重新编码,只需将裸流直接推送给流媒体服务器即可。由于不需要解码,所以CPU占用较低。在Qt开发工具的环境下,可以借助Qt的跨平台特性,将网络摄像头播放器移植到不同的操作系统,如Windows、Linux和Mac系统,以满足不同平台的需求。 同时,Qt还提供了与Bit7z库接口的编译功能,可以调用7z.dll、7-Zip.dll等库来实现压缩和解压缩功能。这意味着在Qt开发工具下,还可以开发具有压缩文件格式支持的功能性小程序,如预览常用的Zip、ISO9660、Wim、Esd、7z等压缩格式文件。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Qt/C++编写网络摄像头推流(4路1080P主码流只占用0.2%CPU/极低延时极速响应)](https://blog.csdn.net/feiyangqingyun/article/details/130300845)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Qt/C++编写linux上视频流播放器(支持海康大华宇视等各种网络摄像机)](https://blog.csdn.net/feiyangqingyun/article/details/127802309)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Qt调用Bit7z库接口调用7z.dll解压压缩常用Zip、ISO9660、Wim、7z等格式的可执行程序,非源码!Qt案例](https://download.csdn.net/download/qq_35554617/88232302)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值