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(); }
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; /////////////// }