2012-11-06 40 views
5

Tôi gần như có nhưng tôi không thể hoàn toàn hiểu được làm thế nào để chuyển đổiunsigned char ** để OpenCV mat

unsigned char ** to a cv::Mat 

Tôi biết rằng phần .data của một cv :: Mat là uchar *

tôi đang sử dụng một hàm trả về và hình ảnh dưới dạng ...

unsigned char ** output; 

Nhưng phần còn lại của mã của tôi sử dụng cv :: Mat của. Tôi không có nguồn cho lib tôi đang sử dụng, do đó, không thực sự biết những gì nó đang làm.

Sửa Thanks for the guys giúp đỡ, tôi đã làm điều này ...

cv::Mat TempMat = cv::Mat(h, w, CV_8UC1, *output); 
imshow("this is a test",TempMat); 

nhưng hình ảnh là màu đen vì vậy tôi bây giờ cần phải tìm hiểu xem có thực sự là bất cứ điều gì ở đó hay không.

Xin lỗi vì thiếu nghiên cứu tôi đang ở thời hạn chặt chẽ, không có bài tập về nhà, cố gắng chuẩn bị sẵn sàng để hiển thị kết quả cho Giáo sư!

+2

Bạn có biết chiều rộng và chiều cao của con trỏ đôi bạn đang trở lại? – sgarizvi

Trả lời

8

Bạn phải sử dụng Mat constructor với một con trỏ đến dữ liệu:

// constructor for matrix headers pointing to user-allocated data 
    Mat(int _rows, int _cols, int _type, void* _data, size_t _step=AUTO_STEP); 
    Mat(Size _size, int _type, void* _data, size_t _step=AUTO_STEP); 

Bạn cần phải chuyển đổi void** để void* và sau này sử dụng nó.

+0

Cảm ơn, tôi đã làm việc đó. Xem chỉnh sửa cho sự cố tiếp theo – Oliver9523

+1

@ Oliver9523 định dạng dữ liệu đầu vào ('void **') là gì? Nếu đó là một con trỏ đến mảng dữ liệu hình ảnh hai chiều thì bạn nên chuyển đổi nó thành một chiều. – ArtemStorozhuk

+0

Tôi giả sử đó là một mảng 2d, cảm ơn. Tôi sẽ xem xét chuyển đổi nó. – Oliver9523

0

có lẽ bạn nên loại bỏ * tại

cv::Mat TempMat = cv::Mat(h, w, CV_8UC1, *output); 

làm cho nó chỉ như thế này:

cv::Mat TempMat = cv::Mat(h, w, CV_8UC1, output);