Matrix OpenCV的大小

时间:2012-12-25 06:15:33

标签: opencv opencv-mat

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

行数和列数的大小。

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

5 个答案:

答案 0 :(得分:213)

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

cv::Size s = mat.size();
rows = s.height;
cols = s.width;

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

答案 1 :(得分:17)

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

uchar a = M.at<Vec3b>(y, x)[i];

因此,基本类型元素的大小是M.rows * M.cols * M.cn

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

Mat src;
double minVal, maxVal;
minMaxLoc(src, &minVal, &maxVal);

答案 2 :(得分:9)

对于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;

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

答案 3 :(得分:4)

完整的C ++代码示例可能对初学者有用

#include <iostream>
#include <string>
#include "opencv/highgui.h"

using namespace std;
using namespace cv;

int main()
{
    cv:Mat M(102,201,CV_8UC1);
    int rows = M.rows;
    int cols = M.cols;

    cout<<rows<<" "<<cols<<endl;

    cv::Size sz = M.size();
    rows = sz.height;
    cols = sz.width;

    cout<<rows<<" "<<cols<<endl;
    cout<<sz<<endl;
    return 0;
}

答案 4 :(得分:0)

如果您使用的是python,那么(如果您的矩阵名称是 mat ): mat.shape - 为您提供类型的数组 - [高度,宽度,频道] mat.size - 为您提供数组的大小 示例代码:

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