当前位置: 首页 > news >正文

halcon提取数据集中指定图片并进行裁剪

0、halcon编程总结

由于halcon编程是实时编程的,并且还可以实时看到对应的变量的值,所以最好的方式就是边写边看对应的变量的变化。
一个运行位置,一个断点位置,记得把运行位置放在前面,如下图所示:
在这里插入图片描述

一、理清数据集的结构以及相关操作

数据集例子:
在这里插入图片描述
最开始的数据集包括了0-G,这里是单独提取了D的数据。

首先要清楚DLDataset的格式,然后提取相关信息:
在这里插入图片描述
这里的两个路径,组合起来就是图片的绝对路径。——这里的缺点就是图片路径可能是不同的文件夹,因为这里是通过数组保存起来的,但是在MVTec Deep Learning Tool这个标注软件里不好指定文件的路径。
在这里插入图片描述
那么当得到数据集的handle之后就可以对每一个sample进行处理了,sanples就是数据集每一个样本的信息,包含了路径以及标注的框信息,尤其是这些框的信息,我们可以进行处理:
在这里插入图片描述
读取图像

read_image(dl_image,dl_ss_image_file_name)

写入图像

write_image (Lena, 'jpg', 0, 'D:/HNQM_JS_ZC/RF_OCR/Train/CFY/test_hui/fill_red2.jpg')

二、对图像进行裁剪

overpaint_region (Lena, Rectangle, color, 'fill')在图片的指定区域进行裁剪。color表示要使用的颜色,"fill"指使用填充方式这个一般就用这个

* read_image (Lena, 'D:/HNQM_JS_ZC/RF_OCR/Train/CFY/test_hui/fill2.jpg')
*gen_circle (Circle, 200, 200, 100.5)
* gen_rectangle1(Rectangle,0.0,0.0,100.0,100.0)

在这里插入图片描述

代码

* read_image (Lena, 'D:/HNQM_JS_ZC/RF_OCR/Train/CFY/test_hui/fill2.jpg')
*gen_circle (Circle, 200, 200, 100.5)
* gen_rectangle1(Rectangle,0.0,0.0,100.0,100.0)
*用红色填充
* color := [0,0,0]
* overpaint_region (Lena, Rectangle, color, 'fill')

* write_image (Lena, 'jpg', 0, 'D:/HNQM_JS_ZC/RF_OCR/Train/CFY/test_hui/fill_red2.jpg')



create_dict (WindowDict)

*** 测试 ***
*图片路径
*总路径
DataDir := 'D:/HNQM_JS_ZC/RF_OCR'
* D:/HNQM_JS_ZC/RF_OCR/Train/CFY/test_hui
* HalconImageDir:= DataDir + '/IMAGE/POS/0915_2'
HalconImageDir:= DataDir + '/Train/CFY/test_hui'
*数据集路径
*/Train/CFY/dl_dataset/DLDataset_cfy_0915.hdict
PillBagHdictFile := DataDir + '/Train/CFY/test_hui/DLDataset_cfy_0915_child.hdict'

*读取数据集
read_dict (PillBagHdictFile, [], [], DLDataset)
*dataset字典,与DLDataset格式相同
create_dict (Dict_Dataset)
get_dict_tuple(DLDataset,'image_dir',image_dir)
get_dict_tuple(DLDataset,'class_ids',dl_class_ids)
get_dict_tuple(DLDataset,'class_names',dl_class_names)
get_dict_tuple(DLDataset,'samples',dl_sample)

*单个文件的路径
for i:=0 to |dl_sample|-1 by 1
    dl_ss:=dl_sample[i]
    *获取D对应的13所在的位置
    get_dict_tuple(dl_ss,'bbox_label_id',bbox_label_id)
    D:=[]
    for Index := 0 to |bbox_label_id|-1 by 1
        if(bbox_label_id[Index]==13)
            D:=[D,Index]
        endif
    endfor
    
    *提取框的数组
    get_dict_tuple(dl_ss,'image_file_name',image_file_name)
    dl_ss_image_file_name:=image_dir+image_file_name
    read_image(dl_image,dl_ss_image_file_name)
    *将画框提取然后进行裁剪
    get_dict_tuple(dl_ss,'bbox_row1',row1)
    get_dict_tuple(dl_ss,'bbox_row2',row2)
    get_dict_tuple(dl_ss,'bbox_col1',col1)
    get_dict_tuple(dl_ss,'bbox_col2',col2)
    
    *对每个框进行分割并保存
    get_dict_tuple(dl_ss,'image_id',image_id)
    *len:=|D|
    for j:=0 to |D|-1 by 1
        if(|D|==1)
            width:=col2[D]-col1[D]
            hight:=row2[D]-row1[D]
            crop_part (dl_image, ImagePart, row1[D], col1[D], width, hight)
            write_image(ImagePart,'jpeg',0,'D:/HNQM_JS_ZC/RF_OCR/Train/CFY/test_hui/d_img/'+image_id+'_'+j+'.jpg')
            break
        endif
        width:=row2[D[i]]-row1[D[i]]
        hight:=col2[D[i]]-col1[D[i]]
        crop_part (dl_image, ImagePart, row1[D[i]], col1[D[i]], width, hight)
        write_image(ImagePart,'jpeg',0,'D:/HNQM_JS_ZC/RF_OCR/Train/CFY/test_hui/d_img/'+image_id+'_'+j+'.jpg')
    endfor
    
endfor

*提取对应字符的图片
********************************************

相关文章:

  • 使用PdfSharp从模板生成Pdf文件
  • HTML篇三——(2)
  • 【012】基于JavaWeb酒店客房管理系统(附源码、数据库、数据库文档、运行教程)
  • Gitee账号注册以及Git下载安装
  • 边学边记——Java中有关接口的知识
  • ant-design-vue 库 Loading 组件封装
  • 2022 年前端趋势的 技术发展情况
  • Observability:使用 Elastic Agent 来收集定制的 TCP 日志
  • 【C++】C++ 入门
  • Flink Kafka Sink 源码分析
  • 高斯消元法(2)——保姆级笔记
  • R语言因子分析全流程
  • Nginx简单配置 - 基础安全
  • 基于sdrpi的openwifi实践2:生成BOOT.BIN
  • 七、安装Centos7+8系统+超级优化
  • JavaScript 如何正确处理 Unicode 编码问题!
  • CentOS7 安装JDK
  • Django 博客开发教程 16 - 统计文章阅读量
  • Flannel解读
  • java多线程
  • Laravel 实践之路: 数据库迁移与数据填充
  • Mac转Windows的拯救指南
  • ng6--错误信息小结(持续更新)
  • spring + angular 实现导出excel
  • VuePress 静态网站生成
  • Vue组件定义
  • Web Storage相关
  • 闭包,sync使用细节
  • 仿天猫超市收藏抛物线动画工具库
  • 复杂数据处理
  • 排序算法学习笔记
  • 人脸识别最新开发经验demo
  • 第二十章:异步和文件I/O.(二十三)
  • ​2021半年盘点,不想你错过的重磅新书
  • ​业务双活的数据切换思路设计(下)
  • # Apache SeaTunnel 究竟是什么?
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • $(function(){})与(function($){....})(jQuery)的区别
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (C#)一个最简单的链表类
  • (C语言)字符分类函数
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (二开)Flink 修改源码拓展 SQL 语法
  • (翻译)Quartz官方教程——第一课:Quartz入门
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (十五)使用Nexus创建Maven私服
  • (四)模仿学习-完成后台管理页面查询
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (转)iOS字体