网站个人备案需要什么资料,中国网站开发用盗版犯法,百度网页链接,免费自建app问题详情#xff1a;之前一直把曝光调整到50000#xff0c;画面一直很流畅#xff0c;知道领导要求将曝光改成500000时整个程序卡死了
问题解决#xff1a;
首先怀疑是帧率太低的原因#xff0c;控制变量后发现不是帧率的问题#xff0c;看着代码很迷茫#xff0c;领导…问题详情之前一直把曝光调整到50000画面一直很流畅知道领导要求将曝光改成500000时整个程序卡死了
问题解决
首先怀疑是帧率太低的原因控制变量后发现不是帧率的问题看着代码很迷茫领导就看了我完整的代码找到了bug让人恍然大悟。
大家先看看错误代码calibHMI是我的主类PICThread是我的线程类
线程创建和触发代码当发出信号returnResult,就执行displayResult。 threadnew 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 result0;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 Exposeui-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()是我的子线主要作用间隔一段时间发送信号触发displayResultdisplayResult是在主线程中运行的包括获取图像和显示图像
最最需要资源的获取图像程序在主线程中苦苦阻塞那么只要把图线获取写入到run()中即可并且将usleep(500)删除。