main.cpp 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  1. #include <QCoreApplication>
  2. #include <QImage>
  3. #include <QJsonObject>
  4. #include <QJsonArray>
  5. #include <QJsonDocument>
  6. #include <imt/PlaqueBase.h>
  7. #include <imt/PlaqueResult.h>
  8. #include <imt/CPlaqueResult.h>
  9. #include <imt/scale.h>
  10. #include <iostream>
  11. using namespace std;
  12. const CScale *g_pCurrentScale;
  13. // ./math -platform offscreen -image=../storage/media/15/a0fd44eb-8174-4d8b-bc76-690bc6e441b3.jpeg -metric=0.3x0.3 -point1=280x259 -point2=411x255
  14. int main(int argc, char *argv[])
  15. {
  16. QCoreApplication app(argc, argv);
  17. QImage image;
  18. double pixelWidth = 0, pixelHeight = 0;
  19. QList<Point> points;
  20. // parse cmd line
  21. foreach(QString arg, QCoreApplication::arguments()) {
  22. if(arg.startsWith("-image=")) {
  23. QString path = arg.replace("-image=", "");
  24. if(!image.load(path)) {
  25. return -2;
  26. }
  27. }
  28. else if(arg.startsWith("-metric=")) {
  29. QStringList metric = arg.replace("-metric=", "").split("x");
  30. if(metric.size()==2) {
  31. pixelWidth = metric[0].toDouble();
  32. pixelHeight = metric[1].toDouble();
  33. }
  34. else {
  35. return -1;
  36. }
  37. }
  38. else if(arg.startsWith("-points=")) {
  39. QStringList pts = arg.replace("-points=", "").split(";");
  40. for(int i=0; i<pts.size(); i++) {
  41. QStringList pt = pts[i].split(",");
  42. Point p;
  43. p.x = pt[0].toInt();
  44. p.y = pt[1].toInt();
  45. points.append(p);
  46. }
  47. }
  48. }
  49. if(image.isNull() || pixelWidth==0.0 || pixelWidth==0.0) {
  50. return -3;
  51. }
  52. /*
  53. foreach (Point p, points) {
  54. std::cout << p.x << ' ' << p.y << std::endl;
  55. }
  56. std::cout << "---" << std::endl;
  57. foreach (Point p, points) {
  58. std::cout << p.x << ' ' << p.y << std::endl;
  59. }
  60. std::cout << image.width() << "x" << image.height() << std::endl;
  61. std::cout << pixelWidth << "x" << pixelHeight << std::endl;
  62. */
  63. Point lum = points.takeLast();
  64. /*
  65. foreach (Point p, points) {
  66. std::cout << p.x << ' ' << p.y << std::endl;
  67. }
  68. */
  69. g_pCurrentScale = new CScale("DLL scale", pixelWidth, pixelHeight);
  70. CPlaqueResult result;
  71. int retour = 2;
  72. retour = 12;
  73. CPlaqueBase cplaque;
  74. retour = cplaque.calculPlaque(&image, lum.x, lum.y, points.size(), points);
  75. retour = 3;
  76. QJsonObject data;
  77. // Remplissage des valeurs dans result
  78. result.result->code_retour = retour;
  79. result.result->code_debug1 = cplaque.m_debug1;
  80. result.result->code_debug2 = cplaque.m_debug2;
  81. result.result->code_debug3 = cplaque.m_debug3;
  82. result.result->code_debug4 = cplaque.m_debug4;
  83. result.result->code_debug5 = cplaque.m_debug5;
  84. result.result->m_type = cplaque.m_type;
  85. result.result->m_Etape = cplaque.m_Etape;
  86. result.result->plaque_max_thickness = cplaque.Max();
  87. data["plaque_max_thickness"] = cplaque.Max();
  88. result.result->plaque_mean_thickness = cplaque.Mean();
  89. data["plaque_mean_thickness"] = cplaque.Mean();
  90. result.result->plaque_area = cplaque.Surface();
  91. data["plaque_area"] = cplaque.Surface();
  92. result.result->plaque_mean_density = cplaque.Density();
  93. data["plaque_mean_density"] = cplaque.Density();
  94. result.result->numberOfMeasures = cplaque.m_nMesures;
  95. data["numberOfMeasures"] = cplaque.m_nMesures;
  96. result.result->m_nPtLongeantPlaque = cplaque.m_nPtLongeantPlaque;
  97. data["m_nPtLongeantPlaque"] = cplaque.m_nPtLongeantPlaque;
  98. //result.result->m_nPtList = cplaque.m_nPtList;
  99. result.result->m_ptInferieur.x = cplaque.m_ptInferieur.x;
  100. data["m_ptInferieur.y"] = cplaque.m_ptInferieur.x;
  101. result.result->m_ptInferieur.y = cplaque.m_ptInferieur.y;
  102. data["m_ptInferieur.y"] = cplaque.m_ptInferieur.y;
  103. //result.result->m_dataImg = cplaque.m_wimg.data;
  104. // Transfert de l'image résultats de l'analyse
  105. unsigned char *dadd, *dadd2, *amax;
  106. result.result->m_nbpix = cplaque.m_wimg.nbpix;
  107. result.result->m_dataImg = new unsigned char[cplaque.m_wimg.nbpix];
  108. dadd = (unsigned char *) cplaque.m_wimg.data;
  109. amax = dadd + cplaque.m_wimg.nbpix;
  110. dadd2 = result.result->m_dataImg;
  111. while (dadd < amax)
  112. {
  113. *dadd2 = *dadd;
  114. dadd++;
  115. dadd2++;
  116. }
  117. if ( result.result->m_tPtLongeantPlaque )
  118. {
  119. delete[] result.result->m_tPtLongeantPlaque;
  120. }
  121. result.result->m_tPtLongeantPlaque = new plaque::Point[ cplaque.m_nPtLongeantPlaque ];
  122. result.result->m_nPtLongeantPlaque = cplaque.m_nPtLongeantPlaque;
  123. QJsonObject point;
  124. QJsonArray m_tPtLongeantPlaque;
  125. for ( int i = 0; i < cplaque.m_nPtLongeantPlaque; i++ )
  126. {
  127. result.result->m_tPtLongeantPlaque[ i ].x = cplaque.m_tPtLongeantPlaque[ i ].x;
  128. result.result->m_tPtLongeantPlaque[ i ].y = cplaque.m_tPtLongeantPlaque[ i ].y;
  129. point["x"] = result.result->m_tPtLongeantPlaque[ i ].x;
  130. point["y"] = result.result->m_tPtLongeantPlaque[ i ].y;
  131. m_tPtLongeantPlaque.append(point);
  132. }
  133. data["longeantPlaque"] = m_tPtLongeantPlaque;
  134. if ( result.result->m_tbPtsTrouvesFin )
  135. {
  136. delete[] result.result->m_tbPtsTrouvesFin;
  137. }
  138. result.result->m_tbPtsTrouvesFin = new plaque::Point[ cplaque.m_nVecteursTrouves ];
  139. result.result->m_nVecteursTrouves = cplaque.m_nVecteursTrouves;
  140. QJsonArray m_tbPtsTrouvesFin;
  141. for ( int i = 0; i < cplaque.m_nVecteursTrouves; i++ )
  142. {
  143. result.result->m_tbPtsTrouvesFin[ i ].x = cplaque.m_tbPtsTrouvesFin[ i ].x;
  144. result.result->m_tbPtsTrouvesFin[ i ].y = cplaque.m_tbPtsTrouvesFin[ i ].y;
  145. point["x"] = result.result->m_tbPtsTrouvesFin[ i ].x;
  146. point["y"] = result.result->m_tbPtsTrouvesFin[ i ].y;
  147. m_tbPtsTrouvesFin.append(point);
  148. }
  149. data["ptsTrouvesFin"] = m_tbPtsTrouvesFin;
  150. QString json = QJsonDocument(data).toJson(QJsonDocument::Compact);
  151. std::cout << json.toStdString() << std::endl;
  152. /*if(status) {
  153. QJsonObject data;
  154. data["nearWall"] = ceim.m_bNearWall;
  155. data["imt_max"] = result2.imt_max;
  156. data["imt_mean"] = result2.imt_mean;
  157. data["imt_stddev"] = result2.imt_standardDeviation;
  158. data["intima_mean"] = result2.intima_mean;
  159. data["media_mean"] = result2.media_mean;
  160. data["qualityIndex"] = result2.qualityIndex;
  161. data["distance"] = result2.distance;
  162. data["numberOfPoints"] = result2.numberOfPoints;
  163. QJsonArray vect_intima;
  164. QJsonArray vect_media;
  165. QJsonArray vect_adventitia;
  166. QJsonObject point;
  167. for (int i=0; i<result2.numberOfPoints; i++) {
  168. if(result2.vect_intima[i].x>0) {
  169. point["x"] = result2.vect_intima[i].x;
  170. point["y"] = result2.vect_intima[i].y;
  171. vect_intima.append(point);
  172. }
  173. if(result2.vect_media[i].x>0) {
  174. point["x"] = result2.vect_media[i].x;
  175. point["y"] = result2.vect_media[i].y;
  176. vect_media.append(point);
  177. }
  178. if(result2.vect_adventitia[i].x>0) {
  179. point["x"] = result2.vect_adventitia[i].x;
  180. point["y"] = result2.vect_adventitia[i].y;
  181. vect_adventitia.append(point);
  182. }
  183. }
  184. data["vect_intima"] = vect_intima;
  185. data["vect_media"] = vect_media;
  186. data["vect_adventitia"] = vect_adventitia;
  187. QString json = QJsonDocument(data).toJson(QJsonDocument::Compact);
  188. std::cout << json.toStdString() << std::endl;
  189. }*/
  190. return 0;
  191. }