У меня установлен OpenCV на vs2010 / win7, однако я вижу поведение, которое не могу понять.
Я новичок в OpenCV, поэтому просто запустите базовую программу для извлечения кадров из aviфайл - затем разделяет этот кадр на одноканальные изображения и генерирует гистограммы для каждого из них (взяты из примера в Интернете).На самом деле все работает нормально, просто крайне медленно.Оказывается, что cvFillConvexPoly на самом деле занимает 10-15 секунд (иногда дольше) для завершения - но когда он в конечном итоге возвращает, это правильно.
Это фрагмент кода, где я вызываю функцию преступника и, как вы можете видетьЯ также попробовал cvFillPoly, который занял столько же времени для завершения.
IplImage* DrawHistogram(CvHistogram *hist, float sX)
{
float histMax = 0;
cvGetMinMaxHistValue(hist, 0, &histMax, 0, 0);
IplImage *imgHist = cvCreateImage(cvSize(256, 64), IPL_DEPTH_8U, 1);
cvZero(imgHist);
float histValue = 0;
float nextValue = 0;
for (int i = 0; i < ((BINS - 1)*sX); i++)
{
histValue = cvQueryHistValue_1D(hist, i);
nextValue = cvQueryHistValue_1D(hist, i + 1);
CvPoint p1 = cvPoint(i * sX, 64);
CvPoint p2 = cvPoint((i + 1) * sX, 64);
CvPoint p3 = cvPoint((i + 1) * sX, 64 - histValue*(64/histMax));
CvPoint p4 = cvPoint(i * sX, 64 - histValue*(64/histMax));
int n = 5;
CvPoint pts[] = {p1, p2, p3, p4};
cvFillConvexPoly(imgHist, pts, n, cvScalar(255));
//cvFillPoly(imgHist, pts, &n, 1,cvScalar(255));
}
return imgHist;
}
Любая помощь приветствуется.
Скомпилирована на Win7 x64 с CMake 2.8.2 / VS2010 как 32-битная.Такое же поведение при отладке и при работе в автономном режиме.
Также он работает на 32-битной Ubuntu 10.10, скомпилированной с gcc 4.4.5, где не является проблемой.
Редактировать
Я попытался перекомпилировать с VS2008, и он все еще делает то же самое.Я не понимаю, что заставило бы его работать так медленно - если только это не способ, которым 64-битные окна "эмулируют" 32-битные, который вызывает проблему.