放大/缩小 PictureBox 但保持像素比例 c#
enlarge / shrink PictureBox but maintain pixel ratio c#
我找不到更好的标题了。
所以这就是我想要做的:
我有一个 28x28 像素的图片框
我正在做一个人工智能项目,我的想法是为数字制作一个 OCR,
我找到了训练数据,但所有图像都是 28x28 像素,
所以我的想法是制作一个这样大小的图片框,
利用它并将该信息提供给神经网络。
我的问题目前是图形化的:
我如何制作一个 28x28 的图片框并以某种方式放大它但保持像素数。
我把图片框放到一个面板里,我想让图片框填满面板。
我的想法是以某种方式放大它,然后在绘制后缩小它,但我该如何实现呢?
数学上如何做到这一点?
在该图片框(线、圆角等)上绘制的最佳方式是什么,以便可以将数据输入神经网络(在对其进行归一化之后)。
我想出了一个解决方案,也许它对以后的人有帮助:
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;
}
我找不到更好的标题了。 所以这就是我想要做的:
我有一个 28x28 像素的图片框
我正在做一个人工智能项目,我的想法是为数字制作一个 OCR,
我找到了训练数据,但所有图像都是 28x28 像素, 所以我的想法是制作一个这样大小的图片框,
利用它并将该信息提供给神经网络。
我的问题目前是图形化的:
我如何制作一个 28x28 的图片框并以某种方式放大它但保持像素数。 我把图片框放到一个面板里,我想让图片框填满面板。
我的想法是以某种方式放大它,然后在绘制后缩小它,但我该如何实现呢?
数学上如何做到这一点?
在该图片框(线、圆角等)上绘制的最佳方式是什么,以便可以将数据输入神经网络(在对其进行归一化之后)。
我想出了一个解决方案,也许它对以后的人有帮助:
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;
}