मैट्रिक्स OpenCV का आकार


128

मुझे पता है कि यह बहुत अल्पविकसित हो सकता है, लेकिन मैं OpenCV में नया हूं। क्या आप कृपया मुझे बता सकते हैं कि OpenCV में मैट्रिक्स का आकार कैसे प्राप्त करें? मैंने गुगली की और मैं अभी भी खोज कर रहा हूं, लेकिन अगर आप में से किसी को भी इसका जवाब पता है, तो कृपया मेरी मदद करें।

पंक्तियों और स्तंभों की संख्या के अनुसार आकार।

और क्या सीधे 2 डी मैट्रिक्स का अधिकतम मूल्य प्राप्त करने का एक तरीका है?

जवाबों:


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

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

यह भी ध्यान दें कि स्ट्राइड> = कोल्स; इसका मतलब यह है कि पंक्ति का वास्तविक आकार तत्व आकार x कोल से अधिक हो सकता है। यह निरंतर मैट के मुद्दे से अलग है और डेटा संरेखण से संबंधित है।


10
दस्तावेज़ से लिंक करें: docs.opencv.org/modules/core/doc/basic_structures.html#mat-size
Rasim

1
क्या वे दो सटीक समतुल्य हैं?
काकाहुइते फ्रिटो

19

ध्यान दें कि पंक्तियों और स्तंभों के अलावा कई चैनल और प्रकार हैं। जब यह स्पष्ट हो जाता है कि प्रकार क्या है, तो चैनल 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);

यह एकमात्र उत्तर है जो ओपनसीवी मैट में सबसे बड़ा तत्व खोजने के लिए भी संबोधित करता है।
रेयिनेंग

12

2D मैट्रिक्स के लिए:

mat.rows - एक 2 डी सरणी में पंक्तियों की संख्या।

mat.cols - एक 2D सरणी में स्तंभों की संख्या।

या: C ++: आकार Mat :: size () const

विधि एक मैट्रिक्स आकार लौटाती है: आकार (कॉल, पंक्तियाँ)। जब मैट्रिक्स 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;

ध्यान दें, यहाँ z अक्ष के लिए 2, y अक्ष के लिए 3, x अक्ष के लिए 4 है। X, y, z द्वारा, इसका अर्थ है आयामों का क्रम। x इंडेक्स सबसे तेजी से बदलता है।


1
बस स्पष्ट होने के लिए, कोई Mat::size()सदस्य विधि नहीं है, बल्कि Mat::sizeप्रकार का सदस्य चर है MatSize। उत्तरार्द्ध कोष्ठक संचालक MatSize::operator()को एक Sizeवस्तु वापस करने के लिए अधिभारित करता है
अमरो

4

एक पूर्ण 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
हम cpp में मैट्रिक्स की गहराई कैसे प्राप्त करते हैं?
साईं

1

यदि आप पायथन रैपर का उपयोग कर रहे हैं, तो (अपना मैट्रिक्स नाम मैट है ):

  • mat.shape आपको प्रकार की एक सरणी देता है- [ऊंचाई, चौड़ाई, चैनल]

  • mat.size आपको सरणी का आकार देता है

नमूना कोड:

import cv2
mat = cv2.imread('sample.png')
height, width, channel = mat.shape[:3]
size = mat.size
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.