あなたは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);
}
は、適用されません3チャンネルの画像、192チャンネルの画像/マトリックスの変換が必要です。 – gulliver
@gulliver編集を参照してください。 – zindarod
私はこれに似たものを試しましたが、次に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