重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

python旋转图片函数 python怎么旋转图形

python 图像旋转怎么去除黑边

去除黑边现象的办法:

为思明等地区用户提供了全套网页设计制作服务,及思明网站建设行业解决方案。主营业务为网站设计制作、网站制作、思明网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

1)在做图像坐标映射反查的时候,算出当前点在原始图像的外部还是内部,若在外部,判断当前像素点的X或者Y位置,找临近四个边界的像

素值代替;

该方法太过繁琐,适合自己写程序实现,如若想调用现有的一些库函数,可以考虑2)做法:

2)将待旋转的图像进行边界填充,最不济的情况下可以扩充为原始图像的大小;

旋转边界填充图像;

计算原始图像经过旋转以后的结果图像的尺寸大小;

在边界填充旋转图像上截取目标图像;(图像都是按照图像中心旋转的);

附上一段matlab人脸根据人眼位置对齐的代码:

[plain] view plain copy

eye_angle = atan2( (eye_pts(2,2) - eye_pts(1,2)),(eye_pts(2,1) - eye_pts(1,1) ) ) * 180 / pi; % 人眼的倾斜角度

if eye_angle 0

eye_angle = eye_angle + 360;

end

if floor(eye_angle) = 5 || floor( 360 - eye_angle ) = 5

continue;

end % 5度之内不做对齐操作

img = imread(img_path);

[m,n,~] = size(img);

img_pad = padarray(img,[m n],'both','replicate');% 扩充图像

img_pad_rotate = imrotate(img_pad,eye_angle,'bilinear'); % 旋转扩充图像

[m_pad_r,n_pad_r,~] = size(img_pad_rotate);

[plain] view plain copy

eye_angle = eye_angle * pi / 180;

f_cos = cos(eye_angle);f_sin = sin(eye_angle);

new_m = floor(m * abs(f_cos) + n * abs(f_sin));

new_n = floor(n * abs(f_sin) + m * abs(f_cos));% 最终对齐图像的大小

left = floor((n_pad_r - new_n) / 2);right = left + new_n;

bott = floor((m_pad_r - new_m) / 2);up = bott + new_m;

face_rorate = img_pad_rotate(bott : up,left : right,:); % 截取目标图像

figure,imshow(face_rorate)

python:PIL图像处理

PIL (Python Imaging Library)

Python图像处理库,该库支持多种文件格式,提供强大的图像处理功能。

PIL中最重要的类是Image类,该类在Image模块中定义。

从文件加载图像:

如果成功,这个函数返回一个Image对象。现在你可以使用该对象的属性来探索文件的内容。

format 属性指定了图像文件的格式,如果图像不是从文件中加载的则为 None 。

size 属性是一个2个元素的元组,包含图像宽度和高度(像素)。

mode 属性定义了像素格式,常用的像素格式为:“L” (luminance) - 灰度图, “RGB” , “CMYK”。

如果文件打开失败, 将抛出IOError异常。

一旦你拥有一个Image类的实例,你就可以用该类定义的方法操作图像。比如:显示

( show() 的标准实现不是很有效率,因为它将图像保存到一个临时文件,然后调用外部工具(比如系统的默认图片查看软件)显示图像。该函数将是一个非常方便的调试和测试工具。)

接下来的部分展示了该库提供的不同功能。

PIL支持多种图像格式。从磁盘中读取文件,只需使用 Image 模块中的 open 函数。不需要提供文件的图像格式。PIL库将根据文件内容自动检测。

如果要保存到文件,使用 Image 模块中的 save 函数。当保存文件时,文件名很重要,除非指定格式,否则PIL库将根据文件的扩展名来决定使用哪种格式保存。

** 转换文件到JPEG **

save 函数的第二个参数可以指定使用的文件格式。如果文件名中使用了一个非标准的扩展名,则必须通过第二个参数来指定文件格式。

** 创建JPEG缩略图 **

需要注意的是,PIL只有在需要的时候才加载像素数据。当你打开一个文件时,PIL只是读取文件头获得文件格式、图像模式、图像大小等属性,而像素数据只有在需要的时候才会加载。

这意味着打开一个图像文件是一个非常快的操作,不会受文件大小和压缩算法类型的影响。

** 获得图像信息 **

Image 类提供了某些方法,可以操作图像的子区域。提取图像的某个子区域,使用 crop() 函数。

** 复制图像的子区域 **

定义区域使用一个包含4个元素的元组,(left, upper, right, lower)。坐标原点位于左上角。上面的例子提取的子区域包含300x300个像素。

该区域可以做接下来的处理然后再粘贴回去。

** 处理子区域然后粘贴回去 **

当往回粘贴时,区域的大小必须和参数匹配。另外区域不能超出图像的边界。然而原图像和区域的颜色模式无需匹配。区域会自动转换。

** 滚动图像 **

paste() 函数有个可选参数,接受一个掩码图像。掩码中255表示指定位置为不透明,0表示粘贴的图像完全透明,中间的值表示不同级别的透明度。

PIL允许分别操作多通道图像的每个通道,比如RGB图像。 split() 函数创建一个图像集合,每个图像包含一个通道。 merge() 函数接受一个颜色模式和一个图像元组,然后将它们合并为一个新的图像。接下来的例子交换了一个RGB图像的三个通道。

** 分离和合并图像通道 **

对于单通道图像, split() 函数返回图像本身。如果想处理各个颜色通道,你可能需要先将图像转为RGB模式。

resize() 函数接受一个元组,指定图像的新大小。

rotate() 函数接受一个角度值,逆时针旋转。

** 基本几何变换 **

图像旋转90度也可以使用 transpose() 函数。 transpose() 函数也可以水平或垂直翻转图像。

** transpose **

transpose() 和 rotate() 函数在性能和结果上没有区别。

更通用的图像变换函数为 transform() 。

PIL可以转换图像的像素模式。

** 转换颜色模式 **

PIL库支持从其他模式转为“L”或“RGB”模式,其他模式之间转换,则需要使用一个中间图像,通常是“RGB”图像。

ImageFilter 模块包含多个预定义的图像增强过滤器用于 filter() 函数。

** 应用过滤器 **

point() 函数用于操作图像的像素值。该函数通常需要传入一个函数对象,用于操作图像的每个像素:

** 应用点操作 **

使用以上技术可以快速地对图像像素应用任何简单的表达式。可以结合 point() 函数和 paste 函数修改图像。

** 处理图像的各个通道 **

注意用于创建掩码图像的语法:

Python计算逻辑表达式采用短路方式,即:如果and运算符左侧为false,就不再计算and右侧的表达式,而且返回结果是表达式的结果。比如 a and b 如果a为false则返回a,如果a为true则返回b,详见Python语法。

对于更多高级的图像增强功能,可以使用 ImageEnhance 模块中的类。

可以调整图像对比度、亮度、色彩平衡、锐度等。

** 增强图像 **

PIL库包含对图像序列(动画格式)的基本支持。支持的序列格式包括 FLI/FLC 、 GIF 和一些实验性的格式。 TIFF 文件也可以包含多个帧。

当打开一个序列文件时,PIL库自动加载第一帧。你可以使用 seek() 函数 tell() 函数在不同帧之间移动。

** 读取序列 **

如例子中展示的,当序列到达结尾时,将抛出EOFError异常。

注意当前版本的库中多数底层驱动只允许seek到下一帧。如果想回到前面的帧,只能重新打开图像。

以下迭代器类允许在for语句中循环遍历序列:

** 一个序列迭代器类 **

PIL库包含一些函数用于将图像、文本打印到Postscript打印机。以下是一个简单的例子。

** 打印到Postscript **

如前所述,可以使用 open() 函数打开图像文件,通常传入一个文件名作为参数:

如果打开成功,返回一个Image对象,否则抛出IOError异常。

也可以使用一个file-like object代替文件名(暂可以理解为文件句柄)。该对象必须实现read,seek,tell函数,必须以二进制模式打开。

** 从文件句柄打开图像 **

如果从字符串数据中读取图像,使用StringIO类:

** 从字符串中读取 **

如果图像文件内嵌在一个大文件里,比如 tar 文件中。可以使用ContainerIO或TarIO模块来访问。

** 从tar文档中读取 **

** 该小节不太理解,请参考原文 **

有些解码器允许当读取文件时操作图像。通常用于在创建缩略图时加速解码(当速度比质量重要时)和输出一个灰度图到激光打印机时。

draft() 函数。

** Reading in draft mode **

输出类似以下内容:

注意结果图像可能不会和请求的模式和大小匹配。如果要确保图像不大于指定的大小,请使用 thumbnail 函数。

Python2.7 教程 PIL

Python 之 使用 PIL 库做图像处理

来自

怎么样在python中让最后画出来的图翻转90度

import Image

import os

import glob

dir="f:\mobile"

#取出指定文件

file=glob.glob(os.path.join(dir,'xxx.JPG'))

#打开图片

img = Image.open(file)

#显示图片

img.show()

print img.format, img.size, img.mode

print " rotating image....."

im=img.rotate(90)

im.save(image)

我不知道你怎么画的,但旋转请参考以上代码

python图像处理初学者求助

Pillow是Python里的图像处理库(PIL:Python Image Library),提供了了广泛的文件格式支持,强大的图像处理能力,主要包括图像储存、图像显示、格式转换以及基本的图像处理操作等。

1)使用 Image 类

PIL最重要的类是 Image class, 你可以通过多种方法创建这个类的实例;你可以从文件加载图像,或者处理其他图像, 或者从 scratch 创建。

要从文件加载图像,可以使用open( )函数,在Image模块中:

1

2

from PIL import Image

im = Image.open("E:/photoshop/1.jpg")

加载成功后,将返回一个Image对象,可以通过使用示例属性查看文件内容:

1

2

3

print(im.format, im.size, im.mode)

('JPEG', (600, 351), 'RGB')

format 这个属性标识了图像来源。如果图像不是从文件读取它的值就是None。size属性是一个二元tuple,包含width和height(宽度和高度,单位都是px)。 mode 属性定义了图像bands的数量和名称,以及像素类型和深度。常见的modes 有 “L” (luminance) 表示灰度图像, “RGB” 表示真彩色图像, and “CMYK” 表示出版图像。

如果文件打开错误,返回 IOError 错误。

只要你有了 Image 类的实例,你就可以通过类的方法处理图像。比如,下列方法可以显示图像:

1

im.show()

2)读写图像

PIL 模块支持大量图片格式。使用在 Image 模块的 open() 函数从磁盘读取文件。你不需要知道文件格式就能打开它,这个库能够根据文件内容自动确定文件格式。要保存文件,使用 Image 类的 save() 方法。保存文件的时候文件名变得重要了。除非你指定格式,否则这个库将会以文件名的扩展名作为格式保存。

加载文件,并转化为png格式:

1

2

3

4

5

6

7

8

9

10

11

12

13

"Python Image Library Test"

from PIL import Image

import os

import sys

for infile in sys.argv[1:]:

f,e = os.path.splitext(infile)

outfile = f +".png"

if infile != outfile:

try:

Image.open(infile).save(outfile)

except IOError:

print("Cannot convert", infile)

save() 方法的第二个参数可以指定文件格式。

3)创建缩略图

缩略图是网络开发或图像软件预览常用的一种基本技术,使用Python的Pillow图像库可以很方便的建立缩略图,如下:

1

2

3

4

5

6

7

# create thumbnail

size = (128,128)

for infile in glob.glob("E:/photoshop/*.jpg"):

f, ext = os.path.splitext(infile)

img = Image.open(infile)

img.thumbnail(size,Image.ANTIALIAS)

img.save(f+".thumbnail","JPEG")

上段代码对photoshop下的jpg图像文件全部创建缩略图,并保存,glob模块是一种智能化的文件名匹配技术,在批图像处理中经常会用到。

注意:Pillow库不会直接解码或者加载图像栅格数据。当你打开一个文件,只会读取文件头信息用来确定格式,颜色模式,大小等等,文件的剩余部分不会主动处理。这意味着打开一个图像文件的操作十分快速,跟图片大小和压缩方式无关。

4)图像的剪切、粘贴与合并操作

Image 类包含的方法允许你操作图像部分选区,PIL.Image.Image.crop 方法获取图像的一个子矩形选区,如:

1

2

3

4

# crop, paste and merge

im = Image.open("E:/photoshop/lena.jpg")

box = (100,100,300,300)

region = im.crop(box)

矩形选区有一个4元元组定义,分别表示左、上、右、下的坐标。这个库以左上角为坐标原点,单位是px,所以上诉代码复制了一个 200×200 pixels 的矩形选区。这个选区现在可以被处理并且粘贴到原图。

1

2

region = region.transpose(Image.ROTATE_180)

im.paste(region, box)

当你粘贴矩形选区的时候必须保证尺寸一致。此外,矩形选区不能在图像外。然而你不必保证矩形选区和原图的颜色模式一致,因为矩形选区会被自动转换颜色。

5)分离和合并颜色通道

对于多通道图像,有时候在处理时希望能够分别对每个通道处理,处理完成后重新合成多通道,在Pillow中,很简单,如下:

1

2

r,g,b = im.split()

im = Image.merge("RGB", (r,g,b))

对于split( )函数,如果是单通道的,则返回其本身,否则,返回各个通道。

6)几何变换

对图像进行几何变换是一种基本处理,在Pillow中包括resize( )和rotate( ),如用法如下:

1

2

out = im.resize((128,128))

out = im.rotate(45) # degree conter-clockwise

其中,resize( )函数的参数是一个新图像大小的元祖,而rotate( )则需要输入顺时针的旋转角度。在Pillow中,对于一些常见的旋转作了专门的定义:

1

2

3

4

5

out = im.transpose(Image.FLIP_LEFT_RIGHT)

out = im.transpose(Image.FLIP_TOP_BOTTOM)

out = im.transpose(Image.ROTATE_90)

out = im.transpose(Image.ROTATE_180)

out = im.transpose(Image.ROTATE_270)

7)颜色空间变换

在处理图像时,根据需要进行颜色空间的转换,如将彩色转换为灰度:

1

2

cmyk = im.convert("CMYK")

gray = im.convert("L")

8)图像滤波


文章标题:python旋转图片函数 python怎么旋转图形
文章源于:http://cqcxhl.cn/article/doeoidg.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP