Hi Mark,
On Mon, Nov 7, 2011 at 11:12 AM, Sapp, Mark 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::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
#include
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
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::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