Python图像高光调整

news2024/11/15 8:45:55

看了这个文章,里面有专门的c++的实现,我这边简单的使用python进行了实现,实现了两个版本,一个是python遍历像素,一个是使用numpy加速,代码如下:

import time
import numpy as np
import cv2


def lighting(img, light):
    assert -100 <= light <= 100
    max_v = 4
    bright = (light/100.0)/max_v
    mid = 1.0+max_v*bright
    print('bright: ', bright, 'mid: ', mid)
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY).astype(np.float32)/255.0
    thresh = gray*gray
    t = np.mean(thresh)
    mask = np.where(thresh > t, 255, 0).astype(np.float32)
    brightrate = np.zeros_like(mask).astype(np.float32)
    h, w = img.shape[:2]
    # 遍历每个像素点
    for i in range(h):
        for j in range(w):
            if mask[i, j] == 255.0:
                mask[i, j] = mid
                brightrate[i, j] = bright
            else:
                mask[i, j] = (mid-1.0)/t*thresh[i, j]+1.0
                brightrate[i, j] = (1.0/t*thresh[i, j])*bright
    img = img/255.0
    img = np.power(img, 1.0/mask[:, :, np.newaxis])*(1.0/(1.0-brightrate[:, :, np.newaxis]))
    img = np.clip(img, 0, 1.0)*255.0
    return img.astype(np.uint8)


def lighting_fast(img, light):
    assert -100 <= light <= 100
    max_v = 4
    bright = (light/100.0)/max_v
    mid = 1.0+max_v*bright
    print('bright: ', bright, 'mid: ', mid)
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY).astype(np.float32)/255.0
    thresh = gray*gray
    t = np.mean(thresh)
    # 使用numpy来计算可以加速,速度远快于上面的遍历
    mask = np.where(thresh > t, 255, 0).astype(np.float32)
    brightrate = np.where(mask == 255.0, bright, (1.0/t*thresh)*bright)
    mask = np.where(mask == 255.0, mid, (mid-1.0)/t*thresh+1.0)
    img = img/255.0
    img = np.power(img, 1.0/mask[:, :, np.newaxis])*(1.0/(1.0-brightrate[:, :, np.newaxis]))
    img = np.clip(img, 0, 1.0)*255.0
    return img.astype(np.uint8)


if __name__ == '__main__':
    input_img = cv2.imread('tmp/302.png')
    light = 50
    start_time = time.time()
    res = lighting(input_img, light)
    print('time: {:.3f} s'.format(time.time() - start_time))
    cv2.imwrite('tmp/302_lighting_{}.jpg'.format(light), res)
    start_time = time.time()
    res = lighting_fast(input_img, light)
    print('fast time: {:.3f} s'.format(time.time() - start_time))
    cv2.imwrite('tmp/302_lighting_fast_{}.jpg'.format(light), res)

运行结果如下:

bright:  0.125 mid:  1.5
time: 6.454 s
bright:  0.125 mid:  1.5
fast time: 0.280 s

可以看到numpy加速很多倍,运行图的结果如下

原图:

 python版结果:

+50

-50:

 可以和c++原文对比是一致的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/697093.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软考高级系统架构设计师(六) 企业应用集成电子商务

目录 企业应用集成(重点) 电子商务 企业应用集成(重点) ps: 数据集成&#xff0c;比如 数据中间件 业务流程集成&#xff1a;过程集成&#xff0c;B2B--企业之间 企业门户&#xff1a; ps: 重构需求 电子商务

在教育领域中使用ChatGPT有哪些优点?

人工智能在教育领域的应用正在迅速增加。OpenAI于2022年11月开发的聊天机器人ChatGPT在全球范围内广受欢迎。 由于其受欢迎程度以及生成类似人类问题的回答的能力&#xff0c;ChatGPT正在成为许多学习者和教育工作者值得信赖的伴侣。然而&#xff0c;与任何新兴技术一样&#x…

机器学习——Word2Vec

参考资料&#xff1a; https://zhuanlan.zhihu.com/p/114538417https://www.cnblogs.com/pinard/p/7243513.html 1 背景知识 1.1 统计语言模型 统计语言模型是基于语料库构建的概率模型&#xff0c;用来计算一个词串 W ( w 1 , w 2 , ⋯ , w T ) W(w_1,w_2,\cdots,w_T) W…

计网实验第二章:TCP与UDP实验

TCP 1.服务器绑定端口号启动服务器欢迎socket。 2. 等待客户端发送请求。 3.等到客户端发送请求之后&#xff0c;服务器与客户端重新建立一个socket&#xff0c;但是客户端的目标端口不变。 java代码如下 客户端 客户端代码图解 import java.io.*; import java.net.*; clas…

《JavaScript 权威指南》犀牛书阅读详解

前言&#xff1a; 《JavaScript 权威指南》&#xff08;JavaScript&#xff1a;The Definitive Guide&#xff09;是一本由David Flanagan所著的JavaScript领域的经典书籍&#xff0c;它是学习和开发JavaScript应用不可或缺的参考书之一。该书分为两个部分&#xff0c;第一部分…

C语言程序在内存中是怎样布局的

理论 我们假设在32位Linux下进行编程&#xff0c;首先要明确&#xff0c;我们的虚拟地址空间有4G&#xff0c;4G的地址空间的寻址范围就是 0x0000_0000 ~ 0xFFFF_FFFF&#xff0c;在Linux下&#xff0c;高地址的1G内存是给操作系统使用的&#xff0c;也就是 0xC000_0000 ~ 0xF…

复习javascript第1章

JavaScript 是全球最流行的编程语言。 JavaScript 是属于 Web 的编程语言。 JavaScript 很容易学习。 JavaScript 能够改变 HTML 内容 getElementById() 是多个 JavaScript HTML 方法之一。 本例使用该方法来“查找” id"demo" 的 HTML 元素&#xff0c;并把元素…

深入浅出设计模式 - 迭代器模式

博主介绍&#xff1a; ✌博主从事应用安全和大数据领域&#xff0c;有8年研发经验&#xff0c;5年面试官经验&#xff0c;Java技术专家✌ Java知识图谱点击链接&#xff1a;体系化学习Java&#xff08;Java面试专题&#xff09; &#x1f495;&#x1f495; 感兴趣的同学可以收…

ERR_SSL_VERSION_OR_CIPHER_MISMATCH

Firefox开启TLS 1.1支持 问题&#xff1a; 建立安全连接失败 连接到…时发生错误。对等端使用了不支持的安全协议版本。 错误代码&#xff1a;SSL_ERROR_UNSUPPORTED_VERSION 由于不能验证所收到的数据是否可信&#xff0c;无法显示您想要查看的页面。 建议向此网站的管理…

Ubuntu TensorRT安装

文章目录 1.1环境1.2下载地址1&#xff09;操作步骤2&#xff09;添加环境变量3&#xff09;检查是否安装成功 2.1其它环境 1.1环境 1&#xff09;Ubuntu20.04 2&#xff09;cuda111torch1.8.0py38 1.2下载地址 https://developer.nvidia.com/nvidia-tensorrt-download 1…

【Linux】线程同步(一)

概念 线程同步是指多个线程之间协调和管理彼此的执行顺序&#xff0c;以避免竞态条件和不确定的结果。线程同步的目的是确保共享资源的正确访问和保护临界区的完整性。 作用 避免竞态条件&#xff1a;当多个线程同时访问和修改共享资源时&#xff0c;可能会导致竞态条件的发生…

javaee session的创建

当访问服务器时&#xff0c;服务器就会创建一个session TestSession.java package com.yyy.servlet;import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import java…

String、反射、枚举、lambda表达式以及泛型进阶(数据结构系列16)

目录 前言&#xff1a; 1. String 1.1 字符串常量池 1.1.1 创建对象的思考 1.1.2 字符串常量池&#xff08;StringTable&#xff09; 1.1.3 再谈String对象创建 1.1.4 intern方法 2. 反射 2.1 反射的定义 2.2 反射的用途 2.3 反射的基本信息 2.4 反射相关的类 2.4.…

Android实现发送短信功能

Android发送短信 效果图代码实现先添加权限.java由用户输入手机号 自定义短信内容跳转系统发送短信页面 自定义手机号短信内容全部代码 .xml 效果图 代码实现 先添加权限 <!-- 允许程序发送SMS短信 --><uses-permission android:name"android.permission.SEND_S…

nodejs线上环境远程调试

将nodejs部署到线上环境之后&#xff0c;这个时候想要去调试还是有点困难的&#xff0c;但是好在nodejs提供了一个可以让你进行调试的开关&#xff1a;--inspect 我们可以使用这个开关来启动一个可以调试的服务&#xff0c;使用非常简单&#xff0c;在启动服务的时候加上这个指…

高性能计算怎么入门?

如果入门没有专业方向&#xff0c;自学摸索的话&#xff0c;不容易有自己的核心竞争力。国内目前生态尚不完善&#xff0c;学习资料也比较少~如果想要系统学习的话&#xff0c;一定不要错过国内首家专业做高性能计算的系统学习课程。 ~我们是国内首家做高性能计算人才培养和推…

微型逆变器会不会迎来CC2340时代

光伏领域的朋友对微型逆变器并不陌生。而CC2340&#xff0c;对大家而言则都是陌生的主。它是何方神仙&#xff1f;和微型逆变器能有什么关系&#xff1f;你还说它可能引领微型逆变器的下一个时代&#xff1f;不急&#xff0c;我们一起来看看。 在全球为双碳愿景努力以及俄乌战…

VR虚拟展会——打造商企展厅线上展示新模式

近期的大雨磅礴&#xff0c;不知道大家都感受过吗&#xff1f;就连在武汉展开的国际连锁加盟展产业博览会也都受到了一定的影响&#xff0c;为期三天的展会&#xff0c;接连下了三天的雨&#xff0c;导致很多客户无缘展会。这就是实体展会的限制之一&#xff0c;加上实体展会的…

vscode修改markdown侧边预览pdf字体等设置

文章目录 1.按CtrlShiftP打开命令窗口2.在命令窗口出输入Markdown Preview Enhanced: Customize Css&#xff0c;打开style.less文件 1.按CtrlShiftP打开命令窗口 2.在命令窗口出输入Markdown Preview Enhanced: Customize Css&#xff0c;打开style.less文件 然后在文件内加…

【网站维护】网络杂谈(7)之web网站的维护

涉及知识点 如何进行web网站的维护&#xff0c;如何进行web网站的更新与测试&#xff0c;搭建web网站后期如何管理维护。 原创于&#xff1a;CSDN博主-《拄杖盲学轻声码》&#xff0c;更多内容可去其主页关注下哈&#xff0c;不胜感激 文章目录 涉及知识点前言1&#xff0e;网…