mirror of https://github.com/opencv/opencv.git
Merge pull request #18292 from smirnov-alexey:as/osd_serialization
[G-API]: Support render primitives serialization * Add GOpaque and GArray serialization support * Address review comments * Remove holds() method * Add serialization mechanism for render primitives * Fix standalone mode * Fix wchar_t error on win64 * Fix assert on windows * Address review comments * Fix GArray and GOpaque reset() method to store proper kind * Reset wchar before deserializing it * Fix wchar_t cross-platform issue * Address review comments * Fix wchar_t serialization and tests * Remove FText serializationpull/18384/head
parent
f52a2cf5e1
commit
f6aa9ac304
11 changed files with 678 additions and 315 deletions
@ -0,0 +1,347 @@ |
|||||||
|
// This file is part of OpenCV project.
|
||||||
|
// It is subject to the license terms in the LICENSE file found in the top-level directory
|
||||||
|
// of this distribution and at http://opencv.org/license.html.
|
||||||
|
//
|
||||||
|
// Copyright (C) 2020 Intel Corporation
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef OPENCV_GAPI_RENDER_TYPES_HPP |
||||||
|
#define OPENCV_GAPI_RENDER_TYPES_HPP |
||||||
|
|
||||||
|
#include <string> |
||||||
|
#include <vector> |
||||||
|
|
||||||
|
#include <opencv2/gapi/opencv_includes.hpp> |
||||||
|
#include <opencv2/gapi/util/variant.hpp> |
||||||
|
#include <opencv2/gapi/own/exports.hpp> |
||||||
|
|
||||||
|
namespace cv |
||||||
|
{ |
||||||
|
namespace gapi |
||||||
|
{ |
||||||
|
namespace wip |
||||||
|
{ |
||||||
|
namespace draw |
||||||
|
{ |
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This structure specifies which FreeType font to use by FText primitives. |
||||||
|
*/ |
||||||
|
struct freetype_font |
||||||
|
{ |
||||||
|
/*@{*/ |
||||||
|
std::string path; //!< The path to the font file (.ttf)
|
||||||
|
/*@{*/ |
||||||
|
}; |
||||||
|
|
||||||
|
//! @addtogroup gapi_draw_prims
|
||||||
|
//! @{
|
||||||
|
/**
|
||||||
|
* @brief This structure represents a text string to draw. |
||||||
|
* |
||||||
|
* Parameters match cv::putText(). |
||||||
|
*/ |
||||||
|
struct Text |
||||||
|
{ |
||||||
|
/**
|
||||||
|
* @brief Text constructor |
||||||
|
* |
||||||
|
* @param text_ The text string to be drawn |
||||||
|
* @param org_ The bottom-left corner of the text string in the image |
||||||
|
* @param ff_ The font type, see #HersheyFonts |
||||||
|
* @param fs_ The font scale factor that is multiplied by the font-specific base size |
||||||
|
* @param color_ The text color |
||||||
|
* @param thick_ The thickness of the lines used to draw a text |
||||||
|
* @param lt_ The line type. See #LineTypes |
||||||
|
* @param bottom_left_origin_ When true, the image data origin is at the bottom-left corner. Otherwise, it is at the top-left corner |
||||||
|
*/ |
||||||
|
Text(const std::string& text_, |
||||||
|
const cv::Point& org_, |
||||||
|
int ff_, |
||||||
|
double fs_, |
||||||
|
const cv::Scalar& color_, |
||||||
|
int thick_ = 1, |
||||||
|
int lt_ = 8, |
||||||
|
bool bottom_left_origin_ = false) : |
||||||
|
text(text_), org(org_), ff(ff_), fs(fs_), |
||||||
|
color(color_), thick(thick_), lt(lt_), bottom_left_origin(bottom_left_origin_) |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
Text() = default; |
||||||
|
|
||||||
|
/*@{*/ |
||||||
|
std::string text; //!< The text string to be drawn
|
||||||
|
cv::Point org; //!< The bottom-left corner of the text string in the image
|
||||||
|
int ff; //!< The font type, see #HersheyFonts
|
||||||
|
double fs; //!< The font scale factor that is multiplied by the font-specific base size
|
||||||
|
cv::Scalar color; //!< The text color
|
||||||
|
int thick; //!< The thickness of the lines used to draw a text
|
||||||
|
int lt; //!< The line type. See #LineTypes
|
||||||
|
bool bottom_left_origin; //!< When true, the image data origin is at the bottom-left corner. Otherwise, it is at the top-left corner
|
||||||
|
/*@{*/ |
||||||
|
}; |
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This structure represents a text string to draw using |
||||||
|
* FreeType renderer. |
||||||
|
* |
||||||
|
* If OpenCV is built without FreeType support, this primitive will |
||||||
|
* fail at the execution stage. |
||||||
|
*/ |
||||||
|
struct FText |
||||||
|
{ |
||||||
|
/**
|
||||||
|
* @brief FText constructor |
||||||
|
* |
||||||
|
* @param text_ The text string to be drawn |
||||||
|
* @param org_ The bottom-left corner of the text string in the image |
||||||
|
* @param fh_ The height of text |
||||||
|
* @param color_ The text color |
||||||
|
*/ |
||||||
|
FText(const std::wstring& text_, |
||||||
|
const cv::Point& org_, |
||||||
|
int fh_, |
||||||
|
const cv::Scalar& color_) : |
||||||
|
text(text_), org(org_), fh(fh_), color(color_) |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
FText() = default; |
||||||
|
|
||||||
|
/*@{*/ |
||||||
|
std::wstring text; //!< The text string to be drawn
|
||||||
|
cv::Point org; //!< The bottom-left corner of the text string in the image
|
||||||
|
int fh; //!< The height of text
|
||||||
|
cv::Scalar color; //!< The text color
|
||||||
|
/*@{*/ |
||||||
|
}; |
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This structure represents a rectangle to draw. |
||||||
|
* |
||||||
|
* Parameters match cv::rectangle(). |
||||||
|
*/ |
||||||
|
struct Rect |
||||||
|
{ |
||||||
|
/**
|
||||||
|
* @brief Rect constructor |
||||||
|
* |
||||||
|
* @param rect_ Coordinates of the rectangle |
||||||
|
* @param color_ The bottom-left corner of the text string in the image |
||||||
|
* @param thick_ The thickness of lines that make up the rectangle. Negative values, like #FILLED, mean that the function has to draw a filled rectangle |
||||||
|
* @param lt_ The type of the line. See #LineTypes |
||||||
|
* @param shift_ The number of fractional bits in the point coordinates |
||||||
|
*/ |
||||||
|
Rect(const cv::Rect& rect_, |
||||||
|
const cv::Scalar& color_, |
||||||
|
int thick_ = 1, |
||||||
|
int lt_ = 8, |
||||||
|
int shift_ = 0) : |
||||||
|
rect(rect_), color(color_), thick(thick_), lt(lt_), shift(shift_) |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
Rect() = default; |
||||||
|
|
||||||
|
/*@{*/ |
||||||
|
cv::Rect rect; //!< Coordinates of the rectangle
|
||||||
|
cv::Scalar color; //!< The rectangle color or brightness (grayscale image)
|
||||||
|
int thick; //!< The thickness of lines that make up the rectangle. Negative values, like #FILLED, mean that the function has to draw a filled rectangle
|
||||||
|
int lt; //!< The type of the line. See #LineTypes
|
||||||
|
int shift; //!< The number of fractional bits in the point coordinates
|
||||||
|
/*@{*/ |
||||||
|
}; |
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This structure represents a circle to draw. |
||||||
|
* |
||||||
|
* Parameters match cv::circle(). |
||||||
|
*/ |
||||||
|
struct Circle |
||||||
|
{ |
||||||
|
/**
|
||||||
|
* @brief Circle constructor |
||||||
|
* |
||||||
|
* @param center_ The center of the circle |
||||||
|
* @param radius_ The radius of the circle |
||||||
|
* @param color_ The color of the circle |
||||||
|
* @param thick_ The thickness of the circle outline, if positive. Negative values, like #FILLED, mean that a filled circle is to be drawn |
||||||
|
* @param lt_ The Type of the circle boundary. See #LineTypes |
||||||
|
* @param shift_ The Number of fractional bits in the coordinates of the center and in the radius value |
||||||
|
*/ |
||||||
|
Circle(const cv::Point& center_, |
||||||
|
int radius_, |
||||||
|
const cv::Scalar& color_, |
||||||
|
int thick_ = 1, |
||||||
|
int lt_ = 8, |
||||||
|
int shift_ = 0) : |
||||||
|
center(center_), radius(radius_), color(color_), thick(thick_), lt(lt_), shift(shift_) |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
Circle() = default; |
||||||
|
|
||||||
|
/*@{*/ |
||||||
|
cv::Point center; //!< The center of the circle
|
||||||
|
int radius; //!< The radius of the circle
|
||||||
|
cv::Scalar color; //!< The color of the circle
|
||||||
|
int thick; //!< The thickness of the circle outline, if positive. Negative values, like #FILLED, mean that a filled circle is to be drawn
|
||||||
|
int lt; //!< The Type of the circle boundary. See #LineTypes
|
||||||
|
int shift; //!< The Number of fractional bits in the coordinates of the center and in the radius value
|
||||||
|
/*@{*/ |
||||||
|
}; |
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This structure represents a line to draw. |
||||||
|
* |
||||||
|
* Parameters match cv::line(). |
||||||
|
*/ |
||||||
|
struct Line |
||||||
|
{ |
||||||
|
/**
|
||||||
|
* @brief Line constructor |
||||||
|
* |
||||||
|
* @param pt1_ The first point of the line segment |
||||||
|
* @param pt2_ The second point of the line segment |
||||||
|
* @param color_ The line color |
||||||
|
* @param thick_ The thickness of line |
||||||
|
* @param lt_ The Type of the line. See #LineTypes |
||||||
|
* @param shift_ The number of fractional bits in the point coordinates |
||||||
|
*/ |
||||||
|
Line(const cv::Point& pt1_, |
||||||
|
const cv::Point& pt2_, |
||||||
|
const cv::Scalar& color_, |
||||||
|
int thick_ = 1, |
||||||
|
int lt_ = 8, |
||||||
|
int shift_ = 0) : |
||||||
|
pt1(pt1_), pt2(pt2_), color(color_), thick(thick_), lt(lt_), shift(shift_) |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
Line() = default; |
||||||
|
|
||||||
|
/*@{*/ |
||||||
|
cv::Point pt1; //!< The first point of the line segment
|
||||||
|
cv::Point pt2; //!< The second point of the line segment
|
||||||
|
cv::Scalar color; //!< The line color
|
||||||
|
int thick; //!< The thickness of line
|
||||||
|
int lt; //!< The Type of the line. See #LineTypes
|
||||||
|
int shift; //!< The number of fractional bits in the point coordinates
|
||||||
|
/*@{*/ |
||||||
|
}; |
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This structure represents a mosaicing operation. |
||||||
|
* |
||||||
|
* Mosaicing is a very basic method to obfuscate regions in the image. |
||||||
|
*/ |
||||||
|
struct Mosaic |
||||||
|
{ |
||||||
|
/**
|
||||||
|
* @brief Mosaic constructor |
||||||
|
* |
||||||
|
* @param mos_ Coordinates of the mosaic |
||||||
|
* @param cellSz_ Cell size (same for X, Y) |
||||||
|
* @param decim_ Decimation (0 stands for no decimation) |
||||||
|
*/ |
||||||
|
Mosaic(const cv::Rect& mos_, |
||||||
|
int cellSz_, |
||||||
|
int decim_) : |
||||||
|
mos(mos_), cellSz(cellSz_), decim(decim_) |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
Mosaic() = default; |
||||||
|
|
||||||
|
/*@{*/ |
||||||
|
cv::Rect mos; //!< Coordinates of the mosaic
|
||||||
|
int cellSz; //!< Cell size (same for X, Y)
|
||||||
|
int decim; //!< Decimation (0 stands for no decimation)
|
||||||
|
/*@{*/ |
||||||
|
}; |
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This structure represents an image to draw. |
||||||
|
* |
||||||
|
* Image is blended on a frame using the specified mask. |
||||||
|
*/ |
||||||
|
struct Image |
||||||
|
{ |
||||||
|
/**
|
||||||
|
* @brief Mosaic constructor |
||||||
|
* |
||||||
|
* @param org_ The bottom-left corner of the image |
||||||
|
* @param img_ Image to draw |
||||||
|
* @param alpha_ Alpha channel for image to draw (same size and number of channels) |
||||||
|
*/ |
||||||
|
Image(const cv::Point& org_, |
||||||
|
const cv::Mat& img_, |
||||||
|
const cv::Mat& alpha_) : |
||||||
|
org(org_), img(img_), alpha(alpha_) |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
Image() = default; |
||||||
|
|
||||||
|
/*@{*/ |
||||||
|
cv::Point org; //!< The bottom-left corner of the image
|
||||||
|
cv::Mat img; //!< Image to draw
|
||||||
|
cv::Mat alpha; //!< Alpha channel for image to draw (same size and number of channels)
|
||||||
|
/*@{*/ |
||||||
|
}; |
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This structure represents a polygon to draw. |
||||||
|
*/ |
||||||
|
struct Poly |
||||||
|
{ |
||||||
|
/**
|
||||||
|
* @brief Mosaic constructor |
||||||
|
* |
||||||
|
* @param points_ Points to connect |
||||||
|
* @param color_ The line color |
||||||
|
* @param thick_ The thickness of line |
||||||
|
* @param lt_ The Type of the line. See #LineTypes |
||||||
|
* @param shift_ The number of fractional bits in the point coordinate |
||||||
|
*/ |
||||||
|
Poly(const std::vector<cv::Point>& points_, |
||||||
|
const cv::Scalar& color_, |
||||||
|
int thick_ = 1, |
||||||
|
int lt_ = 8, |
||||||
|
int shift_ = 0) : |
||||||
|
points(points_), color(color_), thick(thick_), lt(lt_), shift(shift_) |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
Poly() = default; |
||||||
|
|
||||||
|
/*@{*/ |
||||||
|
std::vector<cv::Point> points; //!< Points to connect
|
||||||
|
cv::Scalar color; //!< The line color
|
||||||
|
int thick; //!< The thickness of line
|
||||||
|
int lt; //!< The Type of the line. See #LineTypes
|
||||||
|
int shift; //!< The number of fractional bits in the point coordinate
|
||||||
|
/*@{*/ |
||||||
|
}; |
||||||
|
|
||||||
|
using Prim = util::variant |
||||||
|
< Text |
||||||
|
, FText |
||||||
|
, Rect |
||||||
|
, Circle |
||||||
|
, Line |
||||||
|
, Mosaic |
||||||
|
, Image |
||||||
|
, Poly |
||||||
|
>; |
||||||
|
|
||||||
|
using Prims = std::vector<Prim>; |
||||||
|
//! @} gapi_draw_prims
|
||||||
|
|
||||||
|
} // namespace draw
|
||||||
|
} // namespace wip
|
||||||
|
} // namespace gapi
|
||||||
|
} // namespace cv
|
||||||
|
|
||||||
|
#endif // OPENCV_GAPI_RENDER_TYPES_HPP
|
Loading…
Reference in new issue