2017-09-02 97 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);