webentwicklung-frage-antwort-db.com.de

Größe der Matrix OpenCV

Ich weiß, dass dies sehr rudimentär sein kann, aber ich bin neu bei OpenCV. Könnten Sie mir bitte sagen, wie Sie die Größe einer Matrix in OpenCV erhalten? Ich habe gegoogelt und bin immer noch auf der Suche, aber wenn einer von Ihnen die Antwort kennt, helfen Sie mir bitte.

Größe wie Anzahl der Zeilen und Spalten.

Und gibt es eine Möglichkeit, den Maximalwert einer 2D-Matrix direkt zu ermitteln?

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

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

Beachten Sie auch, dass Schritt> = Cols; Dies bedeutet, dass die tatsächliche Größe der Zeile größer sein kann als die Elementgröße x Cols. Dies unterscheidet sich von der Ausgabe der kontinuierlichen Matte und bezieht sich auf die Datenanpassung.

213
Michael O

Beachten Sie, dass es außer Zeilen und Spalten eine Anzahl von Kanälen und Typ gibt. Wenn klar ist, um welchen Typ es sich handelt, können die Kanäle wie in CV_8UC3 als zusätzliche Dimension fungieren, so dass Sie eine Matrix als ansprechen würden 

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

Also ist die Größe in Bezug auf Elemente des Elementartyps M.rows * M.cols * M.cn

Um das maximale Element zu finden, kann man verwenden 

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

Für 2D-Matrix:

mat.rows - Anzahl der Zeilen in einem 2D-Array.

mat.cols - Anzahl der Spalten in einem 2D-Array.

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

Die Methode gibt eine Matrixgröße zurück: Size (Spalten, Zeilen). Wenn die Matrix mehr als 2-dimensional ist, lautet die zurückgegebene Größe (-1, -1).

Für mehrdimensionale Matrizen müssen Sie verwenden 

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;

Hier ist zu beachten, dass hier 2 für die z-Achse, 3 für die y-Achse, 4 für die x-Achse ..__ ist. x-Index ändert sich am schnellsten.

9
user1914692

Ein vollständiges C++ - Codebeispiel kann für Anfänger hilfreich sein

#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

Wenn Sie Python verwenden, dann (wenn Ihr Matrixname mat ist): mat.shape - gibt Ihnen ein Array vom Typ- [Höhe, Breite, Kanäle] mat.size - gibt die Größe des Arrays an .__ Beispielcode:

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