cv::groupRectangles

void groupRectangles(vector<Rect>& rectList, int groupThreshold, double eps=0.2)

Groups the object candidate rectangles

Parameters:
  • rectList – The input/output vector of rectangles. On output there will be retained and grouped rectangles
  • groupThreshold – The minimum possible number of rectangles, minus 1, in a group of rectangles to retain it.
  • eps – The relative difference between sides of the rectangles to merge them into a group

The function is a wrapper for a generic function partition() . It clusters all the input rectangles using the rectangle equivalence criteria, that combines rectangles that have similar sizes and similar locations (the similarity is defined by eps ). When eps=0 , no clustering is done at all. If   , all the rectangles will be put in one cluster. Then, the small clusters,containing less than or equal to groupThreshold rectangles, will be rejected. In each other cluster the average rectangle will be computed and put into the output rectangle list.

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

http://www.nowamagic.net/datastructures/ds_UsageOfAddressOperator.php

C语言中地址操作符&的使用

示例一

01 #include <stdio.h>
02 int find(int *a);
03   
04 main()
05 {
06     int b = 1;
07     int wait, test;
08   
09     test = find(&b);
10   
11     printf("内存地址为:%d",&test);
12   
13     scanf("%d", &wait);
14 }
15   
16 int find(int *a)
17 {
18     return *a;
19 }

int b = 1; int test = find(&b); 这样调用时,实际上是进行了:int* a = &b,创建了一个新的指向b的整型指针a作为find函数范围内的局部变量。

示例二

函数声明:int find(int& a); 函数调用:int b = 1; int n = find(b);

这样调用时,实际上是进行了:int& a = b,给变量b起了个别名a,也就是说a和b实际上代表的是同一个变量,调用期间没有创建任何新的变量。

示例三

函数声明:int find(int a); 函数调用:int b = 1; int n = find(b);

这样调用时,实际上是进行了:int a = b,也就是普通的变量赋值操作,调用期间创建了在find函数范围内的局部变量a,它的值与b相同。

C中*、&用法介绍

&在用于计算时就是取变量地址,如int* a = &b,就是将整型变量b的地址取出,赋值给整型指针a,a中的内容就是b的地址,所以a指向b。

*在用于计算时,就是取指针所指向的地址中的值,如int b = *a,就是将整型指针a指向的地址中存放的内容赋值给整型变量b。

C语言中,&符号大家一定很熟悉吧,它除了可以作为按位运算“与”之外还有更常用的功能——取变量地址。

01 #include <stdio.h>
02   
03 main()
04 {
05     int a = 0;
06     int wait;
07   
08     int *p = &a;
09   
10     printf("The value is: %d/n", *p);
11   
12     scanf("%d", &wait);
13 }

上面代码中,指针p指向变量a的地址。在C/C++中,每个变量都有其相应的地址,通过在变量标识符前加&符号即可获得变量的地址。

那么我们这么写可以吗?int *p = &0x01000;

这显然不行。因为对于一个数值常量,它是没有地址的。而变量之所以有地址就是因为要有一个存储单元对变量进行标识(当然,变量也可以直接映射到某个寄存器)。

我们再看下面的代码:

1 #include "stdio.h"
2 intmain(void)  
3 {  
4     int a = 0; // &a = 0x0012ff60  
5     int *p = &*(int*)0x0012ff60;  
6     printf("The value is: %d/n", *p);  
7     return0;  
8 }

上面代码又是怎么回事呢?

先前已经调查过变量a的地址——0x0012ff60,那么这里的指针p实际上也是指向变量a的地址。

首先,将0x0012ff60作为int*,这时它与&a是等价的。

然后*(int*)0x0012ff60表示取变量a的内容。

最后,&*(int*)0x0012ff60表示再脱去*(int*)0x0012ff60的解引用,相当于又变为(int*)&a。

因此,这里的&与第一个例子中的&是不同的语义。这里的&不是取地址,因为一个*(int*)0x0012ff60不是变量,它是没有地址的。每一个变量标识符在编译期间,编译器会为它们创建一个符号表,其中存放着变量标识符相应的各种属性,如类型、地址标识等。地址标识在连接后即可确定逻辑地址值。简而言之,&作为取地址操作,当且仅当&后面跟着的是变量或函数标识符。所以这里的&表示脱去解引用。

由此我们可以得出:&作为取地址操作时,其行为结果是在编译时就被确定的;而*,解引用操作(或取内容)操作,其行为结果只能在运行时才可被确定。

再看下面的例子,加深印象:

1 #include "stdio.h"
2   
3 intmain(void
4
5     int a = 0;
6     int *p = &*&*&a;
7     printf("The value is: %d/n", *p);
8     return0; 
9 }

在C++中,&还可以表示引用,这个就不多说了。

01 #include "iostream" 
02 using namespace std;
03   
04 intmain(void
05
06     int a = 0;
07     int &r = a;
08     cout << "The value is: " << r << endl;
09     return0; 
10 }

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

http://book.51cto.com/art/201009/224192.htm

【答案】

指针是一个实体,而引用仅是个别名;

引用使用时无需解引用(*),指针需要解引用;

引用只能在定义时被初始化一次,之后不可变;指针可变;

引用没有 const,指针有const;

引用不能为空,指针可以为空;

"sizeof引用"得到的是所指向的变量(对象)的大小,而"sizeof指针"得到的是指针本身(所指向的变量或对象的地址)的大小;

和引用的自增(++)运算意义不一样;

在内存分配上,程序为指针变量分配内存区域,而引用不需要分配内存区域。

感谢:http://blog.csdn.net/pkueecser/article/details/6333179

【温故知新C/C++/opencv】取址符&||cv::groupRectangles||引用与值传递的更多相关文章

  1. C中指针符*和取址符&

    学习了C语言之后,关于指针部分看了无数遍,有时候明明觉得自己看懂了,指针就是地址,但是总是在看代码时候糊里糊涂的搞不明白,最近又关于指针强化了一把. 大部分情况下对于程序中指针糊涂是因为不明白指针符“ ...

  2. C语言中指针和取地址符&的关系

    一 概念定义: 严格说起来,应该这么讲:指针存的是地址,而&运算符是取变量的地址. 指针原理: 其实计算机中的内存就像一个个抽屉(一兆内存就相当于1百万个抽屉),每个抽屉都有一个编号,用于存放 ...

  3. Opencv undefined reference to `cv::imread() Ubuntu编译

    Ubuntu下编译一个C++文件,C++源程序中使用了opencv,opencv的安装没有问题,但是在编译的过程中出现如下错误: undefined reference to `cv::imread( ...

  4. php的foreach中使用取地址符,注意释放

    先来举个例子: <?php $array = array(1, 2, 3); foreach ($array as &$value) {} // unset($value); forea ...

  5. 大一C语言学习笔记(7)---指针篇--什么是指针?什么是指针变量?取地址符“&”的作用是什么?地址运算符“*”的作用是什么,怎么理解两者?

    "指针是C语言的灵魂"这句话一开始我没怎么明白,现在接触了指针,终于知道为什么这么说了,因为....难,真难:下面说一下我对这句话的见解: C语言拥有着其他语言所没有的特性---直 ...

  6. angularjs取Sevice和directive的引用

    取Sevice和directive的引用 3: Grab any Services We can grab a reference to any service using the injector  ...

  7. jquery 取子节点及当前节点属性值

    分享下jquery取子节点及当前节点属性值的方法. <li class="menulink"><a href="#" rel="ex ...

  8. java中方法传入参数时:值传递还是址传递?

    JAVA中的数据类型有两大类型: ① 基本数据类型:逻辑型(boolean).文本型(char).整数型(byte.short.int.long).浮点型(float.double) ② 引用数据类型 ...

  9. c++中值传递,址传递,引用传递

    概念详解 1. 值传递: 形参是实参的拷贝,改变形参的值并不会影响外部实参的值. 从被调用函数的角度来说,值传递是单向的(实参->形参),参数的值只能传入,不能传出: 当函数内部需要修改参数,并 ...

随机推荐

  1. HBase集群搭建

    HBase集群搭建 搭建环境:假设我们的linux环境已经准备好,包括网络.JDK.防火墙.主机名.免密登录等都没有问题,而且一定要有zookeeper.下面我们用3台linux虚拟机来搭建Hbase ...

  2. kafka常用操作命令

    1.启动Kafka,其中">>/dev/null"表示将日志信息输出到"黑洞",其中"2>&1"表示将错误信息和前 ...

  3. oracel数据库基本知识和基本查询方法

    Oracel数据库学习1.小型数据库 access,foxbase 中型数据库 mysql,sqlserver,informix 大型数据库 sybase,Oracle,db2 Oracle数据库需求 ...

  4. Android Support Library控件详细介绍之RecyclerView

    RecyclerView控件 依赖  compile 'com.android.support:recyclerview-v7:24.1.1'RecyclerView也是容器控件,大多数的效果显示可通 ...

  5. Hibernate-细细道来-01

    Dao代码,如何编写? 使用Jdbc技术,原始的jdbc操作, Connection/Statement/ResultSet DbUtils组件, 轻量级的dao的组件: Hibernate技术  [ ...

  6. pvresize - Unix, Linux Command

    NAME pvresize - resize a disk or partition in use by LVM2 SYNOPSIS pvresize [-d|--debug] [-h|--help] ...

  7. ztree check

    <link rel="stylesheet" href="${contextPath}/resources/ztree/css/demo.css" typ ...

  8. poj1129 Channel Allocation(染色问题)

    题目链接:poj1129 Channel Allocation 题意:要求相邻中继器必须使用不同的频道,求需要使用的频道的最少数目. 题解:就是求图的色数,这里采用求图的色数的近似有效算法——顺序着色 ...

  9. 创建交货单/外向交货BAPI_OUTB_DELIVERY_CREATE_SLS/STO

    FUNCTION Z_SD_CREATE_DN. *"-------------------------------------------------------------------- ...

  10. Hadoop 添加删除数据节点(datanode)

    前提条件: 添加机器安装jdk等,最好把环境都搞成一样,示例可做相应改动 实现目的: 在hadoop集群中添加一个新增数据节点. 1. 创建目录和用户  mkdir -p /app/hadoop gr ...