对于我正在处理的项目,我使用两个不同的线程从使用 Opencv 和 C++ 的 Windows 系统上的不同硬件获取图像。出于本文的目的,我们将它们称为 camera1 和 camera2。由于不同的帧速率,我无法在同一线程上同时从 camera1 和 camera2 捕获或尝试一次捕获一个图像。相反,我为两个相机设置了缓冲区。Camera1 的运行速度是 camera2 的两倍以上。
第三个线程从 camera2 获取帧并尝试将其与 camera1 在最近时间点拍摄的图像相匹配。我遇到的问题是我找不到一种好方法来将来自一个来源的图像与在另一个来源中大致同时获取的图像进行匹配。
当在非高优先级的单独线程中使用时,是否有一种方法可以为这些图像分配准确的时间戳?如果没有,是否有另一种更适合这样的系统的设计方法。
当在不同 CPUS 上的单独线程中使用时,我很难找到任何关于在 Windows 中跟踪时间的方法(如 clock() 和 queryperformancecounter )有多远的信息。我已经读到它们在单独的线程中使用时并不准确,但我以大约每秒 20 帧的速度获取帧,所以即使它们关闭,它也可能足够接近,仍然可以正常工作。
先感谢您!让我知道我是否应该澄清任何事情或更好地解释。
编辑:
不幸的是,我认为我没有任何方法可以从驱动程序或硬件中获取时间戳。我想我已经找到了一种方法,可以非常准确地确定相对于每个线程实际捕获图像的时间。我真的不知道如何处理的部分是如果我在不同内核上执行的两个线程中使用时钟()或类似的东西,时间戳可能有多远。如果我可以指望两个不同内核上的时间戳彼此相距大约 25 毫秒,那将是理想的。我只是还没有真正找到衡量两者之间差异的好方法。我做了更多的研究,似乎 Windows API 中的 timeGetTime 并没有受到单独的 cpu 内核调用的太大影响。我要试试看。