
正文
python复制图片函数 python如何复制图片
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
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 库做图像处理
来自
相关问答
Q1: python怎么输入图片
python导入图片python复制图片函数的方法python复制图片函数:
一、直接从源图片中导入(图片位于images文件夹内)self.label1=QLabel(self)
self.label1.setPixmap(QPixmap(r"images/head.jpg"))
layout.addWidget(self.label1)
#或者 layout.addWidget(QLabel(self, pixmap=QPixmap("images/head.jpg")))
二、利用qrc资源导入
1、先写qrc文件
images/head.jpg
images/body.jpg
2、将qrc文件转化成py文件
转化命令为python复制图片函数:pyrcc5 res.qrc -o res_rc.py
3、导入res_rc.pypython复制图片函数:import res_rc
4、layout.addWidget(QLabel(self,pixmap=QPixmap(":/images/head.jpg")))
注意需要添加:/符号作为前缀。
Q2: 如何使用python复制大概200G的数据[任何语言只要能实现]
如果我理解的正确的话python复制图片函数,楼主是要copy大文件吧。
python最经常使用的copy函数python复制图片函数,应该是shutil.copyfile()python复制图片函数了python复制图片函数,它默认以16384bytes 的大小作为缓冲区,对于小的文件,的确不错。但是处理到大的文件的时候,性能下降就很严重。过小的buffer会不合适。
经过多次的尝试,发现10Mb的buffer最合适,再高也没有性能的提升。重载后的copy函数如下
def copyFile(src, dst, buffer_size=10485760, perserveFileDate=True):
'''
Copies a file to a new location. Much faster performance than Apache Commons due to use of larger buffer
@param src: Source File
@param dst: Destination File (not file path)
@param buffer_size: Buffer size to use during copy
@param perserveFileDate: Preserve the original file date
'''
# Check to make sure destination directory exists. If it doesn't create the directory
dstParent, dstFileName = os.path.split(dst)
if(not(os.path.exists(dstParent))):
os.makedirs(dstParent)
# Optimize the buffer for small files
buffer_size = min(buffer_size,os.path.getsize(src))
if(buffer_size == 0):
buffer_size = 1024
if shutil._samefile(src, dst):
raise shutil.Error("`%s` and `%s` are the same file" % (src, dst))
for fn in [src, dst]:
try:
st = os.stat(fn)
except OSError:
# File most likely does not exist
pass
else:
# XXX What about other special files? (sockets, devices...)
if shutil.stat.S_ISFIFO(st.st_mode):
raise shutil.SpecialFileError("`%s` is a named pipe" % fn)
with open(src, 'rb') as fsrc:
with open(dst, 'wb') as fdst:
shutil.copyfileobj(fsrc, fdst, buffer_size)
if(perserveFileDate):
shutil.copystat(src, dst)
使用的时候记得添加相应的包。
Q3: python 能用turtle进行图片复制吗?如果有的话,有实现方法吗?
在执行turtle模块之前。要确保自己的python中已经安装了Tkinter模块。
turtle模块可以用来学习计算机是如何在屏幕上画图的。
提供了画向量图的方法
[python] view plain copy
#!/usr/bin/python
#coding: UTF-8
import turtle
import time
# 调用turtle中的Pen函数创建画布
t = turtle.Pen()
# 画矩形
for i in range(0, 4):
# 往前画一条直线
t.forward(100)
# 左转弯90度
t.left(90)
time.sleep(1)
#time.sleep(3)
# 清空画布并把海龟放在起始位置
t.reset()
# 画两条相互平行的直线
# 往后画一条直线
t.backward(100)
# 拿起画笔python复制图片函数,不再作画python复制图片函数,只有遇见down函数的时候才可以继续作画
t.up()
# 右转90度
t.right(90)
# 往前移动20个像素
t.forward(20)
# 左转90度python复制图片函数,指向和上一条线平行的方向
t.left(90)
# 放下画笔,开始作画
t.down()
# 画另一条平行线
t.forward(100)
#time.sleep(3)
t.reset()
#画等边三角形
t.forward(100)
t.left(120)
t.forward(100)
t.right(60)
t.backward(100)
time.sleep(3)
# 只清空画布,海龟仍然停留在当前的位置
#注意此时箭头所在的位置,注意与reset执行时的区别
t.clear()
下图为执行上述代码以后的结果
请点击输入图片描述
请点击输入图片描述
Q4: python读取保存多帧图片数量少了
cv2.imshow("left", img_left)
filename3=str(number)+'n3'+'.jpg' #打印第number张图片+增值方式+保存类型
cv2.imwrite(savedpath + filename3, img_left)
"""
# 数据增强实现
"""
import cv2
import numpy as np
import os
# 图像平移
def img_translation(image):
# 图像平移 下、上、右、左平移
M = np.float32([[1, 0, 0], [0, 1, 100]])
img_down = cv2.warpAffine(image, M, (image.shape[1], image.shape[0]))
M = np.float32([[1, 0, 0], [0, 1, -100]])
img_up = cv2.warpAffine(image, M, (image.shape[1], image.shape[0]))
M = np.float32([[1, 0, 100], [0, 1, 0]])
img_right = cv2.warpAffine(image, M, (image.shape[1], image.shape[0]))
M = np.float32([[1, 0, -100], [0, 1, 0]])
img_left = cv2.warpAffine(image, M, (image.shape[1], image.shape[0]))
# 保存图片python复制图片函数,需要保存上述的哪一图片python复制图片函数,就在cv2.imwrite()中,将哪一图片名放入。
# filename='xxx' +'.jpeg'
# cv2.imwrite(savedpath + filename, img_left)
# 显示图形
cv2.imshow("down", img_down)
filename0=str(number)+'n0'+'.jpg'
cv2.imwrite(savedpath + filename0, img_down)
cv2.imshow("up", img_up)
filename1=str(number)+'n1'+'.jpg'
cv2.imwrite(savedpath + filename1, img_up)
cv2.imshow("right", img_right)
filename2=str(number)+'n2'+'.jpg'
cv2.imwrite(savedpath + filename2, img_right)
cv2.imshow("left", img_left)
filename3=str(number)+'n3'+'.jpg'
cv2.imwrite(savedpath + filename3, img_left)
# 图像缩放
def img_scale(image):
result = cv2.resize(image, (224, 224))
cv2.imshow("scale", result)
filename=str(number)+'n5'+'.jpg'
cv2.imwrite(savedpath + filename, result)
# 图像翻转
def img_flip(image):
# 0以X轴为对称轴翻转,0以Y轴为对称轴翻转, 0X轴Y轴翻转
horizontally = cv2.flip(image, 0) # 水平镜像
vertically = cv2.flip(image, 1) # 垂直镜像
hv = cv2.flip(image, -1) # 水平垂直镜像
# 显示图形
cv2.imshow("Horizontally", horizontally)
filename1=str(number)+'n6'+'.jpg'
cv2.imwrite(savedpath + filename1, horizontally)
cv2.imshow("Vertically", vertically)
filename2=str(number)+'n7'+'.jpg'
cv2.imwrite(savedpath + filename2, vertically)
cv2.imshow("Horizontally Vertically", hv)
filename3=str(number)+'n8'+'.jpg'
cv2.imwrite(savedpath + filename3, hv)
# 图像旋转
def img_rotation(image):
# 原图的高、宽 以及通道数
rows, cols, channel = image.shape
# 绕图像的中心旋转
# 参数:旋转中心 旋转度数 scale
M = cv2.getRotationMatrix2D((cols / 2, rows / 2), 30, 1)
# 参数:原始图像 旋转参数 元素图像宽高
rotated = cv2.warpAffine(image, M, (cols, rows))
# 显示图像
cv2.imshow("rotated", rotated)
filename1=str(number)+'n9'+'.jpg'
cv2.imwrite(savedpath + filename1, rotated)
#选装60度
W = cv2.getRotationMatrix2D((cols / 2, rows / 2), 60, 1)
# 参数:原始图像 旋转参数 元素图像宽高
rotated1 = cv2.warpAffine(image, W, (cols, rows))
cv2.imshow("rotated", rotated)
filename2=str(number)+'n12'+'.jpg'
cv2.imwrite(savedpath + filename2, rotated1)
#选装145度
W = cv2.getRotationMatrix2D((cols / 2, rows / 2), 60, 1)
# 参数:原始图像 旋转参数 元素图像宽高
rotated2 = cv2.warpAffine(image, W, (cols, rows))
cv2.imshow("rotated", rotated)
filename3=str(number)+'n13'+'.jpg'
cv2.imwrite(savedpath + filename3, rotated2)
# 图像加噪
def img_noise(image, mean=0, var=0.001):
'''
添加高斯噪声
mean : 均值
var : 方差
'''
image = np.array(image / 255, dtype=float)
noise = np.random.normal(mean, var ** 0.5, image.shape)
out = image + noise
if out.min() 0:
low_clip = -1.
else:
low_clip = 0.
out = np.clip(out, low_clip, 1.0)
out = np.uint8(out * 255)
cv2.imshow("noise", out)
filename3=str(number)+'n10'+'.jpg'
cv2.imwrite(savedpath + filename3, out)
# 图像亮度调节
def img_brightness(image):
contrast = 1 # 对比度
brightness = 100 # 亮度
pic_turn = cv2.addWeighted(image, contrast, image, 0, brightness)
# cv2.addWeighted(对象,对比度,对象,对比度)
'''cv2.addWeighted()实现的是图像透明度的改变与图像的叠加'''
cv2.imshow('bright', pic_turn) # 显示图片
filename3=str(number)+'n11'+'.jpg'
cv2.imwrite(savedpath + filename3, pic_turn)
if __name__ == '__main__':
i = 0
path = '../Data/'
print(path)
savedpath = './result_new/'
filelist = os.listdir(path)
total_num = len(filelist)
for item in filelist:
number = i + 1
i = number
print("######")
print("打印到第",i,"张图片")
src = cv2.imread(path + item)
img_translation(src)
img_scale(src)
img_flip(src)
img_rotation(src)
img_noise(src)
img_brightness(src)
cv2.waitKey(0)
cv2.destroyAllWindows()
代码较为繁琐,有空之后进行优化
输出结果
Q5: python IDEL复制上一行的快捷键是什么
1、新建一个python脚本文件file.py(名字任意)。
2、在python脚本中用2个open函数即可实现对该图片python复制图片函数的复制python复制图片函数,具体实现代码如图。
3、执行上述脚本文件后查看结果python复制图片函数,可以看到该图片已被成功复制。
4、对于其他文件例如,文本文件操作方式和上面一样,下图是复制11.txt成功的实际例子。以上文件操作都需要注意文件的路径,路径可以是绝对路径类似"F:\test418\examples\11.txt",也可以是相对路径类似"11.txt"
关于python复制图片函数和python如何复制图片的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。






