Get real exposure time and draw
This commit is contained in:
parent
aca1f8b183
commit
9e7c2cfa68
|
@ -368,7 +368,7 @@ struct MYNTEYE_API ImgData {
|
|||
std::uint16_t frame_id;
|
||||
/** Image timestamp in 0.01ms */
|
||||
std::uint32_t timestamp;
|
||||
/** Image exposure time in 0.01ms */
|
||||
/** Image exposure time, virtual value in [1, 480] */
|
||||
std::uint16_t exposure_time;
|
||||
|
||||
void Reset() {
|
||||
|
|
|
@ -30,6 +30,15 @@ MYNTEYE_API std::shared_ptr<Device> select();
|
|||
|
||||
} // namespace device
|
||||
|
||||
namespace utils {
|
||||
|
||||
/** Get real exposure time in ms from virtual value, according to its frame rate
|
||||
*/
|
||||
MYNTEYE_API float get_real_exposure_time(
|
||||
std::int32_t frame_rate, std::uint16_t exposure_time);
|
||||
|
||||
} // namespace utils
|
||||
|
||||
MYNTEYE_END_NAMESPACE
|
||||
|
||||
#endif // MYNTEYE_UTILS_H_ NOLINT
|
||||
|
|
|
@ -43,7 +43,7 @@ int main(int argc, char *argv[]) {
|
|||
|
||||
api->Start(Source::VIDEO_STREAMING);
|
||||
|
||||
CVPainter painter;
|
||||
CVPainter painter(api->GetOptionValue(Option::FRAME_RATE));
|
||||
|
||||
cv::namedWindow("frame");
|
||||
|
||||
|
|
|
@ -41,7 +41,7 @@ int main(int argc, char *argv[]) {
|
|||
|
||||
api->Start(Source::VIDEO_STREAMING);
|
||||
|
||||
CVPainter painter;
|
||||
CVPainter painter(api->GetOptionValue(Option::FRAME_RATE));
|
||||
|
||||
cv::namedWindow("frame");
|
||||
|
||||
|
|
|
@ -22,6 +22,8 @@
|
|||
#include <memory>
|
||||
#include <utility>
|
||||
|
||||
#include "mynteye/utils.h"
|
||||
|
||||
#define FONT_FACE cv::FONT_HERSHEY_PLAIN
|
||||
#define FONT_SCALE 1
|
||||
#define FONT_COLOR cv::Scalar(255, 255, 255)
|
||||
|
@ -32,7 +34,9 @@ namespace {
|
|||
std::shared_ptr<std::ios> NewFormat(int width, int prec, char fillch = ' ') {
|
||||
auto fmt = std::make_shared<std::ios>(nullptr);
|
||||
fmt->setf(std::ios::fixed);
|
||||
if (width > 0)
|
||||
fmt->width(std::move(width));
|
||||
if (prec > 0)
|
||||
fmt->precision(std::move(prec));
|
||||
fmt->fill(std::move(fillch));
|
||||
return fmt;
|
||||
|
@ -53,7 +57,8 @@ std::ostream &operator<<(
|
|||
return os;
|
||||
}
|
||||
|
||||
CVPainter::CVPainter() {
|
||||
CVPainter::CVPainter(std::int32_t frame_rate)
|
||||
: frame_rate_(std::move(frame_rate)) {
|
||||
VLOG(2) << __func__;
|
||||
}
|
||||
|
||||
|
@ -74,9 +79,18 @@ cv::Rect CVPainter::DrawImgData(
|
|||
if (gravity == BOTTOM_LEFT || gravity == BOTTOM_RIGHT)
|
||||
sign = -1;
|
||||
|
||||
static auto fmt_time = NewFormat(0, 2);
|
||||
|
||||
std::ostringstream ss;
|
||||
ss << "frame_id: " << data.frame_id << ", stamp: " << data.timestamp
|
||||
<< ", expo: " << data.exposure_time;
|
||||
ss << "frame_id: " << data.frame_id;
|
||||
ss << ", stamp: " << fmt_time << (0.01f * data.timestamp); // ms
|
||||
ss << ", expo: ";
|
||||
if (frame_rate_ == 0) {
|
||||
ss << data.exposure_time;
|
||||
} else {
|
||||
ss << fmt_time << mynteye::utils::get_real_exposure_time(
|
||||
frame_rate_, data.exposure_time);
|
||||
}
|
||||
cv::Rect rect_i = DrawText(img, ss.str(), gravity, 5);
|
||||
|
||||
Clear(ss) << "size: " << img.cols << "x" << img.rows;
|
||||
|
|
|
@ -30,7 +30,7 @@ class CVPainter {
|
|||
BOTTOM_RIGHT
|
||||
} gravity_t;
|
||||
|
||||
CVPainter();
|
||||
explicit CVPainter(std::int32_t frame_rate = 0);
|
||||
~CVPainter();
|
||||
|
||||
cv::Rect DrawSize(const cv::Mat &img, const gravity_t &gravity = TOP_LEFT);
|
||||
|
@ -45,6 +45,9 @@ class CVPainter {
|
|||
const cv::Mat &img, const std::string &text,
|
||||
const gravity_t &gravity = TOP_LEFT, const int &margin = 5,
|
||||
const int &offset_x = 0, const int &offset_y = 0);
|
||||
|
||||
private:
|
||||
std::int32_t frame_rate_;
|
||||
};
|
||||
|
||||
#endif // MYNTEYE_TUTORIALS_CV_PAINTER_H_ NOLINT
|
||||
|
|
|
@ -60,4 +60,52 @@ std::shared_ptr<Device> select() {
|
|||
|
||||
} // namespace device
|
||||
|
||||
namespace utils {
|
||||
|
||||
float get_real_exposure_time(
|
||||
std::int32_t frame_rate, std::uint16_t exposure_time) {
|
||||
float real_max = 0;
|
||||
switch (frame_rate) {
|
||||
case 10:
|
||||
real_max = 18;
|
||||
break;
|
||||
case 15:
|
||||
real_max = 18;
|
||||
break;
|
||||
case 20:
|
||||
real_max = 18;
|
||||
break;
|
||||
case 25:
|
||||
real_max = 18;
|
||||
break;
|
||||
case 30:
|
||||
real_max = 18;
|
||||
break;
|
||||
case 35:
|
||||
real_max = 18;
|
||||
break;
|
||||
case 40:
|
||||
real_max = 18;
|
||||
break;
|
||||
case 45:
|
||||
real_max = 18;
|
||||
break;
|
||||
case 50:
|
||||
real_max = 17;
|
||||
break;
|
||||
case 55:
|
||||
real_max = 16.325;
|
||||
break;
|
||||
case 60:
|
||||
real_max = 15;
|
||||
break;
|
||||
default:
|
||||
LOG(ERROR) << "Invalid frame rate: " << frame_rate;
|
||||
return exposure_time;
|
||||
}
|
||||
return exposure_time * real_max / 480.f;
|
||||
}
|
||||
|
||||
} // namespace utils
|
||||
|
||||
MYNTEYE_END_NAMESPACE
|
||||
|
|
Loading…
Reference in New Issue
Block a user