1

好吧,我正在开发眼动仪。所以我设法让我的 2 个摄像头运行,但是当我调用以下方法时,程序在 Application.Run(...) 上抛出“对象当前正在其他地方使用”异常。

 public void processImage(Bitmap bitmap)
 {
     Bitmap aq = bitmap.Clone(new Rectangle(0, 0, bitmap.Width, bitmap.Height), PixelFormat.Format24bppRgb);

     Invert a = new Invert();
     aq = a.Apply(aq);

     AForge.Imaging.Image.FormatImage(ref aq);

     IFilter filter = Grayscale.CommonAlgorithms.BT709;
     aq = filter.Apply(aq);

     Threshold th = new Threshold(200);
     aq = th.Apply(aq);

     //find the biggest blob
     BlobCounter bl = new BlobCounter(aq);
     int i = bl.ObjectsCount;
     Blob bigblob = null;
     int areaant = 0;
     Blob[] blobs = bl.GetObjects(aq, true);

     for (int j = 0; j < i; j++)
     {
         if (blobs[j].Area == 1116)
         {
             j++;
             if (j == i)
                 break;
         }
         if (blobs[j].Area > areaant)
         {
             areaant = blobs[j].Area;
             bigblob = blobs[j];
         }
     }

     Bitmap bitmap2 = bitmap.Clone(new Rectangle(0, 0, bitmap.Width, bitmap.Height), PixelFormat.Format24bppRgb);

     Graphics g = Graphics.FromImage(bitmap2);
     int radius = 1;
     int x = 0;
     int y = 0;
     int h = 25;
     Pen redPen = new Pen(Color.Red, 2);
     if (i > 1)
     {
         Blob fil2 = bigblob;
         x = fil2.CenterOfGravity.X;
         y = fil2.CenterOfGravity.Y;

         g.DrawEllipse(redPen,
                      (int)(x - radius),
                      (int)(y - radius),
                      (int)(radius * 5),
                      (int)(radius * 5));
     }
     redPen.Dispose();
     g.Dispose();

     pictureBox1.Image = bitmap2;
     pictureBox2.Image = aq;
}

所以我想它与位图克隆方法有关,因为有时它会在那里抛出异常。阅读其他人和他们的灵魂的不同问题,我尝试了几件事: - 使用具有相同形式的不同线程启动每个凸轮 - 在其他解决方案中,他们建议问题在于访问位图的两个线程。所以我将表格分开,每个相机(线程)一个,然后我尝试只在一个线程中使用方法procesImage(..)。没用。

任何帮助将非常感激

4

0 回答 0