#include "ModelTrain.h" #include "qcoreapplication.h" #include "qstring.h" #include "opencv\cv.h" #include "opencv\highgui.h" //#include "ImageProcess.h" #include "qfile.h" #include "qiodevice.h" #include "qstringlist.h" #include "imgcodecs.hpp" #include using namespace std; ModelTrain::ModelTrain() { } ModelTrain::~ModelTrain() { } // cv::Mat ModelTrain::findCircleObject(QString strPath, int nThres /*= 20*/, luffy_base::luffyCircle *pCircle /*= NULL*/) // { // //cv::Mat src = cv::imread(strPath.toLatin1().data(), 0); // cv::Mat src = cv::imread(std::string((const char*)strPath.toLocal8Bit()), 0); // cv::Mat back = ModelTrain::getBackGoundImage(); // return ImageProcess::findCircleObject(src, back, nThres, pCircle); // } cv::Mat ModelTrain::getBackGoundImage() { static cv::Mat matback; if (matback.empty()){ QString filepath = qApp->applicationDirPath() + "\\user\\background.png"; //matback = cv::imread(filepath.toLatin1().data(), 0); matback = cv::imread(std::string((const char*)filepath.toLocal8Bit()), 0); } return matback; } bool ModelTrain::caliDiameter2Thickness(float &a, float &b) { QString str = QCoreApplication::applicationDirPath() + "\\user\\diameter2thickness.csv"; QFile qFile(str); bool bb = qFile.open(QIODevice::ReadOnly); QString st = qFile.readAll(); qFile.close(); QStringList lst = st.split(";"); vector points; for (int i = 0; i < lst.size(); i++) { QStringList l = lst.at(i).split(","); if (l.size() == 2) { points.push_back(cv::Point2f(l.first().toDouble(), l.last().toDouble() / 4.0)); } } if (!bb || points.size() < 3) { return false; } int nSize = points.size(); double t1 = 0, t2 = 0, t3 = 0, t4 = 0; for (int i = 0; i < points.size(); ++i) { t1 += points[i].x * points[i].x; t2 += points[i].x; t3 += points[i].x * points[i].y; t4 += points[i].y; } b = (t3 * nSize - t2 * t4) / (t1 * nSize - t2 * t2); a = (t1 * t4 - t2 * t3) / (t1 * nSize - t2 * t2); for (int i = 0; i < points.size(); i++) { float r = points.at(i).x * b + a; float r2 = points.at(i).y; int aaaa = 1; } return true; }