C# OCR Pre处理

    public Image RotateImg(Image b, int angle)
    {
        angle = angle % 360;
        //弧度转换
        double radian = angle * Math.PI / 180.0;
        double cos = Math.Cos(radian);
        double sin = Math.Sin(radian);
        //原图的宽和高
        int w = b.Width;
        int h = b.Height;
        int W = (int)(Math.Max(Math.Abs(w * cos - h * sin), Math.Abs(w * cos + h * sin)));
        int H = (int)(Math.Max(Math.Abs(w * sin - h * cos), Math.Abs(w * sin + h * cos)));
        //目标位图
        Bitmap dsImage = new Bitmap(W, H);
        System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(dsImage);
        g.FillRectangle(Brushes.White, new Rectangle(0, 0, W, H));

        g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.Bilinear;
        g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
        //计算偏移量
        Point Offset = new Point((W - w) / 2, (H - h) / 2);
        //构造图像显示区域:让图像的中心与窗口的中心点一致
        Rectangle rect = new Rectangle(Offset.X, Offset.Y, w, h);
        Point center = new Point(rect.X + rect.Width / 2, rect.Y + rect.Height / 2);
        g.TranslateTransform(center.X, center.Y);
        g.RotateTransform(360 - angle);
        //恢复图像在水平和垂直方向的平移
        g.TranslateTransform(-center.X, -center.Y);
        g.DrawImage(b, rect);
        //重至绘图的所有变换
        g.ResetTransform();
        g.Save();
        g.Dispose();
        //保存旋转后的图片
        b.Dispose();
        dsImage.Save("FocusPoint.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
        return dsImage;
    }
	
	
	public void BitmapToBpp(double hsb)
{
int w = this.bmpobj.Width;
int h = this.bmpobj.Height;
Bitmap bmp = new Bitmap(w, h, PixelFormat.Format1bppIndexed);
BitmapData data = bmp.LockBits(new Rectangle(0, 0, w, h), ImageLockMode.ReadWrite, PixelFormat.Format1bppIndexed);
for (int y = 0; y < h; y++)
{
	byte[] scan = new byte[(w + 7) / 8];
	for (int x = 0; x < w; x++)
	{
		if ((double)this.bmpobj.GetPixel(x, y).GetBrightness() >= hsb)
		{
			byte[] array = scan;
			int num = x / 8;
			array[num] |= (byte)(128 >> x % 8);
		}
	}
	Marshal.Copy(scan, 0, (IntPtr)((int)data.Scan0 + data.Stride * y), scan.Length);
}
bmp.UnlockBits(data);
this.bmpobj = bmp;
}

public void GrayByPixels()
{
if (this.bmpobj != null)
{
	for (int i = 0; i < this.bmpobj.Width; i++)
	{
		for (int j = 0; j < this.bmpobj.Height; j++)
		{
			Color curColor = this.bmpobj.GetPixel(i, j);
			int ret = (int)((double)curColor.R * 0.299 + (double)curColor.G * 0.587 + (double)curColor.B * 0.114);
			this.bmpobj.SetPixel(i, j, Color.FromArgb(ret, ret, ret));
		}
	}
}
}

转载于:https://my.oschina.net/sqhua/blog/3036260

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值