如何获取EmguCV ImageBox图像

本文关键字:EmguCV ImageBox 图像 获取 何获取 | 更新日期: 2023-09-27 18:29:20

我正在尝试选择网络摄像头框架的像素颜色。因此,我捕捉帧一个节目,然后在一个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];
                }
            }
        }
    }

在双击事件中:

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
        }
    }

显然,这个图像不是空的。我做错了什么?也许是一些有螺纹的东西?

如何获取EmguCV ImageBox图像

(OP回答的问题和要求的答案发布。请参阅没有答案的问题,但在评论中解决了问题(或在聊天中扩展)

OP写道:

我解决了。

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

imageFrame = frame.Clone();

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

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