Opencv 使用外部计数器或最佳替代方案进行分析

Opencv 使用外部计数器或最佳替代方案进行分析,opencv,profiling,external,counter,Opencv,Profiling,External,Counter,我不是程序员,试图评估花在opencv函数上的时间。我们有一个AD转换器,它带有一个计数器,能够对外部信号进行计数,例如,来自频率为1 MHz=1µs分辨率的函数发生器的信号。可以使用函数cbIn32…,unsigned long*pointertovalue查询实际计数器状态 所以我的想法是在调用兴趣函数前后查询计数器状态,然后计算差值。然而,当我在没有函数调用的情况下计算两者之间的差异时,出现了疑问,这揭示了rel。80至400µs左右的高波动值。我想知道,如果计算调用cbIn32的平均时间

我不是程序员,试图评估花在opencv函数上的时间。我们有一个AD转换器,它带有一个计数器,能够对外部信号进行计数,例如,来自频率为1 MHz=1µs分辨率的函数发生器的信号。可以使用函数cbIn32…,unsigned long*pointertovalue查询实际计数器状态

所以我的想法是在调用兴趣函数前后查询计数器状态,然后计算差值。然而,当我在没有函数调用的情况下计算两者之间的差异时,出现了疑问,这揭示了rel。80至400µs左右的高波动值。我想知道,如果计算调用cbIn32的平均时间约为180µs,并将其从用于感兴趣函数的假定时间中减去,是否是一个有效的解决方案

我的前两个问题是:

这种方法通常是可行的还是无用的? 波动从何而来? 或者,我们尝试使用getTickCount,它似乎提供了合理的值。但检查论坛发现,它的分辨率约为10毫秒,这将是100µs分辨率。然而,我们得到的数值在亚毫秒范围内。 这就引出了下一个问题:

当分辨率约为10毫秒时,如何评估getTickCount函数的时间在微秒范围内? 我是否应该相信获得的值? 我也用gprof进行了尝试,但它没有给我积累时间,尽管我确信在包含opencv相关调用的函数中花费的时间至少只有几毫秒。我甚至尝试用ENABLE_PROFILING=ON重新构建opencv,但结果相同。我在某个地方读到,您需要构建静态opencv库来启用评测,但我不确定这是否会改善这种情况。所以这里的问题是:

我必须做什么才能让gprof也看到opencv函数? 下一个替代方法是WINAPI的QueryPerformanceCounter函数。我不知道如何使用它,但如果你推荐的话,我会努力克服的。对这种做法的问题:

它会因为多核而出现问题吗? 如果是,有没有简单的方法来处理这个问题? 我也尝试过verysleepy,但它在其他.exe中运行良好

新手友好的回答将非常非常感谢。我的目标是找到最简单、精度最高的方法。我正在用MinGW开发Win7 64位Eclipse


感谢您的帮助……

获得快速精确计时测量的最佳方法是循环10^n次,端到端计时,然后除以10^n.Thx。该代码连接到样本的实时成像和后续分析,即opencv部分。因此,这将很难实施。