AVasK

Histogram Drawing Function

Oct 5th, 2017
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.91 KB | None | 0 0
  1. Image draw_hist(Image src) {  // HISTOGRAM DRAWING
  2.     Image histogram = Image(100, 256);
  3.    
  4.     // Making hist_img null;
  5.     for (int i = 0; i < histogram.n_rows; i++) {
  6.         for (int j = 0; j < histogram.n_cols; j++) {
  7.             std::get<0>(histogram(i,j)) = 0;
  8.             std::get<1>(histogram(i,j)) = 0;
  9.             std::get<2>(histogram(i,j)) = 0;
  10.            
  11.         }
  12.     }
  13.    
  14.     int freq[256] = {0};
  15.     int r_freq[256] = {0};
  16.     int g_freq[256] = {0};
  17.     int b_freq[256] = {0};
  18.    
  19.    
  20.     int avg = 0;
  21.     for (int row = 0; row < src.n_rows; row++) {
  22.         for (int col = 0; col < src.n_cols; col++) {
  23.             avg = (int) ((std::get<0>(src(row, col)) + std::get<1>(src(row, col)) + std::get<2>(src(row, col))) / 3);
  24.             freq[avg]++;
  25.             r_freq[(std::get<0>(src(row, col)))]++;
  26.             g_freq[(std::get<1>(src(row, col)))]++;
  27.             b_freq[(std::get<2>(src(row, col)))]++;
  28.            
  29.         }
  30.     }
  31.    
  32.     int max = 0;
  33.     for (auto &x : freq) { if (x > max) max = x; }
  34.    
  35.     // CODE BELOW IS USED FOR SETTING UP HIST IMAGE.
  36.     // NOTHING INTERESTING HERE. I MEAN RLY.
  37.    
  38.  
  39.     for (auto &x : freq) { if (x > max) max = x; }
  40.     for (auto &x : r_freq) { x = (int)(((double)x / max) * 90); }
  41.     for (auto &x : g_freq) { x = (int)(((double)x / max) * 90); }
  42.     for (auto &x : b_freq) { x = (int)(((double)x / max) * 90); }
  43.  
  44.    
  45.     for (int x = 0; x < 256; x++) {
  46.         for (int c = 90; c > 90 - r_freq[x]; c--) {
  47.             std::get<0>(histogram(c, x)) = 255;
  48.         }
  49.     }
  50.    
  51.     for (int x = 0; x < 256; x++) {
  52.         for (int c = 90; c > 90 - g_freq[x]; c--) {
  53.             std::get<1>(histogram(c, x)) = 255;
  54.         }
  55.     }
  56.    
  57.     for (int x = 0; x < 256; x++) {
  58.         for (int c = 90; c > 90 - b_freq[x]; c--) {
  59.             std::get<2>(histogram(c, x)) = 255;
  60.         }
  61.     }
  62.    
  63.     return histogram;
  64. }
Advertisement
Add Comment
Please, Sign In to add comment