首页 > 其他分享 >Halcon中缩放Region或XLD的方法研究

Halcon中缩放Region或XLD的方法研究

时间:2023-09-20 14:34:50浏览次数:24  
标签:Row1 XLD 缩放 Region xld region

在Halcon中,Region和XLD之间可以彼此转换。但这种转换并不是“无损”的,XLD可以是不闭合的,但是Region一定是闭合的。因此,如果将不闭合的XLD转为Region,然后再转回XLD,那么转换后的XLD和原先的XLD就有了一定的区别。

 

言归正传,先说说Region的缩放。

 

一、Region的缩放

Region的缩放很简单,有zoom_region算子,其签名如下,其中ScaleWidth, ScaleHeight是宽、高的缩放比例因子:

zoom_region(Region : RegionZoom : ScaleWidth, ScaleHeight : )

 

缩放的时候,Row和Column都根据缩放比例因子来放大或缩小。因此缩放后,Region的位置会移位,如果不想让缩放后的Region移位,可以这样:

复制代码
set_system ('clip_region', 'false')
zoom_region (Region, RegionZoom, 0.5, 0.5)

area_center (Region, Area, Row, Column)
area_center (RegionZoom, Area1, Row1, Column1)
move_region (RegionZoom, RegionMoved, Row - Row1, Column - Column1)
复制代码

需要注意的是,Region缩放后,经常会有一部分跑到画布外面,Halcon默认是将画布外部的Region进行裁切的,如果不想裁切,可以在程序开始加上set_system ('clip_region', 'false'),即不裁切画布外面的部分。

 

 

二、XLD的缩放

本文开头分析过,“XLD——Region——XLD”的转换不是无损的,但是如果不介意这一点(或者说影响不大),XLD的缩放就可以通过Region的缩放为中介。

 

1、使用Region为中介缩放XLD

复制代码
1 gen_image_const (Image, 'byte', 8200, 4200)
2 set_system ('clip_region', 'false')
3 read_contour_xld_dxf (Contours,'01.dxf', [], [], DxfStatus)
4 *转为region
5 gen_region_contour_xld (Contours, Region, 'margin')
6 *缩放region
7 zoom_region (Region, RegionZoom, 0.2, 0.2)
8 *转回XLD
9 gen_contour_region_xld (RegionZoom, Contours2, 'border')
复制代码

 

如果是下面这样的XLD呢?

用上面的方法的话,发现结果完全不对,如下图:

 

那么应该怎么弄呢?

 

2、通过缩放XLD中每个点的坐标值来缩放XLD

 

复制代码
 1 gen_image_const (Image, 'byte', 8200, 4200)
 2 set_system ('clip_region', 'false')
 3 read_contour_xld_dxf (Contours,'02.dxf', [], [], DxfStatus)
 4 count_obj (Contours, Num)
 5 
 6 *XLD上点的采样间隔(为了缩短处理时间)
 7 Step := 10
 8 *缩放比例
 9 Scale := 0.3
10 gen_empty_obj (Contour2)
11 for i := 1 to Num by 1
12     select_obj (Contours, Contour, i)
13     get_contour_xld (Contour, Row, Col)
14     Row1 := []
15     Col1 := []
16     for j := 0 to |Row|-1 by Step
17         
18         Row1:=[Row1,Row[j] * Scale]
19         Col1:=[Col1,Col[j] * Scale]
20         
21     endfor
22     
23     *判断轮廓是不是闭合,如果是闭合的,那么使最后一个点与第一个点重合(即让缩放后的XLD也闭合)
24     test_closed_xld (Contour, IsClosed)
25     if (IsClosed == 1)
26         Row1:=[Row1,Row[0] * Scale]
27         Col1:=[Col1,Col[0] * Scale]
28     endif
29     
30     gen_contour_polygon_xld (Contour1, Row1, Col1)
31     smooth_contours_xld (Contour1, SmoothedContours, 5)
32     concat_obj (Contour2, SmoothedContours, Contour2)
33 endfor
复制代码

 其中:

get_contour_xld (Contour, Row, Col)是得到XLD中的一系列点;

gen_contour_polygon_xld (Contour1, Row1, Col1)是通过一系列点重建XLD。

 

结果如下:

标签:Row1,XLD,缩放,Region,xld,region
From: https://www.cnblogs.com/QuincyYi/p/17717248.html

相关文章

  • The 2023 ICPC Asia Regionals Online Contest (1)
    Preface这场打的还行,因为学长们都没发挥好被我们队偷了,但感觉发挥的也一般前期开题顺序有点问题导致罚时很高,不过中期写题还是很顺的基本都是一遍过只不过在3h的时候过完F到达8题后就开始坐牢了,虽然这场有两个字符串但徐神把H想复杂了,B可以说前面的建SAM和反串的AC自动机都想到......
  • 表格的自定义排序 编辑 拖拽 缩放
    终于能闲下来做点自己想做的事情了.. 简单表格排序  可以双击编辑自定义编辑后的规则 可拖动列进行列替换 可推动边框进行列宽度的缩放  ie6下中文不自动换行 非ie下字母和数字也不自动换行确实让人恼火 chrome浏览器下点击运行好像问题很大 拿到本地测试会比较好<!......
  • 2018-2019 ACM-ICPC Brazil Subregional Programming Contest
    \(B.Marbles\)如果是\(Nim\)博弈,题目应该改成到转移所有石子。显然要转化到将所有石子转移到\((1,2)\)或者\((2,1)\),特判无需到达这两个点的必败态,对其他点使用\(Nim\)博弈判断胜负态。intsg[N][N],vis[N];voidinit(){for(inti=1;i<=100;i++){for(in......
  • The 2023 ICPC Asia Regionals Online Contest (1) ADI
    The2023ICPCAsiaRegionalsOnlineContest(1)AQualifiersRankingRules思路:按位次为第一关键字,场次为第二关键字排序即可。//AConemoretimes//nndbk#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;constintmod=1e9+7;constintN......
  • 2018-2019 ACM-ICPC Brazil Subregional Programming Contest
    B.Marbles题解显然如果存在棋子位于\((x,x)\),那么一定先手必胜容易发现必败态位于\((1,2)\)和\((2,1)\),那么我们可以通过\(sg\)函数暴力打表得到并且玩家一定不会将棋子移动至\((0,i),(i,0),(i,i)\)这三种情况上,因为谁移动到这些位置,对手一定处于必胜态intn,f[N][......
  • 2020-2021 ACM-ICPC Brazil Subregional Programming Contest
    A.StickerAlbum你想要得到\(n\)张贴纸,每包礼物中等概率出现\([A,B]\)范围内数量的贴纸,求需要买多少包礼物才能至少获得\(n\)张贴纸的期望次数\(1\leqn\leq10^6,0\leqA,B\leq10^6\)题解:期望DP我们考虑从后往前进行\(dp\)设计状态为\(dp[i]\)代表手上有\(i\)张......
  • The 2021 ICPC Asia Macau Regional Contest
    目录写在前面AKFCGI写在最后写在前面比赛地址:https://codeforces.com/gym/104373当了一场口胡选手。我是彩笔。以下按个人向难度排序。A随便找条路径,检查路径是否满足条件,满足则直接输出,否则倒序输出。CodebyYRMrSu:#include<bits/stdc++.h>#defineLLlonglongusing......
  • vscode调整界面大小,缩放字体快捷键
    1、打开设置菜单2、输入‘FontLigatures’,选择编辑js文件3、增加代码"editor.mouseWheelZoom":true  ......
  • The 2020 ICPC Asia Shenyang Regional Programming Contest DFIK
    The2020ICPCAsiaShenyangRegionalProgrammingContest-CodeforcesDFIKD.JourneytoUn'Goro思路:思维+搜索一开始以为是构造,好吧但是是搜索。我们先考虑什么时候是最大值?首先考虑,题目要求我们从\(i->j\)且红色的数量是奇数被认为是好的。那么我们考虑记录\(p......
  • fit 缩放形式
    fit 缩放形式fit 缩放形式对应的是BoxFit是一个枚举contain是默认的形式,图片会在保证图片本身长宽比不变的情况下缩放以适应当前显示空间,图片不会变形。fill拉伸填充,宽高比例会发生变化,导致图片变形cover 会按图片的长宽比放大后居中填满显示空间,图片不会变形,超出显示......