INFO702 - TPs
Loading...
Searching...
No Matches
bruit-impulsionnel.cpp
1// bruit-impulsionnel.cpp
2#include <cstdlib>
3#include <iostream>
4#include <fstream>
5#include <algorithm>
6#include "GrayLevelImage2D.hpp"
7
8using namespace std;
9
10double rand01()
11{
12 return (double)random() / (double)RAND_MAX;
13}
14
15int main( int argc, char** argv )
16{
17 typedef GrayLevelImage2D::GrayLevel GrayLevel;
18 typedef GrayLevelImage2D::Iterator Iterator;
19 if ( argc < 3 )
20 {
21 std::cerr << "Usage: bruit-impulsionnel <input.pgm> <output.pgm> <prob>" << std::endl;
22 return 0;
23 }
25 ifstream input( argv[1] ); // récupère le 1er argument.
26 bool ok = img.importPGM( input );
27 if ( !ok )
28 {
29 std::cerr << "Error reading input file." << std::endl;
30 return 1;
31 }
32 input.close();
33
34 double prob = (argc > 3) ? atof( argv[ 3 ] ) : 0.01; // récupère la probabilité de bruit
35 for ( Iterator it = img.begin(), itE = img.end(); it != itE; ++it )
36 {
37 if ( rand01() < prob )
38 { // sature dans un sens (noir=0) ou l'autre (blanc=255)
39 *it = ( rand01() < 0.5 ) ? 0 : 255;
40 }
41 }
42 ofstream output( argv[2] ); // récupère le 2ème argument.
43 ok = img.exportPGM( output, false );
44 if ( !ok )
45 {
46 std::cerr << "Error writing output file." << std::endl;
47 return 1;
48 }
49 output.close();
50 return 0;
51}
Iterator begin()
[gli2d-sec3]