python函数图像颜色 python图形颜色代码

python颜色压缩的结果颜色比保存颜色深

今天帮师姐解决一个bug,测试了Python图像resize前后颜色不一致问题。

宜良网站制作公司哪家好,找创新互联公司!从网页设计、网站建设、微信开发、APP开发、成都响应式网站建设公司等网站项目制作,到程序开发,运营维护。创新互联公司于2013年成立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联公司

代码片段执行的功能:图像指定倍数超分辨率,输入为[0-1] float型数据,输出为格式不限的图像

bug:输入图像与输出图像颜色不一致

一、把产生bug的功能片段做分离测试:

1 import h5py

2 import numpy as np

3 import matplotlib.pyplot as plt

4 from PIL import Image

5 from scipy import misc

6

7

8 def get_result_array():

9 file_name = "./butterfly_GT.bmp"

10 img_no_expand = misc.imread(file_name, flatten=False, mode='YCbCr')

11 img_no_expand = img_no_expand / 255.0

12 # img_no_expand = np.uint8(img_no_expand*255)

13 h, w = img_no_expand.shape[:2]

14 print(img_no_expand.shape)

15 h *= 2

16 w *= 2

17 data = list()

18

19 data.append(misc.imresize(img_no_expand[:, :, 0], [h, w], 'bicubic')[:,:,None])

20 data.append(misc.imresize(img_no_expand[:, :, 1], [h, w], 'bicubic')[:,:,None])

21 data.append(misc.imresize(img_no_expand[:, :, 2], [h, w], 'bicubic')[:,:,None])

22 data_out = np.concatenate(data, axis=2)

23 img = misc.toimage(arr=data_out, mode="YCbCr")

24 img.save("out_3.jpg")

25

26

27 if __name__=='__main__':

28 get_result_array()

运行代码:

左图为输入图像,右图为输出图像。为了便于对比,把输出图像缩放至与输入图像一致,由图可见,输出图像色彩严重失真。

二、在pycharm中,Ctrl+B 查看源码:

三、发现可以选择模式,猜想可能是模式有误:

四、在函数的实现的第一行,初始化Image类,猜想初始化参数设置错误。

五、在类的初始化过程中,默认图像的最大值为255,而实际输入是0-1的float型数据。找到了错误之处。

六、仔细查看文档,mode可以修改。0-1float型数据对应mode=“F”:

七、于是,在代码中加入参数:

八、插值后处理

插值之后部分像素点数值可能大于1,这时有两种做法,一种是归一化,一种是截断。经过实验发现,归一化操作往往会使图像整体亮度变暗,对图像整体视觉效果有较大影响,因此这里选择截断。

九、最终代码如下:

1 import h5py

2 import numpy as np

3 import matplotlib.pyplot as plt

4 from PIL import Image

5 from scipy import misc

6

7

8 def get_result_array():

9 file_name = "./butterfly_GT.bmp"

10 img_no_expand = misc.imread(file_name, flatten=False, mode='YCbCr')

11 img_no_expand = img_no_expand / 255.0

12 # img_no_expand = np.uint8(img_no_expand*255)

13 h, w = img_no_expand.shape[:2]

14 print(img_no_expand.shape)

15 h *= 2

16 w *= 2

17 data = list()

18 data.append(misc.imresize(img_no_expand[:, :, 0], [h, w], 'bicubic', mode="F")[:,:,None])

19 data.append(misc.imresize(img_no_expand[:, :, 1], [h, w], 'bicubic', mode="F")[:,:,None])

20 data.append(misc.imresize(img_no_expand[:, :, 2], [h, w], 'bicubic', mode="F")[:,:,None])

21 data_out = np.concatenate(data, axis=2)

22 data_out[data_out 1] = 1.0

23 data_out = np.uint8(data_out * 255)

24 img = misc.toimage(arr=data_out, mode="YCbCr")

25 img.save("out_4.jpg")

26

27

28 if __name__=='__main__':

29 get_result_array()

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 matplotlib之函数图像绘制、线条rc参数设置

为避免中文显示出错,需导入matplotlib.pylab库

1.2.1 确定数据

1.2.2 创建画布

1.2.3 添加标题

1.2.4 添加x,y轴名称

1.2.5 添加x,y轴范围

1.2.6 添加x,y轴刻度

1.2.7 绘制曲线、图例, 并保存图片

保存图片时,dpi为清晰度,数值越高越清晰。请注意,函数结尾处,必须加plt.show(),不然图像不显示。

绘制流程与绘制不含子图的图像一致,只需注意一点:创建画布。

合理调整figsize、dpi,可避免出现第一幅图横轴名称与第二幅图标题相互遮盖的现象.

2.2.1 rc参数类型

2.2.2 方法1:使用rcParams设置

2.2.3 方法2:plot内设置

2.2.4 方法3:plot内简化设置

方法2中,线条形状,linestyle可简写为ls;线条宽度,linewidth可简写为lw;线条颜色,color可简写为c,等等。

Python中用turtle画的两条线围成的图形怎么填充颜色?

你好,答案如下所示。

填充为黄色

填充效果

希望你能够详细查看。

如果你有不会的,你可以提问

我有时间就会帮你解答。

希望你好好学习。

每一天都过得充实。

在python里,如何实现点击开始按钮,开始慢慢在不同位置出现不同颜色的不同图形?

示例代码

# 导入Tkinter模块

from tkinter import *

# 创建一个窗口

window = Tk()

# 定义一个函数,用来生成图形

def generate_shape():

# 使用随机数生成不同的图形和颜色

shape = random.choice(["circle", "square", "triangle"])

color = random.choice(["red", "green", "blue"])

# 使用随机数生成不同的位置

x = random.randint(0, 200)

y = random.randint(0, 200)

# 在窗口中绘制图形

if shape == "circle":

# 绘制圆形

canvas.create_oval(x, y, x + 50, y + 50, fill=color)

elif shape == "square":

# 绘制正方形

canvas.create_rectangle(x, y, x + 50, y + 50, fill=color)

else:

# 绘制三角形

points = [x, y, x + 50, y + 50, x + 25, y + 75]

canvas.create_polygon(points, fill=color)

# 创建一个画布

canvas = Canvas(window, width=200, height=200)

canvas.pack()

# 创建一个按钮

button = Button(window, text="Start", command=generate_shape)

button.pack()

# 进入消息循环

window.mainloop()


文章标题:python函数图像颜色 python图形颜色代码
路径分享:http://cdiso.cn/article/docchop.html

其他资讯