Beispiel #1
0
void GpsLocation::calculateXY()
{
    KKJ outX(0);
    KKJ outY(0);

    WGS84lola_to_KKJxy(this->longitude, this->latitude, &outX, &outY);

    this->m_x.setNum(outX);
    this->m_y.setNum(outY);
}
void Map::save(QString dir)
{
    QDir qDir(dir);
    qDir.mkpath(dir);

    if(dir[dir.size() - 1] != '\\')
        dir += '\\';

    leftPopulation -> savePopulation(dir + "LeftPopulation\\");
    rightPopulation -> savePopulation(dir + "RightPopulation\\");

    QFile *fileX = new QFile(dir + "mapX.save");
    QFile *fileY = new QFile(dir + "mapY.save");
    QFile *fileS = new QFile(dir + "mapS.save");
    if (! fileX -> open(QIODevice::WriteOnly | QIODevice::Text) ||
            ! fileY -> open(QIODevice::WriteOnly | QIODevice::Text) ||
            ! fileS -> open(QIODevice::WriteOnly | QIODevice::Text) )
    {
        // Error while trying to write file
    }
    else
    {
        // Everything is OK
        QTextStream outX(fileX);
        QTextStream outY(fileY);
        QTextStream outS(fileS);

        outS << minDeltaX << "\n";
        outS << maxDeltaX << "\n";
        outS << minDeltaY << "\n";
        outS << maxDeltaY << "\n";
        outS << lengthStartEnd << "\n";
        outS << lengthTotal << "\n";


        outX << points.size() << "\n";
        outY << points.size() << "\n";
        for(int i = 0; i < points.size(); ++i)
        {
            QString tmp;

            tmp = "";
            tmp.setNum(points[i].x, 'f', 4);
            outX << tmp << "\n";

            tmp = "";
            tmp.setNum(points[i].y, 'f', 4);
            outY << tmp << "\n";
        }
    }

    fileX -> close();
    fileY -> close();
    fileS -> close();
}
Beispiel #3
0
void lx(float* _A, float* _B, float* _X) {
  /* aliases for all variables */
#define A(i, j) _A[(3*(j) + -4 + (i))]
#define B(i) _B[(-1 + (i))]
#define X(i) _X[(-1 + (i))]
#define C(t, p) _C[(3*(p) + -6 + (t))]
#define outX(t, p) X(p)
   
  /* allocate memory for local variables */
  float * _C = (float *) malloc(sizeof(float)*(6));
  
   
  /* loops variables */
  int i;
  int p;
  int t;
   
  /* a few loops */
  t = 2;
  p = 1;
  outX(t, p) = (B(p) / A(p, p));
  t = 3;
  p = 1;
  C(t, p) = (A((-1 + t), p) * outX(2, p));
  t = 4;
  p = 1;
  C(t, p) = (A((-1 + t), p) * outX(2, p));
  p = 2;
  outX(t, p) = ((B(p) - C((-1 + t), (-1 + p))) / A(p, p));
  /* dead code removed */
  t = 5; {
    for (p = (-3 + t); p <= rfloor(((-1 + t)),(2)); ++p) {
      C(t, p) = (C((-1 + t), (-1 + p)) + (A((-p + t), p) * outX(2*p, p)));
    }
    if (((t)%2) == 0) {
      p = (t)/2;
      outX(t, p) = ((B(p) - C((-1 + t), (-1 + p))) / A(p, p));
    }
  }
  t = 6;
  p = 3;
  outX(t, p) = ((B(p) - C((-1 + t), (-1 + p))) / A(p, p));
   
  /* clean up local variables' memory */
  /* commented out because it was crashing at run time*/
  /*
  free(_C);
  
  */
  /* and finally undef aliases */
#undef A
#undef B
#undef X
#undef C
#undef outX
}
Beispiel #4
0
cv::Mat flow_2_RGB( const cv::Mat &inpFlow, const float &max_size )
{

        //////////////////////////
        bool    use_value = false;
        cv::Mat sat;
        cv::Mat rgbFlow;
        //////////////////////////

        if (inpFlow.empty())                                                                                                             exit(1);
        if (inpFlow.depth() != CV_32F)  {   std::cout << "FlowTo RGB: error inpFlow wrong data type ( has be CV_32FC2" << std::endl;     exit(1);     }
        if (!sat.empty() )
            if( sat.type() != CV_8UC1)  {   std::cout << "FlowTo RGB: error sat must have type CV_8UC1"                << std::endl;     exit(1);     }

        const float grad2deg = (float)(90/3.141);
        double satMaxVal = 0;
        double minVal = 0;
        if(!sat.empty())
        {
            cv::minMaxLoc(sat, &minVal, &satMaxVal);
            satMaxVal = 255.0/satMaxVal;
        }

        cv::Mat pol(inpFlow.size(), CV_32FC2);

        float mean_val = 0, min_val = 1000, max_val = 0;

        for(int r = 0; r < inpFlow.rows; r++)
        {
            for(int c = 0; c < inpFlow.cols; c++)
            {
                cv::Mat1f inX( 1,1);  inX(0,0)=inpFlow.at<cv::Point2f>(r,c).x;
                cv::Mat1f inY( 1,1);  inY(0,0)=inpFlow.at<cv::Point2f>(r,c).y;
                cv::Mat1f outX(1,1);
                cv::Mat1f outY(1,1);
                cv::cartToPolar( inX, inY, outX, outY, false );
                cv::Point2f polar;
                            polar.x = outX(0,0);
                            polar.y = outY(0,0);

                polar.y *= grad2deg;
                mean_val +=polar.x;
                max_val = MAX(max_val, polar.x);
                min_val = MIN(min_val, polar.x);
                pol.at<cv::Point2f>(r,c) = cv::Point2f(polar.y,polar.x);
            }
        }
        mean_val /= inpFlow.size().area();
        float scale = max_val - min_val;
        float shift = -min_val;
        scale = 255.f/scale;
        if( max_size > 0)
        {
            scale = 255.f/max_size;
            shift = 0;
        }

        //calculate the angle, motion value
        cv::Mat hsv(inpFlow.size(), CV_8UC3);
        uchar * ptrHSV = hsv.ptr<uchar>();
        int idx_val  = (use_value) ? 2:1;
        int idx_sat  = (use_value) ? 1:2;


        for(int r = 0; r < inpFlow.rows; r++, ptrHSV += hsv.step1())
        {
            uchar * _ptrHSV = ptrHSV;
            for(int c = 0; c < inpFlow.cols; c++, _ptrHSV+=3)
            {
                cv::Point2f vpol = pol.at<cv::Point2f>(r,c);

                _ptrHSV[0] = cv::saturate_cast<uchar>(vpol.x);
                _ptrHSV[idx_val] = cv::saturate_cast<uchar>( (vpol.y + shift) * scale);
                if( sat.empty())
                    _ptrHSV[idx_sat] = 255;
                else
                    _ptrHSV[idx_sat] = 255-  cv::saturate_cast<uchar>(sat.at<uchar>(r,c) * satMaxVal);

            }
        }
        std::vector<cv::Mat> vec;
        cv::split(hsv, vec);
        cv::equalizeHist(vec[idx_val],vec[idx_val]);
        cv::merge(vec,hsv);
        cv::Mat rgbFlow32F;
        cv::cvtColor(hsv, rgbFlow32F, CV_HSV2BGR);
        rgbFlow32F.convertTo(rgbFlow, CV_8UC3);

        ///////////////
        return rgbFlow;
        ///////////////
}