当前位置: 首页 > news >正文

深度相机获取实时图像总结

问题详情:之前一直把曝光调整到50000,画面一直很流畅,知道领导要求将曝光改成500000时整个程序卡死了

问题解决:

首先怀疑是帧率太低的原因,控制变量后发现不是帧率的问题,看着代码很迷茫,领导就看了我完整的代码,找到了bug,让人恍然大悟。

大家先看看错误代码:calibHMI是我的主类,PICThread是我的线程类

线程创建和触发代码:当发出信号returnResult,就执行displayResult。

    thread=new PICThread();connect(thread, SIGNAL(returnResult(int)), this, SLOT(displayResult(int)));//信号槽
/*信号回调*/
void calibHMI::displayResult(int result)
{Camera.GetGrayImage(gray);if(!gray.empty()){gray.copyTo(grayCopy);cv::resize(grayCopy, grayCopy, cv::Size(gray.cols / 6, gray.rows / 6));qImage = QImage((const unsigned char*)(grayCopy.data),grayCopy.cols, grayCopy.rows,grayCopy.cols * grayCopy.elemSize(),QImage::Format_Grayscale8);// 如果需要,从QImage创建QPixmapQPixmap pixmap = QPixmap::fromImage(qImage);// 或者,直接在QLabel中设置QImage(注意灰度图像不需要rgbSwapped())ui->label_6->setPixmap(QPixmap::fromImage(qImage));}}
void calibHMI::closeEvent(QCloseEvent *event){qDebug("关闭主界面");thread->m_stopRequested = true;}
//线程类
PICThread::PICThread(){}
/*线程循环*/
void PICThread::run()
{int result=0;m_stopRequested = false; // 初始化停止标志为 falsewhile (!m_stopRequested){msleep(500);//延时0.5s 600-1000比较合适emit returnResult(result);  //发送信号}
}
/*线程停止*/
void PICThread::stop()
{m_stopRequested = true;
}void calibHMI::on_pushButton_2_clicked()
{int Expose=ui->lineEdit->text().toInt();int rate =ui->lineEdit_2->text().toInt();Camera.ConfigEyeExpose(hDevice,keVzNLExposeMode_Fix,Expose);if(Camera.SetFrameRate(hDevice,rate)==0){std::cout<<"帧率设置成功!"<<std::endl;}
}void calibHMI::on_pushButton_6_clicked()
{    static SVzNLROIRect sLeftROI = { 0, 1536, 0, 2048 };static SVzNLROIRect sRightROI = { 0, 1536, 0, 2048 };Camera.ConfigDetectROI(hDevice, &sLeftROI, &sRightROI);thread->start();
}void calibHMI::on_pushButton_7_clicked()
{thread->stop();
}

答案:

run()是我的子线主要作用间隔一段时间发送信号触发displayResult,displayResult是在主线程中运行的,包括获取图像和显示图像

最最需要资源的获取图像程序在主线程中苦苦阻塞,那么只要把图线获取写入到run()中即可!并且将usleep(500)删除。

http://www.lryc.cn/news/500043.html

相关文章:

  • Nginx限流实践-limit_req和limit_conn的使用说明
  • Unity在运行状态下,当物体Mesh网格发生变化时,如何让MeshCollider碰撞体也随之实时同步变化?
  • 记一次由docker容器使得服务器cpu占满密码和密钥无法访问bug
  • 前端TS基础
  • 前端面经每日一题day06
  • SOC,SOH含义区别及计算公式
  • 阿里云轻量应用服务器开放端口,图文教程分享
  • 嵌入式里的“移植”概念
  • 深入探讨 AF_PACKET 套接字
  • Redis的哨兵机制
  • CSS系列(1)-- 选择器体系详解
  • 用Python开发打字速度测试小游戏
  • 基于gitlab API刷新MR的commit的指定status
  • 服务器数据恢复—LINUX下各文件系统删除/格式化的数据恢复可行性分析
  • Spark on Yarn安装配置,大数据技能竞赛(容器环境)
  • 遣其欲,而心自静 -- 33DAI
  • No.25 笔记 | 信息收集与Google语法的实践应用
  • GitLab基础环境部署:Ubuntu 22.04.5系统在线安装GitLab 17.5.2实操手册
  • SpringBoot3配置文件
  • 【机器学习】任务十二:循环神经网络
  • 【返璞归真】-切比雪夫不等式(Chebyshev‘s Inequality)
  • 【Django】在view中调用channel来主动进行websocket通信
  • 18.[极客大挑战 2019]BabySQL1
  • Python快速入门二:Python3 基础语法
  • 1-1 C语言链表
  • [0629].第29节:配置中心业务规则与动态刷新
  • mac: docker : Command not found解决
  • Django drf基于APIView 快速使用
  • 【MarsCode】每日一题数组 之 数字分组求偶数和
  • 解决:error: subprocess-exited-with-error 的问题