# SplitPicture **Repository Path**: ylxdxx/splitpicture ## Basic Information - **Project Name**: SplitPicture - **Description**: 图像分割工具 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-02-14 - **Last Updated**: 2026-02-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SplitPicture 图像分割工具 SplitPicture 是一款基于 Qt 和 OpenCV 的图形化工具,旨在帮助用户快速对图像进行区域划分、裁剪、去除白边,并支持通过外部程序进行扩展处理。它具有直观的鼠标交互、实时预览、文件自动监控以及灵活的命令行配置。 项目地址:[gitee.com/ylxdxx/splitpicture](https://gitee.com/ylxdxx/splitpicture) ## 主要功能 - **图像加载**:支持 PNG、JPG、JPEG、BMP 等常见格式。 - **矩形绘制与管理**:在图像上绘制多个矩形框,每个框代表一个感兴趣区域。 - 左键拖动绘制新矩形。 - 单击矩形可选中,拖动移动位置,边缘拖动缩放大小。 - 右键单击矩形弹出上下文菜单,可删除、去除白边等。 - **去白边**:自动识别矩形内的图像内容,裁剪掉多余的白色边缘。 - **切割图片**:根据所有矩形将原图分割成多个子图像,并保存到指定目录。 - **复制图像:** 可将矩形区域的图片内容复制到剪贴板。 - **填白功能**: - 左键绘制矩形时,若开启“填白”模式,则矩形区域被填充为白色,且不保留矩形框。 - 右键单击已有矩形,可选择“填充内部并删除矩形”或“填充外部并保留矩形”。 - **视图控制**: - 滚轮缩放图像,中键拖动平移。 - 重置缩放。 - **文件自动监控**:每隔 150 ms 检查当前图片文件是否被外部修改,若修改则自动重新加载(缩放、平移重置,矩形清空)。 - **外部程序集成**:通过右键菜单调用外部程序对当前图片进行处理。 - **命令行参数**:支持通过命令行传入图片路径、输出前缀、输出目录、自动加白边、外部程序路径等。 ## 图形界面操作说明 ### 启动界面 - 启动后显示空白画布,背景为深色网格。 ### 加载图片 - **方式一**:右键空白处 → “加载背景图片”,从文件选择对话框加载。 - **方式二**:通过命令行 `-i` 参数直接加载图片。 ### 矩形操作 | 操作 | 说明 | | ---------------------- | ------------------------------------------------------------------------------------------ | | 左键拖动 | 在空白处绘制新矩形(若填白模式开启则填充白色,不保留矩形框) | | 左键单击矩形 | 选中矩形(高亮显示) | | 左键拖动已选矩形内部 | 移动矩形位置 | | 左键拖动矩形边缘 | 缩放矩形大小 | | 右键单击矩形 | 弹出菜单,可删除、复制内容、去白边、填充内外等 | | 右键空白处 | 弹出全局菜单,可加载图片、重置缩放、删除所有矩形、切割图片、调用外部程序、开关填白模式等 | ### 填白模式 - 右键空白处菜单中“填白”为可勾选项。 - 开启后,左键绘制的新矩形 **不会** 被记录,直接填充白色。 - 关闭后,正常添加矩形框。 ### 其他功能 - **重置缩放**:右键空白处 → “重置缩放”。 - **去除白边**:选中矩形 → 右键 → “去除白边”;或全局菜单“去除所有白边”。 - **复制内容:** 选中矩形 → 右键 → “复制矩形内容”。 - **切割图片**:右键空白处 → “切割图片”,将每个矩形区域保存为单独文件。 - 文件名格式:若只有一个矩形,则使用原文件名;若有多个,则使用“前缀 + 字母序号(a, b, c...)”。 - 输出目录和前缀可通过命令行或右键菜单上方信息栏查看当前设置。 ## 键盘操作说明 - **Ctrl-C:** 当选中矩形框后,按下 `Ctrl-C` 会将图片矩形内容部分复制到剪贴板 - **Esc:** 在主界面,按 `Esc` 键将直接关闭窗口退出程序 ## 命令行参数 SplitPicture 支持以下命令行选项: | 短选项 | 长选项 | 参数 | 说明 | | -------- | -------- | ------ | --------------------------------------------------- | | `-h` | `--help` | 无 | 显示帮助信息 | | `-v` | `--version` | 无 | 显示版本信息 | | `-i` | `--input` | `input` | 输入图片路径 | | `-p` | `--prefix` | `prefix` | 输出文件名前缀(默认使用原文件名) | | `-d` | `--directory` | `directory` | 输出文件保存目录(默认与原图相同) | | `-a` | `--add` | `add` | 打开图片时自动添加白边(参数为边框像素数,如 50) | | `-E` | `--edit` | `edit program` | 外部编辑程序的路径(默认`comicenhancerpro`) | | `-S` | `--scale` | `scale program` | 外部超分程序的路径(默认`upscayl-bin`) | ### 示例 ``` splitpicture -i example.png -p output -d /home/user/images -a 50 splitpicture --help splitpicture -E /usr/bin/comicenhancerpro -S /usr/local/bin/upscayl-bin ``` ## 外部程序集成 通过右键菜单的“编辑”和“超分”可以调用外部程序对当前图片进行处理。 - **编辑**:调用图片编辑程序,仅传递图片路径作为参数。 推荐使用老马的 ComicEnhancerPro,通过 wine 可以完美运行 - **超分**:调用图片超分程序,二级子菜单 “2x”、“3x” 和 “4x” 对应图片超分倍数 推荐使用 Upscayl,在 [这里](https://github.com/upscayl/upscayl/tree/main/resources/linux/bin) 可以找到 Linux 下的可执行文件 程序路径通过以下方式指定(优先级从高到低): 1. 命令行 `-E` / `-S` 参数。 2. 未指定时使用默认值 `comicenhancerpro` / `upscayl-bin`(将在系统 PATH 中查找)。 3. 如果路径无效,会弹出错误提示。 程序路径可以是: - 绝对路径(如 `/usr/bin/upscayl-bin`)。 - 相对路径(如 `./upscayl-bin`)。 - 仅命令名(如 `upscayl-bin`),将在 PATH 中搜索。 ## 文件自动监控 - 当图片通过命令行或菜单加载后,程序会启动一个 150ms 定时器,检查文件的最后修改时间。 - 若文件被外部程序修改(如保存),程序自动重新加载图片,同时 **重置缩放、平移并清空所有矩形**,保证与最新内容同步。 - 加载失败时会弹出警告,原图保持不变。 ## 模块化设计 程序由以下几个模块组成,职责清晰,易于扩展: | 模块 | 文件 | 职责 | | ------------ | ------ | ------------------------------------------------------------------------------------ | | 主窗口 | `mainwindow.h/cpp` | 顶层窗口,持有画布,设置窗口尺寸、标题等 | | 画布 | `drawingcanvas.h/cpp` | 核心交互:图片显示、矩形绘制、鼠标事件、缩放平移、右键菜单、文件监控、外部程序调用 | | 命令行解析 | `commandlineoptions.h/cpp` | 解析命令行参数,提供默认值,供主窗口初始化画布 | | 图像处理 | `imageprocessor.h/cpp` | 封装 OpenCV 操作:格式转换、加白边、去白边、提取 ROI 等 | | 主函数 | `main.cpp` | 初始化应用、解析命令行、创建主窗口、连接信号 | ### 关键类说明 #### `DrawingCanvas` - **属性**:`m_backgroundImage`(QPixmap 显示)、`m_displayImage`(OpenCV 原图)、`m_rectangles`(矩形列表)、`m_fillWhiteEnabled`(填白开关)、`m_programEdit`/`m_programScale`(外部程序路径)等。 - **信号**:`titleChangeRequested`(请求更新窗口标题)、`imageLoaded`(图片加载完成)。 - **槽**:`loadBackgroundImage`、`splitImageByRects`、`removeWhiteBorder`、`fillRectAndDelete`、`fillOutsideAndKeep`、`toggleFillWhite` 等。 #### `ImageProcessor`(静态类) - 提供纯静态方法,无状态,便于复用。 ## 编译与依赖 ### 依赖库 - **Qt6**(Core, Gui, Widgets) - **OpenCV**(core, imgproc, imgcodecs) - **wl-clipboard** (可选,建议 Wayland 环境安装) ### 编译步骤 1. 安装依赖: 跟据自己的发行版安装相应的依赖库 2. 使用 cmake 构建: ``` mkdir build cd build cmake .. make ``` 3. 安装,可以使用 `make install` ## 常见问题 ### Q: 外部程序调用失败,提示找不到程序。 A: 请使用 `-E` / `-S` 指定完整路径,或确保默认程序名在系统 `PATH` 中。程序会给出明确错误提示。 ### Q: 如何添加更多自定义处理? A: 扩展 `DrawingCanvas`,在右键菜单中添加新动作,并实现对应的槽函数。若涉及图像处理,可在 `ImageProcessor` 中添加新方法。 ### Q: 想自定义 `upscayl-bin` 参数? A:修改 `drawingcanvas.cpp` 中图片超分二级子菜单参数值,如 `QStringList args = {"-i", m_fileName, "-o", m_fileName, "-s", "2", "-n", "digital-art-4x" };`