OpenCV编程中的C++语法知识点回顾

摘自:https://blog.csdn.net/qq_18649781/article/details/86437696

 

计算机视觉之OpenCV编程中的C++语法知识点回顾(近期持续更新中)

2019-01-13 21:17:02 江清月明 阅读数 144

分类专栏: 计算机视觉/OpenCV 计算机视觉相关

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/qq_18649781/article/details/86437696

1、uchar* previous 和 uchar *previous 两者之间有什么区别?

		Answer:在声明一个指针的时候,两者之间没有任何区别,如果同时声明两个指针的时候,就会有区别:
                比如  uchar*  a , b ; 和 uchar *a , *b ; 这两者之间是不一样的,前一个是错误的声明,后一个才是
                正确的变量声明

2、变量前加const

        const 用来声明一个常量的,当你不想一个值被改变时,就可以用const进行声明。

3、char和uchar 的区别

char有符号型型变量,全称为signed char,一般缩写为char,范围是-128~127;
 uchar在C语言中不存在,会出现语法错误。unsigned char 是无符号型变量范围是 0~255。

4、C++中 :: 的作用意义

1.在类外部声明成员函数:void Point::Area(){};   
          在这里,Point是指的类名,Area( )是指的类中的成员函数
2.调用全局函数;表示引用成员函数变量及作用域,作用域成员运算符 
          例:System::Math::Sqrt() 相当于System.Math.Sqrt()。
3.调用类的静态方法: 如:CDisplay::display()。 
          把域看作是一个可视窗口全局域的对象在它被定义的整个文件里,一直到文件末尾都是可见的。在一个函数内被定义的对象是
          局域的(local scope), 它只在定义其的函数体内可见。每个类维持一个域,在这个域之外 ,它的成员是不可见的。类域操
          作符告诉编译器后面的标识符可在该类的范围内被找到。

5、关于指针最简单的 “ * ” 和 " & " 的使用

  • 首先是定义一个指针: int *p ; 明确一点: 指针其实就是指的指针变量,是一个专门用来存放地址的变量。
  • p = &i ; 这句话的意思是: 取i 的地址赋给指针p
                               上述两种情况综合起来就是: int *p = &i ;
  • " * " 是指针运算符, ” & “ 是取地址运算符
  • 指向空指针: void* p;

6、关于C++ 中调用OpenCV库函数时,定义图像 Mat时,使用 引号( &) 符号的疑问和解析

    **首先需要明确一点是,这个问题一般参考书都会归结到 指针 章节里面的 引用 小节  去讲述**

在图像处理中,经常会看到: Mat& image… 和 Mat &image… 这两种情况
1、引用其实是一种隐式指针

int a = 10 ;
int & ia = a ;
ia = 2;      /// 在这里面,定义一个隐式变量ia,它是变量a的别名。

2、使用引用来传递参数。这种方式在OpenCV图像处理中非常常见
比如下面这个例子:

cv::Mat ColorDetector::process(const cv::Mat& image) {
   result.create(image.size(), CV_8UC1);
   cv::Mat_::const_iterator it = image.begin();
   cv::Mat_::const_iterator itend = image.end();
   cv::Mat_::iterator itout = result.begin();
   for (; it != itend; it++, itout++) {
       if (getColorDistance(*it) <= maxDist) {
           *itout = 255;
       }
       else
           *itout = 0;
   }
   return result;
}

在这里定义一个函数,在函数的参数里面,通过引用,传入 image ( Mat& image ),通过这样的操作;
当我们在主函数中

result = cdetect.process(image); 

调用这样的一个函数的时候, 我们传入的是 image 图像,在 process函数里面引用image图像,所以在process里面对图像进行相应的操作,在主函数中的image图像就会随着进行相应的改变。
3、关于 引用符号的位置的说明

Mat&image
Mat[任意个空格]&image
Mat&[任意个空格]image
Mat[任意个空格]&[任意个空格]image
     上述四种情况,在编译器看来都是一样的,这些空格在词法分析之后都被忽略了。所以说写法上比较灵活

文章最后发布于: 2019-01-13 21:17:02

你可能感兴趣的:(OpenCV,C++)