摘自:https://blog.csdn.net/qq_18649781/article/details/86437696
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 = &i ;
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