| Histogram ExampleActual commercial code that computes the luminosity histogram (variable names have been changed and unrelated parts removed):
 void luminosity_hist(const uint8 *r, const uint8 *g, const uint8 *b, int rows, int cols, int sRowBytes, Histogram *hist) { for (int r=0; r<rows; r++) { for (int c=0; c<cols; c++) { int v=RGBToGray(r[c],g[c],b[c]); (*hist)[v]++; } r+=sRowBytes; g+=sRowBytes; b+=sRowBytes; } } 
 
 Histogram using GIL: 
 template <typename GrayView, typename R> void grayimage_histogram(GrayView& img, R& hist) { for (typename GrayView::iterator it=img.begin(); it!=img.end(); ++it) ++hist[*it]; } template <typename View, typename R> void luminosity8bit_hist(View& img, R& hist) { grayimage_histogram(color_converted_view<gray8_pixel_t>(img),hist); } 
using  using boost::lambda; template <typename GrayView, typename R> void grayimage_histogram(GrayView& img, R& hist) { for_each_pixel(img, ++var(hist)[_1]); } The GIL version: 
 It is also very flexible. For example, to compute the histogram of the second channel of the top left quadrant of the image, taking every other row and column, call: 
 grayimage_histogram(
    nth_channel_view(
            subsampled_view(
                subimage_view(img, 0,0, img.width()/2,img.height()/2),  // upper left quadrant
                2, 2   // skip every other row and column
            ),
        1              // index of the second channel (for example, green for RGB)
    ),
    hist
);
Note that no extra memory is allocated and no images are copied - GIL operates on the source pixels of  Generated on Sat May 2 13:50:16 2009 for Generic Image Library by  1.5.6 |