void MotionTrackerFB::drawOpticalFlow(cv::Mat& output, float maxmotion) { // determine motion range: maxrad = maxmotion; if (maxmotion <= 0) { maxrad = 1; for (int y = 0; y < flow.rows; ++y) { for (int x = 0; x < flow.cols; ++x) { cv::Point2f u = flow(y, x); if (!isFlowCorrect(u)) continue; maxrad = std::max(maxrad, (float)sqrt(u.x * u.x + u.y * u.y)); } } } for (int y = 0; y < flow.rows; ++y) { for (int x = 0; x < flow.cols; ++x) { cv::Point2f u = flow(y, x); if (isFlowCorrect(u)) output.at<cv::Vec3b>(y, x) = computeColor(u.x / maxrad, u.y / maxrad); } } }
static void drawOpticalFlow(const Mat_<Point2f>& flow, Mat& dst, float maxmotion = -1) { dst.create(flow.size(), CV_8UC3); dst.setTo(Scalar::all(0)); // determine motion range: float maxrad = maxmotion; if (maxmotion <= 0) { maxrad = 1; for (int y = 0; y < flow.rows; ++y) { for (int x = 0; x < flow.cols; ++x) { Point2f u = flow(y, x); if (!isFlowCorrect(u)) continue; maxrad = max(maxrad, sqrt(u.x * u.x + u.y * u.y)); } } } for (int y = 0; y < flow.rows; ++y) { for (int x = 0; x < flow.cols; ++x) { Point2f u = flow(y, x); if (isFlowCorrect(u)) dst.at<Vec3b>(y, x) = computeColor(u.x / maxrad, u.y / maxrad); } } }
void CameraInteraction::calc_mean(Mat flow1,float &um, float &vm) { float sumu = 0; float sumv = 0; int counter = 0; const int rows = flow1.rows; const int cols = flow1.cols; for (int y = 0; y < rows; ++y) { for (int x = 0; x < cols; ++x) { Vec2f flow1_at_point = flow1.at<Vec2f>(y, x); float u1 = flow1_at_point[0]; float v1 = flow1_at_point[1]; if (isFlowCorrect(u1) && isFlowCorrect(v1)) { sumu += u1; sumv += v1; counter++; } } } um=sumu/(1e-9 + counter); vm=sumv/(1e-9 + counter); }