增加系统资源监控并输出为表格,相机补黑图修改为下次触发时补黑图。

This commit is contained in:
2024-10-31 23:37:15 +08:00
parent 7a8faeea90
commit 480e2fd710
5 changed files with 228 additions and 16 deletions
@@ -2,6 +2,7 @@
#include <QDebug>
QQueue<std::vector<cv::Mat>> queuePic;
QMutex* m_mutex;
bool triggerIng = false;
bool recivingImage = false,frameStart = false;
int lastFrameId = -1 ;
long long frameStampCountStart = 0, frameStampCountEnd = 0;
@@ -300,12 +301,19 @@ Hd_3DCameraLMI_module::Hd_3DCameraLMI_module()
{
m_mutex = new QMutex();
}
Hd_3DCameraLMI_module::~Hd_3DCameraLMI_module()
{
ExceptionCB(-1, NULL);
}
void Hd_3DCameraLMI_module::genBlackImg(std::vector<cv::Mat>& vecPic)
{
cv::Mat blank_image1(1000, 1000, CV_8UC1, cv::Scalar(0, 0, 0));
cv::Mat blank_image2(1000, 1000, CV_8UC1, cv::Scalar(0, 0, 0));
vector<cv::Mat> dstvec;
dstvec.push_back(blank_image1);
dstvec.push_back(blank_image2);
vecPic.assign(dstvec.begin(), dstvec.end());
}
bool Hd_3DCameraLMI_module::sendData(std::vector<cv::Mat>& vecPic, QByteArray &data )
{
@@ -320,12 +328,7 @@ bool Hd_3DCameraLMI_module::sendData(std::vector<cv::Mat>& vecPic, QByteArray &d
if (queuePic.empty())
{
//qDebug() << " [Error] " << " srcImage is null";
cv::Mat blank_image1(100, 100, CV_8UC1, cv::Scalar(0, 0, 0));
cv::Mat blank_image2(100, 100, CV_8UC1, cv::Scalar(0, 0, 0));
vector<cv::Mat> dstvec;
dstvec.push_back(blank_image1);
dstvec.push_back(blank_image2);
vecPic.assign(dstvec.begin(), dstvec.end());
genBlackImg(vecPic);
m_mutex->unlock();
return false;
}
@@ -348,7 +351,6 @@ bool Hd_3DCameraLMI_module::reciveData(std::vector<cv::Mat> &, QByteArray &qbyte
bool Hd_3DCameraLMI_module::initParas(QByteArray &)
{
//return true;
bool flag = InitLmi(id); //3D初始化
m_status = flag ? OK : UnInit;
if (!flag)
@@ -378,20 +380,58 @@ bool Hd_3DCameraLMI_module::run()
//qDebug() << "[info]" << __FUNCTION__ << " line:" << __LINE__ << " run start" << id;
try
{
int timeOut = 0;
queuePic.clear();
while (timeOut < 500)
//方法1 超时机制
// queuePic.clear();
//int timeOut = 0;
//while (timeOut < 500)//ms
//{
// m_mutex->lock();
// if (queuePic.size() > 0)
// {
// result = true;
// m_mutex->unlock();
// return true;
// }
// m_mutex->unlock();
// timeOut ++;
// QThread::msleep(1);//修改了睡眠1ms
//}
//方法2 在下一次触发时强制给上一次触发补黑图
m_mutex->lock();
if (triggerIng == true)//仍然在处理上一次触发
{
std::vector<cv::Mat>imgs;
genBlackImg(imgs);
queuePic.enqueue(imgs);
m_mutex->unlock();
int cnt = 0;
while (queuePic.size() > 0 || cnt < 100)
{
QThread::msleep(1);
cnt++;
if (cnt > 10)
qDebug() << "insert black img 2 long";
}
}
else
{
triggerIng = true;
m_mutex->unlock();
}
//强制给上一次触发补黑图 结束
while (true)
{
m_mutex->lock();
if (queuePic.size() > 0)
{
result = true;
result = true;
triggerIng = false;
m_mutex->unlock();
return true;
}
m_mutex->unlock();
timeOut += 10;
QThread::msleep(10);
QThread::msleep(1);
}
}
catch (QString ev)