convolution.cpp

来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 86 行

CPP
86
字号
/*    Copyright 2005-2007 Adobe Systems Incorporated       Use, modification and distribution are subject to the Boost Software License,    Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at    http://www.boost.org/LICENSE_1_0.txt).    See http://opensource.adobe.com/gil for most recent version including documentation.*//*************************************************************************************************////////////////////////////  NOTE: This sample file uses the numeric extension, which does not come with the Boost distribution.////  You may download it from http://opensource.adobe.com/gil ////////////////////////// \file/// \brief Test file for convolve_rows() and convolve_cols() in the numeric extension/// \author Lubomir Bourdev and Hailin Jin/// \date February 27, 2007#include <boost/gil/image.hpp>#include <boost/gil/typedefs.hpp>#include <boost/gil/extension/io/jpeg_io.hpp>#include <boost/gil/extension/numeric/kernel.hpp>#include <boost/gil/extension/numeric/convolve.hpp>int main() {    using namespace boost::gil;    rgb8_image_t img;    jpeg_read_image("test.jpg",img);    // Convolve the rows and the columns of the image with a fixed kernel    rgb8_image_t convolved(img);    // radius-1 Gaussian kernel, size 9    float gaussian_1[]={0.00022923296f,0.0059770769f,0.060597949f,0.24173197f,0.38292751f,                        0.24173197f,0.060597949f,0.0059770769f,0.00022923296f};    /*    // radius-2 Gaussian kernel, size 15    float gaussian_2[]={        0.00048869418f,0.0024031631f,0.0092463447f,        0.027839607f,0.065602221f,0.12099898f,0.17469721f,        0.19744757f,        0.17469721f,0.12099898f,0.065602221f,0.027839607f,        0.0092463447f,0.0024031631f,0.00048869418f    };    //radius-3 Gaussian kernel, size 23    float gaussian_3[]={        0.00016944126f,0.00053842377f,0.0015324751f,0.0039068931f,        0.0089216027f,0.018248675f,0.033434924f,0.054872241f,        0.080666073f,0.10622258f,0.12529446f,        0.13238440f,        0.12529446f,0.10622258f,0.080666073f,        0.054872241f,0.033434924f,0.018248675f,0.0089216027f,        0.0039068931f,0.0015324751f,0.00053842377f,0.00016944126f    };    //radius-4 Gaussian kernel, size 29    float gaussian_4[]={        0.00022466264f,0.00052009715f,0.0011314391f,0.0023129794f,        0.0044433107f,0.0080211498f,0.013606987f,0.021691186f,        0.032493830f,0.045742013f,0.060509924f,0.075220309f,        0.087870099f,0.096459411f,0.099505201f,0.096459411f,0.087870099f,        0.075220309f,0.060509924f,0.045742013f,0.032493830f,        0.021691186f,0.013606987f,0.0080211498f,0.0044433107f,        0.0023129794f,0.0011314391f,0.00052009715f,0.00022466264f,    };    */    kernel_1d_fixed<float,9> kernel(gaussian_1,4);    convolve_rows_fixed<rgb32f_pixel_t>(const_view(convolved),kernel,view(convolved));    convolve_cols_fixed<rgb32f_pixel_t>(const_view(convolved),kernel,view(convolved));    jpeg_write_view("out-convolution.jpg", view(convolved));    // This is how to use a resizable kernel    kernel_1d<float> kernel2(gaussian_1,9,4);    convolve_rows<rgb32f_pixel_t>(const_view(img),kernel2,view(img));    convolve_cols<rgb32f_pixel_t>(const_view(img),kernel2,view(img));    jpeg_write_view("out-convolution2.jpg", view(img));    return 0;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?