EMGU CV重新分配图像

时间:2017-07-17 05:02:35

标签: c# opencv parameters histogram emgucv

我尝试使用两个图像参数来控制项目中的图像。问题是当我在Emgu CV中应用任何公共void函数后无法重新分配图像时。 这是我的代码:

public static class Global
{
    public static Image<Gray, byte> xrayPic;
    public static Image<Gray, byte> rootPic;
}

private void takePhotoBtn_Click(object sender, EventArgs e)
{
    Image<Bgr, Byte> ImageSrc = new Image<Bgr, Byte>(_subPath);
    Image<Gray, Byte> GrayImage = ImageSrc.Convert<Gray, byte>();
    Image<Gray, Byte> MedianImage = GrayImage.SmoothMedian(5);

    Global.xrayPic = MedianImage;
    Global.rootPic = MedianImage;

    Global.xrayPic.Save(_subPath);
    imgBox.Image.Dispose();
    imgBox.Image = Global.xrayPic.Bitmap;    
}

private void checkHistogram_CheckedChanged(object sender, EventArgs e)
{
    if(checkHistogram.Checked)
    {
        Image<Gray, byte> tmpPic = Global.xrayPic;
        tmpPic._EqualizeHist();
        // Global.xrayPic._EqualizeHist();
        imgBox.Image.Dispose();
        imgBox.Image = tmpPic.Bitmap;
    }

    if(checkHistogram.Checked == false)
    {
        Global.xrayPic = Global.rootPic;
        imgBox.Image.Dispose();
        imgBox.Image = Global.xrayPic.Bitmap;
    }
}

当我勾选复选框以应用函数__EqualizeHist()时,它会自动应用函数来调整第一张图片到第二张图片(如附图)。但是,当我取消选中时,它不会返回到我的root_Pic(第二张图片到第一张图片) This is the demonstration for my code

1 个答案:

答案 0 :(得分:0)

问题在于您复制此类图像

Global.xrayPic = Global.rootPic;

然后将 Global.rootPic 的引用复制到 Global.xrayPic ,这意味着两个对象都将指向内存中的相同图像,对的任何更改> Global.rootPic Global.xrayPic 将导致两者都发生变化。

解决方案:

使用像这样的图像的深层副本

Global.xrayPic = Global.rootPic.Clone();

如果你想将emgucv图像从1个变量复制到另一个变量,那么克隆总是一个好主意。

如果您在此处复制任何其他问题,我希望这可以解决您的问题。