[code]图像亮度调整enhancement
//draft 2013.9 //F=X2/u;
////远处细节被淹没。 亮的地方增亮明显,暗的地方更暗。 不可取。
// CvScalar rgb;
// rgb=cvAvg(src);
//for(y=0;y<src->height;y++)
// {
// unsigned char *srcrow= (unsignedchar*)(src->imageData+y*src->widthStep);
// for(x=0;x<src->width;x++)
// {
//srcrow[3*x]=srcrow[3*x]*srcrow[3*x]/rgb.val[0]>255 ?255:srcrow[3*x]*srcrow[3*x]/rgb.val[0];
//srcrow[3*x+1]=srcrow[3*x+1]*srcrow[3*x+1]/rgb.val[1]>255? 255:srcrow[3*x+1]*srcrow[3*x+1]/rgb.val[1] ;
//srcrow[3*x+2]=srcrow[3*x+2]*srcrow[3*x+2]/rgb.val[2]>255? 255:srcrow[3*x+2]*srcrow[3*x+2]/rgb.val[2];
// }
// } #ifdef Enhencement_Linear // 255| ________
// | /
// | /
// | /
// | /
// | /
// |/_____.______.
// 0 A 255
int b=20;//上移b
for(y=0;y<src->height;y++)
{
unsigned char *srcrow= (unsignedchar*)(src->imageData+y*src->widthStep);
for (x=0;x<src->width;x++)
{ if (srcrow[3*x]>a)srcrow[3*x]=255;
else
srcrow[3*x]=(255-b)*srcrow[3*x]/(a)+b>255 ?255:(255-b)*srcrow[3*x]/(a)+b; if (srcrow[3*x+1]>a) srcrow[3*x+1]=255;
else
srcrow[3*x+1]=(255-b)*srcrow[3*x+1]/(a)+b>255 ?255:(255-b)*srcrow[3*x+1]/(a)+b; if (srcrow[3*x+2]>a)srcrow[3*x+2]=255;
else
srcrow[3*x+2]=(255-b)*srcrow[3*x+2]/(a)+b>255 ?255:(255-b)*srcrow[3*x+2]/(a)+b;
}
}
#endif ////改进log函数
//#ifdef Enhencement_LOG
// //CvScalar rgb;
// //rgb=cvAvg(src);
// double aa,bb,cc,aaaaa;aaaaa=255.0;
// k=(a-50)/255.0;
//for(y=0;y<src->height;y++)
// {
// unsigned char *srcrow= (unsignedchar*)(src->imageData+y*src->widthStep);
// for(x=0;x<src->width;x++)
// {
//aa=srcrow[3*x]+0.0;bb=(double)srcrow[3*x+1]+0.0;cc=(double)srcrow[3*x+2]+0.0;
// aa=log(aaaaa)-log(aa);
// bb=log(aaaaa)-log(bb);
// cc=log(aaaaa)-log(cc);
// //if (srcrow[3*x]>a);
// //else
//srcrow[3*x]=srcrow[3*x]+k*srcrow[3*x]*aa<srcrow[3*x]? srcrow[3*x]:srcrow[3*x]+k*srcrow[3*x]*aa;
// //srcrow[3*x]=srcrow[3*x]+k*srcrow[3*x]*aa;
// //if (srcrow[3*x+1]>a);
// //else
//srcrow[3*x+1]=srcrow[3*x+1]+k*srcrow[3*x+1]*bb<srcrow[3*x+1]? srcrow[3*x+1]:srcrow[3*x+1]+k*srcrow[3*x+1]*bb;
// //srcrow[3*x+1]=srcrow[3*x+1]+k*srcrow[3*x+1]*bb;
// //if (srcrow[3*x+2]>a);
// //else
// srcrow[3*x+2]=srcrow[3*x+2]+k*srcrow[3*x+2]*cc<srcrow[3*x+2] ?srcrow[3*x+2]:srcrow[3*x+2]+k*srcrow[3*x+2]*cc;
// //srcrow[3*x+2]=srcrow[3*x +2]+k*srcrow[3*x+2]*cc;
// }
// }
//#endif //
// //cvCvtColor(src,src,CV_BGR2YCrCb);
////转换颜色空间
#ifdef SHARPEN_Y //锐化
unsigned char x1,x2,x3,x4,x5,x6,x7,x8,x9;
int n1,n2,n3,n4,n5,n6,n7,n8;
IplImage* srctem=cvCreateImage(cvGetSize(src),8,3);
cvCopy(src,srctem);
//cvSmooth(srctem,srctem);
for(int y=1;yheight-1;y++)
{
unsigned char *row1= (unsignedchar*)(srctem->imageData+(y-1)*srctem->widthStep);
unsigned char *row2= (unsignedchar*)(srctem->imageData+y*srctem->widthStep);
unsigned char *row3= (unsignedchar*)(srctem->imageData+(y+1)*srctem->widthStep); unsigned char *row= (unsignedchar*)(src->imageData+y*src->widthStep); for (int x=1;xwidth-1;x++) {
x1=row1[3*(x-1)]; x2=row1[3*x]; x3=row1[3*(x+1)];
x4=row2[3*(x-1)]; x5=row2[3*x]; x6=row2[3*(x+1)];
x7=row3[3*(x-1)]; x8=row3[3*x]; x9=row3[3*(x+1)];
//Laplace
//n1=x5<<3;n2=x1+x2+x3+x4+x6+x7+x8+x9;//n1+=x5; //[8 -1..........-1]
n1=x5<<2;//n1+=x5; //[4 -1 -1-1 -1]
n2=x2+x4+x6+x8;
n1=(n1-n2)/3+x5; //锐¨?化¡¥
if(n1<0) n1=0; else if(n1>255)n1=255;//else n1=255;
row[3*x]=n1;
//row[3*x+1]=128;
//row[3*x+2]=128; }
}
#endif
// //cvCvtColor(src,src,CV_YCrCb2BGR);
[code]图像亮度调整enhancement的更多相关文章
- Win8Metro(C#)数字图像处理--2.5图像亮度调整
原文:Win8Metro(C#)数字图像处理--2.5图像亮度调整 2.5图像亮度调整函数 [函数名称] 图像亮度调整函数BrightnessAdjustProcess(WriteableBit ...
- GPUImage中亮度调整的实现——GPUImageBrightnessFilter
亮度brightness其实是对RGB的调整,RGB值越大,效果越亮:反之则越暗. GPUImage中提供了对图像亮度调整的Filter,其核心代码如下(fragment): varying high ...
- OpenCV中图像算术操作与逻辑操作
OpenCV中图像算术操作与逻辑操作 在图像处理中有两类最重要的基础操作各自是图像点操作与块操作.简单点说图像点操作就是图像每一个像素点的相关逻辑与几何运算.块操作最常见就是基于卷积算子的各种操作.实 ...
- TensorFlow学习笔记(五)图像数据处理
目录: 一.TFRecord输入数据格式 1.1 TFrecord格式介绍 1.2 TFRecord样例程序 二.图像数据处理 2.1TensorFlow图像处理函数 2.2图像预处理完整样例 三.多 ...
- 图像切割—基于图的图像切割(Graph-Based Image Segmentation)
图像切割-基于图的图像切割(Graph-Based Image Segmentation) Reference: Efficient Graph-Based Image Segmentation ...
- AngularJS in Action读书笔记1——扫平一揽子专业术语
前(fei)言(hua): 数月前,以一个盲人摸象的姿态看了一些关于AngularJS的视频书籍,留下了我个人的一点或许是指点迷津或许是误人子弟的读后感.自以为已经达到熟悉ng的程度,但是因为刚入公司 ...
- RFID 仿真/模拟/监控/拦截/检测/嗅探器
Sound card based RFID sniffer/emulator (Too tired after recon.cx to do draw the schematics better th ...
- 用C#编写游戏脚本
大学宿舍玩游戏的时候,为了简化重复的键鼠动作,有学习过按键精灵和TC脚本开发工具,并做了一些小脚本,基本达到了当时的需求.不知不觉,已经毕业了3年了,无聊之余又玩起了游戏,对于一些无趣的重复行为,于是 ...
- PA教材提纲 TAW12-2
Unit1 Adjustment of SAP Standard Software(SAP标准软件修改) 1.1 Adjusting SAP Standard Software(如何修改SAP标准软件 ...
随机推荐
- 关于type return to continue,or q <return> to quit
由于GDB要打印的信息被分页了 所以需要设置不分页显示 set pagination off
- USB电扇无刷电机改装
现在USB电扇已经很常见了,网上随便可以低价买到.里面的电机分为有刷和无刷两种.我拆过的有刷USB电扇都非常劣质,里面的电机貌似是旧DVD机的拆机货:而无刷也有优劣之分,有的硅钢片非常少,铜线也细.这 ...
- vue项目导出EXCEL功能
因为一些原因导出EXCEL功能必须前端来做,所以就研究了一下,在网上也找了一些文章来看,有一些不完整,我做完了就记录下来,供大家参考: 1.首先先安装依赖: npm install file-save ...
- wangEditor 菜单栏随页面滚动位置改变(吸顶)问题解决
参考:https://www.kancloud.cn/wangfupeng/wangeditor2/113980 当页面向下滚动到隐藏了菜单栏时,编辑器默认会fixed菜单栏,即让菜单栏保持『吸顶』状 ...
- JavaScript特效源码(7、页面特效二)
7.将站点加入频道栏 将站点加入频道栏[看详细说明] ====1.加入channel的方法:使用如下连接指向你的频道文件*.cdf. <a href="javascript:windo ...
- jmeter做bbs作业时提示404错误
在用jemter做bbs作业时候,注册成功后会跳转到主页,在写主页的脚本的时候,将fiddler抓到的url复制到路径下方“/bbs/forum.php”,但是第一次复制的时候在/bbs/forum. ...
- Vue创建项目环境
目录 Vue项目环境搭建 Vue项目创建 pycharm配置并启动vue项目 vue项目目录结构分析 vue组件(.vue文件) 全局脚本文件main.js(项目入口) 改写 Vue项目环境搭建 &q ...
- 莫烦pytorch学习笔记(一)——torch or numpy
Q1:什么是神经网络? Q2:torch vs numpy Numpy:NumPy系统是Python的一种开源的数值计算扩展.这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(neste ...
- python 编程 一次错误记录 -1073740791
原因是发生在我错把类当做实例化对象使用了
- 使用jqselectable构建美化的select元素
本文只对此插件的应用做一些探讨,本插件版权属于原作者,插件原始下载地址:http://www.jq22.com/jquery-info288 原插件也有些许不足之处,比如样式定义名称太过普通,容易和页 ...