zoukankan      html  css  js  c++  java
  • caffe RandomHue和RandomSaturation

    https://www.cnblogs.com/wangyblzu/p/5710715.html

    HSV和RGB一样是一种图像的颜色模型,h表示色调,s表示饱和度

     1.RandomHue

    void RandomHue(const cv::Mat& in_img, cv::Mat* out_img,
                   const float hue_prob, const float hue_delta) {
      float prob;
      caffe_rng_uniform(1, 0.f, 1.f, &prob);
      if (prob < hue_prob) {
       以一定概率进行色调调整 CHECK_GE(hue_delta,
    0) << "hue_delta must be non-negative."; float delta; caffe_rng_uniform(1, -hue_delta, hue_delta, &delta); AdjustHue(in_img, delta, out_img); } else { *out_img = in_img; } }

    需要先把rgb图转成hsv图,然后对第一个通道也就是h的通道的每个值加上delta,最后再换转成rgb图

    void AdjustHue(const cv::Mat& in_img, const float delta, cv::Mat* out_img) {
      if (fabs(delta) > 0) {
        // Convert to HSV colorspae.
        cv::cvtColor(in_img, *out_img, CV_BGR2HSV);
    
        // Split the image to 3 channels.
        vector<cv::Mat> channels;
        cv::split(*out_img, channels);
    
        // Adjust the hue.
        channels[0].convertTo(channels[0], -1, 1, delta);
        cv::merge(channels, *out_img);
    
        // Back to BGR colorspace.
        cvtColor(*out_img, *out_img, CV_HSV2BGR);
      } else {
        *out_img = in_img;
      }
    }

    2.RandomSaturation

    void RandomContrast(const cv::Mat& in_img, cv::Mat* out_img,
        const float contrast_prob, const float lower, const float upper) {
      float prob;
      caffe_rng_uniform(1, 0.f, 1.f, &prob);
      if (prob < contrast_prob) {
        CHECK_GE(upper, lower) << "contrast upper must be >= lower.";
        CHECK_GE(lower, 0) << "contrast lower must be non-negative.";
        float delta;
        caffe_rng_uniform(1, lower, upper, &delta);
        AdjustContrast(in_img, delta, out_img);
      } else {
        *out_img = in_img;
      }
    }

    RandomSaturation做的是让通道里每个像素值乘以一个数,RandomHue是加一个数,这和 RandomBrightness和RandomContrast的区别是一样的

    void AdjustContrast(const cv::Mat& in_img, const float delta,
                        cv::Mat* out_img) {
      if (fabs(delta - 1.f) > 1e-3) {
        in_img.convertTo(*out_img, -1, delta, 0);
      } else {
        *out_img = in_img;
      }
    }
  • 相关阅读:
    SQLSERVER排查CPU占用高的情况
    bootstrap布局两列或者多列表单
    ASP.NET Redis 开发
    .NET 环境中使用RabbitMQ
    EasyNetQ介绍
    .Net使用RabbitMQ详解
    ASp.net中Froms验证方式
    全国-城市-百度地图中心点坐标
    IIS7.0下 HTTP 错误 404.15
    asp.net报错“尝试读取或写入受保护的内存。这通常指示其他内存已损坏”的解决办法
  • 原文地址:https://www.cnblogs.com/ymjyqsx/p/9167480.html
Copyright © 2011-2022 走看看