【发布时间】:2015-04-14 16:33:42
【问题描述】:
我有两个高速 USB3 摄像头 (Ximea),想编写一个用于图像记录的应用程序。 VGA 分辨率下的帧速率高达 500fps,但我也想在 170fps 下使用 2Mpx 分辨率。 他们的 .Net SDK 告诉我,我应该简单地循环“获取”图像。 我的问题是我不知道如何获取图像并保存它们,同时仍然显示实时预览。每次我添加一些代码来实际更新图片框时,帧速率都会急剧下降。
目前我使用了一个通过
调用的录制功能Task.Run(() => Record());
在 Record() 内部我有一个循环获取位图
while(record == true)
{
Camera.GetImage(out myImage, timeout); //From Ximea .Net SDK
Info = Camera.GetLastImageParams();
Timestamp = Info.GetTimeStamp();
ThreadPool.QueueUserWorkItem(state => SaveImage(myImage, filepath, Timestamp));
}
SaveImage 是
private void SaveImage(Bitmap myImage, string filepath, double Timestamp)
{
try
{
lock(myImage)
{
myImage.Save(filepath + Timestamp.ToString("0.00000") + ".tif");
}
}
catch{}
}
如何在录制时显示实时预览以及如何使整个代码更稳定(目前由于“对象已在使用中”-错误或“GDI+ 中的一般错误”而导致一些丢帧Image.Save() 调用,我使用 try/catch 语句跳过)?
【问题讨论】:
-
你知道保存到硬盘不是最好的主意。 2 mpx 大约是 2.5 mb 文件。您希望每秒 170 张图像,因此希望每秒向硬盘写入 425 mb,并且仍然能够将其加载到图片框中。如果您有 SSD,则写入速度可能会不足。有些人每秒几乎不能达到 300 mb。你想要一个缓冲区。 Ram 的读写速度要快得多。
-
@Franck 在我的情况下,我保存到 SSD 或 Ram Disk - 所以写入速度应该足够快。此外,图像是单色的,所以尺寸不是很大 - 2Mpx tifs 是 700KB 与这台相机。
标签: c# image winforms camera frame-rate