CPP 19
Drawlines.cpp Guest on 7th October 2020 07:24:38 AM
  1. /* edgedisp.cpp
  2.  *
  3.  * for each edge pixel in left image, scan right image within disparity
  4.  * range until match is found
  5.  *
  6.  */
  7.  
  8. #include <stdlib.h>
  9. #include <stdio.h>
  10. #include <iostream>
  11. #include <sstream>
  12. #include <fstream>
  13. #include <random>
  14. #include <vector>
  15. #include <math.h>
  16. #include <sys/stat.h>
  17. #include <sys/types.h>
  18. #include "imageLib.h"
  19. #include "../hypstructs.h"
  20.  
  21. #define VERBOSE 1
  22. #define SCALE 5
  23.  
  24. /*  *****************************************/
  25. void initImage(CByteImage &img) {
  26.  
  27.     CShape sh = img.Shape();
  28.     int w = sh.width, h = sh.height;
  29.         for (int x = 0; x < w; ++x) {
  30.                 for (int y = 0; y < h; ++y) {
  31.                         img.Pixel(x,y,0) = 255;
  32.                         img.Pixel(x,y,1) = 255;
  33.                         img.Pixel(x,y,2) = 255;
  34.                         img.Pixel(x,y,3) = 255;
  35.                 }
  36.         }
  37. }
  38.  
  39. void scaleLine(disp_plane &new_line) {
  40.         new_line.x1 /= SCALE;
  41.         new_line.x2 /= SCALE;
  42. }
  43.  
  44. void drawRuler(CByteImage &img, int offset, int maxd) {
  45.  
  46.     CShape sh = img.Shape();
  47.     int w = sh.width, h = sh.height, y;
  48.         //if (h / maxd > 30)
  49.         y = (h-offset);
  50.         for (int x = 0; x < w; x++) {
  51.                 img.Pixel(x,y,0) = 192;
  52.                 img.Pixel(x,y,1) = 192;
  53.                 img.Pixel(x,y,2) = 192;
  54.         }
  55.         for (int d = 0; d < (maxd/5 + 1); ++d) {
  56.                 for (int x = w-3; x < w; ++x) {
  57.                         y = (h-offset-(d*5*(h-offset)/maxd));
  58.                         img.Pixel(x,y,0) = 0;
  59.                         img.Pixel(x,y,1) = 0;
  60.                         img.Pixel(x,y,2) = 0;
  61.                 }
  62.         }
  63. }
  64.  
  65. void drawLine(CByteImage &img, disp_plane newline, int offset, int maxd) {
  66.     CShape sh = img.Shape();
  67.     int w = sh.width, h = sh.height, x1 = newline.x1, x2 = newline.x2;
  68.     float scale = (h-offset)/maxd;
  69.     int y1 = (h-offset-(newline.d1*scale));
  70.     int y2 = (h-offset-(newline.d2*scale));
  71.     //printf("drawing line from (%d, %d) to (%d, %d)\n", x1, y1, x2, y2);
  72.     int x, y, d;
  73.     float slope = (1.0*(y2 - y1))/(1.0*(x2-x1));
  74.         //if ((slope <= 1) && (slope >= -1)) {
  75.         for (x = x1; x < x2; x++) {
  76.             y = slope*x + y1;
  77.             if ((y >= 0) && (y < h)) {
  78.                     img.Pixel(x, y, 0) = 0;
  79.                     img.Pixel(x, y, 1) = 0;
  80.                     img.Pixel(x, y, 2) = 0;
  81. //                  if (y > 0) {
  82. //                              img.Pixel(x, y-1, 0) = 0;
  83. //                              img.Pixel(x, y-1, 1) = 0;
  84. //                              img.Pixel(x, y-1, 2) = 0;
  85. //                      }
  86.                 }
  87.         }
  88.     //} else {
  89. //      //for (y = ymin; y <= ymax; y++) {
  90. //      for (d = d1; d < d2; d++) {
  91. //          x = (y-b)/slope;
  92. //          if ((x >= 0) && (x < w)) {
  93. //              if ((segmented == 0) || (y >= ymin && y <= ymax))
  94. //                  outimg.Pixel(x, y, 0) = 0;
  95. //              else if (DRAW_FADED_LINES)
  96. //                  outimg.Pixel(x, y, 0) = 200;
  97. //          }
  98. //      }
  99. //      }
  100. }
  101.  
  102. int main(int argc, char *argv[]) {
  103.  
  104.         try {
  105.                 if (argc != 3) {
  106.                         throw CError("\n  usage: %s in.txt out.png\n", argv[0]);
  107.                 }
  108.  
  109.         ifstream input (argv[1]);
  110.         char *outname = argv[2];
  111.        
  112.         int ct, width, height, offset, num_planes, max_disp;
  113.         //std::vector<disp_plane> lines;
  114.  
  115.         // Read in dimensions and # shapes
  116.         input >> ct >> width >> height >> offset >> num_planes >> max_disp;
  117.  
  118.         CByteImage canvas;
  119.         CShape canvas_size(width/SCALE+5, height/SCALE, 4);
  120.         canvas.ReAllocate(canvas_size);
  121.        
  122.         for (int hyp = 1; ((hyp < (ct-1)) && (hyp != 47)); hyp++) {
  123.        
  124.         //printf("running hypothesis %d\n", hyp);
  125.         // Create canvas, 4-banded CByteImages, from given dimensions.
  126.         // Canvas will be the output.
  127.        
  128.         input >> width >> height >> offset >> num_planes >> max_disp;
  129.  
  130.        
  131.         initImage(canvas);
  132.         drawRuler(canvas, offset/SCALE, max_disp);
  133.        
  134.         // Populate view and shape vectors from input
  135.         for (int v = 0; v < num_planes; ++v) {
  136.                 disp_plane new_line;
  137.                 input >> new_line.x1 >> new_line.x2 >> new_line.d1 >> new_line.d2 >> new_line.anchor_type;
  138.                 //lines.push_back(new_line);
  139.                 scaleLine(new_line);
  140.                 drawLine(canvas, new_line, offset/SCALE, max_disp);
  141.         }
  142.        
  143.         //mkdir((folder_name).c_str(), 0700);
  144.        
  145.         WriteImageVerb(canvas, outname, VERBOSE);
  146.         }
  147.         }      
  148.         catch (CError &err) {
  149.         fprintf(stderr, err.message);
  150.         fprintf(stderr, "\n");
  151.         return -1;
  152.     }
  153.  
  154.     return 0;
  155. }

Paste is for source code and general debugging text.

Login or Register to edit, delete and keep track of your pastes and more.

Raw Paste

Login or Register to edit or fork this paste. It's free.