2012-12-25 19 views
93

Ich weiß, dass dies sehr rudimentär sein könnte, aber ich bin neu in OpenCV. Könnten Sie mir bitte sagen, wie Sie die Größe einer Matrix in OpenCV erhalten ?. Ich habe gegoogelt und ich suche immer noch, aber wenn jemand von euch die Antwort kennt, bitte hilf mir.Größe der Matrix OpenCV

Größe wie Anzahl der Zeilen und Spalten.

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

Antwort

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

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

Link zur Dokumentation: http://docs.opencv.org/modules/core/doc/basic_structures.html#mat-size – brotherofken

13

Beachten Sie, dass abgesehen von Zeilen und Spalten gibt es eine Reihe von Kanälen und Typ. Wenn es klar ist, welche Art ist, können die Kanäle als zusätzliche Dimension wie in CV_8UC3 handeln, so dass Sie in Bezug auf die Elemente der elementaren Typ also die Größe einer Matrix als

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

adressieren würde, ist M.rows * M. cols * M.cn

den max Element finden ein

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

Dies ist die einzige Antwort, die auch das Finden des größten Elements in einer OpenCV-Matte behandelt. – rayryeng

1

Für 2D-Matrix verwenden kann:

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

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

Oder: C++: Größe Mat :: size() const

Das Verfahren zur Herstellung einer Matrixgröße zurückgibt: Größe (cols, Zeilen). Wenn die Matrix mehr als 2-dimensional ist, ist die zurückgegebene Größe (-1, -1).

Für mehrdimensionale Matrix, müssen Sie

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; 

Hinweis verwenden, hier 2 für z-Achse, 3 für y-Achse, 4 für x-Achse. Nach x, y, z bedeutet dies die Reihenfolge der Dimensionen. x Index ändert sich am schnellsten.

3

Ein komplettes C++ Codebeispiel

für Anfänger hilfreich sein kann
#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

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

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

Nirgendwo zeigt die Frage an, dass die Python-Wrapper verwendet werden. – rayryeng

Verwandte Themen