1// 2// Demonstrate using the 'analyze' process module to compute 3// image statistics. 4// 5// Copyright Bob Friesenhahn, 2003, 2004 6// 7// Usage: analyze file... 8// 9 10#include <Magick++.h> 11#include <iostream> 12#include <iomanip> 13#include <list> 14using namespace std; 15using namespace Magick; 16int main(int argc,char **argv) 17{ 18 if ( argc < 2 ) 19 { 20 cout << "Usage: " << argv[0] << " file..." << endl; 21 exit( 1 ); 22 } 23 24 // Initialize ImageMagick install location for Windows 25 InitializeMagick(*argv); 26 27 { 28 std::list<std::string> attributes; 29 30 attributes.push_back("TopLeftColor"); 31 attributes.push_back("TopRightColor"); 32 attributes.push_back("BottomLeftColor"); 33 attributes.push_back("BottomRightColor"); 34 attributes.push_back("filter:brightness:mean"); 35 attributes.push_back("filter:brightness:standard-deviation"); 36 attributes.push_back("filter:brightness:kurtosis"); 37 attributes.push_back("filter:brightness:skewness"); 38 attributes.push_back("filter:saturation:mean"); 39 attributes.push_back("filter:saturation:standard-deviation"); 40 attributes.push_back("filter:saturation:kurtosis"); 41 attributes.push_back("filter:saturation:skewness"); 42 43 char **arg = &argv[1]; 44 while ( *arg ) 45 { 46 string fname(*arg); 47 try { 48 cout << "File: " << fname << endl; 49 Image image( fname ); 50 51 /* Analyze module does not require an argument list */ 52 image.process("analyze",0,0); 53 54 list<std::string>::iterator pos = attributes.begin(); 55 while(pos != attributes.end()) 56 { 57 cout << " " << setw(16) << setfill(' ') << setiosflags(ios::left) 58 << *pos << " = " << image.attribute(*pos) << endl; 59 pos++; 60 } 61 } 62 catch( Exception &error_ ) 63 { 64 cout << error_.what() << endl; 65 } 66 ++arg; 67 } 68 } 69 70 return 0; 71} 72