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. LinuxShell脚本攻略--第六章 B计划

    tar -A或--catenate:新增文件到以存在的备份文件: -B:设置区块大小: -c或--create:建立新的备份文件: -C <目录>:这个选项用在解压缩,若要在特定目录解压缩 ...

  2. Fragment 笔记

    1.getActivity()  为null问题 在Fragment基类里设置一个Activity mActivity的全局变量,在onAttach(Activity activity)里赋值,使用m ...

  3. MySQL5.7 JSON实现简介

    版权声明:本文由吴双桥原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/205 来源:腾云阁 https://www.qclo ...

  4. 实战微信JS SDK开发:贺卡制作与播放(2)

    最近同事用CanTK开发了一个基于微信的贺卡制作APP,我虽然没有参与开发,但是提供CanTK和GameBuilder的技术支持,觉得有些东西比较有意思,写几篇博客和大家分享吧.这个贺卡APP完全开源 ...

  5. package-info.java文件详解

    欢迎关注我的社交账号: 博客园地址: http://www.cnblogs.com/jiangxinnju/p/4781259.html GitHub地址: https://github.com/ji ...

  6. linux笔记:linux常用命令-文件搜索命令

    文件搜索命令:find(文件搜索) 一些示例: 注意:在以文件名为条件进行搜索时,支持通配符. 多条件搜索,以及直接对搜索到的文件进行操作: 文件搜索命令:locate(在文件资料库中查找文件) 文件 ...

  7. linux笔记:权限管理命令chmod,chown,chgrp,umask

    权限对文件和目录的含义是不同的:对文件来说:读:可以查看文件内容写:可以修改文件内容执行:可以执行文件对目录来说:读:可以列出目录中的内容写:可以在目录中创建.删除文件执行:可以进入目录 能够更改文件 ...

  8. jq slideUp slideDown

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  9. jquery 获取属性的值

    jquery中用attr()方法来获取和设置元素属性,attr是attribute(属性)的缩写,在jQuery DOM操作中会经常用到attr(),attr()有4个表达式. 1.  attr( 属 ...

  10. web开发必须知道的javascripat工具

    1,JavaScript compressor and comparison tool 有许多工具可以帮助你压缩JavaScript代码,但是这个过程比较耗时,并且,对于某个特定的场景来说,很难分析出 ...