Boost logo

Boost Users :

Subject: Re: [Boost-users] [Gil] Unknown compilation error (VS10)
From: Nathan Crookston (nathan.crookston_at_[hidden])
Date: 2011-11-07 14:20:05


Hi Mark,

On Mon, Nov 7, 2011 at 11:12 AM, Sapp, Mark <Mark.Sapp_at_[hidden]> wrote:
> Hi all,
>
> I have encountered a compilation error in Visual Studio 2010 that I can't find any information online about. The error is:
>
>        error C2338: (is_same<typename Layout::color_space_t, gray_t>::value)
> template <typename Out>
> struct op_absoluteDifference {
>        template <typename T> Out operator()(const T& in1, const T& in2) const {
>                return Out(abs(in2-in1));
>        }
> };

Constructing Out is your problem -- you're initializing a
multi-channel pixel type (rgb8_pixel_t) with a single value.

Either convert to a grayscale image before using calling
absoluteDifference, or if you actually want the absolute difference
across all channels, call static transform:

#include <boost/gil/image.hpp>
#include <boost/gil/typedefs.hpp>

using namespace boost::gil;

struct op_absoluteDifferenceChannel {
       template <typename T>
       T operator()(const T& in1, const T& in2) const {
               return T(abs(in2-in1));
       }
};

struct op_absoluteDifferencePixel {
       template <typename T> T operator()(const T& in1, const T& in2) const {
               T retVal;
               static_transform(in1, in2, retVal,
op_absoluteDifferenceChannel());
               return retVal;
       }
};

template <typename SrcView1, typename SrcView2, typename DstView>
void absoluteDifference(const SrcView1& src1, const SrcView2& src2,
const DstView& dst)
{
       typedef typename channel_type<DstView>::type dst_channel_t;
       transform_pixels(src1, src2, dst, op_absoluteDifferencePixel());
}

int main()
{
       rgb8_image_t img1(100,100);
       fill_pixels(view(img1), rgb8_pixel_t(0,0,0));
       rgb8_image_t img2(100,100);
       fill_pixels(view(img2), rgb8_pixel_t(10,20,30));
       rgb8_image_t img3(100,100);
       fill_pixels(view(img3), rgb8_pixel_t(0,0,0));
       absoluteDifference(const_view(img1), const_view(img2),
view(img3)); //causes compilation error C2338: (is_same<typename
Layout::color_space_t, gray_t>::value)
       gray16_image_t img4(100,100);
       fill_pixels(view(img4), gray16_pixel_t(0));
       gray16_image_t img5(100,100);
       fill_pixels(view(img5), gray16_pixel_t(10));
       gray16_image_t img6(100,100);
       fill_pixels(view(img6), gray16_pixel_t(0));
       absoluteDifference(const_view(img4), const_view(img5), view(img6));
       return 0;
}

HTH,
Nate


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net