2017-10-26 2 views
0

私は192チャネルの行列を挿入する必要があるCNNを使ってプログラムを作成します。この行列(width:32、height:240、channels:192、type:uchar)はMat(OpenCV)に格納されています。 Matをdlib行列に変換する方法は?matをdlibの行列に変換するには

std::vector<dlib::matrix<?>> training_data; 
std::vector<unsigned long> training_labels; 
... 
Mat mat = loader.getMat(); 
? convert ? 
training_data.push_back(dlib_matrix); 
... 
trainer.train(training_data, training_labels); 

答えて

0

あなたはDLIBからマットに変換するために、マットからDLIBイメージとdlib::toMatに変換するcv_imageを使用することができます。

//Mat to dlib image 
cv_image<bgr_pixel> dlib_img(mat); 

編集:

として、私の知る、nチャネルのマ​​ットのためのカスタムpixel_traitsを提供してきました。例えば、5チャンネルのマットのイメージのためにあなたが行うことができます。

namespace dlib{ 
struct custom_pixel 
    { 
     custom_pixel (
     ) {} 

     custom_pixel (
      unsigned char c1_, 
      unsigned char c2_, 
      unsigned char c3_, 
      unsigned char c4_, 
      unsigned char c5_ 
     ) : c1(c1_), c2(c2_), c3(c3_), c4(c4_), c5(c5_) {} 

     unsigned char c1; 
     unsigned char c2; 
     unsigned char c3; 
     unsigned char c4; 
     unsigned char c5; 
    }; 

template <> 
    struct pixel_traits<custom_pixel> 
    { 
     constexpr static bool rgb = false; 
     constexpr static bool rgb_alpha = false; 
     constexpr static bool grayscale = false; 
     constexpr static bool hsi = false; 
     constexpr static bool lab = false; 
     enum { num = 5};// provide number of channels here 
     typedef unsigned char basic_pixel_type; //provide channel depth here 
     static basic_pixel_type min() { return 0;} 
     static basic_pixel_type max() { return 255;} 
     constexpr static bool is_unsigned = true; 
     constexpr static bool has_alpha = false; 
    }; 
} 

を次にマットからDLIBおよびその逆に変換する:bgr_pixelがためのものですので、あなたが書いたもの上記

int main(int argc, char** argv) 
{ 
    // from opencv to dlib 
    Mat mat_img = Mat::zeros(3, 3, CV_8UC(5)); 
    cv_image<custom_pixel> dlib_img(mat_img); 

    //from dlib to opencv 
    Mat mat_img_new = dlib::toMat(dlib_img); 
} 
+0

は、適用されません3チャンネルの画像、192チャンネルの画像/マトリックスの変換が必要です。 – gulliver

+0

@gulliver編集を参照してください。 – zindarod

+0

私はこれに似たものを試しましたが、次にdlibには何かが必要です。これは上記のcv_imageへの変換ですが、dlib :: matrixへの変換が必要です。私が試してみると:cv_image cimg(mat); matrix dm; assign_image(dm、cimg); これは、エラーを引き起こします: '(dlib :: big_pixel&const dlib :: big_pixel&)'){assign_pixel_helpers :: assign(dest、src); } – gulliver

関連する問題