| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- #include <QCoreApplication>
- #include <QImage>
- #include <QJsonObject>
- #include <QJsonArray>
- #include <QJsonDocument>
- #include <imt/EIMBase.h>
- #include <imt/EIMResult.h>
- #include <imt/CEIMResult.h>
- #include <imt/scale.h>
- #include <iostream>
- using namespace std;
- const CScale *g_pCurrentScale;
- // ./math -platform offscreen -image=../storage/media/15/a0fd44eb-8174-4d8b-bc76-690bc6e441b3.jpeg -metric=0.3x0.3 -point1=280x259 -point2=411x255
- int main(int argc, char *argv[])
- {
- QCoreApplication app(argc, argv);
- QImage image;
- double pixelWidth = 0, pixelHeight = 0;
- Point m_p0, m_p1;
- // parse cmd line
- foreach(QString arg, QCoreApplication::arguments()) {
- if(arg.startsWith("-image=")) {
- QString path = arg.replace("-image=", "");
- if(!image.load(path)) {
- return -2;
- }
- }
- else if(arg.startsWith("-metric=")) {
- QStringList metric = arg.replace("-metric=", "").split("x");
- if(metric.size()==2) {
- pixelWidth = metric[0].toDouble();
- pixelHeight = metric[1].toDouble();
- }
- else {
- return -1;
- }
- }
- else if(arg.startsWith("-point1=")) {
- QStringList point = arg.replace("-point1=", "").split("x");
- if(point.size()==2) {
- m_p0.x = point[0].toInt();
- m_p0.y = point[1].toInt();
- }
- else {
- return -4;
- }
- }
- else if(arg.startsWith("-point2=")) {
- QStringList point = arg.replace("-point2=", "").split("x");
- if(point.size()==2) {
- m_p1.x = point[0].toInt();
- m_p1.y = point[1].toInt();
- }
- else {
- return -5;
- }
- }
- }
- if(image.isNull() || pixelWidth==0.0 || pixelWidth==0.0) {
- return -3;
- }
- //std::cout << image.width() << "x" << image.height() << std::endl;
- //std::cout << pixelWidth << "x" << pixelHeight << std::endl;
- g_pCurrentScale = new CScale("DLL scale", pixelWidth, pixelHeight);
- CEIMResult result;
- CEIMBase ceim;
- ceim.SetEimAssisted( true );
- bool status = ceim.Measure(&image, m_p0, m_p1, false, &result);
- result.result->p0.x = m_p0.x;
- result.result->p0.y = m_p0.y;
- result.result->p1.x = m_p1.x;
- result.result->p1.y = m_p1.y;
- result.result->distance = g_pCurrentScale->Distance( result.result->numberOfPoints );
- imt::IMTResult result2;
- status |= result.fill( &result2 );
- if(status) {
- QJsonObject data;
- data["nearWall"] = ceim.m_bNearWall;
- data["imt_max"] = result2.imt_max;
- data["imt_mean"] = result2.imt_mean;
- data["imt_stddev"] = result2.imt_standardDeviation;
- data["intima_mean"] = result2.intima_mean;
- data["media_mean"] = result2.media_mean;
- data["qualityIndex"] = result2.qualityIndex;
- data["distance"] = result2.distance;
- data["numberOfPoints"] = result2.numberOfPoints;
- QJsonArray vect_intima;
- QJsonArray vect_media;
- QJsonArray vect_adventitia;
- QJsonObject point;
- for (int i=0; i<result2.numberOfPoints; i++) {
- if(result2.vect_intima[i].x>0) {
- point["x"] = result2.vect_intima[i].x;
- point["y"] = result2.vect_intima[i].y;
- vect_intima.append(point);
- }
- if(result2.vect_media[i].x>0) {
- point["x"] = result2.vect_media[i].x;
- point["y"] = result2.vect_media[i].y;
- vect_media.append(point);
- }
- if(result2.vect_adventitia[i].x>0) {
- point["x"] = result2.vect_adventitia[i].x;
- point["y"] = result2.vect_adventitia[i].y;
- vect_adventitia.append(point);
- }
- }
- data["vect_intima"] = vect_intima;
- data["vect_media"] = vect_media;
- data["vect_adventitia"] = vect_adventitia;
- QString json = QJsonDocument(data).toJson(QJsonDocument::Compact);
- std::cout << json.toStdString() << std::endl;
- }
- return 0;
- }
|