小觅双目MYNT EYE SDK 中的camera3程序详解

#include <iomanip>
#include <iostream>
#include <mutex>

#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

#include "camera.h"
#include "utility.h"

namespace {
//原图像
class GrabCallbacks {
public:
    GrabCallbacks()
        : tick_beg_(0),
          fps_(0),
          count_(0) {
	//记录开始执行时的周期数
        tick_beg_ = static_cast<double>(cv::getTickCount());
    }

    ~GrabCallbacks() = default;

    void OnPre() {}

    void OnPost(cv::Mat &left, cv::Mat &right) {
        std::lock_guard<std::mutex> lk(mtx_);//在构造时加锁,析构时自动解锁
	//计算程序运行的时间
        double elapsed = (static_cast<double>(cv::getTickCount()) - tick_beg_) / cv::getTickFrequency();
        ++count_;//画面数
        fps_ = count_ / elapsed;//每秒传输画面数
    }

    double GetFPS() {
        std::lock_guard<std::mutex> lk(mtx_);
        return fps_;//获得画面频率值
    }

    std::uint64_t GetCount() {
        std::lock_guard<std::mutex> lk(mtx_);
        return count_;//获得画面数
    }

private:
    double tick_beg_;//开始时周期数
    double fps_;//画面频率
    std::uint64_t count_;//画面数
    std::mutex mtx_;
};
//深度图像
class DepthMapCallbacks {
public:
    DepthMapCallbacks()
        : tick_beg_(0),
          tick_end_(0),
          time_cost_(0),
          time_total_(0),
          count_(0) {
    }

    ~DepthMapCallbacks() = default;

    void OnPre(cv::Mat &left, cv::Mat &right) {
        {
            std::lock_guard<std::mutex> lk(mtx_);
            tick_beg_ = static_cast<double>(cv::getTickCount());//获得当前时刻周期数
        }
    }

    void OnPost(cv::Mat &depthmap) {
        {
            std::lock_guard<std::mutex> lk(mtx_);
            tick_end_ = static_cast<double>(cv::getTickCount());
            time_cost_ = (tick_end_ - tick_beg_) / cv::getTickFrequency();//一幅图花费的时间

            time_total_ += time_cost_;//所以图片总时间
            ++count_;
        }
    }

    double GetTimeCost() {
        std::lock_guard<std::mutex> lk(mtx_);
        return time_cost_;//获得一幅图时间值
    }

    double GetTimeAverage() {
        std::lock_guard<std::mutex> lk(mtx_);
        return time_total_ / count_;//获得每幅图时间平均值
    }

    std::uint64_t GetCount() {
        std::lock_guard<std::mutex> lk(mtx_);
        return count_;//图片数
    }

private:
    double tick_beg_;//开始时间
    double tick_end_;//结束时间
    double time_cost_;   // in seconds,单幅图花费时间
    double time_total_;  // in seconds,所以图花费总时间

    std::uint64_t count_;//图片数

    std::mutex mtx_;
};
//获得fmt对象
std::unique_ptr<std::ios> GetStreamFormat(int wide, int prec, char fillch = ' ') {
    auto fmt = std::unique_ptr<std::ios>{new std::ios{nullptr}};//fmt为unique_ptr<std::ios>类的对象
    fmt->setf(std::ios::fixed);
    fmt->width(std::move(wide));//宽度
    fmt->precision(std::move(prec));//精度
    fmt->fill(std::move(fillch));//填充
    return fmt;
}
//获得ss对象
template<typename T>
std::stringstream &Append(std::stringstream &ss, T text,
        std::ios *fmt = nullptr, bool reset = false) {
    if (reset) {
        ss.str("");
        ss.clear();//ss里面内容清空
    }
    if (fmt) {
        ss.copyfmt(*fmt);//将fmt的所有内部成员的值(状态标志和关联的流缓冲区除外)复制到 *ss 的相应成员。
    }
    ss << std::move(text);//text的值移动到ss中
    retur
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值