调整图像<灰度,字节>没有扩展.Emgu简历

本文关键字:扩展 Emgu 简历 字节 图像 灰度 调整 | 更新日期: 2023-09-27 18:18:09

我使用的是Image。从图像中创建一个蒙版。为了保持最大的性能,我使用的是Image。ROI裁剪图像和使用InRange方法之前。为了实际使用图像,我需要它具有与原始图像相同的尺寸,但对我来说很明显的是如何缩放图像,而不是改变图像的尺寸。

下面是问题代码:

public Image<Gray, byte> Process(Image<Bgr, byte> frameIn, Rectangle roi)
    {
        Image<Bgr, byte> rectFrame = null;
        Image<Gray, byte> mask = null;
        if (roi != Rectangle.Empty)
        {
            rectFrame = frameIn.Copy(roi);
        }
        else
        {
            rectFrame = frameIn;
        }
        if (Equalize)
        {
            rectFrame._EqualizeHist();
        }

        mask = rectFrame.InRange(minColor, maxColor);
        mask ._Erode(Iterations);
        mask ._Dilate(Iterations);
        if (roi != Rectangle.Empty)
        {
            //How do I give the image its original dimensions?
        }
        return mask;
    }

谢谢你,克里斯。

调整图像<灰度,字节>没有扩展.Emgu简历

我将假设您希望返回与framIn大小相同的蒙版,最简单的方法是将该蒙版复制到与framIn大小相同的新图像中。如果你的应用程序对时间不敏感,你可以设置相同大小的帧,设置ROI,然后做你的操作。这需要更长的时间来处理,并且不是最佳实践。

无论如何,这里是希望你的代码后,如果不让我知道,我会相应地纠正它。

if (roi != Rectangle.Empty)
{
    //Create a blank image with the correct size
    Image<Gray, byte> mask_return = new Image<Gray, byte>(frameIn.Size);
    //Set its ROI to the same as Mask and in the centre of the image (you may wish to change this)
    mask_return.ROI = new Rectangle((mask_return.Width - mask.Width) / 2, (mask_return.Height - mask.Height) / 2, mask.Width, mask.Height);
    //Copy the mask to the return image
    CvInvoke.cvCopy(mask, mask_return, IntPtr.Zero);
    //Reset the return image ROI so it has the same dimensions
    mask_return.ROI = new Rectangle(0, 0, frameIn.Width, frameIn.Height);
    //Return the mask_return image instead of the mask
    return mask_return;
}
return mask;

希望有帮助,

欢呼,克里斯