C# 使用StetchBlt将位图写入C语言中的面板的实时视频显示口吃#

C# 使用StetchBlt将位图写入C语言中的面板的实时视频显示口吃#,c#,.net,video,image-processing,live-video,C#,.net,Video,Image Processing,Live Video,我目前正在进行的项目需要实时AGC和14位灰度视频显示。视频由Teledyne Dalsa摄像头链接卡抓取,并作为一个线程上的像素阵列进行处理,最终存储为位图。第二个显示线程不断获取最新的可用位图图像,并使用StretchBlt将其写入面板。处理线程平均在40hz左右运行,而显示线程可以以150hz或更快的频率重新绘制最新图像。显然,同一个图像在新图像可用之前被多次重写,但我不认为这是一个问题。出现的问题是,使用这种显示方法会出现某种口吃。当传送该节目的摄像机向左或向右旋转时,它会变得不平滑,并

我目前正在进行的项目需要实时AGC和14位灰度视频显示。视频由Teledyne Dalsa摄像头链接卡抓取,并作为一个线程上的像素阵列进行处理,最终存储为位图。第二个显示线程不断获取最新的可用位图图像,并使用StretchBlt将其写入面板。处理线程平均在40hz左右运行,而显示线程可以以150hz或更快的频率重新绘制最新图像。显然,同一个图像在新图像可用之前被多次重写,但我不认为这是一个问题。出现的问题是,使用这种显示方法会出现某种口吃。当传送该节目的摄像机向左或向右旋转时,它会变得不平滑,并且有一点滞后/畸变。图像中的垂直线似乎略微下垂

我的问题是,有没有办法解决这个问题?有没有更好的方式来显示实时视频?这两个线程的运行速度都非常快,足以渲染出不会断断续续的视频,但与30hz未处理的模拟信号相比,它仍能以图形方式呈现。任何输入将不胜感激,我可以提供更多的信息,如果它将是有益的

谢谢


Kidron

您无法解决此问题-这是硬件问题

这种畸变是由于对CMOS矩阵的影响而产生的

不同矩阵线上的图片在不同的时刻固定,因此帧的上部和底部有临时延迟(也有从左到右的百叶窗),当摄影机(或场景)移动时,垂直线会弯曲


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

我们使用的是FLIR SC6000系列成像仪,它使用的是一个冷却的InSb探测器,我认为是区域扫描…在那里不应该有任何滚动快门的可能性,对吗?只有在我的处理软件中查看时才会发生这种情况。我正在计时器上重新绘制显示屏,因此我想知道是否因为计时器没有等待上一次写入完成而意外创建了“滚动快门”样式的效果。当一个新的帧到达时,它可能几乎与旧帧重叠。我可能应该在“新帧就绪”上进行绘制,而不是在与处理线程不同步的更快循环中进行绘制。我认为计时器方法不是很好,但怀疑它可能会造成这样的效果-你绘制整个图片,而不是一行一行地绘制,是吗?。推荐方法:在抓取一个框架使应用程序窗口/窗体无效后,在paint消息处理程序(类似于c#?)中输出图片。关于SC6000-我看不到它使用全局快门的明确规范(一些相机的描述在出现时强调)。但数据表中的读出模式包括异步。读和异步时集成。整合然后阅读。你知道这个选项的意思吗?