1.

void RandomBrightness(const cv::Mat& in_img, cv::Mat* out_img,
const float brightness_prob, const float brightness_delta) {
float prob;
caffe_rng_uniform(, .f, .f, &prob);
if (prob < brightness_prob) {
CHECK_GE(brightness_delta, ) << "brightness_delta must be non-negative.";
float delta;
caffe_rng_uniform(, -brightness_delta, brightness_delta, &delta);
AdjustBrightness(in_img, delta, out_img);
} else {
*out_img = in_img;
}
}
void AdjustBrightness(const cv::Mat& in_img, const float delta,
cv::Mat* out_img) {
if (fabs(delta) > ) {
in_img.convertTo(*out_img, -, , delta);
} else {
*out_img = in_img;
}
}

opencv的convertTo的讲解:https://blog.csdn.net/qq_22764813/article/details/52135686

             https://blog.csdn.net/qq_15505637/article/details/53887274

type是是否改变深度的,即uint8、uint16、float等,-1就是保持不变

scale是比例因子,即每个像素值需要乘的值

shift是在每个像素上加上的值

opencv调整亮度:https://blog.csdn.net/hb707934728/article/details/74914104

g(i,j)=a*f(i,j)+b  a是调整对比度,b是调整亮度,实际上就是scale调整对比度,shift调整亮度,这里就是对比度不变,调整亮度

caffe_rng_uniform:生成n个在a、b之间均匀分布的值

uniform distribution:均匀分布

http://www.voidcn.com/article/p-hqhoassv-qh.html

void caffe_rng_uniform(const int n, const Dtype a, const Dtype b, Dtype* r) {
CHECK_GE(n, );
CHECK(r);
CHECK_LE(a, b);
boost::uniform_real<Dtype> random_distribution(a, caffe_nextafter<Dtype>(b));
boost::variate_generator<caffe::rng_t*, boost::uniform_real<Dtype> >
variate_generator(caffe_rng(), random_distribution);
for (int i = ; i < n; ++i) {
r[i] = variate_generator();
}
}

2.

之前的RandomBrightness是增加亮度,RandomContrast则是增加对比度,其实两个函数的实现差不多,

之前的RandomBrightness博客说过,g(i,j)=a*f(i,j)+b是对比度和亮度的数学表达,调整a是调整的对比度,调整b是调整的亮度,RandomBrightness、RandomContrast是分别实现的调整a和b

RandomBrightness和RandomContrast的prob都是表示执行这个操作的可能性,即是否调整对比度和亮度

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(, .f, .f, &prob);
if (prob < contrast_prob) {
CHECK_GE(upper, lower) << "contrast upper must be >= lower.";
CHECK_GE(lower, ) << "contrast lower must be non-negative.";
float delta;
caffe_rng_uniform(, lower, upper, &delta);
AdjustContrast(in_img, delta, out_img);
} else {
*out_img = in_img;
}
}

调整的值是delta,实际上是通过在lower和upper选取均匀分布的一个值作为调整对比度的值

void AdjustContrast(const cv::Mat& in_img, const float delta,
cv::Mat* out_img) {
if (fabs(delta - .f) > 1e-) {
in_img.convertTo(*out_img, -, delta, );
} else {
*out_img = in_img;
}
}

最新文章

  1. SQL语句来查询今天、昨天、7天内、30天的数据,经典!
  2. css新增样式
  3. shell中判读文件存在的方法
  4. [BZOJ2257][Jsoi2009]瓶子和燃料(数学)
  5. checkbox 设置不可更改
  6. input file美化
  7. iOS动画详解(二)
  8. onCreateOptionsMenu与onCreateContextMenu差别
  9. 最受欢迎linux命令
  10. Struts2第一个工程helloStruts极其基本配置
  11. Spyder提示ValueError: API &#39;QString&#39; has already been set to version 1
  12. 【鸡年大吉】,不知道写点啥,放个demo(小球碰撞)吧,有兴趣的看看
  13. [Algorithm] Fibonacci Sequence - Anatomy of recursion and space complexity analysis
  14. CentOS安装Subversion 1.9.*版本客户端
  15. recovery uncrypt功能解析(bootable/recovery/uncrypt/uncrypt.cpp)
  16. Python基础教程之udp和tcp协议介绍
  17. _rate_charaters
  18. bootstrap中的模态框(modal,弹出层)
  19. (转)3款优秀的移动webAPP网站在线测试工具
  20. Python自动化开发 - AJAX

热门文章

  1. Git钩子设置自动构建Jenkins
  2. my.副本
  3. Django media的设置
  4. Fortran和C的编译器PGI部署
  5. ubuntu安装软件依赖解决
  6. (转)Python字典实现三级菜单
  7. 【LDAP】LDAP 中 CN, OU, DC 的含义
  8. pat1086. Tree Traversals Again (25)
  9. springmvc+mybatis+sql server实现简单登录功能
  10. GitKraken使用教程-基础部分(7)