算子sort_contours_xld算子有5种排序方式,即:

'upper_left':

The position is determined by the upper left corner of the surrounding rectangle.

'upper_right':
The position is determined by the upper right corner of the surrounding rectangle.

'lower_left':
The position is determined by the lower left corner of the surrounding rectangle.

'lower_right':
The position is determined by the lower right corner of the surrounding rectangle.

'character':
The position is determined by the upper left corner of the surrounding rectangle. In contrast to 'upper_left', the contours are also sorted according to the remaining coordinate, if they overlap in the direction of the coordinate which is specified by the parameter RowOrCol.

其中'character'排序方式不太好理解,不过从英文说明可知,它跟'upper_left'排序方式很像,我想一般来说,前面的四种排序方式一般够用了。

'upper_left'排序方式为例,它的英文说明的翻译是:位置由环绕矩形的左上角决定。

于是我猜测它的意思是这样的:对于一组xld来说,画出每一个xld的最小平行矩形(gen_rectangle1),然后根据这些矩形的左上角坐标来对这些xld进行排序。

先看算子签名:

sort_contours_xld(Contours : SortedContours : SortMode, Order, RowOrCol : )

Order可以取'true'或者'false','true'是升序排列,'false'是降序排列

RowOrCol 可以取'row'或者'column'。

下面以如下方式排列试试:(根据最小外接矩形的左上角的行坐标来升序排列)

sort_contours_xld (SelectedXLD, SortedContours, 'upper_left', 'true', 'row')

 read_image (Image, 'C:/Users/happy xia/Desktop/dynPic.png')
threshold_sub_pix (Image, Border, )
select_shape_xld (Border, SelectedXLD, 'contlength', 'and', , )
sort_contours_xld (SelectedXLD, SortedContours, 'upper_left', 'true', 'row')
dev_set_draw ('margin')
dev_display (Image)
count_obj (SortedContours, Number)
gen_empty_obj (EmptyObject)
*注释:这里Number =
for Index := to Number by
select_obj (SortedContours, ObjectSelected, Index)
smallest_rectangle1_xld (ObjectSelected, Row1, Column1, Row2, Column2)
gen_rectangle1 (Rectangle, Row1, Column1, Row2, Column2)
concat_obj (EmptyObject, ObjectSelected, EmptyObject)
endfor dev_display (Image)
select_obj (SortedContours, ObjectSelected1, )
sort_contours_xld (SelectedXLD, SortedContours2, 'upper_left', 'false', 'row')
select_obj (SortedContours2, ObjectSelected2, Number - 11 + 1)

程序中变量ObjectSelected出现的顺序依次如下:(可以观察ObjectSelected的外接矩形的row坐标,看是否符合之前总结的规律)

对于排序后的xld元组SortedContours,我们可以发现它的升序排列第11项降序排列第(29-11+1)项是同一个对象,都是字母W。

有一个问题值得讨论一下:'upper_right', 'true', 'row''upper_left', 'true', 'row'有何区别?

我反复试了一下,结论是:没有区别。因为根据行(row)排列时,矩形的左上角和右上角的row值是一样的。

如果是根据row升序排列,如果row一样,那么再根据column升序排列;如果是根据row降序排列,如果row一样,那么再根据column降序排列。

至于其他几种排序方式,规律是一样的,无需赘言。

不知道看到这里的网友们懂了没有,反正我自己是搞懂了,要想彻底搞懂,很简单,用我提供的图和程序,反复变换排序的方式,跑一跑程序便知。

sort_contours_xld算子的几种排序方式研究的更多相关文章

  1. JavaScript新手学习笔记3——三种排序方式(冒泡排序、插入排序、快速排序)

    每种编程语言学到数组的时候,都会讲到排序算法,当时学C语言的时候,卡在排序算法.今天来总结一下javascript中如何实现三种排序算法. 1.冒泡排序(默认升序排列哦) 原理: 冒泡排序的原理,顾名 ...

  2. TreeSet的两种排序方式,含Comparable、Comparator

    1.排序的引入 由于TreeSet可以实现对元素按照某种规则进行排序,例如下面的例子 public class TreeSetDemo { public static void main(String ...

  3. [Java]HashMap的两种排序方式

    先将 Map 中的 key 和 value 全部取出来封装成 JavaBea 数组,再将这个数组排序,排序完成后,重新写回 Map 中,写回时采用 LinkedHashMap 可以保证迭代的顺序. 下 ...

  4. HashMap的两种排序方式

    Map<String, Integer> map = new HashMap<String, Integer>();map.put("d", 2);map. ...

  5. 几种排序方式的java实现(02:希尔排序,归并排序,堆排序)

    代码(部分为别人代码): 1.希尔排序(ShellSort) /* * 希尔排序:先取一个小于n的整数d1作为第一个增量, * 把文件的全部记录分成(n除以d1)个组.所有距离为d1的倍数的记录放在同 ...

  6. 几种排序方式的java实现(01:插入排序,冒泡排序,选择排序,快速排序)

    以下为集中排序的java代码实现(部分是在引用别人代码): 插入排序(InsertSort): //代码原理 public static void iSort(int[] a){ for(int i ...

  7. java学习-排序及加密签名时数据排序方式

    排序有两种 1. 类实现comparable接口调用List.sort(null)或Collections.sort(List<T>)方法进行排序 jdk内置的基本类型包装类等都实现了Co ...

  8. Java基础-数组常见排序方式

    Java基础-数组常见排序方式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 数据的排序一般都是生序排序,即元素从小到大排列.常见的有两种排序方式:选择排序和冒泡排序.选择排序的特 ...

  9. c# list排序的三种实现方式

    用了一段时间的gridview,对gridview实现的排序功能比较好奇,而且利用C#自带的排序方法只能对某一个字段进行排序,今天demo了一下,总结了三种对list排序的方法,并实现动态传递字段名对 ...

随机推荐

  1. Linux解压rar、zip、war、tar文件

    在Linux上解压常见文件的命令: rar文件:rar e xxx.rar zip文件:unzip -xzvf xxx.zip war包:jar -xvf xxx.war tar包:tar -xzvf ...

  2. POI2015题解

    POI2015题解 吐槽一下为什么POI2015开始就成了破烂波兰文题目名了啊... 咕了一道3748没写打表题没什么意思,还剩\(BZOJ\)上的\(14\)道题. [BZOJ3746][POI20 ...

  3. <script type="text/template">是干什么的,为什么要把html写在js中? 这是什么编程语言风格,都能这样用吗?

    这一段存放了一个模板.在js里面,经常需要使用js往页面中插入html内容.比如这样: var number = 123; $('#d').append('<div class="t& ...

  4. vmware esxi 4.1单IP访问不同机器

    1 vmware ESXI先创建虚拟机ROS作为路由  ROS设置两张网卡 WAN网卡对应外网IP LAN网卡对应LAN IP 设置网卡名 int set 0 name=wai             ...

  5. oracle/ms sql 系统表

    sql server系统表详细说明 sysaltfiles 主数据库 保存数据库的文件 syscharsets 主数据库字符集与排序顺序 sysconfigures主数据库 配置选项 syscurco ...

  6. 浅析 MySQL Replication(转)

    目前很多公司中的生产环境中都使用了MySQL Replication ,也叫 MySQL 复制,搭建配置方便等很多特性让 MySQL Replication 的应用很广泛,我们曾经使用过一主拖20多个 ...

  7. WinForm 弹窗

    private void FrmMyShow_Load(object sender, EventArgs e) { Rectangle r = Screen.GetWorkingArea(this); ...

  8. 卸载 visual studio 2012时先把系统还原打开

    否则,会停留在创建还原点那儿很长时间 .

  9. 跟着TensorFlow的进阶级教程实现MNIST库的训练

    转载出处:http://blog.csdn.net/feifei884431/article/details/51429829 背景介绍 代码实现及结果 小问题  ResourceExhaustedE ...

  10. java 面向对象 — 多态

    注意:如果用父类引用指向子类对象的时候.不可以调用,子类中有但是父类中没有的方法. 抽象 方法没有具体方法,以分号结束.例:public abstract void call(); 1.接口必须要有a ...