references/go-wasmcv is used as the initial interface seed for go-opencv.
The reference is generated from WIT and models wasm guest modules importing OpenCV functions from a host. go-opencv uses the opposite execution direction: Go host calls an OpenCV wasm backend. Still, its resource and module vocabulary is useful.
| wasmcv concept | go-opencv public API | go-opencv backend ABI |
|---|---|---|
cm.Resource |
opaque Go struct with Close/Delete |
integer handle |
cm.Result[..., T, ErrorResult] |
(T, error) |
error code + out parameter/handle |
wasm:cv/mat |
Mat methods |
goopencv_mat_* |
wasm:cv/cv |
Runtime methods/functions |
goopencv_imgproc_*, goopencv_core_* |
| generated enum | Go named integer type | integer code |
types:Size,Point,Scalar,Rect,RGBA, common enums.mat:Matresource lifecycle, slicing, element access, metadata.cv: drawing, imgproc, array operations.dnn: blob params and network operations.features2d: keypoints, descriptors, matchers.objdetect: cascade/HOG/face detector resources.
- Keep root package
github.com/brainplusplus/go-opencvas user-facing library. - Do not expose
go.bytecodealliance.org/cmor WIT generated types publicly. - Prefer OpenCV.js-ish naming where useful, Go error returns everywhere.
- Every owning object must have
Close() error; OpenCV.js aliasDelete() errormay exist. - Backend ABI remains flat and stable, even if public API grows.
Examples:
Mat.Rows()->goopencv_mat_rowsMat.Clone()->goopencv_mat_cloneRuntime.Canny(...)->goopencv_imgproc_cannyRuntime.Circle(...)->goopencv_imgproc_circleCascadeClassifier.DetectMultiScale(...)->goopencv_objdetect_cascade_classifier_detect_multi_scale
- Seed contract from wasmcv interfaces.
- Normalize names and types for Go public API.
- Generate backend ABI symbol list.
- Generate Go host call wrappers.
- Implement C++ OpenCV wasm backend exports.
- Add parity/golden tests per module.
cmd/goopencv-gen renders contract-derived artifacts:
go run ./cmd/goopencv-gen -format abi-md -out docs/abi.md
go run ./cmd/goopencv-gen -format cpp -out backend/goopencv_abi.cppGenerated files must not be hand-edited. Update internal/contract then regenerate.