我怎样才能获得EmguCV ImageBox图像?

时间:2012-03-29 15:33:07

标签: c# opencv emgucv

我正在尝试选择网络摄像头帧的像素颜色。所以我在ImageBox中捕获帧然后没有任何问题。但是,当我双击ImageBox时,当我尝试访问存储在ImageBox上的图像时,我得到了一个CvException。当我尝试获取图像的像素时弹出异常。

  

OpenCV:无法识别或不支持的数组类型

这就是我捕捉帧的方式:

// On Form Load
Application.Idle += ProcessFrame;

private void ProcessFrame(object sender, EventArgs arg)
    {
        if (cap != null)
        {
            using (Image<Bgr, byte> frame = cap.QueryFrame())
            {
                if (frame != null)
                {
                    imageFrame = frame;
                    imageBoxFrame.Image = imageFrame;

                    Bgr color = imageFrame[50, 100];
                }
            }
        }
    }

在DoubleClick Event中:

private void imageBoxFrame_MouseDoubleClick(object sender, MouseEventArgs e)
    {
        if (treeViewObjects.SelectedNode is ColorNode && !isTracking)
        {
            if (imageFrame == null)
                return;

            Emgu.CV.UI.ImageBox imageBox = (Emgu.CV.UI.ImageBox)sender;
            Image<Bgr, byte> image = (Image<Bgr, byte>)imageBox.Image;

            Bgr color = image[e.X, e.Y]; // This line causes the Exception
        }
    }

显然图像不为空。 我做错了什么?也许有线程的东西?

1 个答案:

答案 0 :(得分:3)

(通过OP和答复发布的问题回答了问题。请参阅Question with no answers, but issue solved in the comments (or extended in chat)

OP写道:

  

我解决了。

     

我只需要克隆图像,因为using语句擦除了图像数据。所以,在ProcessEvent上我只需要将帧克隆到imageFrame。

imageFrame = frame.Clone();
  

还有另一个问题。访问像素数据的正确方法是[Y,X]而不是[X,Y]。

Bgr color = image[e.Y, e.X];