Emgu cv将CircleF保存为图像

时间:2014-02-06 16:20:40

标签: c# opencv image-processing geometry emgucv

我是图像处理新手,在我的应用程序中,我想将检测到的圆圈保存为新图像,以下代码用于存储检测到的圆圈。

  

新的CircleF(新的PointF(圆圈[0] .Center.X +   grayframeright_1.ROI.Left,圆圈[0] .Center.Y +   grayframeright_1.ROI.Top),circles [0] .Radius);

emgu cv / open cv中是否有任何方法可以将圆圈保存为新图像?

请帮我解决这个问题,代码示例会很有用。

提前致谢

1 个答案:

答案 0 :(得分:3)

如果我理解你想要的是有一个覆盖圆圈区域的面具并将此蒙版应用于图像。

为此你需要一个面具:

//img is the image you applied Hough to
Image<Gray, byte> mask = new Image<Gray, byte>(img.Width, img.Height);

掩码将是黑色图像。您需要在此图像中绘制圆的区域:

CvInvoke.cvCircle(mask.Ptr, center, radius, new MCvScalar(255, 255, 255), -1, Emgu.CV.CvEnum.LINE_TYPE.CV_AA, 0);
//-1 is to fill the area

现在,蒙版将有一个白色圆圈,其中心位于center点和半径radius。在原始图像和此蒙版之间执行AND操作将仅将蒙版为白色的点(绘制圆圈的位置)复制到新图像。

Image<Bgr, byte> dest = new Image<Bgr, byte>(img.Width, img.Height);
dest = img.And(img, mask);

您现在可以将dest保存为常用图像

dest.Save("C:/wherever...");

如果图像太大且圆圈太小,您可以缩小图像尺寸设置图像ROI,然后再将其保存为圆圈周围的区域:

dest.ROI = new Rectangle(center.X - radius, center.Y - radius, radius * 2, radius * 2);