diff options
Diffstat (limited to 'tracker-easy/preview.cpp')
-rw-r--r-- | tracker-easy/preview.cpp | 142 |
1 files changed, 74 insertions, 68 deletions
diff --git a/tracker-easy/preview.cpp b/tracker-easy/preview.cpp index 33758cfa..404ad299 100644 --- a/tracker-easy/preview.cpp +++ b/tracker-easy/preview.cpp @@ -13,88 +13,94 @@ #include <opencv2/imgproc.hpp> -Preview& Preview::operator=(const cv::Mat& aFrame) +namespace EasyTracker { - // Make sure our frame is RGB - // Make an extra copy if needed - int channelCount = aFrame.channels(); - if (channelCount == 1) - { - // Convert to RGB - cv::cvtColor(aFrame, iFrameRgb, cv::COLOR_GRAY2BGR); - } - else if (channelCount == 3) - { - iFrameRgb = aFrame; - } - else - { - eval_once(qDebug() << "tracker/easy: camera frame depth not supported" << aFrame.channels()); - return *this; - } - - return *this; -} + Preview& Preview::operator=(const cv::Mat& aFrame) + { -Preview::Preview(int w, int h) -{ - ensure_size(frame_out, w, h, CV_8UC4); - ensure_size(iFrameResized, w, h, CV_8UC3); + // Make sure our frame is RGB + // Make an extra copy if needed + int channelCount = aFrame.channels(); + if (channelCount == 1) + { + // Convert to RGB + cv::cvtColor(aFrame, iFrameRgb, cv::COLOR_GRAY2BGR); + } + else if (channelCount == 3) + { + iFrameRgb = aFrame; + } + else + { + eval_once(qDebug() << "tracker/easy: camera frame depth not supported" << aFrame.channels()); + return *this; + } - iFrameResized.setTo(cv::Scalar(0, 0, 0)); -} -QImage Preview::get_bitmap() -{ - int stride = frame_out.step.p[0]; + return *this; + } - if (stride < 64 || stride < frame_out.cols * 4) + Preview::Preview(int w, int h) { - eval_once(qDebug() << "bad stride" << stride - << "for bitmap size" << iFrameResized.cols << iFrameResized.rows); - return QImage(); + ensure_size(frame_out, w, h, CV_8UC4); + ensure_size(iFrameResized, w, h, CV_8UC3); + + iFrameResized.setTo(cv::Scalar(0, 0, 0)); } - // Resize if needed - const bool need_resize = iFrameRgb.cols != frame_out.cols || iFrameRgb.rows != frame_out.rows; - if (need_resize) + QImage Preview::get_bitmap() { - cv::resize(iFrameRgb, iFrameResized, cv::Size(frame_out.cols, frame_out.rows), 0, 0, cv::INTER_NEAREST); + int stride = frame_out.step.p[0]; + + if (stride < 64 || stride < frame_out.cols * 4) + { + eval_once(qDebug() << "bad stride" << stride + << "for bitmap size" << iFrameResized.cols << iFrameResized.rows); + return QImage(); + } + + // Resize if needed + const bool need_resize = iFrameRgb.cols != frame_out.cols || iFrameRgb.rows != frame_out.rows; + if (need_resize) + { + cv::resize(iFrameRgb, iFrameResized, cv::Size(frame_out.cols, frame_out.rows), 0, 0, cv::INTER_NEAREST); + } + else + { + iFrameRgb.copyTo(iFrameResized); + } + + cv::cvtColor(iFrameResized, frame_out, cv::COLOR_BGR2BGRA); + + return QImage((const unsigned char*)frame_out.data, + frame_out.cols, frame_out.rows, + stride, + QImage::Format_ARGB32); } - else + + void Preview::draw_head_center(numeric_types::f x, numeric_types::f y) { - iFrameRgb.copyTo(iFrameResized); + int px = iround(x), py = iround(y); + + constexpr int len = 9; + + static const cv::Scalar color(0, 255, 255); + cv::line(iFrameRgb, + cv::Point(px - len, py), + cv::Point(px + len, py), + color, 1); + cv::line(iFrameRgb, + cv::Point(px, py - len), + cv::Point(px, py + len), + color, 1); } - cv::cvtColor(iFrameResized, frame_out, cv::COLOR_BGR2BGRA); - - return QImage((const unsigned char*) frame_out.data, - frame_out.cols, frame_out.rows, - stride, - QImage::Format_ARGB32); -} - -void Preview::draw_head_center(numeric_types::f x, numeric_types::f y) -{ - int px = iround(x), py = iround(y); - - constexpr int len = 9; - - static const cv::Scalar color(0, 255, 255); - cv::line(iFrameRgb, - cv::Point(px - len, py), - cv::Point(px + len, py), - color, 1); - cv::line(iFrameRgb, - cv::Point(px, py - len), - cv::Point(px, py + len), - color, 1); -} + void Preview::ensure_size(cv::Mat& frame, int w, int h, int type) + { + if (frame.cols != w || frame.rows != h) + frame = cv::Mat(h, w, type); + } -void Preview::ensure_size(cv::Mat& frame, int w, int h, int type) -{ - if (frame.cols != w || frame.rows != h) - frame = cv::Mat(h, w, type); } |