放大/缩小PictureBox,但保持像素比率c#

时间:2018-11-24 07:06:46

标签: c# neural-network ocr picturebox

我找不到更好的标题。 所以这就是我想要做的:

我有一个28x28像素的图片框

我正在从事一个AI项目,我的想法是为数字制作OCR,

我找到了训练数据,但所有图像均为28x28像素, 所以我的想法是制作一个这样大小的图片框,

在其上绘制并将该信息提供给神经网络。

我的问题目前在图形上:

如何制作28x28图片框并以某种方式放大它,但保持像素数。 我将图片框放入面板中,并且希望图片框填充面板。

我的想法是以某种方式将其放大,然后再将其按比例缩小,但是我该怎么做呢?

在数学上该怎么做?

在该图片框(线条,fillelipse等)上绘制的最佳方法是什么,以便可以将数据输入到NN中(在对c进行规范化之后)。

1 个答案:

答案 0 :(得分:0)

我想出了一个解决方案,也许它将在将来对某人有所帮助:

        List<KeyValuePair<int, int>> coordonateList = new List<KeyValuePair<int, int>>();
        // drawPictureBox size is 280 x 280  (28 * 10, 28 * 10)



        private void pbImage_MouseDown(object sender, MouseEventArgs e)
        {
            mouseDown = true;

        }

        private void drawPictureBox_MouseMove(object sender, MouseEventArgs e)
        {
            if (mouseDown)
            {
                Point point = drawPictureBox.PointToClient(Cursor.Position);
                DrawPoint((point.X), (point.Y));
            }
        }

        private void drawPictureBox_MouseUp(object sender, MouseEventArgs e)
        {
            mouseDown = false;
        }

        public void DrawPoint(int x, int y)
        {

            using (Graphics g = Graphics.FromImage(bitmap))
            {
                SolidBrush brush = new SolidBrush(Color.White);
                g.FillRectangle(brush, x, y, 10, 10);
                coordonateList.Add(new KeyValuePair<int,int>(x/10,y/10));
            }
            drawPictureBox.Image = bitmap;
        }
        private void zoomImage(Bitmap bitmap)
        {
            var result = new Bitmap(28,28);
            using (Graphics g1 = Graphics.FromImage(result))
            {
                SolidBrush brush = new SolidBrush(Color.White);

                foreach (var item in coordonateList)
                {
                    g1.FillRectangle(brush, item.Key, item.Value, 1, 1);
                }
            pictureBox1.Image = result;

        }