首页 > 其他分享 >QT 获取视频帧Opencv获取清晰度

QT 获取视频帧Opencv获取清晰度

时间:2024-09-27 18:47:55浏览次数:9  
标签:graysca QT img Opencv image MainWindow 获取 qDebug cv

先展示结果:

1.获取摄像头的分辨率

    mResSize.clear();
    mResSize = camera_->supportedViewfinderResolutions();
    ui->comboBox_resulation->clear();
    int i=0;
    foreach (QSize msize, mResSize) {
        qDebug()<<msize;
        ui->comboBox_resulation->addItem(QString::number(msize.width(),10)+"*"+QString::number(msize.height(),10), i++);
    }  //摄像头支持分辨率打印

2. 拍照 

2.1 保存图片

void MainWindow::processCapturedImage(int request_id, const QImage &img)
{
    i++;
    isDirExist("D://capture");
    img_name = "D://capture//" +QString::number(i) +".png";
    //qDebug() << "img_name :" << QString::fromStdString(img_name);
    qDebug() << "img_name :" << img_name;

    img.save(img_name);
}

2.2 判断目录是否存在

bool MainWindow::isDirExist(QString fullPath)
{
    QDir dir(fullPath);
    if(dir.exists())
    {
      return true;
    }
    else
    {
       bool ok = dir.mkpath(fullPath);//创建多级目录
       qDebug() << "success create";
       return ok;
    }
}

 3.获取4个角上的亮度与中间亮度

    cv ::Mat image= surface_->matimage();  //从视频帧获取每一帧图片
    cvtColor(image, image, CV_RGBA2GRAY);
    cv::Mat img_1,img_2,img_3,img_4,img_center;
    //cout << " image ::" << image.size() << endl;
    int widgh = image.cols;
    int height = image.rows;
    qDebug() << "weight = " << widgh << " height = "<< height;

    cv::Rect rec_1(0,0,100,100);
    cv::Rect rec_2(0,height-100,100,100);
    cv::Rect rec_3(widgh-100,0,100,100);
    cv::Rect rec_4(height-100,height-100,100,100);
    cv::Rect rec_center(height/2-50,widgh/2-50,100,100);

    img_1 = image(rec_1);
    cv::Scalar graysca_1 = mean(img_1);
    float graylight_1 = graysca_1.val[0];
    qDebug() << "左上 == " << graylight_1 << endl;

    QString str_1 = QString::number(graylight_1,'f',2);
    str_1 = tr("%1").arg(str_1);
    //qDebug() << "str_1 == " << QString::fromStdWString(str_1) ;
    //ui->label_leftup->setText(str_1);


    img_2 = image(rec_2);
    cv::Scalar graysca_2 = mean(img_2);
    float graylight_2 = graysca_2.val[0];
    qDebug() << "左下 == " << graylight_2 << endl;

    QString str_2 = QString::number(graylight_2,'f',2);
    str_2 = tr("%1").arg(str_2);
   // qDebug() << "str_2 == " << QString::fromStdWString(str_2) ;
   // ui->label_leftdown->setText(str_2);

    img_3 = image(rec_3);
    cv::Scalar graysca_3 = mean(img_3);
    float graylight_3 = graysca_3.val[0];
    qDebug() << "右上 == " << graylight_3 << endl;

    QString str_3 = QString::number(graylight_3,'f',2);
    str_3 = tr("%1").arg(str_3);
    //qDebug() << "str_3 == " << QString::fromStdWString(str_3) ;
    //ui->label_rightup->setText(str_3);

    img_4 = image(rec_4);
    cv::Scalar graysca_4 = mean(img_4);
    float graylight_4 = graysca_4.val[0];
    qDebug() << "右下 == " << graylight_4 << endl;

    QString str_4 = QString::number(graylight_4,'f',2);
    str_4 = tr("%1").arg(str_4);
    //qDebug() << "str_4 == " << QString::fromStdWString(str_4) ;
    //ui->label_rightdown->setText(str_4);

    img_center = image(rec_center);
    cv::Scalar graysca_center = mean(img_center);
    float graylight_center = graysca_center.val[0];
    qDebug() << "中间 == " << graylight_center << endl;

    QString str_center = QString::number(graylight_center,'f',2);
    str_center = tr("%1").arg(str_center);

4. 清晰度 

        image = QImage2cvMat(img); //Qimage 转换成cv::Mat

        cvtColor(image, image, CV_BGR2RGB);
        Laplacian(image, imageSobel, CV_16U);
        //Sobel(image, imageSobel, CV_16U, 1, 1);

        //图像的平均灰度
        meanValue = cv::mean(imageSobel)[0];
        meanValue = QString::number(meanValue,'f',1).toDouble();

        //qDebug()<<"meanValue == " << meanValue ;

5. 重新开启摄像头

void MainWindow::on_pushButton_open_clicked()
{
    camera_ = new QCamera;
    surface_ = new MyVideoSurface(this);
    camera_->setViewfinder(surface_);

    image_capture = new QCameraImageCapture(camera_);
    connect(image_capture, SIGNAL(imageCaptured(int, QImage)), this, SLOT(processCapturedImage(int, QImage)));

    connect(surface_,&MyVideoSurface::sendsharpness,this,&MainWindow::updatesharpness);

    connect(ui->pushButton_pic,&QPushButton::clicked,this,&MainWindow::pushButton_pic_click);

    //connect(ui->pushButton_getlight,&QPushButton::clicked,this,&MainWindow::pushButton_pic_click);
    connect(ui->pushButton_getlight,&QPushButton::clicked,this,&MainWindow::pushButton_getlight_clicked);
    camera_->start();
    SetFrameResolution();
}

6. 获取某一点的RGB值 

        QColor clrCurrent( img.pixelColor( 50, 175 ) );

        qDebug()  << "00 red == " << clrCurrent.red() << "green == "
        << clrCurrent.green() << " blue  == " << clrCurrent.blue();

 7. 每一帧的摄像头数据

bool MyVideoSurface::present(const QVideoFrame &frame) //每一帧摄像头的数据,都会经过这里
{
    if (surfaceFormat().pixelFormat() != frame.pixelFormat() || surfaceFormat().frameSize() != frame.size()) {
        setError(IncorrectFormatError);
        stop();
        return false;
    }
    currentFrame_ = frame;  //获取每一帧数据
    widget_->repaint(targetRect_);
    return true;
}

源码:QT摄像头获取每一帧图像数据以及opencv获取清晰度资源-CSDN文库

标签:graysca,QT,img,Opencv,image,MainWindow,获取,qDebug,cv
From: https://blog.csdn.net/m0_63893772/article/details/142600056

相关文章

  • QQ空间协议重要参数获取login_sig、ptqrtoken、g_tk、p等
    QQ空间协议login_sig、ptqrtoken、p、g_tk、E.salt参数逆向获取QQ空间协议所有需要加密算法的重要参数汇总除了这些参数,其他所有参数都可在相关请求包的响应中找到,只要有这几个参数便可以玩转QQ空间协议本专栏包含QQ空间协议登录、点赞、发|删说说、留言等login_sig、ptqr......
  • QT读写配置ini文件
    一、概述Qt中常见的配置文件为(.ini)文件,其中ini是InitializationFile的缩写,即初始化文件。配置文件的格式如下所示:模板:点击查看代码[节名]key1=value1key2=value2示例:[SysParam]hostIP=192.168.1.100hostPort=5200Qt中使用QSettings类来完成读写ini文件的操作。......
  • HarmonyOS NEXT-CoreVision Kit-FaceDetector-实现人脸识别,获取人脸数据
    效果演示图,右边的是人脸数据,可用来比对人脸注意这里只有真机才能测试是否成功,测试机型pce-w30实现这个效果很简洁:打开相册、选取图片、打开文件、创建imageSource、创建PixelMap、喂给faceDetector拿到结果在这里我简单封装了两个工具类方便后续使用,分别是:照片选择类、......
  • 前端必知必会-jQuery - 获取和设置 CSS 类
    文章目录jQuery-获取和设置CSS类jQueryaddClass()方法jQueryremoveClass()方法jQuerytoggleClass()方法jQuery-css()方法返回CSS属性设置CSS属性设置多个CSS属性总结jQuery-获取和设置CSS类使用jQuery,可以轻松操作元素的样式。jQuery操......
  • 使用VSCode进行Qt开发插件QtSupport
    使用VSCode进行Qt开发插件QtSupport使用VSCode进行Qt开发一般都是使用的官方插件Qttools,使用起来并不是太方便,所以我选择QtSupport插件。一、QtSupport功能可以创建项目导入基于CMake的qt项目可以添加Qt项目文件DesignerFormClassDesignerFormC++classTransla......
  • 亚马逊商品API功能指南:从详情获取到价格修改
    一、接口概述亚马逊商品详情API接口是亚马逊官方提供的一种服务,允许开发者通过程序调用API来获取亚马逊平台上的商品详细信息。这些信息包括但不限于商品标题、价格、图片、描述、规格参数、用户评价等,对于电商数据分析、商品搜索、个性化推荐等业务场景具有重要价值。二、接......
  • 海康大华等4G布控球摄像头通过GB28181注册到LiveGBS后,如果获取摄像头经纬度坐标值,并在
    @目录1、背景2、位置订阅2.1、国标设备编辑2.2、选择设备开启位置订阅2.3、全局开启位置订阅2.4、通过目录订阅获取位置(少数情况)3、经纬度信息查询3.1、访问接口获取3.1.1、查询设备列表3.1.2、查询单条设备信息3.1.3、查询设备通道列表3.1.4、查询单条通道信息3.1.5、查询级联......
  • 抖音商品详情API接口:轻松获取商品信息的宝典
    要快速获取抖音上的商品详情?我们的抖音商品详情API接口正是您的得力助手!这个API接口让您能够轻松访问并获取抖音商品的全面信息,是提升业务效率和优化用户体验的绝佳工具。为何选择我们的API接口?重要性凸显:在快节奏的电商环境中,及时、准确地获取商品信息至关重要。我们的API接......
  • moment 获取今日,近三天,本周,本月
    //今天 moment().startOf('day').format("YYYY-MM-DDHH:mm:ss")//2024-09-2700:00:00moment().endOf('day').format("YYYY-MM-DDHH:mm:ss")//2024-09-2723:59:59//近三天moment().startOf("day").subtract(3,&......
  • QT 打包成文件夹
    1.首先,将调试模式改为【Release】,然后重新运行程序:2.运行之后会生成一个.exe文件(这个exe文件是不能运行的),在编译目录下将它找到然后将这个exe文件复制出来,另外创建一个文件夹,将它放进去3.打开开始菜单,在Qt文件夹中找到MinGW文件夹中的这个文件(我是用MinGW_32_bit编译的),所以......