第一个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语言入门教程: 一个简单的实例
对于学习要保持敬畏! 语言不只是一种工具,还是一种资源,因此,善待它,掌握它! 我们知道,对于未知通常都会充满好奇和畏惧,既想了解它,又害怕神秘面纱隐藏的不确定性.对于一门编程语言同样如此,我将以 ...
随机推荐
- jquery测试文档
Jquery版本:* jQuery JavaScript Library v1.3.2 * http://jquery.com/ 引用:<script src="JS/jquery.j ...
- 很多程序员都没搞明白的时间与时区知识 - 24时区/GMT/UTC/DST/CST/ISO8601
全球24个时区的划分 相较于两地时间表,可以显示世界各时区时间和地名的世界时区表(World Time),就显得精密与复杂多了,通常世界时区表的表盘上会标示着全球24个时区的城市名称,但究竟 ...
- 关于Git GUI的使用方式
1.选择Clone Existing Repository 2.选择clone地址和存放位置,然后clone 3失败 4如果失败,让对方去这里(github的界面)邀请下,如果是自己就不用 5然后等待 ...
- Netty源码分析--NIO(一)
好久没写博客了,最近打算花些时间把Netty的源码好好读一读,下面是本人在学习的过程中的一些笔记,不能确保自己思考的完全是正确的,如果有错误,欢迎大家指正. 由于本人的语文功底烂的很,通篇使用大白话来 ...
- Kafka 学习之路(三)—— Kafka生产者详解
一.生产者发送消息的过程 首先介绍一下Kafka生产者发送消息的过程: Kafka会将发送消息包装为ProducerRecord对象, ProducerRecord对象包含了目标主题和要发送的内容,同 ...
- C#常用设计模式--单例模式
为什么要使用单例模式 在我们的整个游戏生命周期当中,有很多对象从始至终有且只有一个.这个唯一的实例只需要生成一次,并且直到游戏结束才需要销毁. 单例模式一般应用于管理器类,或者是一些需要持久化存在的 ...
- request - cookie操作(二)
from urllib import request,parsefrom http.cookiejar import CookieJarheaders = { "User-Agent&quo ...
- 经典Java笔试面试题
面向对象编程(OOP) Java是一个支持并发.基于类和面向对象的计算机编程语言.下面列出了面向对象软件开发的优点: 代码开发模块化,更易维护和修改. 代码复用. 增强代码的可靠性和灵活性. 增加代码 ...
- SqlServer导入大文件Sql
sqlcmd -S "192.168.1.218" -U "sa" -P "1qaz~xsw2" -d "SispMain&quo ...
- 如何使用JavaScript导入和导出Excel文件
本文由葡萄城技术团队于原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. JavaScript是一个涵盖多种框架.直译式.可以轻松自定义客户端的脚本 ...