2012-12-25 215 views
93

我知道这可能是非常基本的,但我是OpenCV的新手。你能告诉我如何在OpenCV中获得矩阵的大小吗?我搜索了一下,但我仍在搜索,但如果你们中有人知道答案,请帮助我。矩阵的大小OpenCV

大小与行数和列数一样。

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

回答

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

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

链接到文档:http://docs.opencv.org/modules/core/doc/basic_structures.html#mat-size – brotherofken

13

请注意,除了行和列之外,还有一些通道和类型。当它是明确的是什么类型的通道可以作为一个额外的维度充当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); 
+0

这是解决查找OpenCV Mat中最大元素的唯一答案。 – rayryeng

1

对于二维矩阵:

mat.rows - 行中的2D阵列的数量。

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

或者: C++:尺寸垫::尺寸()const的

该方法返回一个矩阵尺寸:尺寸(COLS,行)。当矩阵超过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指数变化最快。

3

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

有所帮助如果您正在使用python,然后(如果你的矩阵名称为): mat.shape - 给你所述类型 - 的阵列[高度,宽度,通道] mat.size - 给你阵列 样本代码的大小:

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

这个问题没有表明Python包装正在被使用。 – rayryeng