纯Python 综合图像处理小工具 (1)

平时工作经常需要做些图像分析,需要给图像分通道,计算各个通道的直方图分布特点,这个事儿photoshop也能做,但是用起来不方便,且需要电脑上安装有PS软件,如果用OpenCV, 更是需要在visual studio上做很多配置工作。本文充分利用python的便携性和轻量级特点,力图实现一个脚本,到处处理的目标。

          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")先进行了模式转换。 

直方图绘制是通过 pix = r.load()函数把图像的像素数据进行存储,然后在256级区间进行累加统计,最后使用draw.line函数绘制的。 

工具简单易用,全部代码提供如下,如有问题,欢迎园友反馈! 

 

  1  # -*- coding: cp936 -*-
  2  import Image,ImageDraw
  3  import ImageFilter,random,sys
  4  im1 = Image.open("1.jpg")
  5  
  6  ##图像处理##
  7  
  8  #转换为RGB图像
  9  im1_sp = im1.convert("RGB")              
 10 
 11  #将RGB三个通道分开
 12  r,g,b=im1_sp.split()             
 13  
 14  #将RGB分通道图像上色
 15  imd = Image.new("L",im1.size,0)
 16  r_color= Image.merge("RGB",(r,imd,imd))
 17  g_color= Image.merge("RGB",(imd,g,imd))
 18  b_color= Image.merge("RGB",(imd,imd,b))
 19  
 20  #R通道histogram
 21  width, height = r.size
 22  pix = r.load()
 23  a = [0]*256
 24  for w in xrange(width):
 25      for h in xrange(height):
 26          p = pix[w,h]
 27          a[p] = a[p] + 1
 28  s = max(a)
 29  print a,len(a),s     #长度256,a保存的分别是颜色范围0-255出现的次数
 30  r_hist = Image.new(‘RGB‘,(512,512),(255,255,255))  
 31  draw = ImageDraw.Draw(r_hist)  
 32  
 33  for k in range(256):
 34      #print k,a[k],a[k]*200/s
 35      a[k] = a[k]*400/s        #映射范围0-200
 36      source = (2*k,511)           #起点坐标y=255, x=[0,1,2....]
 37      target = (2*k,511-a[k])    #终点坐标y=255-a[x],a[x]的最大数值是200,x=[0,1,2....]
 38      draw.line([source, target], (255,0,0))
 39  
 40  #G通道histogram
 41  width, height = g.size
 42  pix = g.load()
 43  a = [0]*256
 44  for w in xrange(width):
 45      for h in xrange(height):
 46          p = pix[w,h]
 47          a[p] = a[p] + 1
 48  s = max(a)
 49  print a,len(a),s     #长度256,a保存的分别是颜色范围0-255出现的次数
 50  g_hist = Image.new(‘RGB‘,(512,512),(255,255,255))  
 51  draw = ImageDraw.Draw(g_hist)  
 52  
 53  for k in range(256):
 54      #print k,a[k],a[k]*200/s
 55      a[k] = a[k]*400/s        #映射范围0-200
 56      source = (2*k,511)           #起点坐标y=255, x=[0,1,2....]
 57      target = (2*k,511-a[k])    #终点坐标y=255-a[x],a[x]的最大数值是200,x=[0,1,2....]
 58      draw.line([source, target], (0,255,0))
 59  
 60  #B通道histogram
 61  width, height = b.size
 62  pix = b.load()
 63  a = [0]*256
 64  for w in xrange(width):
 65      for h in xrange(height):
 66          p = pix[w,h]
 67          a[p] = a[p] + 1
 68  s = max(a)
 69  print a,len(a),s     #长度256,a保存的分别是颜色范围0-255出现的次数
 70  b_hist = Image.new(‘RGB‘,(512,512),(255,255,255))  
 71  draw = ImageDraw.Draw(b_hist)  
 72  
 73  for k in range(256):
 74      #print k,a[k],a[k]*200/s
 75      a[k] = a[k]*400/s        #映射范围0-200
 76      source = (2*k,511)           #起点坐标y=255, x=[0,1,2....]
 77      target = (2*k,511-a[k])    #终点坐标y=255-a[x],a[x]的最大数值是200,x=[0,1,2....]
 78      draw.line([source, target], (0,0,255))
 79  
 80  im1_mer= Image.merge("RGB",(r,g,b))
 81  
 82  ##图像保存##
 83  
 84  #单通道图保存
 85  r.save("1r.jpg")
 86  g.save("1g.jpg")
 87  b.save("1b.jpg")
 88  
 89  #上色图保存
 90  r_color.save("1rr.jpg")
 91  g_color.save("1gg.jpg")
 92  b_color.save("1bb.jpg")
 93  
 94  #直方图保存
 95  r_hist.save("1r_hist.jpg")
 96  g_hist.save("1g_hist.jpg")
 97  b_hist.save("1b_hist.jpg")
 98  
 99  ##图像显示##
100  
101  #单通道图显示
102  r.show()
103  g.show()
104  b.show()
105  
106  #上色图显示
107  r_color.show()
108  g_color.show()
109  b_color.show()
110  
111  #直方图显示
112  r_hist.show()
113  g_hist.show()
114  b_hist.show() 

 

时间: 2024-10-13 05:43:47

纯Python 综合图像处理小工具 (1)的相关文章

纯Python综合图像处理小工具(3)10种滤镜算法

<背景>  滤镜处理是图像处理中一种非常常见的方法.比如photoshop中的滤镜效果,除了自带的滤镜,还扩展了很多第三方的滤镜效果插件,可以对图像做丰富多样的变换:很多手机app实现了实时滤镜功能,最有名的当属Instagram. 滤镜的原理,常见的是针对数字图像的像素矩阵,使用一个nxn的方形矩阵做滤波器(即kernel,常见的如3x3,5x5等),对该像素矩阵进行遍历,遍历后的图像就是输出图像,如果算法经过优化,遍历的速度足够快,那就是实时滤镜(live filter),可以实时预览图像

纯Python综合图像处理小工具(4)图像的自定义像素处理(剪纸滤镜)

<背景>  上一节介绍了python PIL库自带的10种滤镜处理,现成的库函数虽然用起来方便,但是对于图像处理的各种实际需求,还需要开发者开发自定义的滤镜算法.本文将给大家介绍如何使用PIL对图像进行自定义的像素级操作. <效果>  本文以剪纸风格图像处理作为例子:(算法借鉴了残阳似血的博客http://qinxuye.me/,特此鸣谢.) 原图: 处理后: <怎么做> 1.首先将处理参数预先设定好.设定阈值threshold,该阈值会用来区分作为目标颜色的前景色和将

纯Python综合图像处理小工具(2)图像增强

<背景> 这次分享的脚本是对图像进行增强处理,包含对图像像素的色彩增强.亮度增强.对比度增强.图像尖锐化等增强操作,主要基于PIL包的lambda和ImageEnhance模块. 使用方法和上一贴一样,本文脚本进行了多项功能的集成,一键完成所有处理,图像会即刻显示处理后的效果,并全部保存成特定名称jpeg. 下图是对处理后的图片的二维比较,为了更直观地比较,将处理项(亮度,颜色,对比度,锐度)作为横坐标,处理强度参数作为纵坐标(0,0.25,0.5,0.75,1).当处理强度参数为1的时候,实

Python实现翻译小工具

一.背景 利用Requests模块获取有道词典web页面的post信息,BeautifulSoup来获取需要的内容,通过tkinter模块生成gui界面. 二.代码 fanyi.py代码如下: #!/bin/env python # -*- coding:utf-8 -*- # _author:kaliarch import requests import urllib.parse import time import random import hashlib import json clas

python: 实现sha1小工具

File1: sha1.py File2: sha1.bat ------------------ File1: sha1.py import hashlib import os,sys def CalcSha1(filepath): with open(filepath,'rb') as f: sha1obj = hashlib.sha1(); print '>', while(True): data = f.read(20971520) #20M print '.', if (data ==

Python 综合应用小项目一

数据库报错重连机制 利用异常捕获来获取mysql断开的报错,然后再重连 1 import MySQLdb as mysql 2 3 class DB: 4 def __init__(self,host,user,passwd,db_name): 5 self.conn = None 6 self.cursor = None 7 self.host = host 8 self.user = user 9 self.passwd = passwd 10 self.db_name = db_name

Python实现linux/windows通用批量‘命令/上传/下载’小工具

这阵子一直在学python,碰巧最近想把线上服务器环境做一些规范化/统一化,于是便萌生了用python写一个小工具的冲动.就功能方面来说,基本上是在"重复造轮子"吧,但是当我用这小工具完成了30多台服务器从系统层面到应用层面的一些规范化工作之后,觉得效果还不算那么low(高手可忽略这句话~~),这才敢拿出来跟小伙伴们分享一下. (注:笔者所用为python版本为3.5,其他版本未经测试~~) 其实很简单,就"一个脚本"+"server信息文件"实

OpenCV与MFC实战之图像处理 样本采集小工具制作 c++MFC课程设计

原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/12111102.html 入门不久的人可以通过opencv实战来锻炼一下学习opencv的成果,百度云链接: 链接:https://pan.baidu.com/s/1jGOD97Zx96ZDAvlkQtaPYQ 提取码:afip 运行环境VS2017,需要配置库为:opencv 题目:样本采集小工具 需求: 用MFC和opencv完成样本采集小工具. 界面功能 1.选中原图片集的目录. 2.选

Python 小工具集合

PyTools Python小工具的集合,工具彼此间无联系.基于Python 3.4. Github 地址: https://github.com/ChenZhongPu/PyTools 目前实现了: 查看新闻 查看微博 发布微博 搜索1024网站 Usage 查看新闻 python3 App.py news 使用腾讯新闻的RSS源. 查看微博 python3 App.py weibo 使用了Yahoo pipes.你需要得到要查看用户的微博ID, "` Hanhan's weibo accou