EMGU CV 重新分配图像
EMGU CV reassigned image
我尝试使用两个图像参数来控制我在项目中的图像。问题是当我在 Emgu CV 中应用任何 public 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() 时,它会自动应用函数将第一张图片调整为第二张图片(如附图)。但是,当我取消选中时,它不会 return 到我的 root_Pic (第二张图片到第一张图片)
This is the demonstration for my code
问题是当你像这样复制图像时
Global.xrayPic = Global.rootPic;
然后 Global.rootPic 的引用被复制到 Global.xrayPic 这意味着两个对象都将指向内存中的相同图像,对 Global.rootPic 或 Global.xrayPic 的任何更改都会导致两者都发生变化。
解法:
像这样使用图像的深拷贝
Global.xrayPic = Global.rootPic.Clone();
如果您想将 emgucv 图像从 1 个变量复制到另一个变量,克隆 它们总是一个好主意。
如果您有任何其他问题,我希望这能解决您的问题。
我尝试使用两个图像参数来控制我在项目中的图像。问题是当我在 Emgu CV 中应用任何 public 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() 时,它会自动应用函数将第一张图片调整为第二张图片(如附图)。但是,当我取消选中时,它不会 return 到我的 root_Pic (第二张图片到第一张图片) This is the demonstration for my code
问题是当你像这样复制图像时
Global.xrayPic = Global.rootPic;
然后 Global.rootPic 的引用被复制到 Global.xrayPic 这意味着两个对象都将指向内存中的相同图像,对 Global.rootPic 或 Global.xrayPic 的任何更改都会导致两者都发生变化。
解法:
像这样使用图像的深拷贝
Global.xrayPic = Global.rootPic.Clone();
如果您想将 emgucv 图像从 1 个变量复制到另一个变量,克隆 它们总是一个好主意。
如果您有任何其他问题,我希望这能解决您的问题。