重要的事情说三遍:
认真看文中每个链接
认真看文中每个链接
认真看文中每个链接
一、引言:
在很多情况下,我们误认为机器视觉就是计算机视觉,其实这是不准确的。何为机器视觉?何为计算机视觉?首先我们从定义着手,机器视觉其实就是用机器代替人眼进行测量和判断。计算机视觉是利用计算机和其辅助设备来模拟人的视觉功能,实现对客观世界的三维场景的感知、识别和理解。机器视觉和计算机视觉不仅是两个不同的概念,而且侧重点也不同。机器视觉侧重工程的应用,强调实时性、高精度和高速度;而计算机视觉侧重理论算法的研究,强调理论,由于理论的研究发展速度往往快于实践应用,也就是说计算机视觉的发展速度要远远超过了其时间生产的应用速度,因此计算机视觉的很多技术目前还难以应用到机器视觉上。但是二者还是共用一套理论系统,只是发展的方向不同而已,一个侧重实际应用,一个侧重理论算法的研究,不能说谁替代谁,各有千秋。目前二者的发展方向为:前者侧重于工程应用,往往需要与工业硬件相结合,如PLC、机械臂、GUV小车等,以解决工程中的实际问题。后者更偏向于算法研究、如YOLO系列图像识别模型、UNET分割模型、3D视觉、自动驾驶等领域,因为涉及到底层算法,所以往往后者学习和研究较为困难,从事这一行业的人员队对学历要求往往更高。
具体二者的比较可以参考以下两篇博客
二、环境搭建
本专题主要介绍的是机器视觉偏向于工业领域的学习与运用。主要使用到的软件软件包括Halcon12.0(更高版本根据需要自行下载)、VS2022、海康MVS,以及后续使用到的PLC、IO卡等相关软件,本节主要安装前三者、PLC和IO卡相关软件在后续更新章节中在介绍。
1、Halcon安装
官网:MVTec Software - 机器视觉专家: MVTec Software(不推荐)
HALCON视觉技术网:首页——HALCON视觉技术网 ,这个网站可以下载软件、lisence授权、还有各种大佬分享的学习资源(推荐)
百度网盘:(懒人推荐)http://链接:https://pan.baidu.com/s/14VZcIFtuRSwX97ID6q3rfw?pwd=zcp8 提取码:zcp8 --来自百度网盘超级会员V4的分享
获取安装包之后,具体安装方法可以参考这篇博客:最新HALCON安装方法
2、vs2022安装
具体可以参考:http://t.csdnimg.cn/P6vm2(自认为我写出来的安装过程,肯定没有这篇博客详细)
3、海康MVS安装
官网:https://www.hikrobotics.com/cn/machinevision/service/download
百度网盘:http://链接:https://pan.baidu.com/s/1ztmbYZFe1o16N6rHO8ZQrQ?pwd=0cy1 提取码:0cy1 --来自百度网盘超级会员V4的分享
得到安装包之后,参考这篇博客https://blog.csdn.net/qq_42102546/article/details/132709696
三、HALCON
正确安装完成后的界面:
界面介绍:HALCON界面简介
1、第一个HALCON程序
2、第一个HALCON导出c#程序,打开图片
2.1C#配置HALCON环境:http://t.csdnimg.cn/HuJi9,配置环境非常重要,这篇博客讲的很详细,一定要按步骤配置好HALCON环境
2.2、halocn程序导出为c#
2.2.1c#导出程序为
//
// File generated by HDevelop for HALCON/DOTNET (C#) Version 12.0
//
using HalconDotNet;
public partial class HDevelopExport
{
#if !(NO_EXPORT_MAIN || NO_EXPORT_APP_MAIN)
public HDevelopExport()
{
// Default settings used in HDevelop
HOperatorSet.SetSystem("width", 512);
HOperatorSet.SetSystem("height", 512);
if (HalconAPI.isWindows)
HOperatorSet.SetSystem("use_window_thread","true");
action();
}
#endif
#if !NO_EXPORT_MAIN
// Main procedure
private void action()
{
// Local iconic variables
HObject ho_Image;
// Local control variables
HTuple hv_WindowHandle = null;
// Initialize local and output iconic variables
HOperatorSet.GenEmptyObj(out ho_Image);
if (HDevWindowStack.IsOpen())
{
HOperatorSet.CloseWindow(HDevWindowStack.Pop());
}
HOperatorSet.SetWindowAttr("background_color","black");
HOperatorSet.OpenWindow(0,0,512,512,0,"","",out hv_WindowHandle);
HDevWindowStack.Push(hv_WindowHandle);
ho_Image.Dispose();
HOperatorSet.ReadImage(out ho_Image, "C:/Users/Public/Documents/MVTec/HALCON-12.0/examples/images/explore_halcon/explore_halcon_01.png");
if (HDevWindowStack.IsOpen())
{
HOperatorSet.DispObj(ho_Image, HDevWindowStack.GetActive());
}
ho_Image.Dispose();
}
#endif
}
#if !(NO_EXPORT_MAIN || NO_EXPORT_APP_MAIN)
public class HDevelopExportApp
{
static void Main(string[] args)
{
new HDevelopExport();
}
}
#endif
注意:
2.2.2、 ho_Image.Dispose();为销毁变量函数、无用删除
2.2.3、这一段用于创建窗口显示、无用删除
#if !(NO_EXPORT_MAIN || NO_EXPORT_APP_MAIN)
public HDevelopExport()
{
// Default settings used in HDevelop
HOperatorSet.SetSystem("width", 512);
HOperatorSet.SetSystem("height", 512);
if (HalconAPI.isWindows)
HOperatorSet.SetSystem("use_window_thread","true");
action();
}
#endif
2.2.4、这一段为主程序入口,一般自己创建可以删除
#if !(NO_EXPORT_MAIN || NO_EXPORT_APP_MAIN)
public class HDevelopExportApp
{
static void Main(string[] args)
{
new HDevelopExport();
}
}
#endif
2.2.5 以下几段代码为窗口显示函数,因为我们最终要要在自己的C#窗口中显示,所以可以删除
if (HDevWindowStack.IsOpen())
{
HOperatorSet.CloseWindow(HDevWindowStack.Pop());
}
HOperatorSet.SetWindowAttr("background_color","black");
HOperatorSet.OpenWindow(0,0,512,512,0,"","",out hv_WindowHandle);
HDevWindowStack.Push(hv_WindowHandle);
if (HDevWindowStack.IsOpen())
{
}
2.3创建c#窗口应用程序(可以参考:http://t.csdnimg.cn/c3eQC)
创建完成之后,我们设计一个简单界面
双击“打开图片”按钮,进入按钮事件函数,开始编写代码(2.2中删除后的简化代码)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using HalconDotNet;
using System.Windows.Forms;
namespace Vision_001
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
HObject ho_Image;
HOperatorSet.GenEmptyObj(out ho_Image);
HOperatorSet.ReadImage(out ho_Image, "C:/Users/Public/Documents/MVTec/HALCON-12.0/examples/images/explore_halcon/explore_halcon_01.png");
HOperatorSet.DispObj(ho_Image,hWindowControl1.HalconWindow);
ho_Image.Dispose();
}
}
}
运行结果