3

私は matlab で顔のディクターを作成し、それを C# コードに変換しています。ほとんどすべてが完了しています。主に使っているのは

 System.Drawing.Bitmap b = new
        System.Drawing.Bitmap("C:*Location of file on computer*");

最初に画像を取得し、最終ステップでこのコードを持っています

public static void ratio(System.Drawing.Bitmap b, Dictionary<int, List<int>> map)
    {
        double height=0;
        double width=0;


        foreach (KeyValuePair<int, List<int>> place in map)
        {
            height = place.Value[2] - place.Value[3];
            width = place.Value[0] - place.Value[1];

            if( ((height/width) >= 1) && ((height/width) <=  2 ) )
                draw(b, place, map);
        }
    }

    public static void draw(System.Drawing.Bitmap bmp, KeyValuePair<int, List<int>> place, Dictionary<int, List<int>> map)
    {
        // Create pen.
        Pen blackPen = new Pen(Color.Black, 3);
        // Create coordinates of points that define line.

        int x1 = place.Value[1];   //topleft to topright
        int y1 = place.Value[3];
        int x2 = place.Value[0];
        int y2 = place.Value[3];

        int x3 = place.Value[0];   //topright to bottomright
        int y3 = place.Value[3];
        int x4 = place.Value[0];
        int y4 = place.Value[2];

        int x5 = place.Value[0];   //bottomright to bottomleft
        int y5 = place.Value[2];
        int x6 = place.Value[1];
        int y6 = place.Value[2];

        int x7 = place.Value[1];   //bottomleft to topleft
        int y7 = place.Value[2];
        int x8 = place.Value[1];
        int y8 = place.Value[3];

        // Draw line to screen.
        using (var graphics = Graphics.FromImage(bmp))
        {
            graphics.DrawLine(blackPen, x1, y1, x2, y2);
        }

        using (var graphics = Graphics.FromImage(bmp))
        {
            graphics.DrawLine(blackPen, x3, y3, x4, y4);
        }

        using (var graphics = Graphics.FromImage(bmp))
        {
            graphics.DrawLine(blackPen, x5, y5, x6, y6);
        }

        using (var graphics = Graphics.FromImage(bmp))
        {
            graphics.DrawLine(blackPen, x7, y7, x8, y8);
        }

    }

顔の周りにボックスを描きます。比率は、連結成分ラベリングから取得したラベルからの境界を使用して、人間の顔の適切な比率を見つけます (私の数値は作成されたものです) マップは、値として xmax、xmin、ymax、および ymin と共にラベル番号を含む辞書です。 . すべてがエラーなしでコンパイルされますが、私が今やろうとしているのは、顔の周りに描画されたボックスを使用して上記の画像を表示することです。その方法がわかりません

4

2 に答える 2

0

フォーム デザイナーで、PictureBoxコントロールをフォームに配置し、好きなように配置してサイズを変更します。必要に応じて (または必要に応じて)、プログラムで追加することもできます。

次に、フォームのイベントのイベント ハンドラーを追加しLoad、そのメソッドで次のコードを適用します。

System.Drawing.Bitmap b = new System.Drawing.Bitmap("C:*Location of file on computer*");
pictureBox1.Image = b;

次に、描画方法は次のようになります。

public static void draw(KeyValuePair<int, List<int>> place, Dictionary<int, List<int>> map)
{
    // Create pen.
    Pen blackPen = new Pen(Color.Black, 3);

    // Create coordinates of points that define line.
    int x1 = place.Value[1];   //topleft to topright
    int y1 = place.Value[3];
    int x2 = place.Value[0];
    int y2 = place.Value[3];

    int x3 = place.Value[0];   //topright to bottomright
    int y3 = place.Value[3];
    int x4 = place.Value[0];
    int y4 = place.Value[2];

    int x5 = place.Value[0];   //bottomright to bottomleft
    int y5 = place.Value[2];
    int x6 = place.Value[1];
    int y6 = place.Value[2];

    int x7 = place.Value[1];   //bottomleft to topleft
    int y7 = place.Value[2];
    int x8 = place.Value[1];
    int y8 = place.Value[3];

    // Draw line to screen.
    using (Graphics g = Graphics.FromHwnd(pictureBox1.Handle))
    {
        g.DrawLine(blackPen, x1, y1, x2, y2);
        g.DrawLine(blackPen, x3, y3, x4, y4);
        g.DrawLine(blackPen, x5, y5, x6, y6);
        g.DrawLine(blackPen, x7, y7, x8, y8);
    }

    pictureBox1.Invalidate();
}
于 2013-07-09T18:55:12.400 に答える