admin管理员组

文章数量:1569960

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();
        }
}

本文标签: 摄像头方法网络QT