/* * Copyright (C) 2015 - 2017 Intel Corporation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef _IA_MONTAGE_H_ #define _IA_MONTAGE_H_ /** @file ia_montage.h * This file declares structures and APIs of image montage engine. */ #include "ia_types.h" #ifdef __cplusplus extern "C" { #endif /** @brief Image montage state. This is the handle for IM engine. */ typedef struct { ia_frame *output_image; /**< Allocated and managed internally, result image will be stored here. */ } ia_montage_state; /** @brief Parameters for ia montage engine. * Used by ia_montage_set_parameter() and ia_montage_get_parameter() to indicate runtime engine configuration. */ typedef struct { int32_t search_region_margin_percentage; /**< Indicates how much enlarged area to be considered when it crops the object image patch from sub image. Default is 20. */ } ia_montage_parameters; /** @brief Initialize Image Montage engine * * @param env [IN] Platform environment parameters. * * This function instantiates and initializes the Image Montage Engine. */ LIBEXPORT ia_montage_state * ia_montage_init(const ia_env *env); /** @brief Destroy Image Montage Engine. */ LIBEXPORT void ia_montage_uninit(ia_montage_state *state); /** @brief Initialize existing Image Montage engine. */ LIBEXPORT void ia_montage_reinit(ia_montage_state *state); /** @brief Get version information of the Image Montage Engine. */ LIBEXPORT ia_version ia_montage_get_version(void); /** @brief Set the parameters. * * @param ms [IN] Image Montage engine context. * @param params [IN] the parameter struct. * * Set ia_montage parameters to the engine context. The params is supposed to be filled by ia_montage_get_parameters(). */ LIBEXPORT ia_err ia_montage_set_parameter(ia_montage_state *ms, const ia_montage_parameters *params); /** @brief Get the parameters. * * @param ms [IN] Image Montage engine context. * @param params [IN/OUT] the parameter struct. * * Get ia_montage parameters from the engine context. The params must be allocated before calling this function. The members * would be filled after it returns. */ LIBEXPORT ia_err ia_montage_get_parameter(ia_montage_state *ms, ia_montage_parameters *params); /** @brief Set the main image. * * @param ms [IN] Image Montage engine context. * @param main_frame [IN] Main image. * @param objects [IN] an array of the objects coordinates. * @param num_objects [IN] the number of objects. * * The main image is labelled as the "background" for Image Montage. * Various objects are necessary to consider the overlapping between each object. Objects could be faces for general use-cases. * It is required to call this apposed to ia_montage_set_sub_images(), prior to composing. */ LIBEXPORT ia_err ia_montage_set_main_image(ia_montage_state *ms, const ia_frame *main_frame, ia_rectangle* objects, int32_t num_objects); /** @brief Set the sub image where the object patches come from. * * @param ms [IN] Image Montage engine context. * @param sub_frame [IN] Sub image. * @param objects [IN] the coordinates of objects. * @param num_objects [IN] the number of objects. * * The main image is labelled as the "background" for Image Montage. * Various objects are necessary to consider the overlapping between each object. Objects could be faces for general use-cases. * It is required to call this apposed to ia_montage_set_sub_images(), prior to composing. * It is fine to call this before than ia_montage_set_main_image(). */ LIBEXPORT ia_err ia_montage_set_sub_image(ia_montage_state *ms, const ia_frame *sub_frame, ia_rectangle* objects, int32_t num_objects); /** @brief Compose the image montage, cropping from the sub image, pasting to the main image. * * @param ms [IN] Image Montage engine context. * @param idx_on_main [IN] the index of the object given along with main image. * @param idx_on_sub [IN] the index of the object given along with sub image. * * This is to combine two images(main, sub), cropping an object image patch placed on 'idx_on_sub'th place of sub objects array, * overlaying it onto the place of 'idx_on_image' th of main objects array. * The composed image would be in the engine context. * Every time this function is called, the result image will be newly composed from main/sub images and the previous image will gone. * You should call ia_montage_set_main_image() again with the result image, in order to paste a new object on the result image, * */ LIBEXPORT ia_err ia_montage_compose(ia_montage_state *ms, int32_t idx_on_main, int32_t idx_on_sub); #ifdef __cplusplus } #endif #endif /* _IA_MONTAGE_H_ */