C# EmguCV图像处理实例

💡 原文中文,约4100字,阅读约需10分钟。
📝

内容提要

本文介绍了使用Emgu.CV库进行图像处理的方法,包括添加图片、去色和显示功能。通过导入相关命名空间和控件,可以实现选择图片并显示,去色并显示,载入新图片并去色显示,清除所有内容的功能。

🔎

延伸解读

EmguCV 环境配置与控件布局

使用 EmguCV 前需导入 Emgu.CV.UI.dll 和 Emgu.CV.World.dll,并在代码中引用 Emgu.CV 命名空间。界面设计上,拖放三个 ImageBox 用于显示图像,三个 TextBox 用于输出耗时,四个 Button 分别控制图片加载、去色、载入新图去色和清除。这种布局将功能与显示分离,便于观察每一步的处理结果。

图像去色的实现与性能测量

去色功能通过 CvInvoke.CvtColor 将彩色图转换为灰度图,目标类型为单通道 8 位。代码中使用 Stopwatch 记录操作耗时,并显示在 TextBox 中,方便对比不同图片的处理速度。注意去色前需确保 img1 不为空,否则不会执行转换。

两种图片加载方式的区别

button1 使用 CvInvoke.Imread 以 AnyColor 模式加载图片,保留原始色彩;button3 则直接以 Grayscale 模式加载,一步得到灰度图。前者适合需要彩色显示的场景,后者适合直接处理灰度图像。两者都通过 OpenFileDialog 选择文件,并支持常见图片格式。

清除功能与内存管理

button4 将三个 Mat 对象置为 null,并清空 ImageBox 和 TextBox 的内容。这有助于释放图像占用的非托管内存,避免长时间运行后内存累积。但需注意,如果其他代码仍引用这些 Mat,置 null 不会立即释放资源,应确保没有其他引用。

❓

Q&A

使用EmguCV进行图像处理需要导入哪些库和命名空间?

需要导入Emgu.CV.UI.dll和Emgu.CV.World.dll库,并在程序中添加using Emgu.CV;和using System.Diagnostics;命名空间。

在WinForms中如何设计界面来展示EmguCV图像处理效果?

在主窗体上拖放3个ImageBox控件、3个TextBox控件和4个Button控件。

button1按钮的功能是什么?如何实现?

button1用于添加图片并显示到ImageBox1中。实现方式:使用OpenFileDialog选择图片文件,通过CvInvoke.Imread读取图片,然后将图片赋值给imageBox1.Image,并调整ImageBox大小,同时用Stopwatch记录耗时显示在textBox1中。

如何将彩色图片转换为灰度图并显示?

使用CvInvoke.CvtColor方法,将源Mat(如img1)转换为灰度图(目标Mat如img2),颜色转换类型为Emgu.CV.CvEnum.ColorConversion.Bgr2Gray,然后将灰度图赋值给ImageBox显示。

button3按钮与button1和button2有何不同?

button3直接载入新图片并去色,然后显示到ImageBox3中。它使用CvInvoke.Imread读取图片时指定LoadImageType.Grayscale,一步完成加载和去色,而button1只加载彩色图片,button2对已有图片去色。

如何清除所有图片和文本框内容?

在button4的点击事件中,将img1、img2、img3设置为null,将imageBox1、imageBox2、imageBox3的Image属性设置为null,并将textBox1、textBox2、textBox3的Text属性设置为null。

如何用EmguCV创建一张纯色图像并显示?

使用Image<Bgr, byte>构造函数创建图像,例如new Image<Bgr, byte>(320, 240, new Bgr(0, 0, 255))创建一张320x240的红色图像,然后赋值给ImageBox的Image属性显示。

如何加载当前目录下的图片并显示?

使用CvInvoke.Imread(Environment.CurrentDirectory + "\\1.jpg")读取图片,然后将返回的Mat赋值给ImageBox的Image属性显示。

🏷️

标签

➡️

继续阅读