Python 中常用图像数据结构

本文探讨了Python中图像数据结构的使用,包括OpenCV、Matplotlib和Pillow在处理图像时的不同方式。重点讲解了如何通过NumPy数组进行图像操作,如通道顺序转换、图像截取和颜色通道分离。同时,文章还讨论了图像的深拷贝、浅拷贝以及透明度通道的应用。
摘要由CSDN通过智能技术生成

(原文:https://blog.iyatt.com/?p=13222 )

1 测试环境

Python 3.12.1

numpy 1.26.3
opencv-python 4.9.0.80
pillow 10.2.0
matplotlib 3.8.2

注:

  • 基于 2022.1.16 和 2022.4.9 的三篇博文再次验证并重写,原文已删除
  • 测试使用的图片文件为 AI 绘制

2 图像数据结构

2.1 OpenCV 打开图片并显示

Python 版 OpenCV 中图像数据是用的 NumPy 数组存储,通道顺序为 BGRA(蓝 绿 红 透明度),三通道则为 BGR。

import cv2

image_path = 'demo.png' # 图片路径

img = cv2.imread(image_path) # 打开图片文件
cv2.imshow('my image', # 窗口标题
           img) # 图像数据
cv2.waitKey(0) # 阻塞窗口,按任意键继续
cv2.destroyAllWindows() # 关闭所有窗口

file

2.2 Matplotlib 打开图片并显示

Matplotlib 和 OpenCV 一样都是采用的 NumPy 数组存储图像数据,只是通道顺序为 RGB。

import matplotlib.pyplot as plt

image_path = 'demo.png'

image = plt.imread(image_path)
plt.axis('off') # 不显示坐标轴
plt.imshow(image)
plt.show()

file

2.3 Pillow 打开图片用 OpenCV 显示

Pillow 是 Python 中较为常用的图像库。

from PIL import Image
import cv2
import numpy as np

image_path = 'demo.png'

pillow_image = Image.open(image_path)
opencv_image = cv2.cvtColor(
    np.array(pillow_image), # Pillow 图像数据结构转 NumPy
    cv2.COLOR_RGB2BGR # 通道顺序由 RGB 转为 BGR
)
cv2.imshow('Pillow Image To OpenCV Image', opencv_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

2.4 OpenCV 打开图片用 Tkinter 显示(OpenCV 转 Pillow)

Tkinter 是 Python 的官方 GUI 库,Pillow 的图像数据支持直接在 Tkinter 中显示,因此这里把 OpenCV 图像转为 Pillow 再到 Tkinter 中显示。

import cv2
import tkinter as tk
from PIL import Image, ImageTk

image_path = 'demo.png'

class Application(tk.Frame):
    def __init__(self, master):
        super().__init__(master)
        self.master = master

    def interface(self):
        global pillow_image # 注意 Tkinter 显示的图片要使用全局变量

        opencv_image = cv2.imread(image_path)
        pillow_image = ImageTk.PhotoImage(
            Image.fromarray(
                cv2.cvtColor(
                    opencv_image,
                    cv2.COLOR_BGR2RGB
                )
            )
        )

        tk.Label(self.master, image=pillow_image).pack()

if __name__ == '__main__':
    root = tk.Tk()
    root.title('OpenCV 打开图片并在 Tkinter 中显示') # 窗口标题
    app = Application(root)
    app.interface()
    root.mainloop()

file

2.5 Pillow 打开图片并使用 Tkinter 显示

import tkinter as tk
from PIL import Image, ImageTk

image_path = 'demo.png'

class Application(tk.Frame):
    def __init__(self, master):
        super()
  • 15
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
结构化数据转图像是指将具有一定结构和格式的数据转换成图像的过程。Python是一种强大的编程语言,可以用来进行结构化数据转图像的操作。 在Python,我们可以使用各种图像处理库来实现结构化数据转图像的功能。其,最常用的是Pillow库。Pillow库提供了一系列用于处理图像的函数和类,可以通过编写Python代码来转换结构化数据为图像。 要实现结构化数据转图像的功能,我们可以按照以下步骤进行操作: 1. 定义结构化数据:首先,我们需要定义和准备待转换的结构化数据。该数据可以是一维数组、二维表格、矩阵等具有一定结构的数据。 2. 创建空白图像:使用Pillow的函数,我们可以创建一个空白的图像对象。可以指定图像的宽度、高度、颜色等属性。 3. 遍历结构化数据:使用循环结构,我们可以遍历待转换的结构化数据。根据数据的值,可以决定在图像上绘制的内容和位置。 4. 绘制图像:根据遍历过程获取的数据值,在图像上进行绘制操作。可以使用Pillow库提供的绘制函数,例如绘制点、线段、矩形、文本等。 5. 保存图像:绘制完成后,可以使用Pillow库提供的函数将图像保存到本地文件系统。可以指定保存路径和格式等参数。 通过以上步骤,我们可以将结构化数据转换成图像,并保存在本地文件系统。这样,我们就可以将数据以图像的形式进行可视化展示或进行其他相关操作。 总结:结构化数据转图像是一项将具有一定结构和格式的数据转换成图像的任务。Python提供了许多图像处理库,例如Pillow库,可以用来实现结构化数据转图像的功能。通过定义数据、创建空白图像、遍历数据、绘制图像和保存图像等步骤,我们可以将结构化数据转换成图像,并进行必要的操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

astuv

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值