纯Python综合图像处理小工具(1)分通道直方图
平时工作经常需要做些图像分析,需要给图像分通道,计算各个通道的直方图分布特点,这个事儿photoshop也能做,但是用起来不方便,且需要电脑上安装有PS软件,如果用OpenCV, 更是需要在visual studio上做很多配置工作。本文充分利用python的便携性和轻量级特点,力图实现一个脚本,到处处理的目标。
注:本文使用Python2.7.8和PIL1.1.7,注意版本问题。
<使用方法>
1.将待处理图片命名为1.jpg和本文python脚本文件放入同一文件夹;
2.运行python脚本,可以获得分通道图片及相应的直方图。
<效果介绍>
原图:
分通道显示:
各通道直方图
R通道直方图
G通道直方图
B通道直方图
<源码分析>
本文脚本没有使用OpenCV,全部操作均使用了python自带库函数,实现真正的轻量级。
本文工具默认对jpg格式的图片进行修改,其他格式直接修改脚本中im1 = Image.open("1.jpg")图片后缀即可。
分通道是直接使用的 r,g,b=im1_sp.split()的, 因只对RGB mode的图像有效,所以im1_sp = im1.convert("RGB")先进行了模式转换。
一张RGB彩色图像经过通道分离,获得三张单通道灰度图像,即python中定义的“L” mode的图像, 然后对每一个灰度图绘制直方图。
直方图绘制是通过 pix = r.load()函数把图像的像素数据进行存储,然后在256级区间进行累加统计,最后使用draw.line函数绘制的。
工具简单易用,全部代码提供如下,如有问题,欢迎园友反馈!
<全部源码>
# -*- coding: cp936 -*-
#阿瓦图像村出品,转载请注明出处 QQ:576916092
import Image,ImageDraw,ImageFilter,random,sys
im1 = Image.open("1.jpg")
##图像处理##
#转换为RGB图像
im1_sp = im1.convert("RGB") #将RGB三个通道分开
r,g,b=im1_sp.split()
#将RGB分通道图像上色
imd = Image.new("L",im1.size,0)
r_color= Image.merge("RGB",(r,imd,imd))
g_color= Image.merge("RGB",(imd,g,imd))
b_color= Image.merge("RGB",(imd,imd,b))
#R通道histogram
width, height = r.size
pix = r.load()
a = [0]*256
for w in xrange(width):
for h in xrange(height):
p = pix[w,h]
a[p] = a[p] + 1
s = max(a)
print a,len(a),s #长度256,a保存的分别是颜色范围0-255出现的次数
r_hist = Image.new('RGB',(512,512),(255,255,255))
draw = ImageDraw.Draw(r_hist)
for k in range(256):
#print k,a[k],a[k]*200/s
a[k] = a[k]*400/s #映射范围0-200
source = (2*k,511) #起点坐标y=255, x=[0,1,2....]
target = (2*k,511-a[k]) #终点坐标y=255-a[x],a[x]的最大数值是200,x=[0,1,2....]
draw.line([source, target], (255,0,0))
#G通道histogram
width, height = g.size
pix = g.load()
a = [0]*256
for w in xrange(width):
for h in xrange(height):
p = pix[w,h]
a[p] = a[p] + 1
s = max(a)
print a,len(a),s #长度256,a保存的分别是颜色范围0-255出现的次数
g_hist = Image.new('RGB',(512,512),(255,255,255))
draw = ImageDraw.Draw(g_hist) for k in range(256):
#print k,a[k],a[k]*200/s
a[k] = a[k]*400/s #映射范围0-200
source = (2*k,511) #起点坐标y=255, x=[0,1,2....]
target = (2*k,511-a[k]) #终点坐标y=255-a[x],a[x]的最大数值是200,x=[0,1,2....]
draw.line([source, target], (0,255,0)) #B通道histogram
width, height = b.size
pix = b.load()
a = [0]*256
for w in xrange(width):
for h in xrange(height):
p = pix[w,h]
a[p] = a[p] + 1
s = max(a)
print a,len(a),s #长度256,a保存的分别是颜色范围0-255出现的次数
b_hist = Image.new('RGB',(512,512),(255,255,255))
draw = ImageDraw.Draw(b_hist) for k in range(256):
#print k,a[k],a[k]*200/s
a[k] = a[k]*400/s #映射范围0-200
source = (2*k,511) #起点坐标y=255, x=[0,1,2....]
target = (2*k,511-a[k]) #终点坐标y=255-a[x],a[x]的最大数值是200,x=[0,1,2....]
draw.line([source, target], (0,0,255)) im1_mer= Image.merge("RGB",(r,g,b)) ##图像保存## #单通道图保存
r.save("1r.jpg")
g.save("1g.jpg")
b.save("1b.jpg") #上色图保存
r_color.save("1rr.jpg")
g_color.save("1gg.jpg")
b_color.save("1bb.jpg") #直方图保存
r_hist.save("1r_hist.jpg")
g_hist.save("1g_hist.jpg")
b_hist.save("1b_hist.jpg") ##图像显示## #单通道图显示
r.show()
g.show()
b.show()
#上色图显示
r_color.show()
g_color.show()
b_color.show() #直方图显示
r_hist.show()
g_hist.show()
b_hist.show()
纯Python综合图像处理小工具(1)分通道直方图的更多相关文章
- 纯Python综合图像处理小工具(3)10种滤镜算法
<背景> 滤镜处理是图像处理中一种非常常见的方法.比如photoshop中的滤镜效果,除了自带的滤镜,还扩展了很多第三方的滤镜效果插件,可以对图像做丰富多样的变换:很多手机app实现了实 ...
- 纯Python综合图像处理小工具(4)自定义像素级处理(剪纸滤镜)
上一节介绍了python PIL库自带的10种滤镜处理,现成的库函数虽然用起来方便,但是对于图像处理的各种实际需求,还需要开发者开发自定义的滤镜算法.本文将给大家介绍如何使用PIL对图像进行自定义 ...
- 纯Python综合图像处理小工具(2)图像增强
<背景> 这次分享的脚本是对图像进行增强处理,包含对图像像素的色彩增强.亮度增强.对比度增强.图像尖锐化等增强操作,主要基于PIL包的lambda和ImageEnhance模块. 使用方法 ...
- Python趣味实用小工具
代码地址如下:http://www.demodashi.com/demo/12918.html python 趣味实用小工具 概述 用python实现的三个趣味实用小工具: 图片转Execl工具 , ...
- Python+Tkinter 密保小工具
上图 代码 核心 编解码方面 Tkinter界面更新 总结 昨天被一同学告知,网上的一个QQ密码库中有我的一条记录,当时我就震惊了,赶紧换了密码.当然了,这件事也给了我一个警示,那就是定期的更换自己的 ...
- 几个可以提高工作效率的Python内置小工具
在这篇文章里,我们将会介绍4个Python解释器自身提供的小工具.这些小工具在笔者的日常工作中经常用到,减少了各种时间的浪费,然而,却很容易被大家忽略.每当有新来的同事看到我这么使用时,都忍不住感叹, ...
- python提效小工具-统计xmind用例数量
问题:做测试的朋友们经常会用到xmind这个工具来梳理测试点或写测试用例,但是xmind8没有自带的统计测试用例,其他版本的xmind有些自带节点数量统计功能,但也也不会累计最终的数量,导致统计测试工 ...
- python tkinter模块小工具界面
代码 #-*-coding:utf-8-*- import os from tkinter import * root=Tk() root.title('小工具') #清空文本框内容 def clea ...
- python: 实现sha1小工具
File1: sha1.py File2: sha1.bat ------------------ File1: sha1.py import hashlib import os,sys def Ca ...
随机推荐
- 蜗牛—Hibernate之初识配置
下载Hibernate的jar包 把下面jar文件考到项目lib下 然后在myeclipse中打开database的view视图创建一个新的数据库连接 接下来,配置连接,须要导入ORACLE的jar包 ...
- 代理模式与Android
代理模式(Proxy) 一. 什么是代理模式 先来看看官方的说法,代理模式就是为其它对象提供一种代理,以控制对这个对象的訪问. 看来这个官方的说法的确有点官方,看了还是让人感觉不点不知所措,还是不 ...
- 《全体育·瑜伽》
今天出去吃饭,本来是想买<印象>创刊号的,结果没找着,看到一本<瑜伽>创刊号.作为一个伪瑜伽爱好者,我掏了20元大洋买了一本,你知道如今的时尚杂志都非常坏,用塑料膜封着,不能翻 ...
- 使用SqlBulkCopy导入数据至MS SQL Server
原文:使用SqlBulkCopy导入数据至MS SQL Server Insus.NET一直使用表类型来数据入MS SQL Server.参考<存储过程参数为DataTable>http: ...
- MVC验证02-自定义验证规则、邮件验证
原文:MVC验证02-自定义验证规则.邮件验证 本文体验MVC自定义验证特性,来实现对邮件的验证.对于刚写完的自定义验证特性,起初只能支持后端验证.如果要让前端jquery支持,还必须对jquery的 ...
- 讲故事的人写的谈判手册——Leo锦书64
正如其名称所暗示这本书"谈判无处不在".从决定谈判的成功或失败的因素一个不同的观点,测量中详细给出的同一时间. 图书出版不错,这是阅读的样车.阅读收获压力较小的方式. 书能给读 ...
- 一张地图,告诉你NodeJS命令行调试器语句
NodeJS提供脚本调试. 进入node debug xx.js您可以进入调试模式. 版权声明:本文博客原创文章,博客,未经同意,不得转载.
- 快速构建Windows 8风格应用28-临时应用数据
原文:快速构建Windows 8风格应用28-临时应用数据 本篇博文主要介绍临时应用数据概览.如何构建临时应用数据. 一.临时应用数据概览 临时应用数据相当于网页中缓存,这些数据文件是不能够漫游的,并 ...
- MVC的TryUpdateModel
MVC的TryUpdateModel 我们在使用MVC的时候,给model赋值只需要 TryUpdateModel(model) 就搞定了,而在webForm,winForm中,我们要写长长的 xx. ...
- lsof基本使用
当你想在计算机上启动一个服务,电脑已经建议"port already in use",此时,可以使用lsof命令查看占用端口的进程(lsof -i:port). lsof这是LiS ...