web-dev-qa-db-fra.com

Taille de la matrice OpenCV

Je sais que cela pourrait être très rudimentaire, mais je suis nouveau sur OpenCV. Pourriez-vous s'il vous plaît me dire comment obtenir la taille d'une matrice dans OpenCV?. J'ai cherché sur Google et je cherche toujours, mais si l'un d'entre vous connaît la réponse, aidez-moi s'il vous plaît.

Taille en nombre de lignes et de colonnes.

Et existe-t-il un moyen d'obtenir directement la valeur maximale d'une matrice 2D?

105
Lakshmi Narayanan
cv:Mat mat;
int rows = mat.rows;
int cols = mat.cols;

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

Notez également que stride> = cols; cela signifie que la taille réelle de la ligne peut être supérieure à la taille de l'élément x cols. Ceci est différent de la question du mat continu et est lié à l'alignement des données.

213
Michael O

Notez qu'en dehors des lignes et des colonnes, il existe un certain nombre de canaux et de types. Quand il est clair quel type est, les canaux peuvent agir comme une dimension supplémentaire comme dans CV_8UC3 afin que vous adressiez une matrice comme suit: 

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

Donc, la taille en termes d'éléments de type élémentaire est M.rows * M.cols * M.cn

Pour trouver l'élément max, on peut utiliser 

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

Pour la matrice 2D:

mat.rows - Nombre de lignes dans un tableau 2D.

mat.cols - Nombre de colonnes dans un tableau 2D.

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

La méthode retourne une taille de matrice: Taille (colonnes, lignes). Lorsque la matrice est supérieure à 2 dimensions, la taille renvoyée est (-1, -1).

Pour la matrice multidimensionnelle, vous devez utiliser 

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;

Notez, ici 2 pour l’axe des z, 3 pour l’axe des y, 4 pour l’axe des x . x index change le plus vite.

9
user1914692

Un exemple complet de code C++ peut être utile aux débutants.

#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
MD. Nazmul Kibria

Si vous utilisez python, alors (si votre nom de matrice est mat): mat.shape - vous donne un tableau du type- [hauteur, largeur, canaux] mat.size - vous donne la taille du tableau Exemple de code:

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