Halcon之第1讲---基本概念以及基础算子的学习

文章目录

前言

  之前做项目一直用的opencv最近发现halcon做图像项目更加的精确,也更适合工业大项目,所以进行学习,接下来我将会不断更新我的学习教程,方便以后自己查阅,也为了方便广大网友;

学习目录

   由于我有opencv的基础所以就照着opencv的学习思路进行学习,算法都是相通的,他们的底层原理都一样我接下来主要熟悉halcon的语法,以及MVTec HDevelop操作界面的一些基本操作;

  • HDevelop 界面熟悉:程序窗口、变量窗口、图形窗口、单步调试、断点、F1 帮助
  • 基础算子:read_image、dev_open_window、dev_close_window、dev_display、dev_clear_window、write_image
  • 读取图片,创建窗口,绘制矩形 ROI,保存处理后的图像

熟悉界面

  • 界面介绍

在HDevelop界面中有三部分,以下图片中

第一部分是程序窗口,进行程序的编写;

第二部分是图形窗口,显示图像的;

第三部分是变量窗口,显示程序中所涉及到的所有的变量;

如果不小心以上窗口被关闭了,可以在窗口 导航栏重新打开;

以上导航栏中默认罗列着一些常用的功能,像运行(F5),单步调试(F6),注释程序(F4)等,可以自己在软件里面进行熟悉一下。

  • 我们学习halcon最好的办法就是跟着官方教程来学习,我们可以从帮助导航栏查看官方文档;

还可以跟着官网的例子教程学习,在导航栏文件 那一栏里面有一个浏览示例程序的选项,我们可以跟着程序学习会更快速,也更有助于理解;

  • 如果在程序中遇到不会的函数可以把光标放到该函数处按F1就会出现该函数的帮助文档;如下图所示。

参数和数据结构

  • Halcon有两种基本的数据形态:
    图像数据:例如: Image、Region、Xld(亚像素)
    控制数据:例如:浮点数、整数、字符串、handle 等等
  • 所有的运算算子参数都是以相同的参数方式排列:
    输入图像:输出图像:输入控制:输出控制
    并不是所有的算子都有以上四类参数,但是参数的排列的顺序是相同的;
    例如:如果一个算子没有输入控制,和输出控制,那在相应位置处的参数是空的;如下算子

    同理如果别的参数没有的话,参数的对应位置也是空的;

基础算子

基础的图片I/O和窗口操作
bash 复制代码
#读取一张图片并把图片数据赋值给Image
read_image (Image, 'printer_chip/printer_chip_01')  
#重新打开一个长宽都是512个像素,背景为黑色的窗口
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
#关闭最新打开的窗口
dev_close_window ()
#显示读取的图片
dev_display (Image)
#清除最新打开窗口里面的内容
dev_clear_window ()
#把图片保存在你设置的路径里面
write_image (Image, 'png', 0, 'D:/learn/halcon/test.png')
图像色彩空间转换
  • 灰度转换
bash 复制代码
#输入一张图片
read_image (Image, 'D:/learn/halcon/lena.png')
#对图片灰度化处理(Image为一个三通道的图片)
rgb1_to_gray (Image, GrayImage)
  • 通道的分离
bash 复制代码
#读取一张三通道的图片
read_image (Image, 'D:/learn/halcon/lena.png')
#分离一个三通道的图片
decompose3 (Image, Image1, Image2, Image3)
#星号里面的代码都是为了把三张图片并排在一个窗口显示而写的
***************
concat_obj (Image1, Image2, ObjectsConcat)
concat_obj (ObjectsConcat, Image3, ObjectsConcat1)
tile_images (ObjectsConcat1, TiledImage, 3, 'vertical')
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
dev_display (TiledImage)
***************
#合并三个单通道的图片成一张三通道的图片
compose3 (Image1, Image2, Image3, MultiChannelImage)

以上图片依次是R、G、B通道的图片;

  • 转换到hsv颜色空间
bash 复制代码
#读取一张三通道图片
read_image(Image,'patras')
dev_display(Image)
#通道分离
decompose3(Image, Image1, Image2, Image3)
#从rgb颜色空间转换到hsv颜色空间
trans_from_rgb(Image1,Image2,Image3,ImageH,ImageS,ImageV,'hsv')
#从hsv颜色空间转换到rgb颜色空间
trans_to_rgb(ImageH,ImageS,ImageV,ImageR,ImageG,ImageB,'hsv')
#合并三个通道的图片成三通道的图片
compose3(ImageR,ImageG,ImageB,Multichannel)
dev_display(Multichannel)

示例:通过HSV空间分割出图片中红色区域

bash 复制代码
read_image(Image,'patras')
decompose3(Image, Image1, Image2, Image3)
trans_from_rgb(Image1,Image2,Image3,ImageH,ImageS,ImageV,'hsv')
threshold (ImageH, Region_low, 0, 20)
threshold (ImageH, Region_high, 245, 255)
union2 (Region_low, Region_high, RegionH)
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
dev_display (RegionH)

运行结果:

从上图可以看出红色区域基本被分割出来;

阈值算子
  • threshold --- 使用全局阈值分割图像
bash 复制代码
#读取一张图片
read_image(Image,'fabrik')
#全局固定阈值
threshold (Image, Region, 185, 255)
  • auto_threshold --- 根据图像直方图自动生成阈值进行图像分割
bash 复制代码
read_image(Image,'fabrik')
auto_threshold (Image, Regions, 2)
  • dyn_threshold --- 使用局部阈值对图像进行分割
bash 复制代码
read_image(Image,'fabrik')
dyn_threshold (Image, Image, RegionDynThresh, 5, 'light')

三种阈值算子的区别:

threshold:固定全局灰度区间,整张图统一阈值

auto_threshold:基于直方图,自动多区域全局阈值

dyn_threshold:局部动态阈值,原图与平滑背景对比

滤波算子
  • 高斯滤波
    作用:可以去除高斯噪声,颗粒随机噪点,随机噪声
bash 复制代码
#输入一张图片
read_image (Image, 'D:/learn/halcon/lena.png')
#在这张图片上加入高斯噪声(白噪声)
add_noise_white (Image, ImageNoise, 60)
#高斯滤波算子
gauss_filter (ImageNoise, ImageGauss, 7)
#创建一个窗口
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
#展示经过高斯滤波后的图片
dev_display (ImageGauss)

以上图片左侧为原图,中间为加了高斯噪声的图片,右侧为高斯滤波处理过的图片;

  • 中值滤波
    作用:可以去除椒盐噪声
bash 复制代码
#输入一张图片
read_image (Image, 'D:/learn/halcon/jiaoyan.png')
#中值滤波处理图片
median_image (Image, ImageMedian, 'circle', 1, 'mirrored')
#把原图和中值滤波后的图片放到一个元组里面
concat_obj (Image, ImageMedian, ObjectsConcat)
#打开一个窗口方便显示图片
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
#把两张图片在一个窗口里面显示
tile_images (ObjectsConcat, TiledImage, 2, 'horizontal')

以上图片左侧为有椒盐噪声的图片,右侧为经过中值滤波处理后的图片;可以看到处理效果还是很不错的;

  • 双边滤波
    作用:平滑平坦区域,边缘不模糊;
bash 复制代码
read_image (Image, 'tooth_rim')
bilateral_filter (Image, Image, ImageBilateral, 3, 20, [], [])
  • 引导滤波
    作用:性能接近双边滤波,运算速度更快,适合流水线视觉项目。
bash 复制代码
read_image (Image, 'tooth_rim')
guided_filter (Image, Image, ImageGuided, 3, 20)

以上是halcon的基础操作,如果帮到您了请点赞加收藏,如果有错误欢迎指正!

相关推荐
映翰通网络16 小时前
TI开发板上的边缘AI工具链:先认清OpenCV、GStreamer和TIDL
人工智能·嵌入式硬件·opencv·计算机视觉·ti
深圳市快瞳科技有限公司20 小时前
宠物生物特征识别:鼻纹、面部与多模态融合技术的突破
人工智能·算法·计算机视觉·宠物
Microvision维视智造2 天前
智能工厂等级自检表:梯度培育,你的工厂在第几级?
人工智能·计算机视觉·视觉检测·机器视觉
小保CPP2 天前
OpenCV C++车型识别1-图像预处理
c++·人工智能·opencv·计算机视觉
普密斯科技2 天前
如何一键解决手机镜头磨切片微米级尺寸测量难题?
人工智能·计算机视觉·智能手机·测量
小保CPP2 天前
OpenCV C++车型识别2-形状匹配
c++·人工智能·opencv·计算机视觉
m沐沐2 天前
【自然语言处理】NLP分词与Word2Vec词向量——从原理到实战
人工智能·深度学习·opencv·机器学习·计算机视觉·自然语言处理·word2vec
菜鸟‍3 天前
【论文学习】arxiv 2024 || RoSIS:基于鲁棒框架重新审视文本提示式手术器械分割
人工智能·学习·计算机视觉
威联通网络存储3 天前
TS-h2490FU在钢铁热轧/冷轧板材表面缺陷在线视觉检测中的部署
人工智能·python·计算机视觉·视觉检测