基于C#与opencv的图像处理应用程序

lonelyperson

发布日期: 2019-03-18 15:07:11 浏览量: 701
评分:
star star star star star star star star star star_border
*转载请注明来自write-bug.com

一、实验方案设计

  • 总体思路

    • 采用C#Form窗体应用程序进行实验,实现对两幅有重叠区域的图片进行分析处理,并无缝拼接
  • 关键步骤

    • 调用Windows文件系统接口打开图片文件,并输出到界面
    • 对两幅图片色彩度、大小等数据进行分析,以便进行相应处理
    • 分析图片重叠区域
    • 若图片高度相同,则按正常情况拼接
    • 若两幅图片色彩度不同,则以色彩度较高的图片为准进行拼接
    • 若两幅图片大小不同,则将较小图片放大后与另一张图片进行拼接
    • 调用Windows文件系统接口保存图片,图片名、路径自命名
    • 附加功能编写,设计图片按角度旋转、左右上下翻转、灰度化处理等

二、关键代码阐述

打开图片文件,处理时将图片副本进行处理、输出显示,以便还原图片状态

  1. //打开图片(采用输入流打开,防止文件被锁定而导致只能另存为无法保存)
  2. private void button1_Click(object sender, EventArgs e)
  3. {
  4. if (openFileDialog1.ShowDialog() == DialogResult.OK)
  5. {
  6. path = openFileDialog1.FileName;
  7. name = openFileDialog1.FileNames.ToString();
  8. FileStream file = new FileStream(path, FileMode.OpenOrCreate);
  9. pictureBox1.Image = Image.FromStream(file);
  10. bitmap = (Bitmap)pictureBox1.Image;
  11. w = bitmap.Width;
  12. h = bitmap.Height;
  13. pictureBox1.Image = bitmap.Clone() as Image;
  14. bar = (Bitmap)pictureBox1.Image.Clone();
  15. file.Close();
  16. }
  17. }

图片拼接。传入两个Image图片,对图片list遍历拼接

  1. private Image JoinImage(List<Image> imageList, int a)
  2. {
  3. //图片列表
  4. if (imageList.Count <= 0)
  5. return null;
  6. if (a == 0)
  7. {
  8. //横向拼接
  9. int width = 0;
  10. //计算总长度
  11. foreach (Image i in imageList)
  12. {
  13. width += i.Width;
  14. }
  15. //高度不变
  16. //int height = imageList.Max(x => x.Height);
  17. int height = imageList[1].Height;
  18. //构造最终的图片白板
  19. Bitmap tableChartImage = new Bitmap(width, height);
  20. Graphics graph = Graphics.FromImage(tableChartImage);
  21. //初始化这个大图
  22. graph.DrawImage(tableChartImage, width, height);
  23. //初始化当前宽
  24. int currentWidth = 0;
  25. foreach (Image i in imageList)

保存图片,图片名、路径自命名

  1. //另存为
  2. private void button8_Click(object sender, EventArgs e)
  3. {
  4. if (pictureBox1.Image == null)
  5. {
  6. MessageBox.Show("请导入图片文件");
  7. }
  8. else
  9. {
  10. saveFileDialog1.InitialDirectory = "";
  11. saveFileDialog1.Filter = "Bitmap (*.bmp)|*.bmp|JPEG (*.jpg)|*.jpg|EMF (*.emf)|*.emf|PNG (*.png)|*.png|GIF (*.gif)|*.gif|TIFF (*.tif)|*.tif";
  12. if (saveFileDialog1.ShowDialog() == DialogResult.OK)
  13. {
  14. string folderP = saveFileDialog1.FileName;
  15. Image img = pictureBox1.Image;
  16. img.Save(folderP);
  17. }
  18. }
  19. }

附加功能编写,设计图片按角度旋转、左右上下翻转、灰度化处理等

  1. //任意角度旋转
  2. private void button3_Click(object sender, EventArgs e)
  3. {
  4. if (textBox1.Text == ""&& pictureBox1.Image == null)
  5. {
  6. MessageBox.Show("请导入图片文件");
  7. }
  8. else if(textBox1.Text == "" && pictureBox1.Image != null)
  9. {
  10. MessageBox.Show("请输入旋转角度");
  11. }
  12. else
  13. {
  14. Bitmap a = new Bitmap(pictureBox1.Image);//得到图片框中的图片
  15. pictureBox1.Image = Rotate(Convert.ToInt32(textBox1.Text),a);
  16. bar = (Bitmap)pictureBox1.Image.Clone();
  17. }
  18. }
  19. //灰度化处理
  20. private void button5_Click(object sender, EventArgs e)
  21. {
  22. if (pictureBox1.Image == null)
  23. {
  24. MessageBox.Show("请导入图片文件");
  25. }
  26. else
  27. {
  28. Bitmap c = new Bitmap(pictureBox1.Image);
  29. pictureBox1.Image = GetGrayImage(c) as Image;
  30. bar = (Bitmap)pictureBox1.Image.Clone();
  31. }
  32. }

三、结论/程序运行情况

正常拼接

不同色彩度图片拼接

不同大小图片拼接

图片保存

附加功能:灰度化、翻转、角度旋转

四、小结

  • 了解到了许多数字图像处理相关方面的知识

  • 对Windows系统中调用、处理文件等方面有了更深的理解

  • 对openCV库有一定的认识

  • 代码遇到问题时要抓住步骤核心分析

上传的附件 cloud_download 基于C#与open CV的图像处理应用程序.zip ( 3.50mb, 2次下载 )
error_outline 下载需要12点积分

发送私信

曾经输掉的东西,只要你想,就一定可以再一点一点赢回来

15
文章数
25
评论数
最近文章
eject