Python/对图像进行处理 - Go语言中文社区

Python/对图像进行处理


一、用Python对图像进行处理


  • 1 图像的基础知识
  • 2 用Python玩转图像

图片就是一种文件,一堆信息的载体,一种数据

图片文件格式


  • RAW格式
  • BMP格式
  • PCX格式
  • TIFF格式
  • GIF格式
  • JPEG格式
  • TGA格式
  • EXIF格式
  • FPX格式
  • SVG格式
  • PSD格式
  • CDR格式
  • PCD格式
  • DXF格式
  • UFO格式
  • EPS格式
  • PNG格式

图片的分类


  • 栅格(位图)(放大会失真):常见图 片,照片
  • 矢量(图形)(放大不影响清晰度):插图,CAD,遥感

颜色模型


常见的模型包括

  • HSB (表示色相、饱和度、亮度):基于人类对颜色的感觉
  • RGB (表示红、绿、蓝):三色光,视频,显示器
  • CMYK(表示青、洋红、黄、黑):油墨,打印四色印刷
  • CIE Lab:颜色度量国际标准,与设备无关

大小


  • KB, MB, GB

坐标


  • 从左上角开始(0, 0)

应用


  • 照片
  • 图标
  • 页面图片
  • 卫星遥感
  • 地图

二、使用python处理图像


2.1、安装pillow

安装结束后,从PIL库中导入ImageColor

pip install pillow

导入操作

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from PIL import ImageColor

查看颜色RGB值

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from PIL import ImageColor

print(ImageColor.getcolor('red', 'RGB')) # 红色RGB值
print(ImageColor.getcolor('red', 'RGBA')) # 透明度
>>>
(255, 0, 0)
(255, 0, 0, 255)

2.2、做一个缩略图


下面我将以这张图作为本章案例:
在这里插入图片描述
使用Image

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os
from PIL import ImageColor 
from PIL import Image # 导入Image

os.chdir(r"F:Python_yanzan2018YanKai_Python_AdvancedYanKai_imagecore") # 进入图像的目录

IM = Image.open('timg.jpeg') # 使用Image.open 方法打开当前目录的图像赋值---->IM 对象
print(f"图片的格式为:{IM.format},图片的尺寸为:{IM.size},图片的模式:{IM.mode}") # 获取图像相关信息
>>>图片的格式为:JPEG,图片的尺寸为:(793, 726),图片的模式:RGB

获得图像尺寸

IM = Image.open('timg.jpeg') # 使用Image.open 方法打开当前目录的图像赋值---->IM 对象
A, B = IM.size
print(A, B)
>>>
>793 726

在这里插入图片描述原图尺寸为:793x726

将此图像缩放到50%如下:
缩放50% 也就是793/2-----726/2


IM = Image.open('timg.jpeg') # 使用Image.open 方法打开当前目录的图像赋值---->IM 对象
A, B = IM.size
print(f"这是没有缩略前的图片尺寸:{A}x{B}")
IM.thumbnail((A//2, B//2))
print(f"这是缩略后图片的尺寸{A//2}x{B//2}")
IM.save('timg.jpg', 'jpeg')
>>>
这是没有缩略前的图片尺寸:793x726
这是缩略后图片的尺寸396x363

打开验证
缩略后的图片尺寸
在这里插入图片描述缩略前图像尺寸
在这里插入图片描述
使用.show()方法在本地打开图片

IM.show() # 显示图片

在这里插入图片描述使用.resize()调整大小

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os
from PIL import ImageColor 
from PIL import Image # 导入Image

os.chdir(r"F:Python_yanzan2018YanKai_Python_AdvancedYanKai_imagecore") # 进入图像的目录

IM = Image.open('timg.jpeg') # 使用Image.open 方法打开当前目录的图像赋值---->IM 对象
# print(f"图片的格式为:{IM.format},图片的尺寸为:{IM.size},图片的模式:{IM.mode}") # 获取图像相关信息

IM = Image.open('timg.jpeg') # 使用Image.open 方法打开当前目录的图像赋值---->IM 对象
A, B = IM.size
print(f"这是没有缩略前的图片尺寸:{A}x{B}")
IM.thumbnail((A//2, B//2))
print(f"这是缩略后图片的尺寸{A//2}x{B//2}")
IM.save('timg2.jpeg', 'jpeg')
IM_size = IM.resize((A//4, B//4)) # 调整大小
IM_size.save('timg3.jpeg', 'jpeg')

在这里插入图片描述
将图像变高
将图像变高方法:高//3 宽//4 即可 如果还要更高则 高不变 宽//2 如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os
from PIL import ImageColor 
from PIL import Image # 导入Image

os.chdir(r"F:Python_yanzan2018YanKai_Python_AdvancedYanKai_imagecore") # 进入图像的目录

IM = Image.open('timg.jpeg') # 使用Image.open 方法打开当前目录的图像赋值---->IM 对象
# print(f"图片的格式为:{IM.format},图片的尺寸为:{IM.size},图片的模式:{IM.mode}") # 获取图像相关信息

IM = Image.open('timg.jpeg') # 使用Image.open 方法打开当前目录的图像赋值---->IM 对象
A, B = IM.size

IM_size = IM.resize((A//4, B)) # 调整大小  宽/高
IM_size.save('timg6.jpeg', 'jpeg')

在这里插入图片描述如何变宽???
在这里插入图片描述
如何增强效果?
使用ImageEnhance增强图像效果
左侧为:增强前, 右侧为:增强后
在这里插入图片描述代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os
from PIL import ImageColor 
from PIL import Image
from PIL import ImageEnhance

os.chdir(r"F:Python_yanzan2018YanKai_Python_AdvancedYanKai_imagecore") # 进入图像的目录

IM = Image.open('timg.jpeg') # 使用Image.open 方法打开当前目录的图像赋值---->IM 对象
# print(f"图片的格式为:{IM.format},图片的尺寸为:{IM.size},图片的模式:{IM.mode}") # 获取图像相关信息

IM = Image.open('timg.jpeg') # 使用Image.open 方法打开当前目录的图像赋值---->IM 对象
A, B = IM.size

enh = ImageEnhance.Contrast(IM)
enh.enhance(1.8).show("30% 增强对比度")
IM.save('timg9.jpeg', 'jpeg')

裁剪图像

box = (100, 100, 400, 400)
region = IM.crop(box)
region.save('timg15.jpeg')

在这里插入图片描述
如何旋转图像
为了明显表示,以下猫作为旋转图像

IM.rotate(90).save("90度旋转.jpg")
IM.rotate(180).save("180度旋转.jpg")
IM.rotate(40).save("40度旋转.jpg")

在这里插入图片描述如何镜像翻转

IM.transpose(Image.FLIP_LEFT_RIGHT).save("cat-水平.jpg")
IM.transpose(Image.FLIP_TOP_BOTTOM).save("cat-上下.jpg")

在这里插入图片描述

2.3、给图片加个水印


原图如下:
在这里插入图片描述水印图如下:
在这里插入图片描述
代码如下:

# 打开logo文件
log_image = Image.open('tj.jpeg')
log_image_w, log_image_h = log_image.size

# 打开目标文件
ret_image = Image.open('cat1.jpeg')
ret_image_w, ret_image_h = ret_image.size

# 粘贴:
image_copy = ret_image.copy()
image_copy.paste(log_image, (ret_image_w-log_image_w, ret_image_h-log_image_h))
image_copy.save('cat_logo.jpg')

在这里插入图片描述
如何创建新图像:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os
from PIL import ImageColor 
from PIL import Image
from PIL import ImageEnhance
from PIL import ImageDraw, ImageFont
IM_new = Image.new('RGBA', (500, 500), 'white') # 创建模式为:RGBA,500x500尺寸,white 背景
pic = ImageDraw.Draw(IM_new)  #  通过ImageDraw.Draw 创建图像
pic.text((100, 100), 'Yankerp Is ok!', fill='red')  #  在100x100位置输入Yankerp is ok 字体,颜色为red
IM_new.save('image_text.png') # 保存为新的图片

在这里插入图片描述

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os
from PIL import ImageColor 
from PIL import Image
from PIL import ImageEnhance
from PIL import ImageDraw, ImageFont
fonts_file = r'C:WindowsFontssimhei.ttf' # 定义windows字体位置
font = ImageFont.truetype(fonts_file, 30) # 选择字体类型以及字体大小
IM_new = Image.new('RGBA', (500, 500), 'white') # 创建RGBA 定义白色背景
pic = ImageDraw.Draw(IM_new) # 创建图像
pic.text((100, 100), 'Yankerp Is ok!', fill='red', font=font) # 写入Yankerp is ok 红色字体 字体选择font
IM_new.save('font_image.png') # 保存新的图片

在这里插入图片描述

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_39591494/article/details/88087465
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢