尝试使用capture.QueryFrame()获得多个线程来获取帧

本文关键字:线程 获取 capture QueryFrame | 更新日期: 2023-09-27 18:04:49

所以我有一个主类,它从我的网络摄像头和多个线程处理帧获取帧。我已经锁定了主类中从凸轮抓取帧的部分,所以只有一个线程可以处理相同的帧。现在我得到一个外部异常,我不知道为什么。我的主类:

public Image<Bgr, byte> GetImage()
{
    Image<Bgr, byte> returnable;
    Mat f = null;
    lock (locker)
    {
       do
       {
            f = capture.QueryFrame();
        } while (!capture.Grab());
        returnable = f.ToImage<Bgr, byte>();
    }
    return returnable;
}

我的线程:

Image<Bgr,byte> image;
image = o.GetImage(); //o is the main class
Image imag = image.ToBitmap();
string savePath = path + rofNumber + "/Original.jpg";
imag.Save(savePath); //Exception is on this line
toFind = o.GetNumbersFromDatabase();
labels = FindLabels(image);

例外:

System.Runtime.InteropServices.ExternalException was unhandled
ErrorCode=-2147467259
HResult=-2147467259
Message=Er is een algemene fout opgetreden in GDI+.
Source=System.Drawing
StackTrace:
   bij System.Drawing.Image.Save(String filename, ImageCodecInfo encoder,    EncoderParameters encoderParams)
   bij OCR.Worker.Run() in C:'Users'...'Code'Visual Studio'OCR'OCR'Worker.cs:regel 178
   bij System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   bij System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
   bij System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   bij System.Threading.ThreadHelper.ThreadStart()
InnerException: 

尝试使用capture.QueryFrame()获得多个线程来获取帧

我自己发现了这个问题。由于我正在处理多个线程,我应该在保存图像时更加谨慎。

问题是其中一个线程正在保存图像,在它完成之前,另一个线程开始保存到同一个文件,这导致了错误。

我首先尝试这个的原因是为了得到一个相机输入的小幻灯片。

结论:

我使用了不同的名称每个线程保存图像!

最后我自己解决了这个问题,但我知道我需要对多线程非常谨慎…