У меня проблема со временем. Я запрограммировал Qt Gui для обработки изображений. Для этого случая было бы целесообразно реализовать blobdectetors для видеопроцессинга и отслеживания объектов. В принципе это выглядит хорошо. Он использует GUI за обработкой, захватом, работой mser и отображением всего от 0,07 до 0,08 секунды, что может быть использовано для хорошей частоты кадров более 10 кадров в секунду.
Для этого я использую Qt 4 — C ++, на Suse 12.3. OpenCV 2.4.3 и веб-камера ноутбука. Моя проблема в том, что через некоторое время моя программа зависла.
Глядя на мой системный монитор, я вижу, что мощность процессора достигла 100%, и в одном запуске используются жесткие ресурсы процессора, который использует процессор в течение длительного времени (без графического интерфейса). Я не понимаю, что происходит не так. Кто-нибудь сталкивался с этим?
TY заранее!
Некоторые фрагменты кода:
Инициализация 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;
}
Ваши подсказки помогли мне решить проблему. MSER создает много данных, и я запрограммировал отображение второго обновления в таблице, которая работает независимо. Пока проблем нет, но таблица должна отображать все точки. Так что она была предоставлена только для заполнения точек корпуса в таблице. Я изменил соответствующий вектор, и тогда он работает как ничто другое.
Это я узнал из-за твоего намека на Вальгринда. Я никогда не нуждался в этом раньше. Подсказки о потоке позволили мне многое узнать о потоке. Спасибо за это.
Ингеборг
Других решений пока нет …