【问题标题】:EMGU CV reassigned imageEMGU CV 重新分配的图像
【发布时间】:2017-12-21 12:30:31
【问题描述】:

我尝试使用两个图像参数来控制我在项目中的图像。问题是当我在 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

【问题讨论】:

    标签: c# opencv parameters histogram emgucv


    【解决方案1】:

    问题是当你复制这样的图像时

    Global.xrayPic = Global.rootPic;
    

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

    解决方案:

    像这样使用图片的深拷贝

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

    如果您想将 emgucv 图像从 1 个变量复制到另一个变量,最好克隆它们。

    如果您有任何其他问题,我希望这能解决您的问题。

    【讨论】:

    • 我怀疑是为什么?将一个图像变量的值分配给另一个图像变量并将第一个图像变量克隆到第二个图像变量有什么区别?
    • @PabloGonzalez 直接分配值实际上并不分配“值”,而是复制其地址。这就是他需要深拷贝的原因。如果您仍有疑问,请研究浅拷贝和深拷贝的概念。
    • @NabeelZafar 你的回答对我来说已经足够好了。我总是这样做,但不知道为什么必须这样做。现在,我很清楚了。谢谢。
    猜你喜欢
    • 2012-04-02
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-21
    • 2011-07-03
    • 1970-01-01
    相关资源
    最近更新 更多