Squashed 'third_party/cimg/' content from commit 4b66369
Change-Id: I7454d9107a08dba899fd4659731733049165ae0a
git-subtree-dir: third_party/cimg
git-subtree-split: 4b66369ab4e34a46119d6c43e9adce061bb40f4b
diff --git a/examples/use_cimgmatlab.cpp b/examples/use_cimgmatlab.cpp
new file mode 100644
index 0000000..08c0677
--- /dev/null
+++ b/examples/use_cimgmatlab.cpp
@@ -0,0 +1,102 @@
+/*-----------------------------------------------------------------------
+
+ File : use_cimgmatlab.cpp
+
+ Description: Example of use for the CImg plugin 'plugins/cimgmatlab.h'
+ which allows to use CImg in order to develop matlab external
+ functions (mex functions).
+ User should be familiar with Matlab C/C++ mex function concepts,
+ as this file is by no way a mex programming tutorial.
+
+ This simple example implements a mex function that can be called
+ as
+
+ - v = cimgmatlab_cannyderiche(u,s)
+ - v = cimgmatlab_cannyderiche(u,sx,sy)
+ - v = cimgmatlab_cannyderiche(u,sx,sy,sz)
+
+ The corresponding m-file is cimgmatlab_cannyderiche.m
+
+
+ Copyright : Francois Lauze - http://www.itu.dk/people/francois
+ This software is governed by the Gnu Lesser General Public License
+ see http://www.gnu.org/copyleft/lgpl.html
+
+ The plugin home page is at
+ http://www.itu.dk/people/francois/cimgmatlab.html
+
+ for the compilation: using the mex utility provided with matlab, just
+ remember to add the -I flags with paths to CImg.h and/or cimgmatlab.h.
+ The default lcc cannot be used, it is a C compiler and not a C++ one!
+
+--------------------------------------------------------------------------*/
+
+#include <mex.h>
+#define cimg_plugin "plugins/cimgmatlab.h"
+#include <CImg.h>
+
+void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
+ if (nrhs < 2) mexErrMsgTxt("No enough input arguments.");
+ if (nrhs > 4) mexErrMsgTxt("Too many input arguments.");
+ cimg_library::CImg<> u(prhs[0],true);
+ if (nrhs == 2) {
+ const float s = (float)mxGetScalar(prhs[1]);
+ plhs[0] = u.get_blur(s).toMatlab();
+ } else if (nrhs == 3) {
+ const float sx = (float)mxGetScalar(prhs[1]);
+ const float sy = (float)mxGetScalar(prhs[2]);
+ plhs[0] = u.get_blur(sx,sy,0).toMatlab();
+ } else if (nrhs == 4) {
+ const float sx = (float)mxGetScalar(prhs[1]);
+ const float sy = (float)mxGetScalar(prhs[2]);
+ const float sz = (float)mxGetScalar(prhs[3]);
+ plhs[0] = u.get_blur(sx,sy,sz).toMatlab();
+ }
+}
+
+/*------------------------------------------------------------------
+
+ SPECIAL NOTE :
+ -------------
+
+ How to read a .mat file using plugin 'cimgmatlab.h' ?
+ (contribution by Vo Duc Khanh/Denso IT Lab, Tokyo, Japan).
+
+ #include <mex.h>
+ #include <mat.h>
+ #include <matrix.h>
+
+ #define cimg_plugin "cimgmatlab.h"
+
+ #include "CImg.h"
+ #include <iostream>
+ #include <string>
+
+ .........
+
+ using namespace cimg_library;
+ using namespace std;
+
+ // Load input images (125700 images) from training database 'BmpTrainingDb.mat'
+ MATFile *pmat, *pmat_out;
+ mxArray *pa, *pa_out;
+ const char data_path[256] = ".\\BmpTrainingDb.mat\0";
+ const char *var_name;
+
+ pmat = matOpen(data_path, "r");
+ if (pmat == NULL) {
+ cout << "Error opening file " << data_path << endl;
+ return (1);
+ }
+
+ pa = matGetNextVariable(pmat, &var_name);
+ if (pa == NULL){
+ cout << "Error reading in file " << data_path << endl;
+ return (1);
+ }
+
+ CImg<unsigned char> train_db(pa,false);
+ ........
+
+
+ -----------------------------------------------------------------------------*/