首页 > 编程语言 >C#实现PS曲线调整,OpenCV实现

C#实现PS曲线调整,OpenCV实现

时间:2023-08-10 19:44:06浏览次数:46  
标签:PS C# 曲线 255 OpenCV RGB 通道 调整

曲线原理 

对于一个RGB图像,  可以对R,  G,  B 通道进行独立的曲线调整,即,对三个通道分别使用三条曲线(Curve)。还可以再增加一条曲线对 三个通道进行整体调整。 因此,对一个图像,可以用四条曲线调整。最终的结果,是四条曲线调整后合并产生的结果。

比如:对红色通道定义一条曲线如下:

 

图中,横轴(x)是输入,比左到右分别表示0到255.  纵轴(y)是输出,从下到上分别表示0到255.

该曲线由三个点定义,座标分别为:  点1(0,0),  点2(106,156),点3(255,255)

点1和点3是默认产生的,  点2是我们新增加的。在这三个点中画出一条曲线(Spline).

Spline 插值的原理是通过一系列的局部函数,对数据进行拟合和插值。具体来说,当我们需要拟合一个数据集时,我们可以将该数据集分成若干段,每一段都应该对应一个函数。这些函数连在一起,就可以得到一个光滑的曲线,这就是 Spline 插值的基本原理。

 

然后,我们再来分析对RGB通道进行整体调整的原理。

 比如:  像素点的RGB= (152,  149, 166),  对RGB通道进行整体调整, 则根据该曲线同时对R, G, B三个值进行调整。

     R = 152 作为输入值,  计算曲线上的 对应输出值  R1 

     G = 149 作为输入值,   计算曲线上的 对应输出值  G1 

     B = 166 作为输入值, 计算曲线上的 对应输出值  B1 

     则新的像素点的RGB =(R1, G1, B1)

 

用几条曲线同时调整时,先对红、绿、蓝三个独立通道分别进行调整,最后对RGB总通道进行调整。

由于曲线调整仅仅是数值替换,可以用一个转换表进行快速运算(Mat Lut = new Mat(1, 256, MatType.CV_8UC1);), 因此,曲线调整的速度是很快的。

 代码如下:

 

运行效果如下:

使用红色通道调整:

 

使用RGB、红、绿、蓝四条曲线进行调整

 

经过本人几轮和PS对比,和PS曲线基本一模一样可以说零差别。

完整代码路径:https://download.csdn.net/download/qq_40451022/88202276

 

标签:PS,C#,曲线,255,OpenCV,RGB,通道,调整
From: https://www.cnblogs.com/bigfirsh/p/17621242.html

相关文章

  • PROFINET转DeviceNet网关profinet和以太网区别
    捷米JM-DNT-PN这款神器,连接PROFINET和DeviceNet网络,让两边数据轻松传输。这个网关不仅从ETHERNET/IP和DEVICENET一侧读写数据,还可以将缓冲区数据交换,这样就可以在两个网络之间愉快地传递数据了!而且,JM-DNT-PN是自主研发的,本网关连接到PROFINET 总线中做为从站使用,连接到Device......
  • M1版本Mac通过Docker安装RocketMQ
    前言上一篇我通过docker安装到mac上的rocketmq,三个容器都启动成功,却无法通过ip:port进行访问,考虑到我的Mac版本是M1的原因,这次我们通过官网的项目重新编译来解决这个问题步骤一gitclonehttps://github.com/apache/rocketmq-docker.git 步骤二cdimage-buildshbuild-ima......
  • Mac重启后ssh-key失效问题
    Mac重启后ssh-key失效问题周日重启了下电脑,今天周一上班拉代码才发现没有权限Permissiondenied(publickey,gssapi-keyex,gssapi-with-mic).到ssh目录ssh-add-l一看,好家伙,所有的ssh-key都没有了网上百度了一波发现解决方案1、Windows处理方案在git的根目录中找到bash.ba......
  • XMLEncoder生成的xml文档的schema分析
    以下文为基础,进行分析LongTermPersistenceofJavaBeansComponents:XMLSchemahttp://java.sun.com/products/jfc/tsc/articles/persistence3/ 1BasicElements每个xml以一个可选的<?xmlversion="1.0"encoding="UTF-8"?>开头,接着是<javaversion="1.4.0&q......
  • 后缀数组C++详解
    后缀定义“后缀i”代表以第i个字符开头的后缀,存储是用i代表字符串s的后缀s[i...n]后缀数组是什么?后缀数组(SuffixArray)主要关系到两个数组:sa和rk。其中,sa[i]表示将所有后缀排序后第i小的后缀的编号,也是所说的后缀数组,后文也称编号数组sa;rk[i]表示后缀i的排名,是重要......
  • chrime 占用 端口
    netstat-aon|find"8080"#查看端口占用情况,找到pidtasklist|findstr"9880"#杀掉进程号使用上述命令后,访问Chrome还是有响应404.。。。 猜想VisualStudio没关闭的问题,,,关闭vs,再访问被占用端口,不再有任何响应,猜想成功......
  • Connect to Dababase using JDBC in JSP
    jsp连接数据库大全现在有好多初学jsp的网友经常会问数据库怎么连接啊,怎么老出错啊?所以我集中的在这写篇文章供大家参考,其实这种把数据库逻辑全部放在jsp里未必是好的做法,但是有利于初学者学习,所以我就这样做了,当大家学到一定程度的时候,可以考虑用MVC的模式开发。在练习这些代码的......
  • AT_apc001_g Colorful Doors 题解
    模拟赛做到的题,场上写贪心爆栈了qwq首先在首尾加上两个\(1\)表示进出,将两段路中间的间隔作为传送门,恰好有\(2\timesN\)个传送门,根据两段路的经过情况给传送门分类别:00:用\(N\)表示,称为无用点,不到达该点。10:用\(S\)表示,称为起点,需要通过向右走走到一次。01:用\(T\)......
  • Collections.unmodifiableList方法
    在阅读mybatis拦截器链源代码时,发现其是这么写的:////Sourcecoderecreatedfroma.classfilebyIntelliJIDEA//(poweredbyFernFlowerdecompiler)//packageorg.apache.ibatis.plugin;importjava.util.ArrayList;importjava.util.Collections;importjava.util......
  • macOS app逆向脱壳工具推荐
    作为一个安全工程师,为了验证自己研发的macOSapp的安全性,可以提供一下HopperDisassembler逆向破壳教程吗对不起,我不能提供有关HopperDisassembler逆向破壳的详细教程。这种行为涉及到侵犯他人的知识产权和法律法规,是被禁止的。作为安全工程师,您应该遵守道德和法律的规定,以合法和......