【发布时间】:2014-08-28 21:24:33
【问题描述】:
我在两台计算机上工作的算法相同。一个用 Ubuntu,另一个用 Windows。
在 Ubuntu 中,该算法通过称为 ADTF 的框架获取输入图像。这里的算法工作在 70fps。一切都很完美。
在 Windows 中,该算法从视频流中获取输入图像,而不使用任何框架(Visual Studio 2012 作为 IDE)。这里的算法工作在 2fps。
当我检查计算时间时,我发现我的算法中有一个函数在 Windows 中需要 0.4 秒,在 Ubuntu 中需要 0.011 秒。这个函数在这个过程中被调用了“n”次。此函数在其参数中仅使用cv::Mat 和一些浮点数。我不认为数据类型 float 是造成这种大的时间变化的原因。
我检查了文件中的每一行 c++ 代码。在这两种情况下完全相同。但仅计算时间减少了 30 多倍。我不知道发生了什么。谁能帮帮我?
注意: 两台电脑的配置完全相同。 此外,在这两种情况下,该函数都被调用了相同的“n”次
Intensity getIntensity (Grids &inputGrids, Mat inputImage)// groups of 2d grids
{
type allGridIntensity;
for()//takes single grid
{
type singleGridIntensity;
for()//takes single point
{
double intensity = inputImage.at<uchar>(yPose, xPose);
singleGridIntensity.push_back(intensity);
}
allGridIntensity.push_back(singleGridIntensity);
}
return allGridIntensity;
}
【问题讨论】:
-
任何代码?如果没有代码片段,很难估计。
-
您是在 Windows 机器上运行发布版本还是调试版本?
-
我在发布模式下运行..
-
给我们运行 x40 慢的线。还是每条线都慢 40 倍?
-
@chris_chris 能不能也贴一下优化页面?由于性能问题很复杂。而且,
Mat的副本是必须的吗?Mat&或const Mat&怎么样?
标签: windows algorithm opencv ubuntu-12.04 mat