【问题标题】:Size of Matrix OpenCV矩阵 OpenCV 的大小
【发布时间】:2012-12-11 06:43:12
【问题描述】:

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

大小为行数和列数。

有没有办法直接获取二维矩阵的最大值?

【问题讨论】:

    标签: opencv opencv-mat


    【解决方案1】:
    cv:Mat mat;
    int rows = mat.rows;
    int cols = mat.cols;
    
    cv::Size s = mat.size();
    rows = s.height;
    cols = s.width;
    

    【讨论】:

    【解决方案2】:

    请注意,除了行和列之外,还有许多通道和类型。当明确什么类型时,通道可以作为 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 中寻找最大元素的答案。
    【解决方案3】:

    对于二维矩阵:

    mat.rows – 二维数组中的行数。

    mat.cols – 二维数组中的列数。

    或者: C++: 大小 Mat::size() 常量

    该方法返回一个矩阵大小: 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 索引变化最快。

    【讨论】:

    【解决方案4】:

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

    • ma​​t.shape 为您提供类型为 [height, width, channels]

    • 的数组
    • ma​​t.size 为您提供数组的大小

    示例代码:

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

      • 如何在cpp中得到矩阵的深度?
      • .channels() 命令会给你深度
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-20
      • 2019-01-29
      • 1970-01-01
      • 2013-07-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多