我在OpenCV的Mat类中如何实现行和列的混淆,希望有人可以提供一些说明。
使用Mat类时,行和列不能在它们后面有(),即:
cv::Mat imgSomeImage;
imgSomeImage = cv::imread("some_image.png");
// this line works
std::cout << "num rows = " << imgSomeImage.rows << "\n";
// this line does not compile, only difference is the () after rows
std::cout << "num rows = " << imgSomeImage.rows() << "\n";
熟悉.NET,我起初认为行和列必须是属性,但在阅读之后:
Does C++11 have C#-style properties?
似乎C ++没有等价物,至少没有添加类来模仿.NET属性,据我所知,OpenCV没有。
所以,我认为Mat行和cols必须是成员变量,然后转到OpenCV源进行确认。
检查mat.hpp:
https://github.com/opencv/opencv/blob/master/modules/core/include/opencv2/core/mat.hpp
第217和218行:
int cols(int i=-1) const;
int rows(int i=-1) const;
是我对事情不清楚的地方。我已多次见过这个:
// declare a member variable with a default value of -1
int cols = -1;
或者这个:
const int SOME_CONSTANT = 123;
如果cols应该只读给外面的世界,我会想到这样的事情:
// member variable
private:
int _cols;
// getter
public:
int cols() { return _cols; }
查看matrix.cpp中行和列的用法:
https://github.com/opencv/opencv/blob/master/modules/core/src/matrix.cpp
例如,第395行:
if( d == 2 && rows == _sizes[0] && cols == _sizes[1] )
或第498行:
cols = _colRange.size();
和许多类似的例子,似乎这些确实是成员变量,但我仍然不清楚217和&amp; 218语法:
int cols(int i=-1) const;
int rows(int i=-1) const;
有人可以澄清这些是成员变量以及在声明行上语法上的变化吗?