如何使用 Python 图像库裁剪通过鼠标单击选择的区域?

Posted

技术标签:

【中文标题】如何使用 Python 图像库裁剪通过鼠标单击选择的区域?【英文标题】:How to crop a region selected with mouse click, using Python Image Library? 【发布时间】:2011-07-07 16:03:55 【问题描述】:

有没有办法通过鼠标单击选择图像中的区域并使用 python PIL 裁剪这些区域?我该怎么做?

谢谢

【问题讨论】:

一旦你有了鼠标点击坐标,在 PIL 中就很容易了,但是你问如何获得鼠标点击?那将超出 PIL 的范围。 你会使用什么 gui lib? 【参考方案1】:

这篇文章的答案非常完善: Image Cropping using Python

它使用 pygame 作为 GUI。

【讨论】:

【参考方案2】:

PIL 库本身不提供 GUI 代码——您需要的是具有 GUI 的应用程序。我建议使用 Tkinter + PIL,但这绝不是微不足道的 - 你必须处理鼠标点击,创建一个跟踪它的矩形对象,有办法“重置”矩形,等等。

不幸的是,用于绘制事物的 Canvas Tkinter 小部件的文档记录很差 - 您必须在此处阅读它: http://www.pythonware.com/library/tkinter/introduction/canvas.htm

下面有一个示例代码,它从磁盘读取图像文件并将其绘制在 tkinter 窗口上。正如您所看到的,这里有一些对象正在杂耍以使其正确。

import Tkinter
import Image, ImageTk, ImageDraw

image_file = "svg.png"

w = Tkinter.Tk()

img = Image.open(image_file)
width, height = img.size
ca = Tkinter.Canvas(w, width=width, height=height)
ca.pack()
photoimg = ImageTk.PhotoImage("RGB", img.size)
photoimg.paste(img)
ca.create_image(width//2,height//2, image=photoimg)
Tkinter.mainloop()

【讨论】:

首先感谢您的回答。我使用您的示例,但我无法用鼠标选择图像并裁剪选择的图像。【参考方案3】:

我尝试制作一个这样的小工具来在 Jupyter 生态系统中运行,以便您可以裁剪图像,然后稍后在同一个笔记本中使用裁剪后的结果。它旨在适用于许多图像,让您按顺序裁剪每个图像。 Check it out and see if it works for you。可以通过pip install interactivecrop 安装,但您需要查看博客文章以获取使用说明。

【讨论】:

以上是关于如何使用 Python 图像库裁剪通过鼠标单击选择的区域?的主要内容,如果未能解决你的问题,请参考以下文章

Silverlight 4.0 - 使用鼠标事件进行图像裁剪

如何制作 Javafx 图像裁剪应用程序

上传时如何裁剪图像?

如何使用 Open CV 3 python 3 用鼠标从大图像中裁剪 ROI

如何在 Java 中裁剪图像?

裁剪图片到个人资料