#include #include #include #include #include #include #include #include #include #include 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; // [@DF] CScale complains (and abort) if metrics is not ortho lol double avg = (pixelWidth + pixelHeight) / 2.0; pixelWidth = pixelHeight = avg; 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; i0) { 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; }