caffe RandomHue和RandomSaturation
2024-09-04 16:43:22
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(, .f, .f, &prob);
if (prob < hue_prob) {
以一定概率进行色调调整
CHECK_GE(hue_delta, ) << "hue_delta must be non-negative.";
float delta;
caffe_rng_uniform(, -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) > ) {
// 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[].convertTo(channels[], -, , 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(, .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;
}
}
RandomSaturation做的是让通道里每个像素值乘以一个数,RandomHue是加一个数,这和RandomBrightness和RandomContrast的区别是一样的
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;
}
}
最新文章
- 利用其它带文件防护功能的软件防止*.asp;*.jpg写入文件。
- 利用Quartz2D推图的另一个方法 (使用CGMutalePathRef进行分层次)
- [LeetCode] Search Insert Position
- NV Maxwell architecture
- DB2数据库中SQL语句中使用or和and的关键字的时候注意事项
- ZOJ3231 Apple Transportation(最小费用流)
- Ajax之旅(一)--什么是Ajax
- 使用Discuz!自带参数防御CC攻击以及原理,修改Discuz X 开启防CC攻击后,不影响搜索引擎收录的方法
- JVM -- CMS
- (转)iOS项目的目录结构和开发流程
- floor()函数 向下取整 ceil()函数向上取整
- bzoj 2286 [Sdoi2011]消耗战 虚树+dp
- iOSImagesExtractor for mac 快速拿到iOS应用中所有的图片资源
- POJ 1755 Triathlon [半平面交 线性规划]
- openFileDialog的Filter属性设置
- c#泛型约束 (where T:class)
- Django的View(视图)
- 解决操作WordPress时提示输入FTP信息
- python创建__init.py__文件导入模块仍然报错ModuleNotFoundError: No module named 'name'
- ORACLE中的字符串替换 replce、regexp_replace 和 translate
热门文章
- scanf()函数的注意事项
- ETL的两种架构(ETL架构和ELT架构)
- 转 PyCharm 进行调试 以及怎么熟悉一个已经成熟的项目的代码和断点 以及 jetBrains pycharm快捷键
- eclipse_project
- POI 按word模版生成合同并生成PDF
- vue router-link 添加在定义事件
- 读<;<;programming ruby>;>; 7.6节 flip-flop 理解
- WebGL 踩坑系列-1
- Http Client 源码分析
- JavaScript 对象继承 OOP (三)