• //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. 怎么规划一个零基础学习Unity3D的“方法”或者“流程”?

    具体出处:https://www.zhihu.com/question/35542990 我只是一个计算机相关专业毕业的,已经掌握了基础的C#并开发过.net的.目前突然心血来潮对unity3D有兴趣 ...

  2. Vue的指令和成员

    目录 Vue的指令和成员 指令 表单 斗篷 条件 循环 成员 计算成员 监听成员 Vue的指令和成员 指令 表单 表单指令一般是和属性指令联合使用的,最常见的就是v-model="变量&qu ...

  3. <Django> 第三方扩展

    1.富文本编辑器 tinymce为例 安装 pip install django-tinymce 在settings.py中的配置 配置应用 INSTALLED_APPS = [ 'django.co ...

  4. 2019 Multi-University Training Contest 7 Kejin Player Final Exam

    Kejin Player 期望DP 题意: 初始等级为1,每一级有四个参数 r , s , x , a . 每一级有一个概率p=r/s花费a的代价升级到下一级,失败可能会倒退到x级 设从 l 到 r ...

  5. Nand flash 芯片工作原理

    Nand flash 芯片型号为 Samsung K9F1208U0B,数据存储容量为 64MB,采用块页式存储管理.8 个 I/O 引脚充当数据.地址.命令的复用端口. 芯片内部存储布局及存储操作特 ...

  6. Matlab AlexNet 识别花

    1. 首先,你要又并行计算的工具箱,在插件选项里面找到,安装即可 2. 下载训练的数据集,采用matlab演示的材料即可 https://matlabacademy-content.mathworks ...

  7. Python+Selenium基础入门及实践

    Python+Selenium基础入门及实践 32018.08.29 11:21:52字数 3220阅读 23422 一.Selenium+Python环境搭建及配置 1.1 selenium 介绍 ...

  8. PAT甲级——A1093 Count PAT's【25】

    The string APPAPT contains two PAT's as substrings. The first one is formed by the 2nd, the 4th, and ...

  9. PAT甲级——A1002 A+B for Polynomials

    This time, you are supposed to find A+B where A and B are two polynomials. Input Specification: Each ...

  10. xml中的<if>和截取字符串

    <#if (envPollute=='1')>√</#if><#if (envPollute=='0')>√</#if>${as_title?subst ...