OpenCV C ++ Mat类行和列 - 它们是成员变量(及相关问题)吗?

时间:2017-08-25 14:44:33

标签: c++ opencv

我在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;

有人可以澄清这些是成员变量以及在声明行上语法上的变化吗?

1 个答案:

答案 0 :(得分:2)

您正在查看_InputArray

如果查看Mat,您会在第2047行看到rowscols实际上是成员变量:

int rows, cols;