|
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