• //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的更多相关文章

  1. Win8Metro(C#)数字图像处理--2.5图像亮度调整

    原文:Win8Metro(C#)数字图像处理--2.5图像亮度调整  2.5图像亮度调整函数 [函数名称] 图像亮度调整函数BrightnessAdjustProcess(WriteableBit ...

  2. GPUImage中亮度调整的实现——GPUImageBrightnessFilter

    亮度brightness其实是对RGB的调整,RGB值越大,效果越亮:反之则越暗. GPUImage中提供了对图像亮度调整的Filter,其核心代码如下(fragment): varying high ...

  3. OpenCV中图像算术操作与逻辑操作

    OpenCV中图像算术操作与逻辑操作 在图像处理中有两类最重要的基础操作各自是图像点操作与块操作.简单点说图像点操作就是图像每一个像素点的相关逻辑与几何运算.块操作最常见就是基于卷积算子的各种操作.实 ...

  4. TensorFlow学习笔记(五)图像数据处理

    目录: 一.TFRecord输入数据格式 1.1 TFrecord格式介绍 1.2 TFRecord样例程序 二.图像数据处理 2.1TensorFlow图像处理函数 2.2图像预处理完整样例 三.多 ...

  5. 图像切割—基于图的图像切割(Graph-Based Image Segmentation)

     图像切割-基于图的图像切割(Graph-Based Image Segmentation) Reference: Efficient Graph-Based Image Segmentation ...

  6. AngularJS in Action读书笔记1——扫平一揽子专业术语

    前(fei)言(hua): 数月前,以一个盲人摸象的姿态看了一些关于AngularJS的视频书籍,留下了我个人的一点或许是指点迷津或许是误人子弟的读后感.自以为已经达到熟悉ng的程度,但是因为刚入公司 ...

  7. RFID 仿真/模拟/监控/拦截/检测/嗅探器

    Sound card based RFID sniffer/emulator (Too tired after recon.cx to do draw the schematics better th ...

  8. 用C#编写游戏脚本

    大学宿舍玩游戏的时候,为了简化重复的键鼠动作,有学习过按键精灵和TC脚本开发工具,并做了一些小脚本,基本达到了当时的需求.不知不觉,已经毕业了3年了,无聊之余又玩起了游戏,对于一些无趣的重复行为,于是 ...

  9. PA教材提纲 TAW12-2

    Unit1 Adjustment of SAP Standard Software(SAP标准软件修改) 1.1 Adjusting SAP Standard Software(如何修改SAP标准软件 ...

随机推荐

  1. PAT甲级——A1131 Subway Map【30】

    In the big cities, the subway systems always look so complex to the visitors. To give you some sense ...

  2. git push到多个不同的远程仓库

    1.若现在本地有一个已经和github远程仓库关联好的本地仓库,平时都会将本地仓库push到github上. 2.有一天突然发现"码云"这个远程仓库网站,咦!这个还可以创建priv ...

  3. 运算符的基本概念以及常用Scanner、随机数Random、选择结构的初步了解

    运算符 分类 算术运算符 位运算符 关系运算符|比较运算符 逻辑运算符 条件运算符 赋值运算符 其中优先级顺序从上到下,可以记忆口诀:单目乘除位关系,逻辑三目后赋值 操作数: 运算符左右两边的数 表达 ...

  4. Redis Cluste部署

    一.原生搭建篇Cluster了解cluster的架构 Redis-cluster是使用的是一致性哈希算法来切分数据存储,总计16383个槽,分成16383/N(redis节点)个分区,存取时将key转 ...

  5. Luogu P1131 [ZJOI2007]时态同步(dfs)

    P1131 [ZJOI2007]时态同步 题意 题目描述 小\(Q\)在电子工艺实习课上学习焊接电路板.一块电路板由若干个元件组成,我们不妨称之为节点,并将其用数字\(1,2,3,\dots\).进行 ...

  6. Python全栈开发:Ajax全套

    概述 对于WEB应用程序:用户浏览器发送请求,服务器接收并处理请求,然后返回结果,往往返回就是字符串(HTML),浏览器将字符串(HTML)渲染并显示浏览器上. 1.传统的Web应用 一个简单操作需要 ...

  7. Java监控工具介绍,VisualVm ,JProfiler,Perfino,Yourkit,Perf4J,JProbe,Java微基准测试【转】

    Java监控工具介绍,VisualVm ,JProfiler,Perfino,Yourkit,Perf4J,JProbe,Java微基准测试[转] 本文是本人前一段时间做一个简单Java监控工具调研总 ...

  8. angular项目中遇到的问题

    一.angular项目中如何实现路由缓存 需要实现的效果,对请求的数据进行缓存,比如进入文章详情页之后点击返回,不会再调用后台数据接口:而是加载缓存中的数据,如何数据变动的情况下,可使用下拉刷新刷新页 ...

  9. centos 6 编译glibc-2.14

    1.查看系统版本, 升级系统基本lib库 [root@test ~]# cat /etc/redhat-release CentOS release 6.5 (Final) 2.查看系统glibc支持 ...

  10. centos 6.5 yum安装rabbitMQ

    1.查看系统版本, 升级系统基本lib库 [root@test ~]# cat /etc/redhat-release CentOS release 6.5 (Final) [root@test ~] ...