自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(60)
  • 资源 (1)
  • 收藏
  • 关注

原创 Halcon中HObject图像转Bitmap

最近做项目有用到Halcon图像转成Bitmap格式的情况,在网上搜索部分代码整理调试了一下,效果不错,在博客中记录一下。1、灰度图转Bitmap //灰度图HObject转Bitmap [DllImport("kernel32.dll")] public static extern void CopyMemory(int Destination, int add, int Length); private Bitmap HObject

2021-12-24 18:07:12 4755 1

原创 C++内存四区的学习

C++内存四区的学习1 内存分区模型C++程序在执行时,将内存大方向划分为4个区域 代码区:存放函数体的二进制代码,由操作系统进行管理的 全局区:存放全局变量和静态变量以及常量 栈区:由编译器自动分配释放, 存放函数的参数值,局部变量等 堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收 1.1 程序运行前在程序编译后,生成了exe可执行程序,未执行该程序前分为两个区域代码区:存放 CPU 执行的机器指令代码区是共享的,共享的目

2021-10-13 17:15:27 231

原创 解决西门子PLC模拟量输入值不稳定的问题

#解决西门子PLC模拟量输入值不稳定的问题# 之前用西门子PLC1200的模拟量输入模块与压力计连接来测试压力值时,输入的模拟量波动很大,极不稳定。电路连接没有问题,但PLC与压力计分别使用的不同电源模块进行供电。经上网查找资料发现,传感器与PLC分别自供电且两个电源模块之间没有彼此连接将会产生一个很高的上下震动的共模电压。 现将搜索到的当PLC1200输入的模拟量值不稳定可能的原因与解决方法总结如下:(一)出现不稳定的原因: 可能模拟量输入模块和现场传感器分别...

2021-07-26 14:12:39 13323 1

原创 西门子PLC1200学习之硬件接线

西门子PLC1200学习之硬件接线1、公共端1M接负的信号接线方法(共阴极,PNP)2、公共端1M接正的信号接线方法(共阳极,NPN)3、两线制传感器接线方法(1)共阴极(2)共阳极4、三线制传感器的接线方法(1)PNP型(2)NPN型5、输出端接继电器和接触器6、AI连接传感器的接线方式:(1)四线制(2)三线制(3)二线制(4)RTD热电阻①环节未使用的RTD输入②2线制RTD③3线制RTD

2021-05-31 17:51:35 11767

原创 西门子PLC1200学习之PID总结

西门子PLC1200学习之PID总结1、PID控制器功能分三部分(1)循环中断块(2)PID指令块(3)工艺对象背景块2、PID指令块一般用第一个:PID_Compact3、添加PID_Compact组态步骤(1)添加新块OB30 (2)在OB30中调用PID指令4、PID_Compact输入/输出参数介绍输入:输出:5、PID_Compact组态设置(1)控制类型注:反控制逻辑选中后,.

2021-05-25 20:05:31 16372 1

原创 西门子PLC1200学习之模拟量的使用

西门子PLC1200学习之模拟量的使用1、模拟量包含哪些?压力、流量、温度、湿度、液位等。2、数字量与模拟量的转换A/D:模拟量转成数字量D/A:数字量转成模拟量3、模拟量输入物理信号——>电信号(电压、电流)4、模拟量输入接线图(以SM1231 RTD为例,其他的可在帮助手册上查询)5、模拟量输入接线图注:0M和0是一路,1M和1是一路,其中0M和1M为负,0和1为正6、模拟量输入输出例程输入:输出:...

2021-05-19 21:16:41 28955

原创 西门子PLC1200学习之数学运算功能的应用

西门子PLC1200学习之数学运算功能的应用数学函数:用于对数据进行运算,例如四则运算、计算绝对值、获取极限值、三角函数、递增递减以及方程式。1、功能指令2、指令的使用 (1)CALCULATE根据所选数据类型计算数学运算或复杂的逻辑运算。可以认为是一个万能的计算器。使用:如何编辑指令?(2)ADD将输入值1与输入值2相加,并输出。如何快速选择指令及数据类型?(3)SUB减法运算指令。使用:(4)MUL乘法指令。使用:.

2021-05-17 09:18:26 5921

原创 西门子PLC1200学习之比较指令

西门子PLC1200学习之比较指令1、S7-1200用到的所有比较指令如下:2、比较指令的具体使用(以等于为例)梯形图演示:3、例程:简易红绿灯 :按下启动按钮,红灯亮10s后熄灭,绿灯亮5s,再闪烁3s后熄灭,最后黄灯亮2s,接着进入下一个循环。分析:(1)用一个定时器,设置时间为20s;(2)开启时钟脉冲,选用M0.5(1HZ)作为闪烁时间;(3)利用下降沿重新出发定时器,进入下一次循环。再编写梯形图前,先右击CPU选择属性,点击系统和始终存储器...

2021-05-15 20:02:07 21609 3

原创 西门子PLC1200学习之进制的转换

西门子PLC1200学习之进制的转换四种进制:二进制:由0、1组成;十进制:由0~9组成;十六进制:由0~9、A、B、C、D、E、F组成;(主要用来在表达特别大的二进制时,防止写错而用十六进制代替)八进制:由0~7组成;(这个主要了解一下)上述四种进制可以相互转换。二进制与十进制之间的相互转换:(1)十进制转二进制:方法一:短除法(此法比较麻烦,可网上搜索,不赘述);方法二:罗列2的零次方到2的n次方的计算结果(至于n等于几取决于十进制的大小),然后计算十进制数是由哪

2021-05-12 17:43:58 8126

原创 C#与Halcon联合编程之用PictureBox控件替代HWindowControl控件

C#与Halcon联合编程之用PictureBox控件替代HWindowControl控件在C#与Halcon联合编程时,一般先需要在工具箱中加入Halcon自带的HWindowControl控件。最近在研究用PictureBox控件显示Halcon算子生成的图像或区域时,发现可用PictureBox控件来替代HWindowControl控件。示例:我自己创建了一个窗体(如下图),可实现一下三个功能:(1)读图:打开一个文件夹,读取里面的一张图像;(2)分割:画一个任意大小矩形,将矩形内

2021-04-26 10:13:47 3183 1

原创 Halcon之将目标区域(Region)放大显示

Halcon之将目标区域(Region)放大显示注:这里讲的是将Halcon函数生成的region放大显示,不是图像Image放大显示。如下图所示,当算子生成一个区域region很小且不在图形窗口的中心时,如果想要该区域放大显示该怎么办呢?解释说明:上图用的是boundary算子生成了一个边界区域region解决方法:*获取原图像的宽和高get_image_size (Image, ImageWidth, ImageHeight)*计算目标区域的最小外接矩形smallest_

2021-04-26 08:07:22 3414

原创 Halcon之灰度直方图和特征直方图的使用

Halcon之灰度直方图和特征直方图的使用1、灰度直方图在进行阈值分割的时候往往要确定一定的灰度范围,把自己想要的部分分割出来,这时就需要借助灰度直方图(如下图所示)。拖拉图中1处确定最小灰度值,拖拉图中2处确定最大灰度值,区间内的范围就是在图像上显示的部分,图中4处可选择显示部分的颜色(即感兴趣区域的颜色),5处确定的是显示部分是否填充(fill:代表区域内填充,margin:代表区域轮廓)。当选出感兴趣区域后可点击3处插入代码即可生成阈值分割函数。灰度直方图还有另一个功能:图像对比.

2021-04-17 15:28:08 7953 3

原创 Halcon之形状模板匹配输出角度的转换(以EPSON机器人为例)

Halcon之形状模板匹配输出角度的转换(以EPSON机器人为例)在进行基于形状的模板匹配时,find_shape_model算子会输出目标的像素坐标、匹配分值以及角度。其中,输出的角度值是弧度,需要通过tuple_deg算子将弧度转换为角度:算子:tuple_deg( : :Rad:Deg)Rad:输入弧度元组Deg:输出角度元组值得注意的是,转换后的角度范围为0~360°。关于输出角度为0~360°的解释如下:在做机械手分拣码垛时,需要将转换后的角度传送给机械手,这里以...

2021-04-09 10:45:57 3349 2

原创 C#之计算程序运行耗时的方法

C#之计算程序运行耗时的方法方式1 利用System.DateTime.Now示例代码: static void Main(string[] args) { DateTime dt1 = DateTime.Now; int sum = 0; for (int i = 0; i < 1000; i++) { sum += 1;

2021-04-07 09:45:27 3284

原创 C#线程传参的方法总结

C#线程传参的方法总结线程传参的几种方式:方式1 委托使用线程自带的委托传参,示例如下: static void Main(string[] args) { string str = "你好"; Thread th = new Thread(OnThread); th.Start(str); Console.Read(); } st

2021-04-04 11:38:43 6450 1

原创 C#设计模式之单例模式

C#设计模式之单例模式定义:一个类只有一个实例,且该类能自行创建这个实例的一种模式。(也就是一个类只能实例化一次)特点: 单例类只有一个实例对象; 单例对象必须由单例类自行创建; 单例类对外提供一个访问该单例的全局访问点。 优点:以保证内存里只有一个实例,减少了内存的开销; 避免对资源的多重占用; 设置全局访问点,可以优化和共享资源的访问。缺点:一般没有接口,扩展困难; 在调试过程中,如果单例中的代码没有执行完,也不能模拟生成一个新的对象; 功能代

2021-03-21 17:25:23 3604

原创 SCARA四轴机器人eye-to-hand手眼标定(九点标定)

SCARA四轴机器人eye —to —hand手眼标定(九点平面标定)

2021-03-18 14:25:20 5209 6

原创 C#基础之接口的学习

C#基础之接口的学习1、定义接口为不同应用的实现提供了一种规范和约束,只要每个应用都遵守这种规范和约束,整个系统就可以得到有效的组织,从而为应用系统的低代价开发提供有效的途径。接口使用interface 关键字进行定义,可由方法、属性、事件、索引器或这四种成员类型的任意组合构成。它不实现任何的方法或属性,只是告诉继承它的类至少要实现哪些功能,继承它的类可以增加自己的方法。接口声明: interface ISample { void Sample(int x

2021-02-21 18:16:35 351

原创 C#基础之抽象类的学习

C#基础之抽象类的学习1、定义抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。2、特点 不能被实例化,主要用于继承 可以包含两种抽象成员,分别是抽象属性和抽象方法,同时可以包含其他非抽象成员 如果继承抽象类,则需实现抽象类的抽象属性和方法 不能使用Sealed关键字修饰抽象类,因为Sealed意味着类无法被继承,同时Static也不能修饰抽象类 总之,抽象类是用来继承的,而继承后的子类必须按

2021-02-20 16:51:25 464

原创 C#与Halcon联合编程之利用Halcon引擎调用函数

C#与Halcon联合编程之利用Halcon引擎调用函数第一种,调用后缀为.hdev的Halcon文件我们通常创建的Halcon文件其后缀就是.hdev,也就是在Halcon程序编辑器main标签页下所写的程序即Halcon的主程序。在C#中利用Halcon引擎调用主程序,可以不用将其导出。准备工作:添加引用:将Halcon文件放入项目文件夹的Debug目录下。准备工作完成后,就进行窗体的搭建和程序的编写。下面以一个小的程序示例来展示调用方法:示例:界面搭建:.

2021-02-05 14:41:37 4631 3

原创 海康相机二次开发之缩小相机拍摄范围

海康相机二次开发之缩小相机拍摄范围在机器视觉的图像处理过程中,图像大而目标小则可能增加图像的处理时间。如果可以缩小相机的拍摄范围,只抓取包含目标的某一范围的图像,则可缩短图像的处理时间。在海康相机的二次开发过程中,我们可通过设置相机的参数来控制或者说缩小相机的拍摄范围。第一步,设置所需的拍摄范围打开相机后,要在相机当前的拍摄范围内绘制一动态矩形,设置自己所需的矩形拍摄区域,同时获取矩形的初始坐标点以及宽高。示例代码: relativeRoi roi; p

2021-01-27 13:36:35 1196 2

原创 错误:无法加载DLL“hdevenginecpp”:找不到指定的模块

错误:无法加载DLL“hdevenginecpp”:找不到指定的模块在使用halcon引擎时,正确引用了DLL文件后在运行过程中出现了如下图所示的错误:在解决过程中总结了如下几点可能导致该错误出现的原因:1、在安装Halcon软件后忘记配置电脑的环境变量。解决方法:右击我的电脑—属性—高级系统设置—环境变量,在系统变量中找到Path,将下图两个路径添加进去即可2、检查是否将halcon.dll,halconcpp.dll,halcondotnet.dll,hdevenginedo

2021-01-20 16:31:39 2605

原创 Halcon之创建HDevelop函数文件(外部函数)

Halcon之创建HDevelop函数文件(外部函数)记录一下Halcon的外部函数创建过程,所用版本为Halcon12.1、新建一个Halcon程序,点击菜单栏上的函数—创建新函数,出现下图所示对话框;2、 编辑名称,点击类型处的下拉列表选择HDevelop函数文件,更改保存目录(目录可以不更改,若更改,则在调用函数时需要添加更改后的文件路径,后面会具体提到)3、完成上述设定后点击确定,随后打开保存目录下的HDevelop函数,程序编辑界面如下图所示:注:一开始我保存在默认的路

2021-01-18 20:28:49 2453 1

原创 C#之在PictureBox上绘制动态矩形框

C#之在PictureBox上绘制动态矩形框多次做项目都用到了画ROI区域,简单来说就是在PictureBox上画矩形区域,特写此博文以方便日后查阅。在PictureBox上画矩形主要利用了以下几个事件:1、MouseDown事件 Point start; //起始点 Point end; //结束点 bool blnDraw; //在MouseMove事件中判断是否绘制矩形框 private void picture

2021-01-13 12:15:26 7617

原创 OpenCvSharp之利用海康相机采集图像并在pictureBox中显示

OpenCvSharp之利用海康相机采集图像并在pictureBox中显示说明:OpenCvSharp版本为4.0 海康相机为黑白相机实现功能:将海康相机采集的图像转成Mat,并在pictureBox中显示。示例代码: Mat srcImage; private Mat CaptureImage() { int nRet; //MyCamera.MVCC_I...

2020-12-20 12:14:27 4587 6

原创 Opencv之利用matchshape算子实现简单的形状匹配

Opencv之利用matchshape算子实现简单的形状匹配

2020-12-19 12:18:24 9450 4

原创 OPENCV之寻找并绘制轮廓以及提取轮廓重心坐标

OPENCV之寻找并绘制轮廓以及提取轮廓中心点

2020-12-18 20:26:15 13121 6

原创 OPENCV之自适应阈值分割:OTSU法和TRIANGLE法

OPENCV之自适应阈值分割:OTSU法和TRIANGLE法在用opencv做机器视觉项目过程中用到了自适应阈值分割,起初是用一张背景为暗,目标为亮的图片(如下面左图)进行自适应阈值分割,后来用的是一张背景为亮,目标为暗的图片(如下面右图)进行自适应阈值分割。 对这两张图片用同一种自适应阈值分割方法却得到了不同的分割效果:1、OTSU法OTSU法叫做大律法,其定义以及实现过程原理网上有许多总结,感兴趣可自行查看。下面展示一下使用OTSU...

2020-12-15 11:53:51 5794 1

原创 VS2015+OPENCV4.5.0配置方法(win10系统)

VS2015+OPENCV4.5.0配置方法软件:vs2015、OPENCV4.5.0(官网下载)环境变量配置下载的OPENCV4.5.0解压完成后,右击此电脑—属性—高级系统设置—环境变量(在系统变量中找到Path,然后选择编辑—新建,将下图文件路径复制过去,点击确定即可)(即OPENCV解压文件路径下)VS2015配置打开vs2015,在c++下新建一个空项目;点击视图—其他窗口—属性管理器,右击Debug|x64选择属性;在VC++目录下的包含目录中添加:(1)

2020-12-08 12:20:40 1224

原创 C#之如何把子窗体嵌入到主窗体中显示

C#之如何把子窗体嵌入到主窗体中显示今天总结一下把子窗体嵌入到主窗体中显示的方法。当你点击一个Button显示子窗体时,往往子窗体都是单独弹出,而如果想要子窗体直接在主窗体上显示,这就需要将子窗体嵌入到主窗体中,方法如下: //在主窗体中实例化要显示的子窗体 private ChildForm cForm; public MainForm() { InitializeComponent();

2020-11-27 14:22:22 5078 3

原创 C#之利用委托和事件实现参数传递

C#之利用委托和事件实现参数传递关于委托和事件的个人理解就是,委托就是快递员,事件就是信纸,事件里的程序就是信的内容。其实现过程就是,快递员邮递写好的信,即事件通过委托向外传递,至于向哪传递,那就要看哪里注册了这个事件。在编写C#程序时需要用到委托和事件来传递一些参数,这里就简单总结一下委托和事件传参的简单使用:假设:在一个窗体中创建了一个用户控件uc1,需要把uc1中的某个int类型的参数传递给主窗体并在textBox中显示用户控件uc1://声明一个委托public delegate

2020-11-16 21:06:34 5885

原创 C#之Convert.ToInt32()和int.Parse()的区别

C#之Convert.ToInt32()和int.Parse()的区别1、Convert.ToInt32()是将继承于object类的对象转换成int;int.Parse()只能将String类的对象转换成int,即括号中的数据类型只能是String类型2、对NULL值得处理:Convert.ToInt32(null)会返回0而不会产生任何异常,但int.Parse(null)则会产生异常3、当括号中得数据类型为double型时:(1)Convert.ToInt32(double val

2020-11-09 19:54:21 2554

原创 Halcon之图像分割算子binary_threshold的简单应用

Halcon之图像分割算子binary_threshold的简单应用以一个图像分割例子来简单介绍算子binary_threshold的应用:将下图中的九个黑点从图像中分割出并按顺序提取九个点的面积和中心坐标图像处理过程: //读取图像 read_image (Image, 'C:/Users/SUNSONG/Desktop/Image_1.bmp') //二值化阈值分割 binary_threshold (Image, Region, 'max_separ

2020-11-05 15:22:06 2811

原创 C#之自动保存和读取数据

C#之自动保存和读取数据在做机器人抓取项目时,根据“九点标定”法获得了一组建立机器坐标和相机坐标转换关系的数据,在机器人和相机位姿不改变的前提下,如果不将这组数据保存,则每次打开操作界面都需要重新进行标定。为了避免重复操作,需要将数据自动保存,且在下次抓取时自动读取。解决方法如下:文件保存方法: /// <summary> /// /// </summary> /// <param name="nam

2020-10-29 19:52:28 4889 3

原创 C#之如何调整控件的Dock顺序

C#之如何调整控件的Dock顺序在C#Winform窗体中控件Dock后的顺序是根据添加控件顺序进行优先级排列的。假设在Panel容器中按顺序添加A、B、C三个Button按钮并且将他们的Dock方式设为top,其Dock后的排列顺序应是这样的:---------------------A---------------------B---------------------C----------------------这时需要添加第四个Button按钮并且想将它放在B和C

2020-10-26 18:45:13 3352

原创 C#之调用海康工业相机SDK采集图像并在Halcon窗口中显示

C#之调用海康工业相机SDK采集图像并在Halcon窗口中显示最近做项目需要对海康相机进行二次开发,现将所学进行整理。开发环境 VS2012+C#(32位) Halcon12引用动态链接库引用Halcon动态链接库(halcondotnet.dll)引用海康相机动态链接库(MvCameraControl.Net.dll)这个文件在MVS安装目录下MVS\Development\DotNet中,如果你是32位的开发环境就选择win32文件夹下的,如果是64位就选择win64文件夹下...

2020-10-22 09:34:44 17463 38

原创 C#之创建计时器

C#之创建计时器在用C#做项目时多次用到了计时器,现总结一下如何创建计时器。 //实例化一个计时器 Timer _myTimer = new Timer(); private void CreatTimer() { _myTimer.Tick += new EventHandler(OnTimer); _myTimer.Interval = 1000;//设置

2020-10-20 08:50:55 1461

原创 C#之关闭子窗体后不释放子窗体对象

C#之关闭子窗体但不释放子窗体对象

2020-10-17 10:25:34 1042

原创 C#之敲击回车键触发Button的Click事件

C#之敲击回车键触发Button的Click事件在做项目时,需要在TextBox控件中输入指令,点击Button后将指令传给下位机。为了简化操作,想直接敲击回车键实现Button的Click事件来发送指令,通过查阅资料,实现了这一操作,示例代码如下: private void textBox1_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == '\r')

2020-10-16 20:51:13 6066 1

原创 C#之子窗体与父窗体之间的参数传输

C#之子窗体与父窗体之间的参数传输最近在做项目时涉及到了子窗体与父窗体之间的参数传输问题,通过查阅与学习总结了一种方法。1、子窗体传父窗体Form1为主窗体,Form2为子窗体。实现:在Form1上添加一个button1,点击button1后显示Form2,再点击Form2的button1 在button1_Click事件中通过this.Owner将Form2的textBox2的值设置给Form1的textBox1(也可以将Form2中的某个值传给Form1,然后在Form1进行后续的处理,

2020-10-11 13:47:23 3291

ucPicBox.cs

ucPicBox.cs

2021-04-17

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除