A modular, plugin-based visual programming framework for computer vision research using OpenCV and Qt NodeEditor.
VisionBox provides a node-based visual programming environment for designing and executing computer vision pipelines. Its plugin-based architecture allows for easy extension with custom nodes and algorithms.
- Visual Node-Based Programming: Design CV pipelines using a drag-and-drop interface
- Plugin Architecture: Extensible system for adding custom nodes
- OpenCV Integration: Built-in support for OpenCV operations
- Qt 6 Support: Native Qt 6.4 with full Wayland support
- Modern C++: C++20 standard with smart pointers and RAII
- 29 Built-in Plugins: 56 node models covering all major CV operations
This implementation represents Phase 1 of VisionBox, establishing the core foundation:
- Project structure and CMake build system
- Clang toolchain integration (clang-format, clang-tidy)
- Qt NodeEditor integration
- Core data types (ImageData, DetectionData, KeypointData)
- Plugin interface and manager
- Basic main window UI with node editor canvas
- Unit tests for data types
- Source node plugins (ImageLoader, VideoLoader, CameraSource)
- Basic filter plugins (Blur, Threshold, Morphology, ColorConvert)
- Display node plugins (ImageViewer, Histogram)
- Pipeline serialization (save/load node graphs)
- CMake: 3.16 or higher
- C++ Compiler: C++20 compliant (GCC 10+, Clang 12+, MSVC 2019+)
- Qt: 6.0+ (preferred) or 5.12+ (Core, Widgets, Test modules)
- OpenCV: 4.0+ (core, imgproc, imgcodecs, videoio modules)
Qt 6 Recommendation: Qt 6.4+ provides native Wayland support and improved performance.
- clang-format: For code formatting
- clang-tidy: For static analysis
git clone <repository-url>
cd vision-box
git submodule update --init --recursiveNote: If the QtNodes submodule was not properly initialized, you may need to add it manually:
git submodule add https://github.com/QtNodes/QtNodes.git external/QtNodes
git submodule update --init --recursivemkdir build && cd buildcmake ..Options:
-DBUILD_TESTS=OFFto disable unit tests-DENABLE_CLANG_TOOLS=OFFto disable clang-format/clang-tidy targets
cmake --build .ctest --output-on-failure./VisionBoxQt 6 + Wayland: If you have Qt 6.4+, the application will use native Wayland backend with full dialog support. No additional configuration needed.
Qt 5.15: For Qt 5.15 on Wayland, see docs/WAYLAND_COMPATIBILITY.md for compatibility options.
# Load plugins from custom directory
./VisionBox --plugin-dir /path/to/plugins
# List all loaded plugins
./VisionBox --list-plugins
# Disable automatic plugin loading
./VisionBox --no-auto-load-
Load Plugins: Plugins are automatically loaded from default directories
- System:
<install-dir>/plugins - User:
~/.local/share/VisionBox/plugins(Linux) - Or use Plugins → Load Plugins... menu
- System:
-
Add Nodes: Right-click on the canvas to add nodes from loaded plugins
-
Connect Nodes: Drag between node ports to establish data flow
-
Save/Load: Use File menu to save and load node graphs
VisionBox uses clang-format for consistent code style:
# Format all code
./scripts/format_code.sh
# Check formatting
./scripts/check_format.sh
# Run static analysis
./scripts/run_tidy.shInstall pre-commit and pre-push hooks:
./scripts/setup_git_hooks.shSee plugins/README.md for plugin development guide (available in Phase 2).
vision-box/
├── CMakeLists.txt # Root build configuration
├── .clang-format # Code formatting config
├── .clang-tidy # Static analysis config
├── scripts/ # Utility scripts
├── src/ # Core application
│ ├── core/ # Core functionality
│ │ ├── PluginInterface.h # Plugin interface
│ │ ├── PluginManager.{h,cpp} # Plugin manager
│ │ └── VisionDataTypes.{h,cpp} # Data types
│ ├── ui/ # User interface
│ │ ├── MainWindow.{h,cpp}
│ │ └── DataFlowGraphModel.h
│ └── main.cpp
├── plugins/ # Built-in plugins (Phase 2)
├── external/ # External dependencies
│ └── QtNodes/ # Qt NodeEditor submodule
├── tests/ # Unit tests
└── cmake/ # CMake modules
[Specify your license here]
[Specify contribution guidelines here]
- Phase 1: Infrastructure (Current)
- Phase 2: Core Plugins
- Phase 3: Advanced Features
- Phase 4: Optimization
- Phase 5: Multi-threading and GPU support