使用OpenCV实现可交互图片裁剪功能

在本篇内容中,我们将讲解如何通过OpenCV库,编写一个基于Python的图片裁剪工具。此工具支持通过鼠标交互裁剪图片,并允许用户从文件资源管理器中自由选择裁剪图片。

核心功能:

  1. 文件选择器功能:通过Python接口调用系统文件资源管理器,用户可从中自由选择图片进行裁剪。

  2. 鼠标交互裁剪:借助OpenCV鼠标事件,实现按住鼠标拖动选择框裁剪图片区域的功能。

实现步骤:

  1. 安装依赖库:

    bash

    pip install opencv-python

  2. 代码示例

```python

import cv2

from tkinter import filedialog

import tkinter as tk

# 打开文件选择器

root = tk.Tk()

root.withdraw() # 隐藏主窗口

file_path = filedialog.askopenfilename(title='选择图片文件')

# 读取选择的图片

image = cv2.imread(file_path)

clone = image.copy()

# 定义裁剪区域

cropping = False

x_start, y_start, x_end, y_end = 0, 0, 0, 0

# 鼠标回调函数

def mouse_crop(event, x, y, flags, param):

global x_start, y_start, x_end, y_end, cropping

   if event == cv2.EVENT_LBUTTONDOWN:
       x_start, y_start, x_end, y_end = x, y, x, y
       cropping = True

   elif event == cv2.EVENT_MOUSEMOVE:
       if cropping:
           x_end, y_end = x, y

   elif event == cv2.EVENT_LBUTTONUP:
       x_end, y_end = x, y
       cropping = False
       # 裁剪并显示所选区域
       roi = clone[y_start:y_end, x_start:x_end]
       cv2.imshow("Cropped Image", roi)

# 绑定鼠标事件

cv2.namedWindow("Image")

cv2.setMouseCallback("Image", mouse_crop)

while True:

i = clone.copy()

if not cropping:

cv2.rectangle(i, (x_start, y_start), (x_end, y_end), (0, 255, 0), 2)

   cv2.imshow("Image", i)
   if cv2.waitKey(1) == 27:
       break

cv2.destroyAllWindows()

```

总结

通过PythonOpenCV结合,实现了一个简单的基于鼠标操作的图片裁剪工具,用户可以从文件资源管理器中选择图片并用鼠标自定义裁剪区域。此工具适合对图像进行简单编辑和处理的场景。

py 文件大小:2.2KB