github.com/kaydxh/golang@v0.0.131/pkg/gocv/cgo/third_path/opencv4/include/opencv2/gapi/render/render.hpp (about) 1 // This file is part of OpenCV project. 2 // It is subject to the license terms in the LICENSE file found in the top-level directory 3 // of this distribution and at http://opencv.org/license.html. 4 // 5 // Copyright (C) 2018-2020 Intel Corporation 6 7 8 #ifndef OPENCV_GAPI_RENDER_HPP 9 #define OPENCV_GAPI_RENDER_HPP 10 11 #include <opencv2/gapi/render/render_types.hpp> 12 13 #include <opencv2/gapi.hpp> 14 15 /** \defgroup gapi_draw G-API Drawing and composition functionality 16 * @{ 17 * 18 * @brief Functions for in-graph drawing. 19 * 20 * @note This is a Work in Progress functionality and APIs may 21 * change in the future releases. 22 * 23 * G-API can do some in-graph drawing with a generic operations and a 24 * set of [rendering primitives](@ref gapi_draw_prims). 25 * In contrast with traditional OpenCV, in G-API user need to form a 26 * *rendering list* of primitives to draw. This list can be built 27 * manually or generated within a graph. This list is passed to 28 * [special operations or functions](@ref gapi_draw_api) where all 29 * primitives are interpreted and applied to the image. 30 * 31 * For example, in a complex pipeline a list of detected objects 32 * can be translated in-graph to a list of cv::gapi::wip::draw::Rect 33 * primitives to highlight those with bounding boxes, or a list of 34 * detected faces can be translated in-graph to a list of 35 * cv::gapi::wip::draw::Mosaic primitives to hide sensitive content 36 * or protect privacy. 37 * 38 * Like any other operations, rendering in G-API can be reimplemented 39 * by different backends. Currently only an OpenCV-based backend is 40 * available. 41 * 42 * In addition to the graph-level operations, there are also regular 43 * (immediate) OpenCV-like functions are available -- see 44 * cv::gapi::wip::draw::render(). These functions are just wrappers 45 * over regular G-API and build the rendering graphs on the fly, so 46 * take compilation arguments as parameters. 47 * 48 * Currently this API is more machine-oriented than human-oriented. 49 * The main purpose is to translate a set of domain-specific objects 50 * to a list of primitives to draw. For example, in order to generate 51 * a picture like this: 52 * 53 *  54 * 55 * Rendering list needs to be generated as follows: 56 * 57 * @include modules/gapi/samples/draw_example.cpp 58 * 59 * @defgroup gapi_draw_prims Drawing primitives 60 * @defgroup gapi_draw_api Drawing operations and functions 61 * @} 62 */ 63 64 namespace cv 65 { 66 namespace gapi 67 { 68 namespace wip 69 { 70 namespace draw 71 { 72 73 using GMat2 = std::tuple<cv::GMat,cv::GMat>; 74 using GMatDesc2 = std::tuple<cv::GMatDesc,cv::GMatDesc>; 75 76 //! @addtogroup gapi_draw_api 77 //! @{ 78 /** @brief The function renders on the input image passed drawing primitivies 79 80 @param bgr input image: 8-bit unsigned 3-channel image @ref CV_8UC3. 81 @param prims vector of drawing primitivies 82 @param args graph compile time parameters 83 */ 84 void GAPI_EXPORTS_W render(cv::Mat& bgr, 85 const Prims& prims, 86 cv::GCompileArgs&& args = {}); 87 88 /** @brief The function renders on two NV12 planes passed drawing primitivies 89 90 @param y_plane input image: 8-bit unsigned 1-channel image @ref CV_8UC1. 91 @param uv_plane input image: 8-bit unsigned 2-channel image @ref CV_8UC2. 92 @param prims vector of drawing primitivies 93 @param args graph compile time parameters 94 */ 95 void GAPI_EXPORTS_W render(cv::Mat& y_plane, 96 cv::Mat& uv_plane, 97 const Prims& prims, 98 cv::GCompileArgs&& args = {}); 99 100 /** @brief The function renders on the input media frame passed drawing primitivies 101 102 @param frame input Media Frame : @ref cv::MediaFrame. 103 @param prims vector of drawing primitivies 104 @param args graph compile time parameters 105 */ 106 void GAPI_EXPORTS render(cv::MediaFrame& frame, 107 const Prims& prims, 108 cv::GCompileArgs&& args = {}); 109 110 111 G_TYPED_KERNEL_M(GRenderNV12, <GMat2(cv::GMat,cv::GMat,cv::GArray<wip::draw::Prim>)>, "org.opencv.render.nv12") 112 { 113 static GMatDesc2 outMeta(GMatDesc y_plane, GMatDesc uv_plane, GArrayDesc) 114 { 115 return std::make_tuple(y_plane, uv_plane); 116 } 117 }; 118 119 G_TYPED_KERNEL(GRenderBGR, <cv::GMat(cv::GMat,cv::GArray<wip::draw::Prim>)>, "org.opencv.render.bgr") 120 { 121 static GMatDesc outMeta(GMatDesc bgr, GArrayDesc) 122 { 123 return bgr; 124 } 125 }; 126 127 G_TYPED_KERNEL(GRenderFrame, <cv::GFrame(cv::GFrame, cv::GArray<wip::draw::Prim>)>, "org.opencv.render.frame") 128 { 129 static GFrameDesc outMeta(GFrameDesc desc, GArrayDesc) 130 { 131 return desc; 132 } 133 }; 134 135 /** @brief Renders on 3 channels input 136 137 Output image must be 8-bit unsigned planar 3-channel image 138 139 @param src input image: 8-bit unsigned 3-channel image @ref CV_8UC3 140 @param prims draw primitives 141 */ 142 GAPI_EXPORTS_W GMat render3ch(const GMat& src, const GArray<Prim>& prims); 143 144 /** @brief Renders on two planes 145 146 Output y image must be 8-bit unsigned planar 1-channel image @ref CV_8UC1 147 uv image must be 8-bit unsigned planar 2-channel image @ref CV_8UC2 148 149 @param y input image: 8-bit unsigned 1-channel image @ref CV_8UC1 150 @param uv input image: 8-bit unsigned 2-channel image @ref CV_8UC2 151 @param prims draw primitives 152 */ 153 GAPI_EXPORTS_W GMat2 renderNV12(const GMat& y, 154 const GMat& uv, 155 const GArray<Prim>& prims); 156 157 /** @brief Renders Media Frame 158 159 Output media frame frame cv::MediaFrame 160 161 @param m_frame input image: cv::MediaFrame @ref cv::MediaFrame 162 @param prims draw primitives 163 */ 164 GAPI_EXPORTS GFrame renderFrame(const GFrame& m_frame, 165 const GArray<Prim>& prims); 166 167 //! @} gapi_draw_api 168 169 } // namespace draw 170 } // namespace wip 171 172 /** 173 * @brief This namespace contains G-API CPU rendering backend functions, 174 * structures, and symbols. See @ref gapi_draw for details. 175 */ 176 namespace render 177 { 178 namespace ocv 179 { 180 GAPI_EXPORTS_W cv::gapi::GKernelPackage kernels(); 181 182 } // namespace ocv 183 } // namespace render 184 } // namespace gapi 185 186 namespace detail 187 { 188 template<> struct CompileArgTag<cv::gapi::wip::draw::freetype_font> 189 { 190 static const char* tag() { return "gapi.freetype_font"; } 191 }; 192 } // namespace detail 193 194 } // namespace cv 195 196 #endif // OPENCV_GAPI_RENDER_HPP