侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

Python实现PS图像调整黑白效果示例

Python  /  管理员 发布于 7年前   147

本文实例讲述了Python实现PS图像调整黑白效果。分享给大家供大家参考,具体如下:

这里用Python 实现 PS 里的图像调整C黑白,PS 里的黑白并不是简单粗暴的将图像转为灰度图,而是做了非常精细的处理,具体的算法原理和效果图可以参考附录说明。

比起之前的程序,对代码进行了优化,完全用矩阵运算代替了 for 循环,运算效率提升了很多。具体的代码如下:

import numpy as npimport matplotlib.pyplot as pltfrom skimage import iofile_name='D:/Image Processing/PS Algorithm/4.jpg';img=io.imread(file_name)img = img * 1.0Color_ratio = np.zeros(6)Color_ratio[0]=0.4;   # RedColor_ratio[1]=0.6;   # YellowColor_ratio[2]=0.4;   # GreenColor_ratio[3]=0.6;   # CyanColor_ratio[4]=0.2;   # BlueColor_ratio[5]=0.8;   # Magentamax_val = img.max(axis = 2)min_val = img.min(axis = 2)sum_val = img.sum(axis = 2)mid_val = sum_val - max_val - min_valmask_r = (img[:, :, 0] - min_val - 0.01) > 0mask_r = 1 - mask_rmask_g = (img[:, :, 1] - min_val - 0.01) > 0mask_g = 1 - mask_gmask_b = (img[:, :, 2] - min_val - 0.01) > 0mask_b = 1 - mask_bratio_max_mid = mask_r * Color_ratio[3] + mask_g * Color_ratio[5] + mask_b * Color_ratio[1]mask_r = (img[:, :, 0] - max_val + 0.01) < 0mask_r = 1 - mask_rmask_g = (img[:, :, 1] - max_val + 0.01) < 0mask_g = 1 - mask_gmask_b = (img[:, :, 2] - max_val + 0.01) < 0mask_b = 1 - mask_bratio_max= mask_r * Color_ratio[4] + mask_g * Color_ratio[0] + mask_b * Color_ratio[2]I_out = max_val * 1.0I_out = (max_val-mid_val)*ratio_max + (mid_val-min_val)*ratio_max_mid + min_valplt.figure()plt.imshow(img/255.0)plt.axis('off')plt.figure(2)plt.imshow(I_out/255.0, plt.cm.gray)plt.axis('off')plt.show()

附录:PS 图像调整算法――黑白

黑白调整

Photoshop CS的图像黑白调整功能,是通过对红、黄、绿、青、蓝和洋红等6种颜色的比例调节来完成的。能更精细地将彩色图片转换为高质量的黑白照片。

Photoshop CS图像黑白调整功能的计算公式为:

gray= (max - mid) * ratio_max + (mid - min) * ratio_max_mid + min

公式中:gray为像素灰度值,max、mid和min分别为图像像素R、G、B分量颜色的最大值、中间值和最小值,ratio_max为max所代表的分量颜色(单色)比率,ratio_max_mid则为max与mid两种分量颜色所形成的复色比率。

默认的单色及复色比率为:

Color_Ratio(1)=0.4;     %%%% Red
Color_Ratio(2)=0.6;     %%%% Yellow
Color_Ratio(3)=0.4;     %%%% Green
Color_Ratio(4)=0.6;     %%%% Cyan
Color_Ratio(5)=0.2;     %%%% Blue
Color_Ratio(6)=0.8;     %%%% Magenta

Program:

%%%%% 程序实现图像的黑白调整功能clc;clear all;close all;Image=imread('9.jpg');Image=double(Image);R=Image(:,:,1);G=Image(:,:,2);B=Image(:,:,3);[row, col] = size(R);Gray_img(1:row,1:col)=0;Sum_rgb=R+G+B;%%%% 各种颜色的默认比率Color_Ratio(1:6)=0;Color_Ratio(1)=0.4;   %%%% RedColor_Ratio(2)=0.6;   %%%% YellowColor_Ratio(3)=0.4;   %%%% GreenColor_Ratio(4)=0.6;   %%%% CyanColor_Ratio(5)=0.2;   %%%% BlueColor_Ratio(6)=0.8;   %%%% Magentafor i=1:row  for j=1:col    r=R(i,j);    g=G(i,j);    b=B(i,j);    Max_value=max(r,max(g,b));    Min_value=min(r,min(g,b));    Mid_value=Sum_rgb(i,j)-Max_value-Min_value;    if(Min_value==r)      Index=0;    elseif(Min_value==g)      Index=2;    else      Index=4;    end    ratio_max_mid=Color_Ratio(mod(Index+3,6)+1);    if(Max_value==r)      Index=1;    elseif(Max_value==g)      Index=3;    else      Index=5;    end    ratio_max=Color_Ratio(Index);    Temp=(Max_value-Mid_value)*ratio_max+(Mid_value-Min_value)...           *ratio_max_mid+Min_value;    Gray_img(i,j)=(Max_value-Mid_value)*ratio_max+(Mid_value-Min_value)...           *ratio_max_mid+Min_value;  endendimshow(Image/255);figure, imshow(Gray_img/255);

本例Python运行结果如下:

原图:

运行效果图:

更多关于Python相关内容感兴趣的读者可查看本站专题:《Python图片操作技巧总结》、《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。


  • 上一条:
    Python微信公众号开发平台
    下一条:
    1 行 Python 代码快速实现 FTP 服务器
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客