Visual Studio 2010 - OpenCV运行缓慢



我已经在vs2010/win7上安装了OpenCV,但是我看到一些我无法弄清楚的行为。

我是 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 位。调试和独立运行时的行为相同。

还可以让它在 Ubuntu 10.10 32 位上运行,使用 gcc 4.4.5 编译,没有问题。


编辑

我尝试使用VS2008重新编译,它仍然做同样的事情。我不明白是什么导致它运行得如此缓慢 - 除非是 64 位窗口"模拟"32 位的方式导致了问题。

我可以在您的代码中发现 2 个可能的错误,这两个错误都与边界有关。在数组边界之外读取/写入可能会导致各种意外行为,因此您的程序不会崩溃真是个奇迹。也许GCC和/或OpenCV库在Ubuntu和Windows上的行为不同,导致它在Ubuntu上不会崩溃,但你绝对应该看看以下2点。

  1. 我认为sX是比例因子?无论这种缩放如何,您的for循环都应该从0运行到(BINS-1),因为您正在使用i来索引直方图,并且有BINS个箱,而不是BINS*sX。只要sX == 1您就不会遇到麻烦,但任何其他值都会使您的直方图绘图代码无效。您已经在cvPoint声明中以正确的方式使用sX

  2. 根据cvFillConvexPoly函数的文档,n应该是点数,在您的情况下是 4,而不是 5。

相关内容

  • 没有找到相关文章

最新更新