2016-04-25 34 views
-1

我目前正在处理的项目需要实时AGC和14位灰度视频显示。该视频是通过Teledyne Dalsa Camera Link卡抓取的,并在一个线程中作为像素阵列进行处理,最终以位图的形式存储。第二个显示线程不断抓取最新的可用位图图像,并使用StretchBlt将其写入面板。处理线程平均运行大约40hz,而显示线程可以在150hz或更快的速度下重新绘制最新的图像。很明显,同一幅图像会在新图像可用之前被重写多次,但我认为这不是问题。发生的问题是使用这种显示方法存在某种口吃。当摄像机向左或向右摆动时,该摄像机不平滑,并且存在一点滞后/像差。图像中的垂直线似乎稍微挂起。实时视频显示Stutter使用StetchBlt写入位图C#中的面板

我的问题是,有没有办法解决这个问题?有没有更好的方式来显示实时视频?这两个线程运行足够快,足以呈现视频不结结实实,但不知何故,与30Hz未处理的模拟信号相比,它仍然以图形的方式呈现。任何意见,将不胜感激,我可以提供更多的信息,如果它会有所帮助。

谢谢!

Kidron

回答

0

您无法解决这个问题 - 它是硬件问题。

这种像差是由于rolling-shutter对CMOS矩阵的影响而产生的。

不同矩阵线上的图片被固定在不同的时刻,因此帧的上下部分会有暂时滞后(也有左到右快门),并且当相机(或场景)移动时垂直线会弯曲。

某些视频编辑软件可能会部分纠正这种失真,但完全恢复是不可能的。

+0

我们使用的是FLIR SC6000系列成像仪,它使用冷却的InSb探测器,我相信它是区域扫描的......不应该有任何可能性在那里滚动快门,我正确吗?这只有在我的处理软件中查看时才会发生。 – kfilbrun

+0

我正在重新绘制一个定时器的显示屏幕,所以我想知道是否意外地创建了“卷帘快门”风格效果,因为定时器没有等待上一次写入完成。当一个新的帧到达时,它可能被绘制成几乎重叠的旧帧。我可能应该在“新框架准备好”的基础上进行绘制,而不是在与处理线程没有同步的更快的循环中。 – kfilbrun

+0

我认为计时器的方法不是很好,但怀疑它可能会导致这样的影响 - 你画出整个画面,而不是一行一行,是吗?推荐的方法:在抓取一个框架无效的应用程序窗口/窗体后,在绘制消息处理程序(类似于c#中提供的这种东西)中输出图片。 – MBo