// Copyright (C) 2012 Davis E. King (davis@dlib.net) // License: Boost Software License See LICENSE.txt for the full license. #ifndef DLIB_TO_OPEN_Cv_H__ #define DLIB_TO_OPEN_Cv_H__ #include "to_open_cv_abstract.h" #include "../pixel.h" #include "../matrix/matrix.h" namespace dlib { // ---------------------------------------------------------------------------------------- template < typename image_type > cv::Mat toMat ( image_type& img ) { if (img.size() == 0) return cv::Mat(); typedef typename image_type::type type; if (pixel_traits<type>::num == 1) { return cv::Mat(img.nr(), img.nc(), cv::DataType<type>::type, (void*)&img[0][0], img.width_step()); } else { int depth = sizeof(typename pixel_traits<type>::basic_pixel_type)*8; int channels = pixel_traits<type>::num; int thetype = CV_MAKETYPE(depth, channels); return cv::Mat(img.nr(), img.nc(), thetype, (void*)&img[0][0], img.width_step()); } } // ---------------------------------------------------------------------------------------- template < typename T, long NR, long NC, typename MM > cv::Mat toMat ( matrix<T,NR,NC,MM>& img ) { if (img.size() == 0) return cv::Mat(); typedef T type; if (pixel_traits<type>::num == 1) { return cv::Mat(img.nr(), img.nc(), cv::DataType<type>::type, (void*)&img(0,0), img.nc()*sizeof(type)); } else { int depth = sizeof(typename pixel_traits<type>::basic_pixel_type)*8; int channels = pixel_traits<type>::num; int thetype = CV_MAKETYPE(depth, channels); return cv::Mat(img.nr(), img.nc(), thetype, (void*)&img(0,0), img.nc()*sizeof(type)); } } // ---------------------------------------------------------------------------------------- } #endif // DLIB_TO_OPEN_Cv_H__