我有时间问题。我已经为图像处理编写了一个qt Gui。对于这种情况,实现用于视频处理和对象跟踪的blobdectetors将是相关的。大体上看起来不错。它使用图形用户界面进行处理,抓取,mser操作和显示只有0.07到0.08秒,可以用于超过10fps的良好帧率。
为此,我在Suse12.3上使用了qt4- C++。OpenCV 2.4.3和笔记本电脑网络摄像头。我的问题是,过了一会儿我的程序就挂了。
看着我的系统监视器,我看到CPU-Power已经达到了100 %,并且一次运行占用了cpu的硬资源很长一段时间(没有GUI)。我不明白哪里出了问题。有谁有这方面的经验吗?
在TY之前!
一些代码片段:关于GUI的MSER初始化:
MSER FtMSERVid( MSERDelta, MSERMinArea, MSERMaxArea,MSERMaxVariation ,MSERMinDiversity);视频处理功能
double startTime = clock();
camDev.read(vidImg);
if(vidImg.empty() == true)
{
newLineInText(tr("No data from device"));
timer->stop();
ui->pbPlay->setText(tr(">"));
return;
}
MSERPointsVid.clear();
if(vidImg.channels() > 1)
cvtColor(vidImg, vidImg,CV_BGR2GRAY);
FtMSERVid(vidImg, MSERPointsVid);
Mat showMat = vidImg.clone();
if(showMat.channels() > 1)
{
cvtColor(showMat,showMat,CV_BGR2RGB);
qImg = QImage((uchar*)showMat.data,showMat.cols,showMat.rows,showMat.step,QImage::Format_RGB888);
}
else if(showMat.channels() == 1)
qImg = QImage((uchar*)showMat.data,showMat.cols,showMat.rows,showMat.step,QImage::Format_Indexed8);
ui->lblOrig->setPixmap(QPixmap::fromImage(qImg));
double endTime = clock();
double timeDuration = (endTime - startTime)/CLOCKS_PER_SEC;
if(numVid%10 == 0)
{
framesPS = int(1/timeDuration) - 1;
if(framesPS > 1)
framesPS = 1;
FPSChanged(framesPS);
numVid = 0;
}发布于 2013-11-14 20:53:39
你的提示帮助我解决了一个问题。MSER正在创建大量数据,我已经编程将第二次更新显示到一个表中,该表独立工作。到目前为止,没有问题,但是对于这个表来说,要显示它提供的所有Points.So太多了,它只是为了填充表中的hullpoint。我已经改变了相应的向量,然后它就像没有其他东西一样运行。
我是因为你对valgrind的暗示才发现的。我以前从来没有用过这个。线程提示让我学到了很多关于线程的知识。谢谢你这么做。
英格堡
https://stackoverflow.com/questions/19923350
复制相似问题