2012-12-25 14 views
93

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

पंक्तियों और स्तंभों की संख्या के रूप में आकार।

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

उत्तर

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

ध्यान दें कि पंक्तियों और स्तंभों के अलावा कई चैनल और प्रकार हैं। जब यह स्पष्ट हो रहा है कि किस प्रकार, चैनल, इसलिए आप अपना

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

एक मैट्रिक्स को संबोधित करेंगे CV_8UC3 में के रूप में एक अतिरिक्त आयाम के रूप में कार्य कर सकते हैं तो प्राथमिक प्रकार के तत्वों के मामले में आकार है M.rows * एम - पंक्तियों की संख्या एक 2D सरणी में

mat.rows: कॉलम * M.cn

अधिकतम तत्व एक

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

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

1

उपयोग कर सकते हैं 2 डी मैट्रिक्स के लिए खोजने के लिए।

mat.cols - 2 डी सरणी में कॉलम की संख्या।

या: सी ++: आकार चटाई :: आकार() स्थिरांक

विधि एक मैट्रिक्स आकार देता है: आकार (कॉलम, पंक्तियाँ)। जब मैट्रिक्स 2-आयामी से अधिक होता है, तो लौटा आकार (-1, -1) होता है।

बहुआयामी मैट्रिक्स के लिए, आप एक्स अक्ष के लिए, y अक्ष के लिए उपयोग करने के लिए

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, 3 से 4 की जरूरत है। एक्स, वाई, जेड द्वारा, इसका मतलब आयामों का क्रम है। एक्स सूचकांक सबसे तेज़ी से बदलता है।

3

एक पूरी सी ++ कोड उदाहरण के लिए, शुरुआती

#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

के लिए सहायक हो सकता है आप अजगर का उपयोग कर रहे हैं, तो (यदि आपके मैट्रिक्स नाम चटाई है): mat.shape - आप देता है

import cv2 
mat = cv2.imread('sample.png') 
height, width, channel = mat.shape[:3] 
size = mat.size 
: - type- की एक सरणी [ऊंचाई, चौड़ाई, चैनलों] mat.size आप सरणी नमूना कोड के आकार देता है
+0

सवाल यह नहीं बताता है कि पाइथन रैपर का उपयोग किया जा रहा है। – rayryeng

संबंधित मुद्दे