第一个C# Winform实例
前面我们准备好了相关的库,现在开始搭建环境,本人自动化行业,就用Windorm开发吧,例子仅仅做引导,希望大家能深入。VS版本VS2017
1:打开VS建立一个WInform 项目。拉入两个控件,groupbox,picturebox放到左侧,右侧也拉入一个groupbox,里面放入两个button.一个用来选择图片,一个用来测试二值化的效果。UI效果如下:
2:本人系统win10,64位。所以用OpencvSharp的64位库。先在项目里添加引用:(net461版本);然后在类里添加 using OpenCvSharp;最后根据个人项目平台,选择新建X64或者X86,用anycpu 容易出问题。好了,经过上面的准备,OpencvSharp相关库所有的东西都可以调用了。
3:图像少不了显示,我们新建一个类,用来管理OpencvSharp的图片显示。
public class SharpWindows
{ [DllImport("user32.dll", SetLastError = true)]
private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll", SetLastError = true)]
private static extern int SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
private PictureBox pictureBox;
private Control Parentform;
public Window Opencvwin;
public SharpWindows(PictureBox _pictureBox,string winname)
{
pictureBox = _pictureBox;
Cv2.NamedWindow(winname);
Opencvwin = new Window(winname, WindowMode.FullScreen);
Cv2.SetWindowProperty(Opencvwin.Name, WindowProperty.Fullscreen, );
IntPtr Childwin = FindWindow(null, winname);
SetParent(Childwin, _pictureBox.Handle);
Parentform = Control.FromHandle(_pictureBox.Handle); }
public void Showimg(Mat img)
{
try
{
int width = Parentform.Width;
int height = Parentform.Height;
Cv2.ResizeWindow(Opencvwin.Name, width, height);
Cv2.MoveWindow(Opencvwin.Name, Parentform.Left, Parentform.Top);
Cv2.SetWindowProperty(Opencvwin.Name, WindowProperty.Fullscreen, );
Opencvwin.ShowImage(img); }
catch(Exception ex)
{
throw (ex); } }
}
4.在winform主UI里面初始化一个OpencvSharp的显示窗口:(同时创建一个Mat变量)
SharpWindows Imgwindow;
Mat rawimg;
public OpencvSharpWindow()
{
InitializeComponent();
Imgwindow = new SharpWindows(this.pictureBox1, "MainUIwindow");
}
5.两个button点击事件:
private void button_Openpic_Click(object sender, EventArgs e)
{
try
{
var filename= OpenfileDlg();
if(filename!=null&& filename!="")
{
Mat img = Cv2.ImRead(filename);
Imgwindow.Showimg(img);
rawimg = img.Clone();
img.Dispose();
} }
catch(Exception ex )
{
throw (ex); }
}
private static string OpenfileDlg(string Defaultpath = null)
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Title = "请选择要打开的文件";
//多选
ofd.Multiselect = true;
//初始目录
ofd.InitialDirectory = Defaultpath;
//设定文件类型
// ofd.Filter = "*.bmp | *.jpg"; ofd.ShowDialog(); //获得在打开文件对话框中选择的文件的路径
string path = ofd.FileName;
return path;
} private void button_Test_Click(object sender, EventArgs e)
{
try
{
if(rawimg!=null)
{
//转灰度
Mat grayimg;
if (rawimg.Channels()==3)
{
grayimg = rawimg.CvtColor(ColorConversionCodes.BGR2GRAY); }
else
{
grayimg = rawimg.Clone();
}
Imgwindow.Showimg(grayimg);
//bin
double dvalue = 0;
double.TryParse(textBox_ThreshValue.Text, out dvalue);
if(dvalue==0)
{
dvalue = 10;
} Mat binimg = grayimg.Threshold(dvalue, 255, ThresholdTypes.Binary);
Imgwindow.Showimg(binimg);
grayimg.Dispose();
binimg.Dispose(); } }
catch(Exception ex)
{
throw (ex);
} }
6.代码敲完。剩下我们测试一下效果:
点击打开图片按钮,选择需要显示的图片,我网上下载了一张,UI那里就有显示了,还是很直观方便的。
接着我们测试一下简单的二值化效果。在text文本框里分别填入50,100,200,220效果分别如下:
本次实例结束。希望大家动手操作,这样才能学习到东西。
各位,如果需要我的源码,请留言,谢谢!
第一个C# Winform实例的更多相关文章
- 一个利用 Parallel.For 并行处理任务,带有进度条(ProgressBar)的 WinForm 实例(下)
接着上一篇:一个利用 Parallel.For 并行处理任务,带有进度条(ProgressBar)的 WinForm 实例(上) 直接贴代码了: using System; using System. ...
- 14.5.5.1 An InnoDB Deadlock Example 一个InnoDB 死锁实例
14.5.5.1 An InnoDB Deadlock Example 一个InnoDB 死锁实例 下面的例子演示了一个错误可以发生当一个lock 请求会导致一个死锁,例子设计2个客户端,A和B: J ...
- HOOK API (一)——HOOK基础+一个鼠标钩子实例
HOOK API (一)——HOOK基础+一个鼠标钩子实例 0x00 起因 最近在做毕业设计,有一个功能是需要实现对剪切板的监控和进程的防终止保护.原本想从内核层实现,但没有头绪.最后决定从调用层入手 ...
- puppet一个完整的实例
一个具体实例来简单说明puppet的具体结构 创建第一个配置 puppet的组成清单这主要包含这几个部分 资源,文件,模板,节点,类,定义 puppet中有个模块的定义,这个比较重要,基本是puppe ...
- 给easyui datebox时间框控件扩展一个清空的实例
给easyui datebox扩展一个清空的实例 步骤一:拓展插件 /** * 给时间框控件扩展一个清除的按钮 */ $.fn.datebox.defaults.cleanText = '清空'; ( ...
- iOS 9音频应用播放音频之第一个ios9音频实例2
iOS 9音频应用播放音频之第一个ios9音频实例2 ios9音频应用关联 iOS9音频应用中对于在主视图上添加的视图或控件,在使用它们时必须要与插座变量进行关联.ios9插座变量其实就是为主视图中的 ...
- iOS 9音频应用播放音频之第一个ios9音频实例
iOS 9音频应用播放音频之第一个ios9音频实例 第一个ios9音频实例 为了让开发者可以对上面的内容有更加深入的了解,本节将实现播放音频的第一个实例.在此实例中会涉及到项目的创建.界面设计.关联以 ...
- 第一个AngularJS表达式实例
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
- C语言入门教程: 一个简单的实例
对于学习要保持敬畏! 语言不只是一种工具,还是一种资源,因此,善待它,掌握它! 我们知道,对于未知通常都会充满好奇和畏惧,既想了解它,又害怕神秘面纱隐藏的不确定性.对于一门编程语言同样如此,我将以 ...
随机推荐
- Hibernate注解(二):关联关系映射注解
关联关系映射注解以下项目均在之前相应代码的基础上进行的修改.这些项目均需要做的是: 删除映射文件 在hibernate.cfg.xml中注册实体类 注解的重要位置在实体类中关联属性上.这里是关联 ...
- ElasticSearch2.3.1环境搭建哪些不为人知的坑
首先说明一点,大家最好不要用什么尝鲜版,用比稳定版就好了,要不麻烦不断,另外出了问题,最好去官网,或者google搜索,因为这样靠谱些,要不现在好多都是低版本的,1.4的什么的,结果按照安装,多少情况 ...
- Mac上使用brew安装nvm来支持多版本的Nodejs
brew方式 如果机器没有安装过node,那么首先brew install nvm安装nvm. 其次需要在shell的配置文件(~/.bashrc, ~/.profile, or ~/.zshrc)中 ...
- CentOS 7 时间同步方法
centos 7 时间同步使用的是chrony工具 1.检测chrony包是否安装 [root@martin ~]# rpm -qa|grep chrony 2.安装chrony [root@mart ...
- JVM检测&工具
前几篇篇文章介绍了介绍了JVM的参数设置并给出了一些生产环境的JVM参数配置参考方案.正如之前文章中提到的JVM参数的设置需要根据应用的特性来进行设置,每个参数的设置都需要对JVM进行长时间的监测,并 ...
- Unity Shader 玻璃效果
一个玻璃效果主要分为两个部分,一部分是折射效果的计算,另一部分则是反射.下面分类进行讨论: 折射: 1.利用Grass Pass对当前屏幕的渲染图像进行采样 2.得到法线贴图对折射的影响 3.对采集的 ...
- RestTemplate使用不当引发的问题分析
背景 系统: SpringBoot开发的Web应用: ORM: JPA(Hibernate) 接口功能简述: 根据实体类ID到数据库中查询实体信息,然后使用RestTemplate调用外部系统接口获取 ...
- 【Spring源码解析】—— 策略模式在Spring中的应用
一. 什么是策略模式 策略模式的定义/含义:策略本身就是为了实现某一个目标而采取的一种工作方式,因此只要能够达成目标,则采取哪一种策略都可以:因此多种实际的策略之间是相互平行的. 注意 ...
- Filebeat 7.1.1 安装及使用(连接ES)
1. 下载 & 解压 # 下载 wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.1.1-linux- ...
- Ural 2072:Kirill the Gardener 3(DP)
http://acm.timus.ru/problem.aspx?space=1&num=2072 题意:有n朵花,每朵花有一个饥渴值.现在浇花,优先浇饥渴值小的(即从小到大浇),浇花需要耗费 ...