Guest User

Untitled

a guest
Oct 19th, 2017
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.27 KB | None | 0 0
  1. #include <opencv/cv.h>
  2. #include <opencv/highgui.h>
  3. #include <stdio.h>
  4. #include <libfreenect.h>
  5. #include "libfreenect_cv.h"
  6. #include <iostream>
  7.  
  8.  
  9. IplImage *GlViewColor(IplImage *depth)
  10. {
  11. static IplImage *image = 0;
  12. if (!image) image = cvCreateImage(cvSize(640,480), 8, 3);
  13. unsigned char *depth_mid = (unsigned char*)image->imageData;
  14. int i;
  15. for (i = 0; i < 640*480; i++) {
  16. int lb = ((short *)depth->imageData)[i] % 256;
  17. //int lb = 0;
  18. int ub = ((short *)depth->imageData)[i] / 256;
  19. switch (ub) {
  20. case 0:
  21. depth_mid[3*i+2] = 255;
  22. depth_mid[3*i+1] = 255-lb;
  23. depth_mid[3*i+0] = 255-lb;
  24. break;
  25. case 1:
  26. depth_mid[3*i+2] = 255;
  27. depth_mid[3*i+1] = lb;
  28. depth_mid[3*i+0] = 0;
  29. break;
  30. case 2:
  31. depth_mid[3*i+2] = 255-lb;
  32. depth_mid[3*i+1] = 255;
  33. depth_mid[3*i+0] = 0;
  34. break;
  35. case 3:
  36. depth_mid[3*i+2] = 0;
  37. depth_mid[3*i+1] = 255;
  38. depth_mid[3*i+0] = lb;
  39. break;
  40. case 4:
  41. depth_mid[3*i+2] = 0;
  42. depth_mid[3*i+1] = 255-lb;
  43. depth_mid[3*i+0] = 255;
  44. break;
  45.  
  46. case 5:
  47. depth_mid[3*i+2] = 0;
  48. depth_mid[3*i+1] = 0;
  49. depth_mid[3*i+0] = 255-lb;
  50. break;
  51. default:
  52. depth_mid[3*i+2] = 0;
  53. depth_mid[3*i+1] = 0;
  54. depth_mid[3*i+0] = 0;
  55. break;
  56. }
  57. }
  58. //std::cout << image->widthStep << " ";
  59. depth_mid[240*1920+320*3+0] = 255;
  60. depth_mid[240*1920+320*3+1] = 255;
  61. depth_mid[240*1920+320*3+2] = 255;
  62.  
  63. return image;
  64. }
  65.  
  66. IplImage *getRange(IplImage *depth, unsigned int lower, unsigned int higher)
  67. {
  68. IplImage *single = 0;
  69. if (!single) single = cvCreateImage(cvSize(640,480), 8, 1);
  70. unsigned char *depth_mid = (unsigned char*)single->imageData;
  71.  
  72. //if (!dC) dC=100/(-0.00307 * (((short *)depth->imageData)[320*240]) + 3.33);
  73. for (unsigned int i = 0; i < 640*480; i++) {
  74. int imgd = (((short *)depth->imageData)[i]);
  75. depth_mid[i] = 100/(-0.00307 * imgd + 3.33);
  76. if (!( depth_mid[i]>(lower) && depth_mid[i]<(higher) ) )
  77. depth_mid[i]=0;
  78. }
  79. depth_mid[240*640+320] = 255;
  80. return single;
  81. }
  82.  
  83. IplImage *cutRange(IplImage *depth)
  84. {
  85. IplImage *single = 0;
  86. if (!single) single = cvCreateImage(cvSize(640,480), 8, 1);
  87. unsigned char *depth_mid = (unsigned char*)single->imageData;
  88. unsigned int min=200;
  89. for (unsigned int i = 0; i < 640*480; i++) {
  90. int imgd = (((short *)depth->imageData)[i]);
  91. depth_mid[i] = 100/(-0.00307 * imgd + 3.33);
  92. if (depth_mid[i]<min)
  93. min = depth_mid[i];
  94. }
  95.  
  96. for (unsigned int i = 0; i < 640*480; i++) {
  97. if (!( depth_mid[i]>(min-10) && depth_mid[i]<(min+5) ) )
  98. depth_mid[i]=0;
  99. }
  100. depth_mid[240*640+320] = 255;
  101. return single;
  102. }
  103.  
  104.  
  105. int main()
  106. {
  107. int dC=0;
  108.  
  109. while (cvWaitKey(10) < 0) {
  110. /*IplImage *image = freenect_sync_get_rgb_cv(0);
  111. if (!image) {
  112. printf("Error: Kinect not connected?\n");
  113. return -1;
  114. }
  115. cvCvtColor(image, image, CV_RGB2BGR);*/
  116. IplImage *depth = freenect_sync_get_depth_cv(0);
  117. if (!depth) {
  118. printf("Error: Kinect not connected?\n");
  119. return -1;
  120. }
  121. //cvShowImage("RGB", image);
  122. CvFont font;
  123. cvInitFont(&font, CV_FONT_HERSHEY_SIMPLEX, 1.0, 1.0, 0, 1, CV_AA);
  124. /*
  125. static IplImage *single = 0;
  126. if (!single) single = cvCreateImage(cvSize(640,480), 8, 1);
  127. unsigned char *depth_mid = (unsigned char*)single->imageData;
  128. std::cout << single->widthStep << " " ;*/
  129.  
  130.  
  131. IplImage *single = 0;
  132. //if (!single) single = getRange(depth,60, 70);
  133. if (!single) single = cutRange(depth);
  134.  
  135. //if (!dC)
  136. //dC=100/(-0.00307 * (((short *)depth->imageData)[240*1*320]) + 3.33);
  137. unsigned char *depth_mid = (unsigned char*)single->imageData;
  138. dC= int(depth_mid[240+320*640]);
  139. std::cout << " dC " << dC << " " << "img " << single->widthStep << std::endl;
  140. std::stringstream txt;
  141. txt << dC;
  142. std::string toto=txt.str();
  143. //cvShowImage("RGB", getRange(depth,dC-5, dC+5));
  144. cvShowImage("Range", single);
  145. cvPutText(depth, toto.c_str(), cvPoint(10, 130), &font, cvScalar(255, 255, 255, 0));
  146. cvShowImage("Depth", GlViewColor(depth));
  147.  
  148. /*std::cout << int(depth_mid[240*640+320]) << " ";
  149. std::cout << int(depth_mid[320*240]) << " ";
  150. std::cout << int(depth->imageData[320*240]) << " ";
  151. */
  152.  
  153.  
  154. IplImage *testpic = 0;
  155. if (!testpic) testpic = cvCreateImage(cvSize(640,480), 8, 1);
  156. unsigned char *test_mid = (unsigned char*)testpic->imageData;
  157. for (unsigned int i = 640*40; i < (640*440 & 0x ); i++)
  158. test_mid[i] = 100;
  159. cvShowImage("testING", testpic);
  160.  
  161. }
  162. return 0;
  163. }
Add Comment
Please, Sign In to add comment