2012-09-11 15 views
7

में एक बहुआयामी मैट का उपयोग उप-मैट्रिक्स इस post और ओपनसीवी दस्तावेज के अनुसार, मैं एक बहुआयामी मैट के प्रत्येक तत्व को प्रारंभ और एक्सेस कर सकता हूं।ओपनसीवी

वास्तव में, मैं सबसे पहले MATLAB में कोडित और अब OpenCV में बदलने की जरूरत है। MATLAB मैट्रिक्स की तरह उप मैट्रिक्स पहुँच का समर्थन: एक (:,:, 3) या बी (:,:, 3: 5)

इस OpenCV में किया जा सकता है? जहां तक ​​मुझे पता है, यह 2 डी मैट के साथ किया जा सकता है। 2 डी के बारे में और कैसे ??

संपादित करें 01: इसके अलावा, बहुआयामी मैट के साथ, प्रॉपर्टी कोल्स और पंक्तियां मैट्रिक्स के 3 आकारों को दर्शाने के लिए पर्याप्त नहीं हैं। 3 से बड़े आयाम वाले मामले हैं। इन गुणों को कैसे स्टोर करें?

Edit02:

// create a 100x100x100 8-bit array 
int sz[] = {100, 100, 100}; 
Mat bigCube(3, sz, CV_8U, Scalar::all(0)); 

मैं OpenCV चटाई के साथ उप-मैट्रिक्स का उपयोग करने के विचार छोड़ देना। शायद, यह ओपनसीवी में समर्थित नहीं है। लेकिन इस नमूना कोड से, निर्माता 'SZ' से 3 आयाम प्राप्त करता है। इस तीसरे आयाम को मैट की कौन सी संपत्ति पास की जाती है? शायद इस मामले में, पंक्ति = 100, cols = 100, दूसरा ?? = 100 मैं OpenCV प्रलेखन के साथ खो रहा हूँ

Edit03: OpenCV स्रोत से ट्रैकिंग चटाई वर्ग मैं mat.hpp से Edit02 में निर्माता की परिभाषा मिल गया है:

inline Mat::Mat(int _dims, const int* _sz, int _type, const Scalar& _s) 
    : flags(0), dims(0), rows(0), cols(0), data(0), refcount(0), 
    datastart(0), dataend(0), datalimit(0), allocator(0), size(&rows) 
{ 
    create(_dims, _sz, _type); 
    *this = _s; 
} 

अगला प्रश्न है यहां और कैसे "निर्माण" फ़ंक्शन परिभाषित किया गया है? => ओपनसीवी में इस मैट परिभाषा का पता लगाने से शायद मुझे मैट मैट्रिक्स

पीएस: मेरी पोस्ट को बहुत गन्दा लिखा गया है, तो मुझे क्षमा करें !! मैं एक प्रोग्रामिंग समस्या हल करने की कोशिश कर रहा एक नौसिखिया प्रोग्रामर हूँ। यदि मेरा दृष्टिकोण अच्छा या सही नहीं है तो कृपया मुझे सही करने के लिए स्वतंत्र महसूस करें। धन्यवाद!!

+0

मेरे पास बहु-आयामी मैट के लिए कन्स्ट्रक्टर की सभी घोषणाओं को देखने के लिए core.hpp है। लेकिन मुझे यह नहीं पता था कि परिभाषा कहां है, मेरा मतलब है कि उस कन्स्ट्रक्टर का कोडिंग, यह देखने के लिए कि कौन सा गुण तीसरा आयाम जाता है। वह स्रोत कोड कहां है ?? –

+0

वह वहां होगा: /modules/core/src/matrix.cpp। मैं – remi

+0

से नीचे अपनी मूल समस्या से संबंधित अपना उत्तर संपादित कर रहा हूं क्या आपने इस कोड को लिखना समाप्त कर दिया था? मुझे एक ही चीज़ करना है ... – kmac

उत्तर

6

आप आसानी से या 2D सीवी :: चटाई कार्यों का उपयोग कर rowRange, colRange के उप-मैट्रिक्स भी

cv::Mat subMat = originalMat(cv::Rect(x,y,width,height)); 
इसके अलावा

उपयोग कर सकते हैं, एक मैट्रिक्स में चैनलों की संख्या, आप मैट्रिक्स निर्माता में परिभाषित कर सकते हैं कि, तीसरा आयाम के रूप में इस्तेमाल किया जा सकता (लेकिन यह 256 या 512 मुझे लगता है कि करने के लिए सीमित है)।

वहाँ भी टेम्प्लेटेड सीवी :: Mat_ वर्ग है कि आप अपने उद्देश्य फिट करने के लिए

[संपादित करें]

मैं> 2 आयामी मैट्रिक्स के लिए निर्माता की जाँच कर ली अनुकूलित कर सकते हैं है। जब आप इसे चलाते हैं तो मैट की पंक्तियां और कोल्स फ़ील्ड -1 पर सेट होती है। वास्तविक मैट्रिक्स आकार Mat :: आकार में int की सरणी के रूप में स्टोर किया जाता है। आयामों के मैट्रिक्स के लिए> 2 आप एक सीवी :: Rect या rowRange/colRange का उपयोग कर submatrices रचनाकारों का उपयोग नहीं कर सकते हैं।

मुझे डर है कि आपको पंक्ति डेटा के साथ सीधे काम करने वाले dim> 2 के लिए submatrices निकालने के लिए थोड़ा सा काम करना है। लेकिन तुम चटाई :: कदम है जो आप सरणी के लेआउट बताता में संग्रहीत जानकारी का उपयोग कर सकते हैं। यह official documentation से समझाया गया है।

+0

.. तो आप का मतलब है, मुझे इस तरह की मैट्रिक्स पहुंच करने के लिए अलग-अलग फ़ंक्शन लिखना चाहिए ?? या उदाहरण के लिए myMat लिखकर उन्हें मैट क्लास में जोड़ने के लिए ?? यह मूर्खतापूर्ण सवाल है, लेकिन एक शौकिया प्रोग्रामर के रूप में, मैं वास्तव में जानना चाहता हूं कि पेशेवरों के तरीके में चीजें कैसे की जाती हैं –

+0

पेशेवर सिर्फ काम करने की कोशिश करते हैं :) आपके मामले में पहुंच के लिए एक समारोह लिखना उपयोगी हो सकता है एन-आयामी डेटा। मैं एक नई कक्षा लिखना परेशान नहीं करता। – remi

+0

मैं इस पोस्ट को बंद नहीं करना चाहता क्योंकि मैं इसे अपनी कक्षा/कार्यों को लिखकर पूरा करना चाहता हूं और उन्हें व्यायाम की तरह यहां पोस्ट करना चाहता हूं। तो उस के लिए मुझे क्षमा करें :) –