2012-12-19 72 views
7

Bất cứ ai có thể cho tôi biết làm cách nào tôi có thể chuyển đổi Mat thành unsigned char* trong OpenCV và liệu dữ liệu có phải là một mảng không? Ngoài ra, tôi muốn biết làm thế nào có thể cùng một điều được thực hiện cho vector<vector<double>> để float* để làm cho nó một con trỏ của mảng? cảm ơn.Mat để unsigned char *

+0

Loại Mat nào bạn đang sử dụng? Dù sao, xem cv :: Mat.data thành viên - nó là một con trỏ để lưu trữ Mat nội bộ. – brotherofken

Trả lời

6

Như đã được đề cập, bạn nên sử dụng một thành viên data của cv::Mat:

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

Về câu hỏi thứ hai của bạn: trước hết, khi bạn chuyển đổi từ double để float bạn bị mất một số dữ liệu. Và không có giải pháp sẵn sàng để làm điều đó, do đó, chỉ cần sử dụng chu kỳ đơn giản và sao chép vectơ cho mảng con trỏ:

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

đây có phải là ý của bạn đối với câu hỏi thứ hai không? float * kernelarr = nullptr; cho (int hàng = 0; hàng

+1

@AbhishekKhông, xem mã. – ArtemStorozhuk

Các vấn đề liên quan