1

我知道这可能是一般性的,请多多包涵!

我们有一个使用网络摄像头的程序,并根据摄像头看到的内容运行某些功能。该程序在 MacOS 和 Linux 上运行良好,它可以编译并且确实可以在 Windows 上运行,但是其中一些功能(包括逐像素迭代的功能,640x480)将 FPS 降至 1 或更低。偶尔放下它冻结几秒钟。

就像我说的,我知道这很笼统......我只是(绝望地)希望其他人就可能的解释提供意见?这些相同的功能在其他平台上也能正常工作。我很好奇相机是否可能在它自己的线程中运行,从而陷入困境?也许我们只是没有在正确的地方寻找优化?在将代码移植到 Windows 时,是否有关于优化什么的资源?

非常感谢,非常感谢任何输入!

<<< 编辑 >>>

至于视频源代码,我使用的是 ewclib 和

const char * m_buffer;

EWC_Open(MEDIASUBTYPE_RGB24, 640, 480, FPS, true);

    m_buffer = new unsigned char[EWC_GetBufferSize(0)];

EWC_GetImage(0, m_buffer);
4

3 回答 3

2

你用什么在 Windows 上编译程序?视觉工作室?赛格温?你确定你没有编译调试版本吗?你打开编译器优化了吗?您可能还想检查您的数据类型。您可能假设 int 是 64 位,而您可能使用的是 32 位 Windows,它是 32 位。

于 2009-01-21T21:25:44.093 回答
1

rmeador 的假设是因为Windows 很慢是荒谬的:除了抓取图片之外,所有操作都在用户空间中,不需要系统调用。因此,我建议您删除所有识别/功能代码并查看问题是否仍然存在。

如果是这种情况,请检查您的图像抓取机制。也许您每次拍照时都在获取并释放相机的手柄。

否则,请使用普通分析器来查找薄弱环节。如果您怀疑像素操作可能有问题,请确保您在用户空间中执行此操作。我不熟悉 Windows 编程,但我可以想象问题可能是您正在 Windows 资源上进行操作/读取和调用每个像素。

于 2009-01-21T21:49:09.180 回答
0

您是为每一帧调用 EWC_Open,还是只在开始时调用一次?如果库在 DirectShow 中实现并且 EWC_Open 启动图形,它会很慢。

于 2009-01-21T22:45:11.563 回答