- 博客(99)
- 收藏
- 关注
原创 Halcon 创建模版保存到本地并从文件夹读取模版进行匹配
在上一篇文章中提到了使用create_scaled_shape_model算子创建模版并进行模版匹配。这篇文章根据上一篇文章进行扩展,将创建的模版保存到本地并从本地读取模版进行匹配。
2024-02-29 10:47:02 1025
原创 Halcon 基于模型的模版匹配
适用场景:适用于目标尺寸可能有所变化,但形状保持不变的情况。例如,在识别不同大小但形状相同的物体时,可以使用create_scaled_shape_model来创建一个能够适应不同尺寸的形状模型。这里使用create_scaled_shape_model算子。方法:它允许用户指定一个形状模型在不同缩放比例下的表示。用途:该算子用于创建具有不同缩放比例的形状模型。
2024-02-27 17:32:22 554
原创 C# WInForm之使用log4net输出两个日志文件
本文主要介绍使用log4net输出两种日志。一个日志存放在Logs文件夹下,用来记录相机流程。另一个日志存放在Data文件夹下,记录结果。因此需要配置log4net来定义两个日志记录器(Logger)。每个Logger可以有自己的Appender,决定日志的输出目的地(例如控制台、文件等)。1.打开解决方案下的“App.config”文件,如下图所示:-- 第一个Logger -->-- 设置日志级别为"ALL",意味着这个Logger会记录所有级别的日志信息。
2024-01-12 11:01:51 1013
原创 C# 条件编译
上面写了两个define,会打印出“你使用的是免费版”,如果注释掉“#define FREE_VERSION”,会打印出“你使用的是专业版”,如果两个都注释掉,会打印出“你使用的版本未知”。C# 条件编译:根据不同的需求,编译生成不同的程序版本,条件编译是一种编译预处理命令,它是在编译代码之前对源代码进行处理。它可以根据条件,决定是否编译某段代码。如果你在debug模式下:会打印出“软件测试中”和“Excel梦想家软件代码”,但是如果你在release模式下:只会打印出“Excel梦想家软件代码”
2023-08-09 17:08:43 1139
原创 C# 扩展方法
注意看上述的代码使用的是 ExtendMyData.Average(myData),但如果能在类的实例自身上调用该方法,而不是创建另一个作用于它的类的示例,将会更优雅。假设该类是密封的,不能访问代码,或有其他的设计原因使这些方法不能工作,就不得不在另一个类中使用该类的公有可用成员编写一个方法。扩展方法必须包含关键字this作为它的第一个参数类型,并在后面跟着它所扩展的类的名称。声明扩展方法的类必须声明为static;扩展方法本身必须声明为static;
2023-08-08 17:02:08 342
原创 C# XML文档相关操作
注意点:XML是严格区分大小写的,XML标签也是成对出现的。当需要往节点里里面添加标签的时候使用InnerXml,追加XML文档,首先要判断XML文档存不存在,存在则。,若文件不存在,则创建第一行和根节点。XML 是可扩展的标记语言。XML:用来存储数据。
2023-08-02 09:25:37 690
原创 C# 事件
事件(Event) 基本上说是一个用户操作,如按键、点击、鼠标移动等等,或者是一些提示信息,如系统生成的通知。应用程序需要在事件发生时响应事件。例如,中断。C# 中使用事件机制实现线程间的通信。事件在类中声明且生成,且通过使用同一个类或其他类中的委托与事件处理程序关联。包含事件的类用于发布事件。这被称为 发布器(publisher) 类。其他接受该事件的类被称为 订阅器(subscriber) 类。事件使用 发布-订阅(publisher-subscriber) 模型。
2023-07-27 10:50:20 2550
原创 C# 匿名方法和Lambda表达式
C#2.0引入了匿名方法,C#3.0引入了Lambda表达式,匿名方法演变成Lambda表达式,在使用中我们更希望使用Lambda表达式来替代匿名方法。
2023-07-26 11:12:20 493
原创 C# 委托2
(1)声明一个委托类型。委托声明看上去和方法声明相似,只是没有实现块。(2)使用该委托类型声明一个委托变量(3)创建委托类型的对象,把它赋值给委托变量。新的委托对象包括指向某个方法的引用,这个方法和第一步定义的签名和返回类型一致。(4)选择为委托对象增加其他方法,这些方法必须与第一步中定义的委托类型有相同的签名和返回类型。这些方法可以来自于任何类或结构(5)调用委托(像调用方法一样调用委托),在调用委托的时候,其包含的每一个方法都会被执行。
2023-07-26 09:11:24 378
原创 C# 泛型委托
泛型委托解决了定义委托(不需要自己再命名委托),使用泛型委托后不用再自己定义委托,提高了使用委托效率。Func 最多支持16个参数,有返。Action 最多支持16个参数。Func 一个参数,有返。Action 两个参数。(1)Action(无返回值类型)(2)Func(有返回值类型)Action 无参无返。Action 一个参数。
2023-06-03 20:52:03 644
原创 C# 委托
(1)委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩展性。(2)利用委托实现封装与隔离,通过委托调用更灵活(3)委托是类型,与class同级,所以可定义在类外 ,委托类型规定方法的签名(方法类型):返回值类型,参数类型、个数、顺序。委托变量用来存储方法的引用。
2023-06-03 20:50:09 429
原创 C# 初识Winform
1.winform应用程序是一种智能客户端技术,我们可以使用winform应用程序帮助我么获得信息或者传输信息等。当点击窗体上的按钮,弹出窗体2,点击窗体2的按钮,弹出窗体3,点击窗体3的按钮,关闭所有窗体。4.在Main函数中创建的窗体对象,我们称之为这个窗体应用程序的主窗体。Name:后台要获得前台的控件对象,需要使用Name属性。也就意味着,当你将主窗体关闭后,整个应用程序都关闭了。注册事件:双击控件注册的都是控件默认被选中的那个事件。visible:指示一个控件是否可见。3.事件:发生一件事情。
2023-04-15 15:03:53 696
原创 C# 接口 interface
2.接口中的成员不允许添加访问修饰符,默认就是public,接口中不允许写具有方法体的函数。显示实现接口就是为了解决方法的重名问题。1.接口就是一个规范、能力。
2023-03-08 21:45:40 244
原创 C# 部分类和密封类
1.使用“partial ”关键字,可以在一个项目中同时存在多个相同名称的类。密封类关键字“sealed”,密封类不能被继承,但可以继承其他类。
2023-03-08 16:18:52 146
原创 C# 序列化和反序列化
将一个类标记为可以序列化:在类的上方标记“[Serializable]”。反序列化:就是将二进制转换为对象。序列化:就是将对象转换为二进制;
2023-03-08 16:06:03 363
原创 C# 值传递和引用传递
值类型:int、double、char、decimal、bool、enum、struct。引用类型:string 、数组、自定义类、集合、object、接口。引用类型在复制的时候,传递的是对这个对象的引用。值类型在复制的时候,传递的是这个值的本身。
2023-03-08 15:34:59 120
原创 C# 访问的修饰符
4.internal:只能在当前项目中访问。在同一个项目中,internal和public的权限是一样的;2.可访问性不一致,子类的访问权限不能高于父类的访问权限,会暴露父类的成员。3.protected:受保护的,只能在当前类的内部以及该类的子类中访问;1.能够修饰类的访问修饰符只有两个:public、internal.2.private:私有的,只能在当前类的内部访问;1.public:公开的、公共的;
2023-03-06 22:09:15 330
原创 C# 抽象类
当父类中的方法不知道如何去实现的时候,可以考虑将父类写成抽象类,将方法写成抽象方法3.总结4.抽象类练习计算长方形和圆的周长和面积模拟移动u盘、u盘、MP3
2023-03-05 22:03:35 353
原创 C#多态之虚方法
实现虚方法的步骤: /将父类的方法标记为虚方法,使用关键字virtual,这个函数可以被子类重写,子类的方法需要使用关键字override。优点:减少很多代码。
2023-03-05 21:50:29 233
原创 C# FileStream和StreamReader以及StreamWriter
将创建文件流对象的过程写在using当中,会自动的帮助我们释放流所占用的资源,写在using里面,就不需要些fs.Close()和fs.Dispose();FileStream是操作字节的,StreamReader和StreamWriter是操作字符的,重点掌握FileStream。重点:将创建文件流对象的过程写在using当中,会自动的帮助我们释放流所占用的资源。(1)FileStream读取文件中的内容。(3)将一个文件复制到另一个指定的目录下。
2023-03-04 16:29:36 641
原创 C# List泛型集合、拆箱和装箱、字典集合
1.创建泛型集合对象,List集合和ArrayList集合不同的是,ArrayList里面的类型任意,而List在创建的时候就已经规定好了类型。1.提示用户输入字符串,通过foreach循环将用户输入的字符串赋值给一个字符数组。2.统计Welcome to china中每个字符出现的字数,不考虑大小写。4.看两种类型是否发生了装箱或者拆箱,要看这两种类型是否存在继承关系。3.装箱浪费时间,代码中应尽量避免装箱和拆箱。1.装箱:就是将值类型转换为引用类型。2.拆箱:将引用类型转换为值类型。
2023-03-04 14:34:41 395
原创 C# File类 创建、删除、复制和读写文件
将文件中的内容读取到一个字节数组,将字节数组中的每一个元素都要按照我们指定的编码格式解码成字符串。乱码:产生乱码的原因,就是你保存这个文件所采用的编码,跟你打开这个文件所采用的编码格式不一样。第一个是原始文件,第二个是新复制出来的文件,文件里面的内容也随之被复制了。没有这个文件的话,会给你创建一个,有的话会给你覆盖掉文件中的原本内容。会覆盖原本文件中的内容,没有这个文件的话,会给你创建一个。会覆盖原本文件中的内容,没有这个文件的话,会给你创建一个。相对路径:文件相对于应用程序的路径。该方法读到的是字符串。
2023-03-04 11:48:06 1906
原创 C# Hashtable哈希表
Hashtable 键值对集合,对键和值的类型没有要求;在键值对集合中,是根据键去找值的;键值对对象[键]=值;注意:键值对集合中,键必须是唯一的,二值是可以重复的。
2023-02-25 13:59:37 586
原创 C# 里氏转换
(1)子类可以赋值给父类;如果有一个地方需要一个父类作为参数,我们可以给一个子类代替.(3)is表示类型转换,如果能够转换成功,则返回一个true,否则返回一个true。(4)as也表示类型转换,如果能够转换则返回对应的对象,否则返回一个null。(2)如果父类中装的是子类对象,那么可以将这个父类强转换为子类对象。主要记住下面两句精华,写代码的过程中经常用到里氏转换。(5)里氏转换小练习,直接附上代码。
2023-02-23 21:42:04 249
原创 C# 类的继承
1.我们可能会在一些类中,写一些重复的成员,我们可以将这些重复的成员,单独的封装到一个类中,作为这些类的父亲;5.代码块:父类:Person;子类:student;3.子类继承了父亲,那么子类从父亲哪里继承过来了什么?(1)继承的单根性,一个子类只能有一个父类;4.问题:子类有没有继承父类的构造函数?
2023-02-23 21:03:23 1975
原创 C# 字符串
(15) string.Join():将数组按照指定的字符串链接,返回一个字符串;(1)字符串的不可变性指的是当你给一个字符串重新赋值之后,旧的值并没有被销毁,而是重新开辟一块空间存储新值。(12)LastIndexOf():判断某个字符串在字符串中最后一次出现的位置,如果没有同样返回-1。(11)IndexOf() 判断某个字符串在字符中第一次出现的位置,如果没有返回-1。(7)Replace()将字符串中的某个字符串替换成一个新的字符串。(5)Split()分割字符串,返回字符串类型的数组。
2023-02-23 20:37:31 606
原创 C# 值类型和引用类型
值类型:int、double、 bool 、char、 decimal、 struct、 enum。2.在传递值类型和传递引用类型的时候,传递的方式不一样,值类型我们称之为值传递,引用类型我们称之为引用传递。1.值类型和引用类型在内存上存储的地方不一样;引用类型: string 、自定义类、 数组。值类型的值是存储在内存的栈当中。引用类型的值是存储在内存的栈中。
2023-02-18 13:38:43 79
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人