# luumod/simpleips architecture

> Architecture diagram of the GitHub repository luumod/simpleips, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-10-01). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/luumod/simpleips
- Repository: https://github.com/luumod/simpleips

## Overview

This is a Qt/OpenCV desktop image-processing application. The main workflow is opening an image, choosing adjustable processing operations, and viewing or saving the result; a mixed-processing mode supports previews and undo snapshots. The README also documents drawing, screenshots, histogram/equalization tools, and video interfaces. The excerpts establish shared image state, operation classes, and parts of video capture, but not all runtime dispatch paths, so uncertain links are omitted or marked dashed.

Main entry points: [`Include/Widget/widget.h`](https://github.com/luumod/simpleips/blob/main/Include/Widget/widget.h) (Main window), [`source/videocapwork.cpp`](https://github.com/luumod/simpleips/blob/main/source/videocapwork.cpp) (Video capture), [`Include/Widget/ShowImgWidget.h`](https://github.com/luumod/simpleips/blob/main/Include/Widget/ShowImgWidget.h) (Image views), [`Include/assist/Res.h`](https://github.com/luumod/simpleips/blob/main/Include/assist/Res.h) (Image state)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Application UI"]
  node_main["Main window<br/>[widget.h]"]
  node_image_views["Image views<br/>[ShowImgWidget.h]"]
  node_capture_ui["Screenshot UI<br/>[CaptureWidget.h]"]
  node_draw_ui["Drawing UI<br/>[DrawWidget.h]"]
  node_look_ui["Image inspection<br/>[LookWidget.h]"]
end

subgraph group_image["Image workflow"]
  node_image_state["Image state<br/>[Res.h]"]
end

subgraph group_ops["Image operations"]
  node_base_ops["Basic operations<br/>[BaseOperate.cpp]"]
  node_blur["Blur<br/>[Blur.cpp]"]
  node_threshold["Threshold<br/>[Threshold.cpp]"]
  node_morphology["Morphology<br/>[Morphology.cpp]"]
  node_connected["Connected regions<br/>[Connected.cpp]"]
  node_contours["Contours<br/>[Contours.cpp]"]
  node_enhancement["Image enhancement<br/>[Showeffect.cpp]"]
end

subgraph group_video["Video workflow"]
  node_video_capture["Video capture<br/>[videocapwork.cpp]"]
  node_frame_filter["Frame filtering<br/>[framefilter.cpp]"]
  node_frame_ops["Frame operations<br/>[frameoperator.cpp]"]
  node_video_view["Video display<br/>[videowidget.cpp]"]
end

subgraph group_support["Shared support"]
  node_conversion["Image conversion<br/>[Mat2QImage.h]"]
  node_scene["Graphics scene<br/>[GraphicsScene.cpp]"]
end

node_user(("User"))

node_user -->|"uses"| node_main
node_main -.->|"manages image state"| node_image_state
node_main -.->|"selects operations"| node_blur
node_main -.->|"selects operations"| node_threshold
node_main -.->|"selects operations"| node_morphology
node_main -.->|"selects operations"| node_connected
node_main -.->|"selects operations"| node_contours
node_main -.->|"selects operations"| node_enhancement
node_main -.->|"selects operations"| node_base_ops
node_main -.->|"displays images"| node_image_views
node_capture_ui -->|"shows capture"| node_image_views
node_look_ui -->|"opens view"| node_image_views
node_draw_ui -->|"uses scene"| node_scene
node_image_state -.->|"converts matrices"| node_conversion
node_video_capture -->|"imports filter"| node_frame_filter
node_main -.->|"offers video interface"| node_video_capture
node_video_capture -.->|"dispatches frames"| node_frame_ops
node_video_capture -.->|"supplies frames"| node_video_view

click node_main "https://github.com/luumod/simpleips/blob/main/Include/Widget/widget.h"
click node_image_views "https://github.com/luumod/simpleips/blob/main/Include/Widget/ShowImgWidget.h"
click node_capture_ui "https://github.com/luumod/simpleips/blob/main/Include/Widget/CaptureWidget.h"
click node_draw_ui "https://github.com/luumod/simpleips/blob/main/Include/Widget/DrawWidget.h"
click node_look_ui "https://github.com/luumod/simpleips/blob/main/Include/Widget/LookWidget.h"
click node_image_state "https://github.com/luumod/simpleips/blob/main/Include/assist/Res.h"
click node_base_ops "https://github.com/luumod/simpleips/blob/main/source/BaseOperate.cpp"
click node_blur "https://github.com/luumod/simpleips/blob/main/source/Blur.cpp"
click node_threshold "https://github.com/luumod/simpleips/blob/main/source/Threshold.cpp"
click node_morphology "https://github.com/luumod/simpleips/blob/main/source/Morphology.cpp"
click node_connected "https://github.com/luumod/simpleips/blob/main/source/Connected.cpp"
click node_contours "https://github.com/luumod/simpleips/blob/main/source/Contours.cpp"
click node_enhancement "https://github.com/luumod/simpleips/blob/main/source/Showeffect.cpp"
click node_video_capture "https://github.com/luumod/simpleips/blob/main/source/videocapwork.cpp"
click node_frame_filter "https://github.com/luumod/simpleips/blob/main/source/framefilter.cpp"
click node_frame_ops "https://github.com/luumod/simpleips/blob/main/source/frameoperator.cpp"
click node_video_view "https://github.com/luumod/simpleips/blob/main/source/videowidget.cpp"
click node_conversion "https://github.com/luumod/simpleips/blob/main/Include/assist/Mat2QImage.h"
click node_scene "https://github.com/luumod/simpleips/blob/main/source/GraphicsScene.cpp"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_main,node_image_views,node_capture_ui,node_draw_ui,node_look_ui,node_user toneBlue
class node_image_state toneAmber
class node_base_ops,node_blur,node_threshold,node_morphology,node_connected,node_contours,node_enhancement toneMint
class node_video_capture,node_frame_filter,node_frame_ops,node_video_view toneRose
class node_conversion,node_scene toneIndigo
```

## Components

### Application UI

- [Main window](https://github.com/luumod/simpleips/blob/main/Include/Widget/widget.h): `Include/Widget/widget.h`
- [Image views](https://github.com/luumod/simpleips/blob/main/Include/Widget/ShowImgWidget.h): `Include/Widget/ShowImgWidget.h`
- [Screenshot UI](https://github.com/luumod/simpleips/blob/main/Include/Widget/CaptureWidget.h): `Include/Widget/CaptureWidget.h`
- [Drawing UI](https://github.com/luumod/simpleips/blob/main/Include/Widget/DrawWidget.h): `Include/Widget/DrawWidget.h`
- [Image inspection](https://github.com/luumod/simpleips/blob/main/Include/Widget/LookWidget.h): `Include/Widget/LookWidget.h`

### Image workflow

- [Image state](https://github.com/luumod/simpleips/blob/main/Include/assist/Res.h): `Include/assist/Res.h`

### Image operations

- [Basic operations](https://github.com/luumod/simpleips/blob/main/source/BaseOperate.cpp): `source/BaseOperate.cpp`
- [Blur](https://github.com/luumod/simpleips/blob/main/source/Blur.cpp): `source/Blur.cpp`
- [Threshold](https://github.com/luumod/simpleips/blob/main/source/Threshold.cpp): `source/Threshold.cpp`
- [Morphology](https://github.com/luumod/simpleips/blob/main/source/Morphology.cpp): `source/Morphology.cpp`
- [Connected regions](https://github.com/luumod/simpleips/blob/main/source/Connected.cpp): `source/Connected.cpp`
- [Contours](https://github.com/luumod/simpleips/blob/main/source/Contours.cpp): `source/Contours.cpp`
- [Image enhancement](https://github.com/luumod/simpleips/blob/main/source/Showeffect.cpp): `source/Showeffect.cpp`

### Video workflow

- [Video capture](https://github.com/luumod/simpleips/blob/main/source/videocapwork.cpp): `source/videocapwork.cpp`
- [Frame filtering](https://github.com/luumod/simpleips/blob/main/source/framefilter.cpp): `source/framefilter.cpp`
- [Frame operations](https://github.com/luumod/simpleips/blob/main/source/frameoperator.cpp): `source/frameoperator.cpp`
- [Video display](https://github.com/luumod/simpleips/blob/main/source/videowidget.cpp): `source/videowidget.cpp`

### Shared support

- [Image conversion](https://github.com/luumod/simpleips/blob/main/Include/assist/Mat2QImage.h): `Include/assist/Mat2QImage.h`
- [Graphics scene](https://github.com/luumod/simpleips/blob/main/source/GraphicsScene.cpp): `source/GraphicsScene.cpp`

### Other components

- **User**

## Connections

- User → Main window: uses
- Main window → Image state: manages image state (evidence: `Include/assist/Res.h`)
- Main window → Blur: selects operations (evidence: `source/Blur.cpp`)
- Main window → Threshold: selects operations
- Main window → Morphology: selects operations
- Main window → Connected regions: selects operations (evidence: `source/Connected.cpp`)
- Main window → Contours: selects operations (evidence: `source/Contours.cpp`)
- Main window → Image enhancement: selects operations (evidence: `source/Showeffect.cpp`)
- Main window → Basic operations: selects operations (evidence: `source/BaseOperate.cpp`)
- Main window → Image views: displays images
- Screenshot UI → Image views: shows capture (evidence: `source/CaptureWidget.cpp`)
- Image inspection → Image views: opens view (evidence: `source/LookWidget.cpp`)
- Drawing UI → Graphics scene: uses scene
- Image state → Image conversion: converts matrices
- Video capture → Frame filtering: imports filter (evidence: `source/videocapwork.cpp`)
- Main window → Video capture: offers video interface (evidence: `source/videocapwork.cpp`)
- Video capture → Frame operations: dispatches frames
- Video capture → Video display: supplies frames
