首页 > 其他分享 >失败笔记本--HALCON--009--202407

失败笔记本--HALCON--009--202407

时间:2024-07-21 14:28:35浏览次数:16  
标签:颜色 -- Image ObjectSelected intensity HALCON ImageFiles 灰度 202407

失败笔记本-HALCON篇-009

项目场景:

今天还是和大佬学习的一天,今儿个学习怎么识别图中的颜色块,实现下面的效果:
请添加图片描述
识别到图中的颜色块的颜色,并显示在图中。
参考大神的链接:halcon入门教程10_颜色识别1


1.通过颜色灰度识别图中的颜色

步骤:

  • 上来我就是一套丝滑小连招啊,打开图片,直接灰度,然后阈值。不过这里学了一手打开文件夹中的所有图片:
  • 点击助手–打开新的Image Acquisition–图像文件–选择路径–代码生成–插入代码,非常好用,打开摄像头也是用这个。
* Image Acquisition 01: Code generated by Image Acquisition 01
list_files ('D:/APP/MVTec/HALCON-23.11/HALCON-23.11-Progress/examples/images/3d_machine_vision/calib', ['files','follow_links'], ImageFiles)
tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)
for Index := 0 to |ImageFiles| - 1 by 1
    read_image (Image, ImageFiles[Index])
    * Image Acquisition 02: Do something
endfor

我们的丝滑小连招直接在for循环里操作就行

  • 连招之后,其实我们就可以看出不同颜色的灰度区别了,这里我们只需要判断一下灰度的值,输出对应的颜色在图像上就可以,我们将此功能封装成一个新的函数。
  • 选择函数–创建新的函数:请添加图片描述
    依次设置函数名称和参数即可
    请添加图片描述
  • 建完函数,就可以循环调用判断颜色了,显示颜色使用的是disp_message()算子。
  • 值得一提的是,大佬教了一个新的算子用来判断region的灰度平均值,intensity()。

在HALCON中,intensity算子的主要作用是计算图像中指定区域的灰度强度。具体而言,它能够计算这些区域内灰度值的平均值和标准偏差。其中各参数的含义如下:
Regions(输入参数):表示图像上待检查的一组区域。
Image(输入参数):表示输入的灰度值图像。
Mean(输出参数):表示输出的单个区域的灰度平均值。
Deviation(输出参数):表示输出的单个区域的灰度偏差。

完整的代码如下:

dev_close_window ()
dev_get_window (WindowHandle)

list_files ('D:/WORKSPACE/HALCON/颜色识别(灰度)', ['files','follow_links'], ImageFiles)
tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)
for Index := 0 to |ImageFiles| - 1 by 1
    read_image (Image, ImageFiles[Index])
    rgb1_to_gray (Image, GrayImage)
    threshold (GrayImage, Regions, 0, 248)
    connection (Regions, ConnectedRegions)

    count_obj (ConnectedRegions, Number)
    dev_display (Image)
    for i:=1 to Number by 1
        select_obj (ConnectedRegions, ObjectSelected, i)
        area_center (ObjectSelected, Area, Row, Column)
        intensity (ObjectSelected, GrayImage, Mean, Deviation)
        colorIdentification (Mean, Row, Column, WindowHandle)
        stop()
    endfor
    
endfor


2.通过HSV色彩空间灰度识别图中的颜色

步骤:

  • 颜色灰度判断颜色的方式还是有所局限的,如果两个不同颜色的灰度值相近就很可能出现错误判断的情况,所以要转换色彩空间到HSV下,通过不同通道值来判断。

HSV色彩空间(Hue, Saturation, Value)是一种基于人类对颜色的生理感知构建的颜色模型,广泛应用于图像处理和计算机视觉领域。该模型由三个主要参数组成:色调(Hue)、饱和度(Saturation)和亮度(Value),每个参数都对应于颜色的一个重要特征。
色调是表示色彩的基本属性,用角度来度量,范围从0°到360°。红色对应于0°或360°,绿色对应于120°,蓝色对应于240°。这种表示方式使得我们能够直观地理解不同颜色之间的关系,并且与人类的视觉感知相一致。
饱和度表示颜色的纯度或鲜艳程度,取值范围为0%到100%。当一个颜色完全饱和时,它看起来非常鲜艳;而当饱和度降低时,颜色会变得灰暗。饱和度越高,颜色越鲜艳;反之,则颜色越接近灰色。
亮度也称为明度,表示颜色的亮暗程度,取值范围同样为0%到100%。亮度越高,颜色越亮;反之,则颜色越暗。亮度分量在图像处理中非常重要,因为它直接影响到图像的整体视觉效果。

  • 所以我们需要先进行色彩空间的转换。
  • 首先将image转换为rgb三个图
  • 然后再转换为hsv三个图
    代码如下:
decompose3 (ImageReduced, ImageR, ImageG, ImageB)
trans_from_rgb (ImageR, ImageG, ImageB, ImageH, ImageS, ImageV, 'hsv')
  • 这样我们修改一下判断颜色的逻辑,将对单个灰度的判断改为对hsv三个值的判断

完整代码如下:

dev_close_window ()
dev_get_window (WindowHandle)
list_files ('D:/WORKSPACE/HALCON/颜色识别(例图)', ['files','follow_links'], ImageFiles)
tuple_regexp_select (ImageFiles, ['\\.(tif|tiff|gif|bmp|jpg|jpeg|jp2|png|pcx|pgm|ppm|pbm|xwd|ima|hobj)$','ignore_case'], ImageFiles)
for Index := 0 to |ImageFiles| - 1 by 1
    read_image (Image, ImageFiles[Index])
    rgb1_to_gray (Image, GrayImage)
    threshold (GrayImage, Regions, 0, 248)
    connection (Regions, ConnectedRegions)

    count_obj (ConnectedRegions, Number)
    dev_display (Image)
    for i:=1 to Number by 1
        select_obj (ConnectedRegions, ObjectSelected, i)
        area_center (ObjectSelected, Area, Row, Column)
        
        reduce_domain (Image, ObjectSelected, ImageReduced)
        decompose3 (ImageReduced, ImageR, ImageG, ImageB)
        trans_from_rgb (ImageR, ImageG, ImageB, ImageH, ImageS, ImageV, 'hsv')
        
        intensity (ObjectSelected, ImageH, MeanH, Deviation)
        intensity (ObjectSelected, ImageS, MeanS, Deviation)
        intensity (ObjectSelected, ImageV, MeanV, Deviation)
        
        colorIdentificationHSV (MeanH, MeanS, MeanV, Row, Column, WindowHandle)
        stop()
    endfor
endfor

总结:

在009中,主要学习了以下算子:
打开文件夹中的所有图片
intensity()
创建新的自定义函数
HSV色彩空间
decompose3()
trans_from_rgb()

标签:颜色,--,Image,ObjectSelected,intensity,HALCON,ImageFiles,灰度,202407
From: https://blog.csdn.net/weixin_47350740/article/details/140576995

相关文章

  • 一文揭开JDK21虚拟线程的神秘面纱
    虚拟线程快速体验环境:JDK21+IDEApublicstaticvoidmain(String[]args){try(varexecutor=Executors.newVirtualThreadPerTaskExecutor()){IntStream.range(0,10_000).forEach(i->{executor.submit(()->{Threa......
  • linux 第一周重点整合 (续)
    压缩指令:gzip说明:linux压缩文件为.gz(gzip)格式语法:gzip[选项]文件名选项:-r:可以将目录下的文件递归压缩-l:显示已经压缩文件的压缩信息-d:解压缩eg:gzipaa.c压缩aa.c文件gzip-daa.c.gz解压aa.c.gzgzip-ra递归压缩a文件夹,将a文件夹中的所有文件进行压缩,文件......
  • Chapter 11 Paython数据容器:序列
    欢迎大家订阅【Python从入门到精通】专栏,一起探索Python的无限可能!文章目录前言一、序列的定义二、序列的切片前言在Python中,数据容器是组织和管理数据的重要工具,序列作为其中一种基本的数据结构,具有独特的特性和广泛的应用。本章详细介绍了序列的定义及其切片......
  • Java 基础学习第一节:初始 Java 及其安装
    第一节001.大项目贯穿学习能力动手能力耐心和毅力表达能力002.学习中碰到问题怎么办找同桌找同学找项目经理找讲师003.学习Java的窍门多想公司需要什么?熟练掌握这个东西的人.如何才能熟练呢?多练练学Java就像学车,天天看别人开车,自己无论怎么看都不会,必须亲自......
  • 第 10 节 函数的基础3
    函数1.生成式列表生成式即ListComprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。#需求:生成一个1~10的整数列表list1=list(range(1,11))print(list1)#[1,2,3,4,5,6,7,8,9,10]#需求:生成列表:[1*1,2*2,3*3,4*4,5*5,6*6,7*......
  • 08 ES6的for...of和for...in的区别
    在JavaScript中,for...in和for...of是两种不同的循环结构,它们分别在不同的ECMAScript版本中被引入,并且具有不同的用途和特性。for...in循环(ES5)for...in是ECMAScript5(ES5)中引入的,用于遍历对象的可枚举属性和数组的索引。它提供了一种方式来获取对象的键或数组的索引。......
  • 测试环境使用问题及其优化对策实践
    1背景及问题G.J.Myers在<软件测试技巧>中提出:测试是为了寻找错误而运行程序的过程,一个好的测试用例是指很可能找到迄今为止尚未发现的错误的测试,一个成功的测试是揭示了迄今为止尚未发现的错误的测试。对于新手来说,日常测试用例设计时,很少用到系统的方法论,大多是根据产品需......
  • 04 ES6中对象的简写
    在ES6中,对象字面量的书写方式进行了一些简化,使得对象的创建更加简洁。以下是ES6中对象简写的几种形式:属性值缩写:当对象的属性名和属性值的变量名相同时,可以省略属性值,只写属性名。//ES5constname='Alice';constage=25;constperson={name:name,a......
  • 心形,五角星,五星红旗----MATLAB绘图
    目录一、心形绘图1.数学代码2.代码运行结果二、五角星绘图1.数学代码2.代码运行结果三、五星红旗绘图1.数学代码2.代码运行结果        要绘制函数的图形,需要执行以下步骤:1.通过指定变量x的值范围来定义x,为此函数将绘制出来;2.定义函数,y=f(x);3.调用pl......
  • 俊昭c语言笔记
    c语言——指针c语言——指针-CSDN博客c语言——函数格式和语句c语言——函数格式和语句_c语言副函数格式-CSDN博客c语言——break和continuec语言——break和continue_break的作用c语言-CSDN博客c语言——常用的输出函数c语言——常用的输出函数-CSDN博客c语言——运算符c......