⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 form1.cs

📁 关于图像处理的源代码
💻 CS
📖 第 1 页 / 共 2 页
字号:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace 课程设计
{
    public partial class 数字图像处理课程设计 : Form
    {
        public 数字图像处理课程设计()
        {
            InitializeComponent();
        }
        Graphics gf;
        Bitmap box;
        int[] CountR = new int[256];
        int pX;
        int pY;
        int dx;
        int dy;
        private void 打开ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            OpenFileDialog op = new OpenFileDialog();
            op.Filter = "Bmp File(*.bmp)|*.bmp";
            if (op.ShowDialog() == DialogResult.OK)
            {
                this.box = new Bitmap(op.FileName);
                this.pictureBox1.Image = box;
                this.pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage ;
            }
        }

        private void 保存ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            string str;
            this.box = new Bitmap(this.pictureBox2.Image);
            SaveFileDialog sfd = new SaveFileDialog();
            sfd.Filter = "Bmp File(*.bmp)|*.bmp";
            sfd.ShowDialog();
            str = sfd.FileName;
            box.Save(str);
        }

        private void 绘制直方图ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            pictureBox1.Visible = true;
            this.progressBar1.Visible = true;
            this.pictureBox2.Refresh();
            int R = 0;
            this.box = new Bitmap(pictureBox1.Image);
            for (int i = 0; i < 256; i++)
            {
                CountR[i] = 0;
            }
            for (int i = 0; i < box.Width; i++)
            {
                for (int j = 0; j < box.Height; j++)
                {
                    R = box.GetPixel(i, j).R;
                    CountR[R]++;

                }
            }
            int M = 0;
            for (int i = 0; i < 256; i++)
            {
                M += CountR[i];
            }
            Pen mypen = new Pen(Color.Blue, 1);
            Point pS1 = new Point(0, (this.Height - 20));
            for (int k = 0; k < 256; k++)
            {

                int q = CountR[k]/5 ;
                Point p1 = new Point((pS1.X + k), (this.Height - 20 - q));
                Point p2 = new Point((pS1.X + k), (this.Height - 20));
                gf.DrawLine(mypen, p1, p2);
                progressBar1.Maximum = 255;
                this.progressBar1.Value = k;
            }
            this.progressBar1.Hide();
        }

        private void 数字图像处理课程设计_Load(object sender, EventArgs e)
        {
            gf = pictureBox2.CreateGraphics();
            
        }

        private void 灰度图像ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.progressBar1.Visible = true;
            Color c = new Color();
            this.box = new Bitmap(this.pictureBox1.Image);
            int rr, gg, bb, cc;
            
            for (int i = 0; i < box.Width; i++)
            {
                for (int j = 0; j < box.Height; j++)
                {
                    c = box.GetPixel(i, j);
                    rr = c.B;
                    gg = c.G;
                    bb = c.B;
                    cc = (int)((rr + gg + bb) / 3);
                    if (cc < 0) cc = 0;
                    if (cc > 255) cc = 255;
                    Color c1 = Color.FromArgb(cc, cc, cc);
                    box.SetPixel(i, j, c1);
                }
                this.progressBar1.Maximum = box.Width;
                this.progressBar1.Value = i;
                pictureBox2.Refresh();
                pictureBox2.Image = box;

            }
            progressBar1.Hide();
        }

        private void 二值化ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            progressBar1.Visible = true;
            this.box = new Bitmap(pictureBox1.Image);
            double n;
            int i, j, k;
            int[,] h = new int[10000, 10000];
            int r;
            int[] hd = new int[300];
            double[] p = new double[300];
            double[] tt = new double[300];
            double u = 0;
            double[] uu = new double[300];
            double[] w = new double[300];
            double[] b = new double[300];
            double max;
            double maxb = 0;
            int t;
            Color cc1 = Color.FromArgb(255, 255, 255);
            Color cc2 = Color.FromArgb(0, 0, 0);
            Color c = new Color();
            for (i = 1; i < box.Width; i++)
            {
                for (j = 1; j < box.Height; j++)
                {
                    c = box.GetPixel(i, j);
                    r = c.R;
                    h[i, j] = r;
                }
            }
            for (i = 1; i < box.Width; i++)
            {
                for (j = 1; j < box.Height; j++)
                {
                    for (r = 0; r < 255; r++)
                    {
                        if (h[i, j] == r)
                        {
                            tt[r]++;
                        }
                    }
                }
                for (t = 1; t < 256; t++)
                {
                    p[t] = tt[t] / (box.Width * box.Height);
                }
                for (t = 1; t < 256; t++)
                {
                    u = u + (t - 1) * p[t];
                }
                for (k = 1; k < 256; k++)
                {
                    uu[k] = uu[k - 1] + (k - 1) * p[t];
                    w[k] = w[k - 1] + p[k];
                    if (w[k] * (1 - w[k]) != 0)
                        b[k] = ((u * w[k] - uu[k]) * (u * w[k] - uu[k])) / (w[k] * (1 - w[k]));
                }
                max = b[0];
                for (k = 0; k < 255; k++)
                {
                    if (b[k] >= max)
                        max = b[k];
                }
                for (k = 0; k < 255; k++)
                {
                    if (b[k] >= max)
                        maxb = k;
                }
                n = maxb - 1;
                for (i = 1; i < box.Width; i++)
                {
                    for (j = 1; j < box.Height; j++)
                    {
                        c = box.GetPixel(i, j);
                        r = c.R;
                        if (r > (maxb - 1))
                            box.SetPixel(i, j, cc2);
                        else box.SetPixel(i, j, cc1);
                        
                    }
                    this.progressBar1.Maximum = box.Width;
                    this.progressBar1.Value = i;
                    pictureBox2.Refresh();
                    pictureBox2.Image = box;
                }
                progressBar1.Hide();
            }
        }

        private void 浮雕ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.progressBar1.Visible = true;
            Color c = new Color();
            Color cc = new Color();
            this.box = new Bitmap(pictureBox1.Image);
            int rr, gg, bb, r1, g1, b1, r2, g2, b2;
            for (int i = 0; i < pictureBox1.Image.Width - 1; i++)
            {
                for (int j = 0; j < pictureBox1.Image.Height - 1; j++)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -