2013-07-12 4 views
1

J'ai besoin de dessiner le cercle le plus parfait possible. EmguCV semble manquer d'une option anti-aliasing. J'essaie d'utiliser SmoothGaussian, mais le cercle ne semble toujours pas assez bon/lisse.Comment dessiner un cercle avec un antialiasing et une intensité de ligne gaussienne en utilisant EmguCV (OpenCV)?

De même, l'intensité de la ligne de cercle doit avoir une forme gaussienne (c'est-à-dire plus claire au centre).

Comment puis-je y parvenir?

Voici ce que je fais maintenant:

using (Image<Gray, Byte> img = new Image<Gray, byte>(800, 800, new Gray(0))) 
{ 
    PointF center = new PointF(img.Width/2, img.Height/2); 
    //Center line 
    float r = 200.0f; 
    CircleF circle = new CircleF(center, r); 
    img.Draw(circle, new Gray(255), 1); 
    img._SmoothGaussian(7, 7, 3, 3); 
} 
+0

en C++/python, il y a l'option [CV_AA] (http://docs.opencv.org/modules/core/doc/drawing_functions.html#line) – berak

Répondre

3

Si vous utilisez Gis, Brga ou de couleur gris vous pouvez utiliser cette astuce:

using(var graph = Graphics.FromImage(image.Bitmap)) 
{ 
    graph.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias; 
    graph.DrawEllipse(new Pen(color.BackColor), x, y, d`i`ameter, diameter); 
} 

` Edit: Vous pouvez également utiliser cvInvoke

var center = new Point(x, y); 
var color = new Bgr(this.color.BackColor); 

CvInvoke.cvCircle(image.Ptr, center, radius, color.MCvScalar, thickness, Emgu.CV.CvEnum.LINE_TYPE.CV_AA, 0); 

`

+0

Merci, je vais essayer quand j'ai le temps. – Pedro77

Questions connexes