Statistiques
| Révision :

root / src / tiff2inr.cpp @ 4

Historique | Voir | Annoter | Télécharger (2,24 ko)

1 4 akiss
/*
2 4 akiss
Convert tif file into inr
3 4 akiss

4 4 akiss
To compile :
5 4 akiss
 g++ -o tiff2inr tiff2inr.cpp -O2 -L/usr/X11R6/lib -lm -lpthread -lX11 -fopenmp -l:libtiff.so.5
6 4 akiss
 Needs CImg.h
7 4 akiss

8 4 akiss
To execute :
9 4 akiss
 ./tiff2inr img.tif compress
10 4 akiss

11 4 akiss
 img : image in .tif
12 4 akiss
 compress : if 0 then output image is not compressed (img.inr), else the output is img.inr.gz
13 4 akiss

14 4 akiss
*/
15 4 akiss
#include <iostream>
16 4 akiss
#include <math.h>
17 4 akiss
#include <sstream>
18 4 akiss
#include <fstream>
19 4 akiss
20 4 akiss
#define cimg_use_tiff
21 4 akiss
#include "CImg.h"
22 4 akiss
23 4 akiss
using namespace cimg_library;
24 4 akiss
using namespace std;
25 4 akiss
26 4 akiss
//-----------------------------------------------------------------------------
27 4 akiss
//Main
28 4 akiss
//-----------------------------------------------------------------------------
29 4 akiss
int main (int argc, char* argv[])
30 4 akiss
{
31 4 akiss
32 4 akiss
  if( argc>3 || argc<2 )
33 4 akiss
    {
34 4 akiss
      cout<<"tiff2inr : !! wrong number of arguments !!"<<endl;
35 4 akiss
      cout<<"Usage : tiff2inr img.tif compress"<<endl;
36 4 akiss
      return 0;
37 4 akiss
    }
38 4 akiss
39 4 akiss
// -------------------
40 4 akiss
// Sparsing arguments
41 4 akiss
// -------------------
42 4 akiss
  string name=argv[1];
43 4 akiss
44 4 akiss
  bool compress=true;
45 4 akiss
  if (argc==3)
46 4 akiss
        {
47 4 akiss
        if (string(argv[2])=="0")compress=false;
48 4 akiss
        cout<<"Output file will not be compressed. "<<endl;
49 4 akiss
        }
50 4 akiss
51 4 akiss
  CImg<> img;
52 4 akiss
  CImg<char> description;
53 4 akiss
  float tailleVoxel[3] = {0};
54 4 akiss
55 4 akiss
  if(name.compare(name.size()-4,4,".tif")==0)
56 4 akiss
  {
57 4 akiss
        cout<<"The input file is a .tif file. OK"<<endl;
58 4 akiss
  }
59 4 akiss
  else
60 4 akiss
  {
61 4 akiss
        cout<<"This is a tif file converter. Please give a .tif file as input."<<endl;
62 4 akiss
        return 0;
63 4 akiss
  }
64 4 akiss
65 4 akiss
// -----------------------
66 4 akiss
// Reading the .tif image file
67 4 akiss
// -----------------------
68 4 akiss
cout<<"File to read : "<<name<<endl;
69 4 akiss
  if(name.compare(name.size()-4,4,".tif")==0)
70 4 akiss
  {
71 4 akiss
        cout<<"The input file is a .tif file."<<endl;
72 4 akiss
  }
73 4 akiss
  else
74 4 akiss
  {
75 4 akiss
        cout<<"This is a tif file converter. Please give a .tif file as input."<<endl;
76 4 akiss
        return 0;
77 4 akiss
  }
78 4 akiss
79 4 akiss
img.load_tiff(name.c_str(),0,~0U,1,tailleVoxel,&description);
80 4 akiss
cout<<"Image depth : "<<img.depth()<<endl;
81 4 akiss
cout<<"Voxel size : ("<<tailleVoxel[0]<<","<<tailleVoxel[1]<<","<<tailleVoxel[2]<<")"<<endl;
82 4 akiss
83 4 akiss
84 4 akiss
// -----------------------
85 4 akiss
// Writing the .inr or .inr.gz file
86 4 akiss
// -----------------------
87 4 akiss
88 4 akiss
name.erase(name.size()-4);
89 4 akiss
string newname=name+string(".inr");
90 4 akiss
CImg<unsigned char> imgbis=img;
91 4 akiss
img.assign();
92 4 akiss
imgbis.save_inr(newname.c_str(),tailleVoxel);
93 4 akiss
imgbis.assign();
94 4 akiss
95 4 akiss
if (compress)
96 4 akiss
        {
97 4 akiss
                string zip="gzip -f "+newname;
98 4 akiss
                if(system(zip.c_str()));
99 4 akiss
        }
100 4 akiss
101 4 akiss
return 0;
102 4 akiss
}