Commit a30fa632 authored by Davis King's avatar Davis King

Made the functions for scaling, rotating, and generally transforming images

more general.  Previously they required the user to use the same type of image
for both input and output.  This has been relaxed so now different typed images
can be used.
parent cbc784a7
...@@ -17,16 +17,18 @@ namespace dlib ...@@ -17,16 +17,18 @@ namespace dlib
{ {
public: public:
template <typename image_type> template <typename image_type, typename pixel_type>
bool operator() ( bool operator() (
const image_type& img, const image_type& img,
const dlib::point& p, const dlib::point& p,
typename image_type::type& result pixel_type& result
) const ) const
{ {
COMPILE_TIME_ASSERT(pixel_traits<typename image_type::type>::has_alpha == false);
if (get_rect(img).contains(p)) if (get_rect(img).contains(p))
{ {
result = img[p.y()][p.x()]; assign_pixel(result, img[p.y()][p.x()]);
return true; return true;
} }
else else
...@@ -49,11 +51,11 @@ namespace dlib ...@@ -49,11 +51,11 @@ namespace dlib
public: public:
template <typename T, typename image_type> template <typename T, typename image_type, typename pixel_type>
typename disable_if<is_rgb_image<image_type>,bool>::type operator() ( typename disable_if<is_rgb_image<image_type>,bool>::type operator() (
const image_type& img, const image_type& img,
const dlib::vector<T,2>& p, const dlib::vector<T,2>& p,
typename image_type::type& result pixel_type& result
) const ) const
{ {
COMPILE_TIME_ASSERT(pixel_traits<typename image_type::type>::has_alpha == false); COMPILE_TIME_ASSERT(pixel_traits<typename image_type::type>::has_alpha == false);
...@@ -85,11 +87,11 @@ namespace dlib ...@@ -85,11 +87,11 @@ namespace dlib
return true; return true;
} }
template <typename T, typename image_type> template <typename T, typename image_type, typename pixel_type>
typename enable_if<is_rgb_image<image_type>,bool>::type operator() ( typename enable_if<is_rgb_image<image_type>,bool>::type operator() (
const image_type& img, const image_type& img,
const dlib::vector<T,2>& p, const dlib::vector<T,2>& p,
typename image_type::type& result pixel_type& result
) const ) const
{ {
COMPILE_TIME_ASSERT(pixel_traits<typename image_type::type>::has_alpha == false); COMPILE_TIME_ASSERT(pixel_traits<typename image_type::type>::has_alpha == false);
...@@ -130,9 +132,11 @@ namespace dlib ...@@ -130,9 +132,11 @@ namespace dlib
const double blue = (1-tb_frac)*((1-lr_frac)*tl + lr_frac*tr) + const double blue = (1-tb_frac)*((1-lr_frac)*tl + lr_frac*tr) +
tb_frac*((1-lr_frac)*bl + lr_frac*br); tb_frac*((1-lr_frac)*bl + lr_frac*br);
assign_pixel(result.red, red); rgb_pixel temp;
assign_pixel(result.green, green); assign_pixel(temp.red, red);
assign_pixel(result.blue, blue); assign_pixel(temp.green, green);
assign_pixel(temp.blue, blue);
assign_pixel(result, temp);
return true; return true;
} }
}; };
...@@ -149,11 +153,11 @@ namespace dlib ...@@ -149,11 +153,11 @@ namespace dlib
public: public:
template <typename T, typename image_type> template <typename T, typename image_type, typename pixel_type>
typename disable_if<is_rgb_image<image_type>,bool>::type operator() ( typename disable_if<is_rgb_image<image_type>,bool>::type operator() (
const image_type& img, const image_type& img,
const dlib::vector<T,2>& p, const dlib::vector<T,2>& p,
typename image_type::type& result pixel_type& result
) const ) const
{ {
COMPILE_TIME_ASSERT(pixel_traits<typename image_type::type>::has_alpha == false); COMPILE_TIME_ASSERT(pixel_traits<typename image_type::type>::has_alpha == false);
...@@ -182,11 +186,11 @@ namespace dlib ...@@ -182,11 +186,11 @@ namespace dlib
return true; return true;
} }
template <typename T, typename image_type> template <typename T, typename image_type, typename pixel_type>
typename enable_if<is_rgb_image<image_type>,bool>::type operator() ( typename enable_if<is_rgb_image<image_type>,bool>::type operator() (
const image_type& img, const image_type& img,
const dlib::vector<T,2>& p, const dlib::vector<T,2>& p,
typename image_type::type& result pixel_type& result
) const ) const
{ {
COMPILE_TIME_ASSERT(pixel_traits<typename image_type::type>::has_alpha == false); COMPILE_TIME_ASSERT(pixel_traits<typename image_type::type>::has_alpha == false);
...@@ -232,9 +236,11 @@ namespace dlib ...@@ -232,9 +236,11 @@ namespace dlib
img[r+1][c+1].blue); img[r+1][c+1].blue);
assign_pixel(result.red, red); rgb_pixel temp;
assign_pixel(result.green, green); assign_pixel(temp.red, red);
assign_pixel(result.blue, blue); assign_pixel(temp.green, green);
assign_pixel(temp.blue, blue);
assign_pixel(result, temp);
return true; return true;
} }
...@@ -307,14 +313,15 @@ namespace dlib ...@@ -307,14 +313,15 @@ namespace dlib
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
template < template <
typename image_type, typename image_type1,
typename image_type2,
typename interpolation_type, typename interpolation_type,
typename point_mapping_type, typename point_mapping_type,
typename background_type typename background_type
> >
void transform_image ( void transform_image (
const image_type& in_img, const image_type1& in_img,
image_type& out_img, image_type2& out_img,
const interpolation_type& interp, const interpolation_type& interp,
const point_mapping_type& map_point, const point_mapping_type& map_point,
const background_type& set_background, const background_type& set_background,
...@@ -346,14 +353,15 @@ namespace dlib ...@@ -346,14 +353,15 @@ namespace dlib
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
template < template <
typename image_type, typename image_type1,
typename image_type2,
typename interpolation_type, typename interpolation_type,
typename point_mapping_type, typename point_mapping_type,
typename background_type typename background_type
> >
void transform_image ( void transform_image (
const image_type& in_img, const image_type1& in_img,
image_type& out_img, image_type2& out_img,
const interpolation_type& interp, const interpolation_type& interp,
const point_mapping_type& map_point, const point_mapping_type& map_point,
const background_type& set_background const background_type& set_background
...@@ -372,13 +380,14 @@ namespace dlib ...@@ -372,13 +380,14 @@ namespace dlib
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
template < template <
typename image_type, typename image_type1,
typename image_type2,
typename interpolation_type, typename interpolation_type,
typename point_mapping_type typename point_mapping_type
> >
void transform_image ( void transform_image (
const image_type& in_img, const image_type1& in_img,
image_type& out_img, image_type2& out_img,
const interpolation_type& interp, const interpolation_type& interp,
const point_mapping_type& map_point const point_mapping_type& map_point
) )
...@@ -397,12 +406,13 @@ namespace dlib ...@@ -397,12 +406,13 @@ namespace dlib
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
template < template <
typename image_type, typename image_type1,
typename image_type2,
typename interpolation_type typename interpolation_type
> >
void rotate_image ( void rotate_image (
const image_type& in_img, const image_type1& in_img,
image_type& out_img, image_type2& out_img,
double angle, double angle,
const interpolation_type& interp const interpolation_type& interp
) )
...@@ -434,11 +444,12 @@ namespace dlib ...@@ -434,11 +444,12 @@ namespace dlib
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
template < template <
typename image_type typename image_type1,
typename image_type2
> >
void rotate_image ( void rotate_image (
const image_type& in_img, const image_type1& in_img,
image_type& out_img, image_type2& out_img,
double angle double angle
) )
{ {
...@@ -481,12 +492,13 @@ namespace dlib ...@@ -481,12 +492,13 @@ namespace dlib
} }
template < template <
typename image_type, typename image_type1,
typename image_type2,
typename interpolation_type typename interpolation_type
> >
void resize_image ( void resize_image (
const image_type& in_img, const image_type1& in_img,
image_type& out_img, image_type2& out_img,
const interpolation_type& interp const interpolation_type& interp
) )
{ {
...@@ -506,11 +518,12 @@ namespace dlib ...@@ -506,11 +518,12 @@ namespace dlib
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
template < template <
typename image_type typename image_type1,
typename image_type2
> >
void resize_image ( void resize_image (
const image_type& in_img, const image_type1& in_img,
image_type& out_img image_type2& out_img
) )
{ {
// make sure requires clause is not broken // make sure requires clause is not broken
...@@ -526,11 +539,12 @@ namespace dlib ...@@ -526,11 +539,12 @@ namespace dlib
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
template < template <
typename image_type typename image_type1,
typename image_type2
> >
void flip_image_left_right ( void flip_image_left_right (
const image_type& in_img, const image_type1& in_img,
image_type& out_img image_type2& out_img
) )
{ {
// make sure requires clause is not broken // make sure requires clause is not broken
...@@ -546,11 +560,12 @@ namespace dlib ...@@ -546,11 +560,12 @@ namespace dlib
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
template < template <
typename image_type typename image_type1,
typename image_type2
> >
void flip_image_up_down ( void flip_image_up_down (
const image_type& in_img, const image_type1& in_img,
image_type& out_img image_type2& out_img
) )
{ {
// make sure requires clause is not broken // make sure requires clause is not broken
...@@ -596,13 +611,14 @@ namespace dlib ...@@ -596,13 +611,14 @@ namespace dlib
} }
template < template <
typename image_type, typename image_type1,
typename image_type2,
typename pyramid_type, typename pyramid_type,
typename interpolation_type typename interpolation_type
> >
void pyramid_up ( void pyramid_up (
const image_type& in_img, const image_type1& in_img,
image_type& out_img, image_type2& out_img,
const pyramid_type& pyr, const pyramid_type& pyr,
unsigned int levels, unsigned int levels,
const interpolation_type& interp const interpolation_type& interp
...@@ -646,12 +662,13 @@ namespace dlib ...@@ -646,12 +662,13 @@ namespace dlib
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
template < template <
typename image_type, typename image_type1,
typename image_type2,
typename pyramid_type typename pyramid_type
> >
void pyramid_up ( void pyramid_up (
const image_type& in_img, const image_type1& in_img,
image_type& out_img, image_type2& out_img,
const pyramid_type& pyr, const pyramid_type& pyr,
unsigned int levels = 1 unsigned int levels = 1
) )
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment