为减小图像处理的运算量,消除干扰背景,通常需要对图像的感兴趣区域(ROI)进行处理,同时输出的像素坐标值又是整幅图像的(即不改变原图像的大小)。
/// <summary>
/// 获取ROI
/// </summary>
/// <param name="image">需裁剪的原图</param>
/// <param name="rect">裁剪留下的ROI大小</param>
/// <returns>ROI</returns>
private Image<Gray, byte> GetROI(Image<Gray, byte> image, Rectangle rect)
{
//程序中image是原始图像,类型Image<Gray, byte>,rectangle是矩形
Image<Gray, byte> resImag = image.CopyBlank();
using (var mask = new Image<Gray, Byte>(image.Size))
{
mask.SetZero();//设置所有值为0
mask.ROI = rect;
mask.SetValue(255);//设置ROI的值为255
mask.ROI = Rectangle.Empty;//去掉ROI,不然以后的操作都只是在ROI范围内,图像的长宽都发生变化
CvInvoke.BitwiseAnd(image, mask, resImag);
}
return resImag;
}
返回的图像是只保留RIO区域,其他区域为黑色的 与原图像大小相同的新图像。