矩阵大小

我知道这可能是非常初级的,但我是新的 OpenCV。你能告诉我如何在 OpenCV 中获得矩阵的大小吗?.我谷歌了一下,还在搜索,但如果你们有人知道答案,请帮帮我。

行数和列数的大小。

有没有一种方法可以直接得到二维矩阵的最大值?

291641 次浏览
cv:Mat mat;
int rows = mat.rows;
int cols = mat.cols;


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

请注意,除了行和列之外,还有许多通道和类型。当清楚是什么类型时,通道可以作为 CV _ 8UC3中的一个额外维度,因此您可以将一个矩阵称为

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

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

找到可以使用的最大元素

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

对于2D 矩阵:

Rows-2D 数组中的行数。

Protocol-二维数组中的列数。

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

该方法返回一个矩阵大小: Size (Protocol,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;

注意,这里 z 轴为2,y 轴为3,x 轴为4。 通过 x,y,z,它意味着维度的顺序。 x 索引变化最快。

一个完整的 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;
}

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

  • Form 为您提供了一个类型为-[ height,width,channel ]的数组

  • Size 给出数组的大小

示例代码:

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