首页 > 代码库 > 浅谈三层架构(1)
浅谈三层架构(1)
这周单位要做一个人脸美化的项目,查资料遇到这位大牛的博客,地址如下:点击打开链接
我的代码也是在他的基础上进行修改的,但是他对图像的RGB三个通道平等调节,为了适应我的需求,我改成了针对三个通道分别调节。废话不多说,开始上源码
void ImageAdjust(Mat& src, Mat& dst, vector<double> low_in, vector<double> high_in, vector<double> low_out, vector<double> high_out, vector<double> gamma) { vector<double> low; vector<double> high; vector<double> bottom; vector<double> top; vector<double> err_in; vector<double> err_out; int N = low_in.size(); for (int i=0; i<N; i++) { low.push_back(low_in[i]*255); high.push_back(high_in[i]*255); bottom.push_back(low_out[i]*255); top.push_back(high_out[i]*255); err_in.push_back(high[i] - low[i]); err_out.push_back(top[i] - bottom[i]); } int x,y; vector<double> val; // intensity transform for( y = 0; y < src.rows; y++) { for (x = 0; x < src.cols; x++) { for (int i=0; i<N; i++) { double val = (src.at<Vec3b>(y, x)[i]); val = pow((val-low[i])/err_in[i], gamma[i])*err_out[i]+bottom[i]; // ☆ if(val > 255) val = 255; if(val < 0) val = 0; dst.at<Vec3b>(y, x)[i] = val; } } } }
测试主函数:
int _tmain(int argc, _TCHAR* argv[]) { Mat src = http://www.mamicode.com/imread("test.png",1);>
注意:☆处是将图像I中的亮度值映射为一个新值,即将low_in至high_in之间的值映射到low_out至high_out之间的值。low_in 以下与 high_in 以上的值被截断了,其中 gamma指定描述值I和值J关系曲线的形状。如果gamma小于1,此映射偏重更高数值(明亮)输出,如果gamma大于1,此映射偏重更低数值(灰暗)输出,如果省略此参数,默认为(线性映射)。 具体用法可以参考matlab中的imadjust。
经过修改输入的参数,程序可以跑出来以下的效果:
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。