Matrix OpenCV的大小

Lak*_*nan 118 opencv opencv-mat

我知道这可能非常简陋,但我是OpenCV的新手.你能告诉我如何在OpenCV中获得矩阵的大小吗?我用谷歌搜索,我仍在搜索,但如果你们中的任何人都知道答案,请帮助我.

行数和列数的大小.

有没有办法直接获得2D矩阵的最大值?

小智 224

cv:Mat mat;
int rows = mat.rows;
int cols = mat.cols;

cv::Size s = mat.size();
rows = s.height;
cols = s.width;
Run Code Online (Sandbox Code Playgroud)

另请注意,stride> = cols; 这意味着行的实际大小可能大于元素大小x cols.这与连续Mat的问题不同,并且与数据对齐有关.

  • 链接到文档:http://docs.opencv.org/modules/core/doc/basic_structures.html#mat-size (10认同)
  • 这两个完全等价吗? (2认同)

Vla*_*lad 18

请注意,除了行和列之外,还有许多通道和类型.当清楚什么类型时,通道可以作为CV_8UC3中的额外维度,因此您可以将矩阵作为

uchar a = M.at<Vec3b>(y, x)[i];
Run Code Online (Sandbox Code Playgroud)

所以基本类型元素的大小是M.rows*M.cols*M.cn

要找到可以使用的最大元素

Mat src;
double minVal, maxVal;
minMaxLoc(src, &minVal, &maxVal);
Run Code Online (Sandbox Code Playgroud)


use*_*692 11

对于2D矩阵:

mat.rows - 2D数组中的行数.

mat.cols - 2D数组中的列数.

或者:C++:Size Mat :: size()const

该方法返回矩阵大小:Size(cols,rows).当矩阵大于2维时,返回的大小为(-1,-1).

对于多维矩阵,您需要使用

int thisSizes[3] = {2, 3, 4};
cv::Mat mat3D(3, thisSizes, CV_32FC1);
// mat3D.size tells the size of the matrix 
// mat3D.size[0] = 2;
// mat3D.size[1] = 3;
// mat3D.size[2] = 4;
Run Code Online (Sandbox Code Playgroud)

注意,这里2表示z轴,3表示y轴,4表示x轴.通过x,y,z,它表示维度的顺序.x索引变化最快.

  • 需要明确的是,没有 `Mat::size()` 成员方法,而是一个 [`Mat::size`](https://docs.opencv.org/3.4/d3/d63/classcv_1_1Mat.html# a146f8e8dda07d1365a575ab83d9828d1) [`MatSize`](https://docs.opencv.org/3.4/df/d63/structcv_1_1MatSize.html) 类型的成员变量。后者重载括号运算符 [`MatSize::operator()`](https://docs.opencv.org/3.4/df/d63/structcv_1_1MatSize.html#abdc35c3d1d636243a9fa4b7e3a4810fe) 以返回 [`Size`](https: //docs.opencv.org/3.4/d6/d50/classcv_1_1Size__.html) 对象 (2认同)

小智 5

如果您使用的是 Python 包装器,那么(假设您的矩阵名称是mat):

  • mat.shape为您提供了类型为 [高度、宽度、通道] 的数组

  • mat.size为您提供数组的大小

示例代码:

import cv2
mat = cv2.imread('sample.png')
height, width, channel = mat.shape[:3]
size = mat.size
Run Code Online (Sandbox Code Playgroud)