2012-12-19 24 views
7

पर कोई भी मुझे बता सकता है कि मैं ओपनसीवी में Mat से unsigned char* को कैसे परिवर्तित कर सकता हूं और यह भी कि डेटा एक सरणी होगी या नहीं? साथ ही, मैं जानना चाहता हूं कि vector<vector<double>> से float* के लिए एक ही चीज़ कैसे की जा सकती है ताकि इसे सरणी का सूचक बनाया जा सके? धन्यवाद। , सब से पहले जब आप double से float में बदलने का आप कुछ डेटा खो:हस्ताक्षर किए गए चार *

+0

आप किस प्रकार का मैट उपयोग कर रहे हैं? वैसे भी, सीवी :: Mat.data सदस्य देखें - यह आंतरिक मैट स्टोरेज के लिए एक सूचक है। – brotherofken

उत्तर

6

जैसा कि पहले ही उल्लेख किया गया था आप cv::Mat के data सदस्य का उपयोग करना चाहिए:

cv::Mat m; 
... 
uchar *data = m.data; 

अपने दूसरे प्रश्न के बारे में। और ऐसा करने के लिए कोई तैयार समाधान नहीं है, इसलिए सरल चक्र का उपयोग करें और वेक्टर को सरणी-सूचक में कॉपी करें:

float* toArray(vector<vector<double> >& arr) 
{ 
    if (arr.empty()) 
    { 
     return NULL; 
    } 
    else 
    { 
     //I assume that each vector (element of arr) has the same size 
     int m = arr.size(); 
     int n = arr[0].size(); 
     float *res = new float[m * n]; 
     int count = 0; 

     for (int i=0; i<m; i++) 
     { 
      for (int j=0; j<n; j++) 
      { 
       res[count++] = (float) arr[i][j]; 
      } 
     } 
     return res; 
    } 
} 
+0

क्या यह दूसरे प्रश्न के लिए आपका मतलब है? फ्लोट * kernelarr = nullptr; (int पंक्ति = 0; पंक्ति

+1

@ अभिषेक ठाकुर नहीं, कोड देखें। – ArtemStorozhuk

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