image_process.h 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #ifndef IMAGE_PROCESS_H
  2. #define IMAGE_PROCESS_H
  3. #include "sp_image.h"
  4. #include <glm/glm.hpp>
  5. struct cv_stream_guard {
  6. cv_stream_guard();
  7. ~cv_stream_guard();
  8. cv::cuda::Stream &cv_stream();
  9. };
  10. size_t normal_height_to_nv12(size_t height);
  11. size_t nv12_height_to_normal(size_t height);
  12. cv::Size normal_size_to_nv12(cv::Size size);
  13. cv::Size nv12_size_to_normal(cv::Size size);
  14. sp_image nv12_luma_view(const sp_image& img);
  15. sp_image nv12_chrome_view(const sp_image& img);
  16. sp_image image_debayer(const sp_image &img); // TODO: add an option for bayer type
  17. void image_resize(const sp_image &src, sp_image &dst);
  18. sp_image image_resize(const sp_image &img, cv::Size size);
  19. sp_image image_flip_y(const sp_image &img);
  20. sp_image image_rgb_to_bgr(const sp_image &img);
  21. sp_image image_rgb_to_bgra(const sp_image &img);
  22. sp_image image_rgb_to_gray(const sp_image &img);
  23. sp_image image_rgb_to_nv12(const sp_image &img);
  24. sp_image image_nv12_to_rgb(const sp_image &img);
  25. sp_image image_yuyv_to_rgb(const sp_image &img);
  26. sp_image image_warp_affine(const sp_image &img, const glm::mat3 &matrix);
  27. sp_image image_rotate(const sp_image &img, float angle, std::optional<glm::vec2> center);
  28. sp_image image_translate(const sp_image &img, glm::vec2 offset);
  29. using image_stereo_pair = std::tuple<sp_image, sp_image>;
  30. image_stereo_pair image_stereo_split(const sp_image &img);
  31. image_stereo_pair image_stereo_split_view(const sp_image &img);
  32. sp_image image_stereo_combine(const sp_image &left, const sp_image &right);
  33. void image_save_jpg(const sp_image &img, const std::string &filename); // filename without extension
  34. void image_save_png(const sp_image &img, const std::string &filename);
  35. #include <core_v2/object_manager.h>
  36. class image_output_helper {
  37. public:
  38. struct create_config {
  39. obj_name_type in_name, out_name;
  40. cv::Size size;
  41. bool flip_y = false;
  42. };
  43. explicit image_output_helper(create_config conf);
  44. ~image_output_helper();
  45. private:
  46. struct impl;
  47. std::unique_ptr<impl> pimpl;
  48. };
  49. class stereo_output_helper {
  50. public:
  51. struct create_config {
  52. obj_name_type left_name, right_name;
  53. obj_name_type out_name;
  54. cv::Size size; // if empty(), will be determined from input
  55. bool halve_width = false;
  56. bool flip_y = false;
  57. };
  58. explicit stereo_output_helper(create_config conf);
  59. ~stereo_output_helper();
  60. private:
  61. struct impl;
  62. std::unique_ptr<impl> pimpl;
  63. };
  64. #endif //IMAGE_PROCESS_H