2017-09-02 98 views
0

如何在Cv :: Mat中將尺寸從CxWxH排列到WxHxC(寬x高x通道)?如何在cv :: Mat中將CxWxH中的維排列爲WxHxC?

I.e.我怎樣才能轉換墊:

  • cv::Mat frame (1000, 1000, CV_8UC3) = cv::imread("image.jpg", -1);

    與dimesions:通道,寬度,高度

  • 與dimesions到太:寬度,高度,通道 int sizes_inputs[] = { 3, 1000, 1000 }; cv::Mat out_image(3, sizes_inputs, CV_8UC);

OpenCV中是否有這種轉換的現成快速功能?或者我應該自己實現這個算法?

+3

你需要自己做。如果您需要深入學習,可以使用[blob](http://docs.opencv.org/3.1.0/da/d16/classcv_1_1dnn_1_1Blob.html)類(以及整個dnn模塊) – Miki

回答

0

如果您希望以不同方式處理底層數據,則可以使用reshape。數據存儲爲BGRBGRBGR...

否則,你將不得不自己洗牌。
cv::reshapecv::minChannels可能對此很方便。

0

你可以效仿它。我沒有測試代碼,但這樣的事情應該這樣做:

cv::Mat frame (1000, 1000, CV_8UC3) = cv::imread("image.jpg", -1); 
int sizes_inputs[] = { 3, 1000, 1000 }; 
cv::Mat out_image(3, sizes_inputs, CV_8UC); 

cv::Mat slices[] = {cv::Mat(1000, 1000, CV_8UC, out_image.ptr()), 
        cv::Mat(1000, 1000, CV_8UC, out_image.ptr() + 1000*1000), 
        cv::Mat(1000, 1000, CV_8UC, out_image.ptr() + 1000*1000*2)}; 
cv::split(frame, slices);