python图像几何变换_用python简单处理图片(2):图像通道\几何变换\裁剪

这篇博客介绍了如何使用Python的PIL库进行图像处理,包括彩色图像转灰度图、图像通道的分离与合并、图片裁剪以及几何变换如缩放和旋转。通过示例代码详细展示了每一步操作的具体实现,是Python图像处理的基础教程。
摘要由CSDN通过智能技术生成

一、图像通道

1、彩色图像转灰度图

from PIL import Image

import matplotlib.pyplot as plt

img=Image.open('d:/ex.jpg')

gray=img.convert('L')

plt.figure("beauty")

plt.imshow(gray,cmap='gray')

plt.axis('off')

plt.show()

L3Byb3h5L2h0dHBzL2ltYWdlczIwMTUuY25ibG9ncy5jb20vYmxvZy8xNDA4NjcvMjAxNjAxLzE0MDg2Ny0yMDE2MDEwMzEzNDMzMTYyMC0xNzg1Njk2MDU5LnBuZw==.jpg

使用函数convert()来进行转换,它是图像实例对象的一个方法,接受一个 mode 参数,用以指定一种色彩模式,mode 的取值可以是如下几种:

· 1 (1-bit pixels, black and white, stored with one pixel per byte)

· L (8-bit pixels, black and white)

· P (8-bit pixels, mapped to any other mode using a colour palette)

· RGB (3x8-bit pixels, true colour)

· RGBA (4x8-bit pixels, true colour with transparency mask)

· CMYK (4x8-bit pixels, colour separation)

· YCbCr (3x8-bit pixels, colour video format)

· I (32-bit signed integer pixels)

· F (32-bit floating point pixels)

2、通道分离与合并

from PIL import Image

import matplotlib.pyplot as plt

img=Image.open('d:/ex.jpg') #打开图像

gray=img.convert('L') #转换成灰度

r,g,b=img.split() #分离三通道

pic=Image.merge('RGB',(r,g,b)) #合并三通道

plt.figure("beauty")

plt.subplot(2,3,1), plt.title('origin')

plt.imshow(img),plt.axis('off')

plt.subplot(2,3,2), plt.title('gray')

plt.imshow(gray,cmap='gray'),plt.axis('off')

plt.subplot(2,3,3), plt.title('merge')

plt.imshow(pic),plt.axis('off')

plt.subplot(2,3,4), plt.title('r')

plt.imshow(r,cmap='gray'),plt.axis('off')

plt.subplot(2,3,5), plt.title('g')

plt.imshow(g,cmap='gray'),plt.axis('off')

plt.subplot(2,3,6), plt.title('b')

plt.imshow(b,cmap='gray'),plt.axis('off')

plt.show()

L3Byb3h5L2h0dHBzL2ltYWdlczIwMTUuY25ibG9ncy5jb20vYmxvZy8xNDA4NjcvMjAxNjAxLzE0MDg2Ny0yMDE2MDEwMzE0MDM1MTkxNy04MzIxNTAzOC5wbmc=.jpg

二、裁剪图片

从原图片中裁剪感兴趣区域(roi),裁剪区域由4-tuple决定,该tuple中信息为(left, upper, right, lower)。 Pillow左边系统的原点(0,0)为图片的左上角。坐标中的数字单位为像素点。

from PIL import Image

import matplotlib.pyplot as plt

img=Image.open('d:/ex.jpg') #打开图像

plt.figure("beauty")

plt.subplot(1,2,1), plt.title('origin')

plt.imshow(img),plt.axis('off')

box=(80,100,260,300)

roi=img.crop(box)

plt.subplot(1,2,2), plt.title('roi')

plt.imshow(roi),plt.axis('off')

plt.show()

L3Byb3h5L2h0dHBzL2ltYWdlczIwMTUuY25ibG9ncy5jb20vYmxvZy8xNDA4NjcvMjAxNjAxLzE0MDg2Ny0yMDE2MDEwMzE0MTMzNTM3MC0yMTE3OTAxNzg4LnBuZw==.jpg

用plot绘制显示出图片后,将鼠标移动到图片上,会在右下角出现当前点的坐标,以及像素值。

三、几何变换

Image类有resize()、rotate()和transpose()方法进行几何变换。

1、图像的缩放和旋转

dst = img.resize((128, 128))

dst = img.rotate(45) # 顺时针角度表示

2、转换图像

dst = im.transpose(Image.FLIP_LEFT_RIGHT) #左右互换

dst = im.transpose(Image.FLIP_TOP_BOTTOM) #上下互换

dst = im.transpose(Image.ROTATE_90) #顺时针旋转

dst = im.transpose(Image.ROTATE_180)

dst = im.transpose(Image.ROTATE_270)

transpose()和rotate()没有性能差别。

python(2) 图像通道,几何变换,裁剪

一.图像通道 1.彩色图像转灰度图 from PIL import Image import matplotlib.pyplot as plt img=Image.open('d:/ex.jpg') ...

用python简单处理图片(4):图像中的像素访问

前面的一些例子中,我们都是利用Image.open()来打开一幅图像,然后直接对这个PIL对象进行操作.如果只是简单的操作还可以,但是如果操作稍微复杂一些,就比较吃力了.因此,通常我们加载完图片后,都 ...

用python简单处理图片(1):打开\显示\保存图像

一提到数字图像处理,可能大多数人就会想到matlab,但matlab也有自身的缺点: 1.不开源,价格贵 2.软件容量大.一般3G以上,高版本甚至达5G以上. 3.只能做研究,不易转化成软件. 因此, ...

用python简单处理图片(5):图像直方图

我们先来看两个函数reshape和flatten: 假设我们先生成一个一维数组: vec=np.arange(15) print vec 显示为: [ 0 1 2 3 4 5 6 7 8 9 10 1 ...

用python简单处理图片(3):添加水印

python版本:3.4 Pillow版本:3.0 一.添加文字水印 from PIL import Image, ImageDraw,ImageFont im = Image.open(" ...

OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(1)

图像的几何变换是在不改变图像内容的前提下对图像像素的进行空间几何变换,主要包括了图像的平移变换.镜像变换.缩放和旋转等.本文首先介绍了图像几何变换的一些基本概念,然后再OpenCV2下实现了图像的平移 ...

OpenCV2:图像的几何变换,平移、镜像、缩放、旋转(2)

在OpenCV2:图像的几何变换,平移.镜像.缩放.旋转(1)主要介绍了图像变换中的向前映射.向后映射.处理变换过程中浮点坐标像素值的插值算法,并且基于OpenCV2实现了两个简单的几何变换:平移和镜 ...

python计算机视觉2:图像边缘检测

我是一名初学者,如果你发现文中有错误,请留言告诉我,谢谢 如果需要检测到图像里面的边缘,首先我们需要知道边缘处具有什么特征. 对于一幅灰度图像来说,边缘两边的灰度值肯定不相同,这样我们才能分辨出哪里是 ...

Python简单爬虫入门三

我们继续研究BeautifulSoup分类打印输出 Python简单爬虫入门一 Python简单爬虫入门二 前两部主要讲述我们如何用BeautifulSoup怎去抓取网页信息以及获取相应的图片标题等信 ...

随机推荐

NET代码重构

记一次.NET代码重构   好久没写代码了,终于好不容易接到了开发任务,一看时间还挺充足的,我就慢慢整吧,若是遇上赶进度,基本上直接是功能优先,完全不考虑设计.你可以认为我完全没有追求,当身后有鞭子使 ...

Android 快捷方式相关操作

尽管现在少数手机不支持快捷方式,但是仍然有大部分手机是支持的.创建快捷方式,可以减少用户在应用列表繁多的应用程序中查找应用的时间,快速进入应用:或是应用中的某个功能使用频率较高,创建快捷方式,可以快速 ...

【HDOJ】1401 Solitaire

双向BFS+状态压缩. /* 1401 */ #include #include #include #includ ...

leetcode第六题--ZigZag Conversion

Problem: The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of r ...

JS获取当前日期时间并定时刷新

JS获取当前日期时间 var date = new Date(); date.getYear(); //获取当前年份(2位) date.getFullYear(); //获取完整的年份(4位,2014 ...

db2 将原表列notnull属性修改为null属性的方法 (查看主键约束,唯一约束去syscat.tabconst)

好久没机会写点东西了,今天把自己遇到的一个小问题跟大家分享一下如何修改db2数据库表中列的属性--将列的非空属性改为允许空的属性,修改数据表的某一列属性其实很简单但是里面有需要细节需要dba注意,毕竟 ...

【ASP.NET Core】处理异常(下篇)

上一篇中,老周给大伙伴们扯了有关 ASP.NET Core 中异常处理的简单方法.按照老周的优良作风,我们应该顺着这个思路继续挖掘. 本文老周就不自量力地介绍一下如何使用 MVC Filter 来处理 ...

关于xpath相对路径前加点与不加点的区别

转自:https://blog.csdn.net/qingmu_9923/article/details/51771602 最近在用selenium做web工程自动化测试的相关项目,会经常用到元素定位 ...

cf581F 依赖背包+临时数组 好题

这题得加个临时数组才能做.. /* 给定一棵树,树节点可以染黑白,要求叶子节点黑白平分 称连接黑白点的边为杂边,求使得杂边最少的染色方 那么设dp[i][j][0|1]表示i子树中有j个叶子节点,i染 ...

转:Session,Token相关区别

参考地址:https://www.cnblogs.com/xiaozhang2014/p/7750200.html 1. 为什么要有session的出现?答:是由于网络中http协议造成的,因为htt ...

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值