摘要
本章节将会介绍如何使用 EmguCV 套件进行影像读取,若未使用 NuGet 安装EmguCV套件请参照上一篇文章[VS] C# - 使用 NuGet 进行套件安装进行安装。
实作
介面设置
主程式介面请参照图一所示,元件功能如下所述:
textBoxImagePath: 显示选择档案(图像)路径。buttonGetImagePath: 一开始会出现让使用选择路径视窗,并该使用者选择完档案(*.bmp)时显示影像。pictureBoxDisplayImage: 显示使用者选择档案的影像。
图一 MainForm介面
引用与全域变数
即便使用 NuGet 把套件安装至专案,也需要透过 using
的方式把套件引用至类别,因此还是要针对套件进行引用。
using Emgu.CV;using Emgu.CV.Structure;
string m_imagePath;Image<Bgr, Byte> m_image;
备注:若使用
Image<Bgr, Byte>
底下出现错误,请注意是否引用using Emgu.CV.Structure
。
选择档案路径
把路径写死固然容易,但我习惯为了让整个软体写的比较弹性化,因此这边採用的是路径选择视窗
让使用者选择位置,当然也可以把路径写死。
下面是常用的路径选择:
OpenFileDialog: 选择已存在的档案,回传路径如C:\Users\Nil\doc\image.bmp
。FolderBrowserDialog: 选择路径,回传路径如C:\Users\Nil\doc
。SaveFileDialog: 保存档案路径,使用者可定义档案名称如C:\Users\Nil\doc\{fileName}
。private void buttonGetImagePath_Click(object sender, EventArgs e){ OpenFileDialog ofd = new OpenFileDialog(); // 显示预设路径。 ofd.InitialDirectory = "./"; // 设定档案储存类型範例为.bmp若要增加其他类型可使用{名称}|.{类型}。 ofd.Filter = "Bitmap Files|*.bmp"; ofd.Title = "选择影像档案"; // 纪录最后视窗路径位置。 ofd.RestoreDirectory = true; // 显示视窗,当按下确定(OK)时进入。 if (ofd.ShowDialog() == DialogResult.OK) { // 保存使用者选择档案的路径位置 m_imagePath = ofd.FileName; textBoxImagePath.Text = m_imagePath; // 读取影像并显示。 DisplayImage(m_imagePath); }}
读取影像
private void DisplayImage(string path){ try { // 为 Bitmap 读取方式。 // Bitmap bitmap = new Bitmap(m_imagePath); // 该方法则为 EmguCV 的读取方式。 m_image = new Image<Bgr, byte>(path); pictureBoxDisplayImage.Image = (Bitmap)m_image.ToBitmap().Clone(); pictureBoxDisplayImage.Invalidate(); } catch (Exception ex) { Console.WriteLine(ex.Message); }}
Color 与 Depth 描述:
Color: Gray, Bgr, Bgra, Hsv, Hls, Lab, Luv, Xyz, Ycc, Rgb or Rbgaepth: Byte, SByte, Single, double, UInt16, Int16 or Int32Image<TColor, TDepth>
结果
图二 选择档案视窗
图三 显示影像
结论
本篇文章透过选择档案视窗的方式取得使用者的路径,并使用 EmguCV 的套件进行影像的读取并显示,虽然使用 Bitmap
也可以将影像读入,但之后若要使用 EmguCV 的套件进行影像处理就可以不用将 Bitmap
再次转换成 EmguCV的格式。
GitHub: Link.