【问题标题】:How can I permute dimensions in cv::Mat from CxWxH to WxHxC?如何将 cv::Mat 中的尺寸从 CxWxH 置换为 WxHxC?
【发布时间】:2018-02-11 12:47:20
【问题描述】:

如何将 cv::Mat 中的尺寸从 CxWxH 置换为 WxHxC(宽 x 高 x 通道)?

即我怎样才能转换垫子:

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

    尺寸:通道、宽度、高度

  • 到 Mat 的尺寸:宽度、高度、通道 int sizes_inputs[] = { 3, 1000, 1000 }; cv::Mat out_image(3, sizes_inputs, CV_8UC);

OpenCV 中是否有现成的快速函数来进行这种转换?还是我应该自己实现这个算法?

【问题讨论】:

  • 你需要自己做。如果深度学习需要这样做,可以使用blob类(以及整个dnn模块)

标签: c++ algorithm opencv image-processing opencv3.0


【解决方案1】:

如果您希望以不同方式处理基础数据,则可以使用reshape。数据存储为BGRBGRBGR...

否则您将不得不自己洗牌。
cv::reshapecv::minChannels 可能会很方便。

【讨论】:

    【解决方案2】:

    你可以模仿它。我还没有测试过代码,但是应该这样做:

    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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-09
      • 1970-01-01
      • 1970-01-01
      • 2012-10-22
      • 2018-07-17
      • 1970-01-01
      • 2016-08-16
      • 2022-06-25
      相关资源
      最近更新 更多