矩阵OpenCV的大小


128

我知道这可能非常初级,但是我是OpenCV的新手。您能否告诉我如何在OpenCV中获取矩阵的大小?我用谷歌搜索并且仍在搜索,但是如果您知道答案,请帮助我。

大小以行和列数为单位。

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

Answers:



19

请注意,除了行和列外,还有许多通道和类型。当清楚是什么类型时,通道可以像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);

这是唯一可以解决在OpenCV Mat中找到最大元素的答案。
rayryeng '17

12

对于2D矩阵:

mat.rows – 2D数组中的行数。

mat.cols – 2D数组中的列数。

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

该方法返回一个矩阵大小:Size(cols,rows)。当矩阵大于二维时,返回的大小为(-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索引变化最快。


1
只是要清楚一点,没有Mat::size()成员方法,而是Mat::sizetype 的成员变量MatSize。后者使括号运算符重载MatSize::operator()以返回Size对象
Amro

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;
}

1
如何获得cpp中矩阵的深度?
sai

1

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

  • mat.shape为您提供以下类型的数组:[高度,宽度,通道]

  • mat.size给出数组的大小

样例代码:

import cv2
mat = cv2.imread('sample.png')
height, width, channel = mat.shape[:3]
size = mat.size
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.