From 5e52c80e5d9994c7f7fd304f15d91ec7517e06a4 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Sun, 28 Jul 2013 17:47:08 +0200 Subject: Speed up tracking at 60 Hz to acceptable levels --- ftnoir_tracker_aruco/ftnoir_tracker_aruco.cpp | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) (limited to 'ftnoir_tracker_aruco/ftnoir_tracker_aruco.cpp') diff --git a/ftnoir_tracker_aruco/ftnoir_tracker_aruco.cpp b/ftnoir_tracker_aruco/ftnoir_tracker_aruco.cpp index 200010e8..b1f08542 100644 --- a/ftnoir_tracker_aruco/ftnoir_tracker_aruco.cpp +++ b/ftnoir_tracker_aruco/ftnoir_tracker_aruco.cpp @@ -156,7 +156,7 @@ void Tracker::StartTracker(QFrame* videoframe) this->layout = layout; load_settings(); connect(&timer, SIGNAL(timeout()), this, SLOT(paint_widget())); - timer.start(40); + timer.start(50); start(); for (int i = 0; i < 6; i++) pose[i] = 0; @@ -184,13 +184,14 @@ void Tracker::run() aruco::MarkerDetector detector; detector.setDesiredSpeed(3); - cv::Mat color, grayscale, rvec, tvec; + cv::Mat color, grayscale, rvec, tvec, tmp; while (!stop) { if (!camera.read(color)) break; - cv::cvtColor(color, grayscale, cv::COLOR_BGR2GRAY); + cv::cvtColor(color, tmp, cv::COLOR_BGR2GRAY); + cv::resize(tmp, grayscale, cv::Size(color.cols*0.5, color.rows*0.5), cv::INTER_AREA); const float focal_length_w = 0.5 * grayscale.cols / tan(0.5 * fov * HT_PI / 180); const float focal_length_h = 0.5 * grayscale.rows / tan(0.5 * fov * grayscale.rows / grayscale.cols * HT_PI / 180.0); cv::Mat intrinsics = cv::Mat::eye(3, 3, CV_32FC1); @@ -208,7 +209,13 @@ void Tracker::run() detector.detect(grayscale, markers, cv::Mat(), cv::Mat(), -1, false); - QMutexLocker lck(&mtx); + frame = color; + + if (frame.rows > 0 && !fresh) + { + videoWidget->update_image(frame.data, frame.cols, frame.rows); + fresh = true; + } if (markers.size() == 1 && markers[0].size() == 4) { const aruco::Marker& m = markers.at(0); @@ -238,6 +245,8 @@ void Tracker::run() cv::Vec3d foo = cv::RQDecomp3x3(rotation_matrix, junk1, junk2); + QMutexLocker lck(&mtx); + for (int i = 0; i < 3; i++) pose[i] = tvec.at(i); @@ -248,8 +257,6 @@ void Tracker::run() pose[Yaw] -= atan(pose[TX] / pose[TZ]) * 180 / HT_PI; pose[Pitch] -= atan(pose[TY] / pose[TZ]) * 180 / HT_PI; } - - frame = color.clone(); } } @@ -257,11 +264,6 @@ bool Tracker::GiveHeadPoseData(double *data) { QMutexLocker lck(&mtx); - if (frame.rows > 0) - { - videoWidget->update_image(frame.data, frame.cols, frame.rows); - fresh = true; - } if (enableRX) data[Yaw] = pose[Yaw]; if (enableRY) -- cgit v1.2.3