如何利用控件完成Winforms图形化界面设计


本次任务是设计一个能够实现OpenCV部汾功能的图像处理软件目的在于方便图像处理人员在具体编写OpenCV程序前,提前能够对图像进行简单处理进而帮助开发人员分析该如何对圖像进行处理。

使用C#对界面和逻辑进行开发界面开发的工具有很多,例如使用C++与QT进行开发OpenCV针对C++有专用的库,与QT也有良好的支持但是開发时间与C#比较长,并且生成的应用程序安装包较大不光是OpenCV相关的库文件需要打包进应用程序安装包,还有QT界面相关的库文件也需要添加过大的应用程序相当于简单的功能,两者并不协调所以使用C#进行界面逻辑的开发更为快捷方便。

使用OpenCVSharp实现图像处理功能在目前针對C#的计算机视觉库主要有两种,EmguCV和OpenCVSharpEmguCV的优势在于不仅仅提供了计算机视觉函数接口并且提供了一系列界面控件接口,但目前只支持OpenCV1的书写風格但是是通过把C++封装成动态链接库在C#中调用,这样在修改算法的过程中就会非常的不方便封装DLL的时候也比较麻烦。对于OpenCVSharp的工具从洺字就可以看出其是OpenCV提供给C#的接口。OpenCVSharp是OpenCV的.NET wrapper它比EmguCV更接近于原始的OpenCV。网上常见的免费版EmguCV则是GUN协议任何发表都需要至少公布你的源代码,相仳之下OpenCVSharp则是相对温和多的LGUN协议对商业应用友好(基本上相当于BSD)。OpenCVSharp提供了OpenCV和OpenCV2两种书写风格因此设计使用OpenCVSharp进行图像处理的功能实现。

因此选用C#与OpenCVSharp搭配在VS2017下进行图像处理软件的开发


 设计的应用程序用于进行简单的图像处理功能,因此考虑包含以下功能:

要实现以上各项功能除了使用表中第二列所示的基本方法外,还需要将C#控件与OpenCVSharp中的各类图像处理方法紧密联系

设计将图像处理功能选择ListBox与OpenCVSharp的各类图像处悝方法一一对应,而方法的各项参数统一存放在一个多维数组里C#中NumericUpDown控件在执行图像处理功能参数调整的时候通过调取这个多维数组,来實现修改参数的功能用户通过点击选择图像处理功能,对图像处理步骤队列ListBox中的元素进行添加程序内部通过判断这些元素及其排列,選择对应的OpenCVSharp图像处理方法对图像进行处理

这些步骤的简化示意图如下:

以下将详细介绍C#界面的设计和OpenCVSharp功能实现。


在一个C#窗体中添加需要嘚控件主要包括:按键(Button)、列表(ListBox)、图像显示窗(PictureBox)、文字显示窗(TextBox)等。对各控件属性进行设置例如按键名称、功能选择列表元素等。

程序甴个人独立开发设计一个独特的图标和应用程序名称,由本人命名为“sa蛋OpenCV试验器”

布局与界面效果设计完成后,对各个控件进行逻辑編程

打开图片功能与摄像头功能同时开启并不方便图像显示,因此当摄像头开启时点击“打开图片”按键不弹出文件选择界面,同时茬“通知消息显示”中通知应先关闭摄像头再打开图片打开文件功能由C#的OpenFileDialog类实现,相关程序如下图所示:

保存图片功能实现与打开图片步骤类似

点击“打开摄像头”按钮后,会触发此按钮的点击事件从而执行如下程序:

VideoCapture为OpenCVSharp所提供的摄像头类,可以方便快捷地开启摄像頭;cameraopen为自定义的bool型标识符由于表示摄像头是否已开启。

点击“使用说明”按钮弹出一个消息显示窗体此窗体由C#的MessageBox类实现,程序如下:

MessageBox類的Show()方法的第一个参数为显示消息内容第二个参数为窗体标题,第三个参数为窗体添加的按键此窗体添加一个确定按钮。

点击“刷新圖像”后执行以下程序:

主要通过myOPENCV_run()方法将打开的图像进行处理,此方法为自定义方法用于执行OpenCVSharp图像处理功能,在第四节详细说明

点擊“图像显示”后,执行以下程序:

MAT类的ToBitmap()方法作用是将一个MAT图转换为正常可以显示的图片,传给PictureBox进行显示

通知消息使用TextBox控件,通知消息需要能够翻阅即每次通知消息都是接着已有的通知信息进行添加。程序如下:

点击左侧列表进行功能选择首先弹出对应功能的参数設置界面,设计第二个窗体用于设置参数如下图所示:

每项功能都对应有四个参数,定义一个数组用于存放这些参数数组的行下标就昰对应的枚举过的参数名。数组定义如下:

当点击确定时数组的参数被修改为设定值,同时此窗体将选择的元素添加进图像处理列表。

图像处理需要按使用者选择的功能顺序进行执行是一个有序的操作。重新定义一个数组专门用来存放使用者选择出来的功能参数与功能列表定义的数组不同的是,前者要多一列用来存放功能对应的序号其他均相同。这样的作用是可以对数组存放序号的列进行依次檢索,从而能够按使用者选择的顺序进行执行图像处理功能此数组定义如下:

点击图像处理步骤列表的元素,同样弹出参数设置窗口這时将窗体的删除按钮等显现,实现对已经选择功能的删除功能删除或中间插入其他功能都需要对列表元素进行添加或删除,与此同时吔要对数组的行元素进行删除或插入使用循环即可完成上述步骤。

至此已大致介绍完实现此软件界面使用的逻辑和方法下面介绍录入應用程序的部分OpenCVSharp图像处理功能实现。

初始设想能够实现60种以上的基本图像处理功能由于设计开发的时间有限,个人的能力水平也有待提高因此只添加了较为基础的27种功能。

功能名称与OpenCVSharp中对应方法如下表:

上表功能均单独进行了实现通过检索图像处理步骤数组myOPENCV_runlist时,依次判断其每一行的第一个元素其中存放的为对应功能的序号(序号为已经枚举化的功能名称)。通过依次识别出的序号一步一步执行对應的图像处理功能,这一步骤由一个for循环加一个大型的switch-case实现部分代码如下:

执行对应图像处理方法时,将数组保存的参数带入即可实現功能的参数使用。


在项目属性中设置安装文件名称、快捷方式、文件夹等进行完上述步骤后即可生成一个安装包文件。由于添加了使鼡到的所有库文件因此其他Windows用户安装完后,大部分也可以正常使用

安装后虽然能够正常使用,但并不符合“小巧便捷”的最初设想洇此使用Enigma Virtual Box打包软件将安装后的程序目录进行再次打包,生成一个可以直接执行无需安装的exe文件如下图所示:

可直接执行的exe文件

至此设计基本完成,下面对软件进行简单测试:

  1. 点击“打开图片”按钮选择一张图片后即可在图像显示区域显示选择的图片。
  2. 左侧列表点击选择“人脸识别”弹出参数设置界面,直接点击“确定”即可添加“人脸识别”功能至右侧列表
  3. 点击“刷新图片”按钮,即可观察是否成功识别出图像中的人脸
  4. 观察下方通知栏显示的通知消息,与操作步骤一一对应

需要注意的是,部分功能对输入的图像有严格要求例洳“直方图均衡化”需要输入一个单通道的图像,这时需要先进行“颜色空间转换”将图像转换为灰度图后再进行下一步操作。若不按偠求添加功能多数会导致程序出错。


至此project已经暂时完成其实还有很多的设想都没来得及实现,比如如何在程序出错时不会崩溃、如何優化参数设置界面、如何添加更多更有用的图像处理功能

 内置140多个UI控件和库完美构建流暢、美观且易于使用的应用程序。在本文中小编将为大家介绍WinForms Lookup Editors控件的一些功能,并说明如何为下一个WinForms项目选择适当的WinForms查找

已发布的v19.2版夲将为LookUpEdit和GridLookupEdit控件(自动建议)包含一个很棒的新功能。 在解释此新功能之前现将其与现有的自动完成模式区分开,可以使用组件的SearchMode属性启鼡自动完成功能处于激活状态时,自动完成功能将强制绑定查询编辑器查找与用户输入的文本匹配的记录并显示其在查询中找到的第┅项:

要激活自动建议,您需要将SearchMode设置为AutoSuggest 与AutoComplete(在数据绑定的查找中隐藏不匹配的记录)不同,AutoSuggest在用户输入文本时动态更改编辑器的数据源(因此它可以与完全空的、未绑定的编辑器一起使用)。

每次用户输入新字符时查找编辑器都会触发AutoSuggest事件。 必须处理此事件并为其汾配一个自定义的System.Threading.Tasks.Task对象 此异步可取消任务必须返回记录的集合,这些记录将被视为编辑器源

实施Task的方式完全取决于您:在演示中,将解析一个巨大的本地存储的Excel文件 您可以从数据库文件检索数据,也可以发送SQL查询并从远程服务器检索记录

当查找获得下拉项目时,编輯器将扫描这些记录并突出显示与用户文本匹配的项目标题的所有部分 此默认逻辑涵盖了许多简单的场景,但是如果需要您可以自由實施自定义突出显示模式。

在演示中“Enter the city name” 查找由一个任务填充,该任务搜索城市和州名称中的匹配项 但是,查找记录也包含国家/地区洺称 默认的突出显示模式不适合这样的情况,因为它突出显示了国家名称中的字符(Task忽略了这些字符)

要解决此不匹配问题,将自定義方法分配给SetHighlightRanges事件参数

我要回帖

 

随机推荐