2017-09-02 10 views
0

cv :: Matの寸法をCxWxHからWxHxC(幅x高さxチャンネル)にどのように置き換えることができますか?cv :: MatのディメンションをCxWxHからWxHxCにどのように置き換えることができますか?

I.e.どのように私はマットに変換することができますdimesionsでマットにチャンネル、幅、高さ

  • 幅、高さ、チャンネル int sizes_inputs[] = { 3, 1000, 1000 }; cv::Mat out_image(3, sizes_inputs, CV_8UC);

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

      から

    OpenCVにはそのような変換のための既成の高速機能がありますか?または私は自分自身でこのアルゴリズムを実装する必要がありますか?

    +3

    あなたはそれを自分で行う必要があります。詳細な学習のためにこれを行う必要がある場合は、[blob](http://docs.opencv.org/3.1.0/da/d16/classcv_1_1dnn_1_1Blob.html)クラス(およびdnnモジュール全体)を使用して、 – Miki

    答えて

    0

    基礎となるデータを異なる方法で処理する場合は、reshapeを使用できます。データはBGRBGRBGR...として保存されます。

    それ以外の場合は、自分でデータをシャッフルする必要があります。
    cv::reshapeおよびcv::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); 
    
    関連する問題