Full Code of hybridgroup/gocv for AI

release 274ac8a2d6fc cached
307 files
2.7 MB
728.2k tokens
4394 symbols
1 requests
Download .txt
Showing preview only (2,908K chars total). Download the full file or copy to clipboard to get everything.
Repository: hybridgroup/gocv
Branch: release
Commit: 274ac8a2d6fc
Files: 307
Total size: 2.7 MB

Directory structure:
gitextract_b1fe3o02/

├── .astylerc
├── .github/
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE.md
│   └── workflows/
│       ├── docker-alpine-improved.yml
│       ├── docker-static-ffmpeg.yml
│       ├── docker-static-gstreamer.yml
│       ├── docker-static-opencv-cuda.yml
│       ├── docker-static-opencv.yml
│       ├── docker.yml
│       ├── linux.yml
│       ├── macos.yml
│       └── windows.yml
├── .gitignore
├── CHANGELOG.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── Dockerfile
├── Dockerfile-static
├── Dockerfile-static-alpine
├── Dockerfile-static-builder
├── Dockerfile-test
├── Dockerfile-test.gpu-cuda-10
├── Dockerfile-test.gpu-cuda-11
├── Dockerfile-test.gpu-cuda-11.2.2
├── Dockerfile-test.gpu-cuda-12
├── Dockerfile-test.gpu-cuda-13
├── Dockerfile.ffmpeg-static-alpine
├── Dockerfile.gpu
├── Dockerfile.gstreamer-static-alpine
├── Dockerfile.opencv
├── Dockerfile.opencv-gpu-cuda-10
├── Dockerfile.opencv-gpu-cuda-11
├── Dockerfile.opencv-gpu-cuda-11.2.2
├── Dockerfile.opencv-gpu-cuda-12
├── Dockerfile.opencv-gpu-cuda-13
├── Dockerfile.opencv-openvino
├── Dockerfile.opencv-static
├── Dockerfile.opencv-static-alpine
├── Dockerfile.opencv-static-alpine-ffmpeg
├── Dockerfile.opencv-ubuntu-18.04
├── Dockerfile.opencv-ubuntu-20.04
├── Dockerfile.opencv-ubuntu-22.04
├── Dockerfile.opencv-ubuntu-24.04
├── LICENSE.txt
├── Makefile
├── README.md
├── ROADMAP.md
├── aruco.cpp
├── aruco.go
├── aruco.h
├── aruco_dictionaries.go
├── aruco_test.go
├── asyncarray.cpp
├── asyncarray.go
├── asyncarray.h
├── asyncarray_test.go
├── calib3d.cpp
├── calib3d.go
├── calib3d.h
├── calib3d_string.go
├── calib3d_test.go
├── cgo.go
├── cgo_static.go
├── cgo_static_darwin.go
├── cgo_static_windows.go
├── cmd/
│   ├── README.md
│   ├── asciicam/
│   │   └── main.go
│   ├── basic-drawing/
│   │   └── main.go
│   ├── caffe-classifier/
│   │   └── main.go
│   ├── captest/
│   │   └── main.go
│   ├── capwindow/
│   │   └── main.go
│   ├── counter/
│   │   └── main.go
│   ├── cuda/
│   │   └── main.go
│   ├── dnn-detection/
│   │   └── main.go
│   ├── dnn-pose-detection/
│   │   └── main.go
│   ├── dnn-style-transfer/
│   │   └── main.go
│   ├── faceblur/
│   │   └── main.go
│   ├── facedetect/
│   │   └── main.go
│   ├── facedetect-from-url/
│   │   └── main.go
│   ├── facedetectYN/
│   │   └── main.go
│   ├── feature-matching/
│   │   └── main.go
│   ├── find-chessboard/
│   │   └── main.go
│   ├── find-circles/
│   │   └── main.go
│   ├── find-lines/
│   │   └── main.go
│   ├── gstreamer-writer/
│   │   └── main.go
│   ├── hand-gestures/
│   │   └── main.go
│   ├── hello/
│   │   └── main.go
│   ├── img-similarity/
│   │   └── main.go
│   ├── kalman-filter/
│   │   └── main.go
│   ├── mjpeg-streamer/
│   │   └── main.go
│   ├── motion-detect/
│   │   └── main.go
│   ├── openvino/
│   │   └── ie/
│   │       └── version/
│   │           └── main.go
│   ├── saveimage/
│   │   └── main.go
│   ├── savevideo/
│   │   └── main.go
│   ├── showimage/
│   │   └── main.go
│   ├── ssd-facedetect/
│   │   └── main.go
│   ├── tf-classifier/
│   │   └── main.go
│   ├── tracking/
│   │   └── main.go
│   ├── version/
│   │   └── main.go
│   ├── xphoto/
│   │   └── main.go
│   └── yolo-detection/
│       └── main.go
├── codecov.yml
├── contrib/
│   ├── README.md
│   ├── att_faces/
│   │   ├── README
│   │   ├── s1/
│   │   │   ├── 1.pgm
│   │   │   ├── 2.pgm
│   │   │   ├── 3.pgm
│   │   │   └── 4.pgm
│   │   ├── s2/
│   │   │   ├── 1.pgm
│   │   │   ├── 2.pgm
│   │   │   ├── 3.pgm
│   │   │   ├── 4.pgm
│   │   │   └── 5.pgm
│   │   └── s3/
│   │       ├── 1.pgm
│   │       ├── 10.pgm
│   │       ├── 2.pgm
│   │       ├── 3.pgm
│   │       ├── 4.pgm
│   │       ├── 5.pgm
│   │       ├── 6.pgm
│   │       ├── 7.pgm
│   │       ├── 8.pgm
│   │       └── 9.pgm
│   ├── bgsegm.cpp
│   ├── bgsegm.go
│   ├── bgsegm.h
│   ├── bgsegm_test.go
│   ├── cgo.go
│   ├── cgo_static.go
│   ├── cgo_static_darwin.go
│   ├── cgo_static_windows.go
│   ├── contrib.go
│   ├── errors.go
│   ├── face.cpp
│   ├── face.go
│   ├── face.h
│   ├── face_recognizer.go
│   ├── face_test.go
│   ├── freetype.cpp
│   ├── freetype.go
│   ├── freetype.h
│   ├── freetype_test.go
│   ├── img_hash.cpp
│   ├── img_hash.go
│   ├── img_hash.h
│   ├── img_hash_string.go
│   ├── img_hash_test.go
│   ├── mcc.cpp
│   ├── mcc.go
│   ├── mcc.h
│   ├── mcc_test.go
│   ├── tracking.cpp
│   ├── tracking.go
│   ├── tracking.h
│   ├── tracking_test.go
│   ├── wechat_qrcode.cpp
│   ├── wechat_qrcode.go
│   ├── wechat_qrcode.h
│   ├── wechat_qrcode_test.go
│   ├── xfeatures2d.cpp
│   ├── xfeatures2d.go
│   ├── xfeatures2d.h
│   ├── xfeatures2d_test.go
│   ├── ximgproc.cpp
│   ├── ximgproc.go
│   ├── ximgproc.h
│   ├── ximgproc_test.go
│   ├── xobjdetect.cpp
│   ├── xobjdetect.go
│   ├── xobjdetect.h
│   ├── xobjdetect_test.go
│   ├── xphoto.cpp
│   ├── xphoto.go
│   ├── xphoto.h
│   └── xphoto_test.go
├── core.cpp
├── core.go
├── core.h
├── core_string.go
├── core_test.go
├── cuda/
│   ├── README.md
│   ├── arithm.cpp
│   ├── arithm.go
│   ├── arithm.h
│   ├── arithm_test.go
│   ├── bgsegm.cpp
│   ├── bgsegm.go
│   ├── bgsegm.h
│   ├── bgsegm_test.go
│   ├── cgo.go
│   ├── cgo_static.go
│   ├── cgo_static_darwin.go
│   ├── cgo_static_windows.go
│   ├── core.cpp
│   ├── core.go
│   ├── core.h
│   ├── cuda.cpp
│   ├── cuda.go
│   ├── cuda.h
│   ├── cuda_test.go
│   ├── errors.go
│   ├── filters.cpp
│   ├── filters.go
│   ├── filters.h
│   ├── filters_test.go
│   ├── helpers_test.go
│   ├── imgproc.cpp
│   ├── imgproc.go
│   ├── imgproc.h
│   ├── imgproc_alphacomptypes.go
│   ├── imgproc_test.go
│   ├── objdetect.cpp
│   ├── objdetect.go
│   ├── objdetect.h
│   ├── optflow.cpp
│   ├── optflow.go
│   ├── optflow.h
│   ├── optflow_test.go
│   ├── warping.cpp
│   ├── warping.go
│   ├── warping.h
│   ├── warping_string.go
│   └── warping_test.go
├── data/
│   └── haarcascade_frontalface_default.xml
├── dnn.cpp
├── dnn.go
├── dnn.h
├── dnn_async_openvino.go
├── dnn_ext.go
├── dnn_string.go
├── dnn_test.go
├── env.cmd
├── env.sh
├── features2d.cpp
├── features2d.go
├── features2d.h
├── features2d_string.go
├── features2d_test.go
├── go.mod
├── go.sum
├── gocv.go
├── helpers_test.go
├── highgui.cpp
├── highgui.go
├── highgui_gocv.h
├── highgui_onmouse_test.go
├── highgui_string.go
├── highgui_test.go
├── images/
│   └── multipage.tif
├── imgcodecs.cpp
├── imgcodecs.go
├── imgcodecs.h
├── imgcodecs_test.go
├── imgproc.cpp
├── imgproc.go
├── imgproc.h
├── imgproc_colorcodes.go
├── imgproc_colorcodes_string.go
├── imgproc_string.go
├── imgproc_test.go
├── mat_noprofile.go
├── mat_profile.go
├── matprofile_test.go
├── objdetect.cpp
├── objdetect.go
├── objdetect.h
├── objdetect_test.go
├── openvino/
│   ├── README.md
│   ├── env.sh
│   ├── ie/
│   │   ├── README.md
│   │   ├── ie.go
│   │   ├── inference_engine.cpp
│   │   ├── inference_engine.go
│   │   ├── inference_engine.h
│   │   └── inference_engine_test.go
│   └── openvino.go
├── patches/
│   └── gstreamer-full.patch
├── persistence.h
├── persistence_filenode.cpp
├── persistence_filenode.go
├── persistence_filestorage.cpp
├── persistence_filestorage.go
├── persistence_test.go
├── photo.cpp
├── photo.go
├── photo.h
├── photo_string.go
├── photo_test.go
├── svd.cpp
├── svd.go
├── svd.h
├── svd_test.go
├── version.cpp
├── version.go
├── version.h
├── version_test.go
├── video.cpp
├── video.go
├── video.h
├── video_test.go
├── videoio.cpp
├── videoio.go
├── videoio.h
├── videoio_string.go
├── videoio_test.go
├── win_build_opencv.cmd
└── win_download_opencv.cmd

================================================
FILE CONTENTS
================================================

================================================
FILE: .astylerc
================================================
--lineend=linux

--style=google

--indent=spaces=4
--indent-col1-comments
--convert-tabs

--attach-return-type
--attach-namespaces
--attach-classes
--attach-inlines

--add-brackets
--add-braces

--align-pointer=type
--align-reference=type

--max-code-length=100
--break-after-logical

--pad-comma
--pad-oper
--unpad-paren

--break-blocks
--pad-header


================================================
FILE: .github/FUNDING.yml
================================================
patreon: deadprogram


================================================
FILE: .github/ISSUE_TEMPLATE.md
================================================
<!--- Please provide a general summary of the issue in the Title above -->

## Description
<!--- Detailed information about the issue itself -->

## Steps to Reproduce
<!--- Provide a link to a live example, or an unambiguous set of steps to -->
<!--- reproduce this bug. Include code to reproduce, if relevant -->
1.
2.
3.
4.

## Your Environment
<!--- Include as many relevant details about your environment -->

* Operating System and version:
* OpenCV version used:
* How did you install OpenCV?
* GoCV version used:
* Go version:
* Did you run the `env.sh` or `env.cmd` script before trying to `go run` or `go build`?


================================================
FILE: .github/workflows/docker-alpine-improved.yml
================================================
# This is the Github action to build and push the gocv/opencv Docker images.
#
name: Docker
on:
  push:
    branches: [build-opencv-alpine, alpine-static-improved]
  workflow_dispatch:

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  gstreamer:
    name: gstreamer
    runs-on: ubuntu-latest
    permissions:
      packages: write
      contents: read
    steps:
      - name: Set up QEMU
        uses: docker/setup-qemu-action@v3
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3
      - name: Check out the repo
        uses: actions/checkout@v6
      - name: Docker meta
        id: meta
        uses: docker/metadata-action@v5
        with:
          images: |
            gocv/gstreamer:1.24-alpine
            ghcr.io/${{ github.repository_owner }}/gstreamer:1.24-alpine
          tags: |
            type=sha,format=long
            type=raw,value=latest
      - name: Log in to Docker Hub
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKER_HUB_USERNAME }}
          password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
      - name: Log in to Github Container Registry
        uses: docker/login-action@v3
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
      - name: Build and push
        uses: docker/build-push-action@v6
        with:
          file: Dockerfile.gstreamer-static-alpine
          platforms: linux/amd64,linux/arm64
          context: .
          push: true
          tags: |
            gocv/gstreamer:1.24-alpine
            ghcr.io/${{ github.repository_owner }}/gstreamer:1.24-alpine
          labels: ${{ steps.meta.outputs.labels }}
          cache-from: type=gha
          cache-to: type=gha,mode=max

  ffmpeg:
    name: ffmpeg
    runs-on: ubuntu-latest
    permissions:
      packages: write
      contents: read
    steps:
      - name: Set up QEMU
        uses: docker/setup-qemu-action@v3
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3
      - name: Check out the repo
        uses: actions/checkout@v6
      - name: Docker meta
        id: meta
        uses: docker/metadata-action@v5
        with:
          images: |
            gocv/ffmpeg:5.16-alpine
            ghcr.io/${{ github.repository_owner }}/ffmpeg:5.16-alpine
          tags: |
            type=sha,format=long
            type=raw,value=latest
      - name: Log in to Docker Hub
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKER_HUB_USERNAME }}
          password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
      - name: Log in to Github Container Registry
        uses: docker/login-action@v3
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
      - name: Build and push
        uses: docker/build-push-action@v6
        with:
          file: Dockerfile.ffmpeg-static-alpine
          platforms: linux/amd64,linux/arm64
          context: .
          push: true
          tags: |
            gocv/ffmpeg:5.16-alpine
            ghcr.io/${{ github.repository_owner }}/ffmpeg:5.16-alpine
          labels: ${{ steps.meta.outputs.labels }}
          cache-from: type=gha
          cache-to: type=gha,mode=max

  opencv:
    name: opencv
    runs-on: ubuntu-latest
    needs: [gstreamer, ffmpeg]
    permissions:
      packages: write
      contents: read
    steps:
      - name: Set up QEMU
        uses: docker/setup-qemu-action@v3
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3
      - name: Check out the repo
        uses: actions/checkout@v6
      - name: Docker meta
        id: meta
        uses: docker/metadata-action@v5
        with:
          images: |
            gocv/opencv:4.13.0-alpine
            ghcr.io/${{ github.repository_owner }}/opencv:4.13.0-alpine
          tags: |
            type=sha,format=long
            type=raw,value=latest
      - name: Log in to Docker Hub
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKER_HUB_USERNAME }}
          password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
      - name: Log in to Github Container Registry
        uses: docker/login-action@v3
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
      - name: Build and push
        uses: docker/build-push-action@v6
        with:
          file: Dockerfile.opencv-static-alpine
          platforms: linux/amd64,linux/arm64
          context: .
          push: true
          tags: |
            gocv/opencv:4.13.0-alpine
            ghcr.io/${{ github.repository_owner }}/opencv:4.13.0-alpine
          labels: ${{ steps.meta.outputs.labels }}
          cache-from: type=gha
          cache-to: type=gha,mode=max

  opencv-ffmpeg:
    name: opencv
    runs-on: ubuntu-latest
    needs: [gstreamer, ffmpeg]
    permissions:
      packages: write
      contents: read
    steps:
      - name: Set up QEMU
        uses: docker/setup-qemu-action@v3
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3
      - name: Check out the repo
        uses: actions/checkout@v6
      - name: Docker meta
        id: meta
        uses: docker/metadata-action@v5
        with:
          images: |
            gocv/opencv:4.13.0-alpine-ffmpeg
            ghcr.io/${{ github.repository_owner }}/opencv:4.13.0-alpine-ffmpeg
          tags: |
            type=sha,format=long
            type=raw,value=latest
      - name: Log in to Docker Hub
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKER_HUB_USERNAME }}
          password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
      - name: Log in to Github Container Registry
        uses: docker/login-action@v3
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
      - name: Build and push
        uses: docker/build-push-action@v6
        with:
          file: Dockerfile.opencv-static-alpine-ffmpeg
          platforms: linux/amd64,linux/arm64
          context: .
          push: true
          tags: |
            gocv/opencv:4.13.0-alpine-ffmpeg
            ghcr.io/${{ github.repository_owner }}/opencv:4.13.0-alpine-ffmpeg
          labels: ${{ steps.meta.outputs.labels }}
          cache-from: type=gha
          cache-to: type=gha,mode=max


================================================
FILE: .github/workflows/docker-static-ffmpeg.yml
================================================
# This is the Github action to build and push the ffmpeg Docker images used for static builds.
#
name: ffmpeg
on:
  workflow_dispatch:

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  ffmpeg:
    name: ffmpeg
    runs-on: ubuntu-latest
    permissions:
      packages: write
      contents: read
    steps:
      - name: Set up QEMU
        uses: docker/setup-qemu-action@v3
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3
      - name: Check out the repo
        uses: actions/checkout@v6
      - name: Docker meta
        id: meta
        uses: docker/metadata-action@v5
        with:
          images: |
            gocv/ffmpeg:5.16-alpine
            ghcr.io/${{ github.repository_owner }}/ffmpeg:5.16-alpine
          tags: |
            type=sha,format=long
            type=raw,value=latest
      - name: Log in to Docker Hub
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKER_HUB_USERNAME }}
          password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
      - name: Log in to Github Container Registry
        uses: docker/login-action@v3
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
      - name: Build and push
        uses: docker/build-push-action@v6
        with:
          file: Dockerfile.ffmpeg-static-alpine
          platforms: linux/amd64,linux/arm64
          context: .
          push: true
          tags: |
            gocv/ffmpeg:5.16-alpine
            ghcr.io/${{ github.repository_owner }}/ffmpeg:5.16-alpine
          labels: ${{ steps.meta.outputs.labels }}
          cache-from: type=gha
          cache-to: type=gha,mode=max


================================================
FILE: .github/workflows/docker-static-gstreamer.yml
================================================
# This is the Github action to build and push the GStreamer Docker images used for static builds.
#
name: GStreamer
on:
  workflow_dispatch:

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  gstreamer:
    name: gstreamer
    runs-on: ubuntu-latest
    permissions:
      packages: write
      contents: read
    steps:
      - name: Set up QEMU
        uses: docker/setup-qemu-action@v3
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3
      - name: Check out the repo
        uses: actions/checkout@v6
      - name: Docker meta
        id: meta
        uses: docker/metadata-action@v5
        with:
          images: |
            gocv/gstreamer:1.24-alpine
            ghcr.io/${{ github.repository_owner }}/gstreamer:1.24-alpine
          tags: |
            type=sha,format=long
            type=raw,value=latest
      - name: Log in to Docker Hub
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKER_HUB_USERNAME }}
          password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
      - name: Log in to Github Container Registry
        uses: docker/login-action@v3
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
      - name: Build and push
        uses: docker/build-push-action@v6
        with:
          file: Dockerfile.gstreamer-static-alpine
          platforms: linux/amd64,linux/arm64
          context: .
          push: true
          tags: |
            gocv/gstreamer:1.24-alpine
            ghcr.io/${{ github.repository_owner }}/gstreamer:1.24-alpine
          labels: ${{ steps.meta.outputs.labels }}
          cache-from: type=gha
          cache-to: type=gha,mode=max



================================================
FILE: .github/workflows/docker-static-opencv-cuda.yml
================================================
# This is the Github action to build and push the OpenCV Docker images used for static builds.
#
name: OpenCV
on:
  workflow_dispatch:

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  opencv:
    name: opencv
    runs-on: ubuntu-latest
    permissions:
      packages: write
      contents: read
    steps:
      - name: Set up QEMU
        uses: docker/setup-qemu-action@v3
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3
      - name: Check out the repo
        uses: actions/checkout@v6
      - name: Docker meta
        id: meta
        uses: docker/metadata-action@v5
        with:
          images: |
            gocv/opencv:4.11.0-gpu-cuda-12-static
            ghcr.io/${{ github.repository_owner }}/opencv:4.11.0-gpu-cuda-12-static
          tags: |
            type=sha,format=long
            type=raw,value=latest
      - name: Log in to Docker Hub
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKER_HUB_USERNAME }}
          password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
      - name: Log in to Github Container Registry
        uses: docker/login-action@v3
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
      - name: Build and push
        uses: docker/build-push-action@v6
        with:
          file: Dockerfile.opencv-gpu-cuda-12-static
          platforms: linux/amd64
          context: .
          push: true
          tags: |
            gocv/opencv:4.11.0-gpu-cuda-12-static
            ghcr.io/${{ github.repository_owner }}/opencv:4.11.0-gpu-cuda-12-static
          labels: ${{ steps.meta.outputs.labels }}
          cache-from: type=gha
          cache-to: type=gha,mode=max


================================================
FILE: .github/workflows/docker-static-opencv.yml
================================================
# This is the Github action to build and push the OpenCV Docker images used for static builds.
#
name: OpenCV
on:
  push:
    branches: [alpine-static-improved-2]
  workflow_dispatch:

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  opencv:
    name: opencv
    runs-on: ubuntu-latest
    permissions:
      packages: write
      contents: read
    steps:
      - name: Set up QEMU
        uses: docker/setup-qemu-action@v3
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3
      - name: Check out the repo
        uses: actions/checkout@v6
      - name: Docker meta
        id: meta
        uses: docker/metadata-action@v5
        with:
          images: |
            gocv/opencv:4.13.0-alpine-ffmpeg-gstreamer
            ghcr.io/${{ github.repository_owner }}/opencv:4.13.0-alpine-ffmpeg-gstreamer
          tags: |
            type=sha,format=long
            type=raw,value=latest
      - name: Log in to Docker Hub
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKER_HUB_USERNAME }}
          password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
      - name: Log in to Github Container Registry
        uses: docker/login-action@v3
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
      - name: Build and push
        uses: docker/build-push-action@v6
        with:
          file: Dockerfile.opencv-static-alpine
          platforms: linux/amd64,linux/arm64
          context: .
          push: true
          tags: |
            gocv/opencv:4.13.0-alpine-ffmpeg-gstreamer
            ghcr.io/${{ github.repository_owner }}/opencv:4.13.0-alpine-ffmpeg-gstreamer
          labels: ${{ steps.meta.outputs.labels }}
          cache-from: type=gha
          cache-to: type=gha,mode=max


================================================
FILE: .github/workflows/docker.yml
================================================
# This is the Github action to build and push the gocv/opencv Docker images.
#
name: Docker
on:
  push:
    branches: [build-opencv-images]
  workflow_dispatch:

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  opencv:
    name: opencv
    runs-on: ubuntu-24.04
    permissions:
      packages: write
      contents: read
    steps:
      - name: Check disk space
        run: df . -h
      - name: Free disk space
        run: |
          sudo docker rmi $(docker image ls -aq) >/dev/null 2>&1 || true
          sudo rm -rf \
            /usr/share/dotnet /usr/local/lib/android /opt/ghc \
            /usr/local/share/powershell /usr/share/swift /usr/local/.ghcup \
            /usr/lib/jvm || true
          echo "extra directories deleted"
          sudo apt install aptitude -y >/dev/null 2>&1
          sudo aptitude purge aria2 ansible azure-cli shellcheck rpm xorriso zsync \
            esl-erlang firefox gfortran-8 gfortran-9 google-chrome-stable \
            google-cloud-sdk imagemagick \
            libmagickcore-dev libmagickwand-dev libmagic-dev ant ant-optional kubectl \
            mercurial apt-transport-https mono-complete libmysqlclient \
            unixodbc-dev yarn chrpath libssl-dev libxft-dev \
            libfreetype6 libfreetype6-dev libfontconfig1 libfontconfig1-dev \
            snmp pollinate libpq-dev postgresql-client powershell ruby-full \
            sphinxsearch subversion mongodb-org azure-cli microsoft-edge-stable \
            -y -f >/dev/null 2>&1
          sudo aptitude purge google-cloud-sdk -f -y >/dev/null 2>&1
          sudo aptitude purge microsoft-edge-stable -f -y >/dev/null 2>&1 || true
          sudo apt purge microsoft-edge-stable -f -y >/dev/null 2>&1 || true
          sudo aptitude purge '~n ^mysql' -f -y >/dev/null 2>&1
          sudo aptitude purge '~n ^php' -f -y >/dev/null 2>&1
          sudo aptitude purge '~n ^dotnet' -f -y >/dev/null 2>&1
          sudo apt-get autoremove -y >/dev/null 2>&1
          sudo apt-get autoclean -y >/dev/null 2>&1
          echo "extra packages purged"
      - name: Check disk space
        run: df . -h
      - name: Set up QEMU
        uses: docker/setup-qemu-action@v3
        with:
          image: tonistiigi/binfmt:latest
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3
      - name: Check out the repo
        uses: actions/checkout@v6
      - name: Docker meta
        id: meta
        uses: docker/metadata-action@v5
        with:
          images: |
            gocv/opencv:4.13.0
            ghcr.io/${{ github.repository_owner }}/opencv:4.13.0
          tags: |
            type=sha,format=long
            type=raw,value=latest
      - name: Log in to Docker Hub
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKER_HUB_USERNAME }}
          password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
      - name: Log in to Github Container Registry
        uses: docker/login-action@v3
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
      - name: Build and push
        uses: docker/build-push-action@v6
        with:
          file: Dockerfile.opencv
          platforms: linux/amd64,linux/arm64
          context: .
          push: true
          tags: |
            gocv/opencv:latest
            gocv/opencv:4.13.0
            ghcr.io/${{ github.repository_owner }}/opencv:latest
            ghcr.io/${{ github.repository_owner }}/opencv:4.13.0
          labels: ${{ steps.meta.outputs.labels }}
          cache-from: type=gha
          cache-to: type=gha,mode=max

  opencv-static:
    name: opencv-static
    runs-on: ubuntu-24.04
    permissions:
      packages: write
      contents: read
    steps:
      - name: Check disk space
        run: df . -h
      - name: Free disk space
        run: |
          sudo docker rmi $(docker image ls -aq) >/dev/null 2>&1 || true
          sudo rm -rf \
            /usr/share/dotnet /usr/local/lib/android /opt/ghc \
            /usr/local/share/powershell /usr/share/swift /usr/local/.ghcup \
            /usr/lib/jvm || true
          echo "extra directories deleted"
          sudo apt install aptitude -y >/dev/null 2>&1
          sudo aptitude purge aria2 ansible azure-cli shellcheck rpm xorriso zsync \
            esl-erlang firefox gfortran-8 gfortran-9 google-chrome-stable \
            google-cloud-sdk imagemagick \
            libmagickcore-dev libmagickwand-dev libmagic-dev ant ant-optional kubectl \
            mercurial apt-transport-https mono-complete libmysqlclient \
            unixodbc-dev yarn chrpath libssl-dev libxft-dev \
            libfreetype6 libfreetype6-dev libfontconfig1 libfontconfig1-dev \
            snmp pollinate libpq-dev postgresql-client powershell ruby-full \
            sphinxsearch subversion mongodb-org azure-cli microsoft-edge-stable \
            -y -f >/dev/null 2>&1
          sudo aptitude purge google-cloud-sdk -f -y >/dev/null 2>&1
          sudo aptitude purge microsoft-edge-stable -f -y >/dev/null 2>&1 || true
          sudo apt purge microsoft-edge-stable -f -y >/dev/null 2>&1 || true
          sudo aptitude purge '~n ^mysql' -f -y >/dev/null 2>&1
          sudo aptitude purge '~n ^php' -f -y >/dev/null 2>&1
          sudo aptitude purge '~n ^dotnet' -f -y >/dev/null 2>&1
          sudo apt-get autoremove -y >/dev/null 2>&1
          sudo apt-get autoclean -y >/dev/null 2>&1
          echo "extra packages purged"
      - name: Check disk space
        run: df . -h
      - name: Set up QEMU
        uses: docker/setup-qemu-action@v3
        with:
          image: tonistiigi/binfmt:latest
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3
      - name: Check out the repo
        uses: actions/checkout@v6
      - name: Docker meta
        id: meta
        uses: docker/metadata-action@v5
        with:
          images: |
            gocv/opencv:4.13.0-static
            ghcr.io/${{ github.repository_owner }}/opencv:4.13.0-static
          tags: |
            type=sha,format=long
            type=raw,value=latest
      - name: Log in to Docker Hub
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKER_HUB_USERNAME }}
          password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
      - name: Log in to Github Container Registry
        uses: docker/login-action@v3
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
      - name: Build and push
        uses: docker/build-push-action@v6
        with:
          file: Dockerfile.opencv-static
          platforms: linux/amd64,linux/arm64
          context: .
          push: true
          tags: |
            gocv/opencv:4.13.0-static
            ghcr.io/${{ github.repository_owner }}/opencv:4.13.0-static
          labels: ${{ steps.meta.outputs.labels }}
          cache-from: type=gha
          cache-to: type=gha,mode=max

  opencv-gpu-cuda-11:
    name: opencv-gpu-cuda-11
    runs-on: ubuntu-latest
    permissions:
      packages: write
      contents: read
    steps:
      - name: Check disk space
        run: df . -h
      - name: Free disk space
        run: |
          sudo docker rmi $(docker image ls -aq) >/dev/null 2>&1 || true
          sudo rm -rf \
            /usr/share/dotnet /usr/local/lib/android /opt/ghc \
            /usr/local/share/powershell /usr/share/swift /usr/local/.ghcup \
            /usr/lib/jvm || true
          echo "extra directories deleted"
          sudo apt install aptitude -y >/dev/null 2>&1
          sudo aptitude purge aria2 ansible azure-cli shellcheck rpm xorriso zsync \
            esl-erlang firefox gfortran-8 gfortran-9 google-chrome-stable \
            google-cloud-sdk imagemagick \
            libmagickcore-dev libmagickwand-dev libmagic-dev ant ant-optional kubectl \
            mercurial apt-transport-https mono-complete libmysqlclient \
            unixodbc-dev yarn chrpath libssl-dev libxft-dev \
            libfreetype6 libfreetype6-dev libfontconfig1 libfontconfig1-dev \
            snmp pollinate libpq-dev postgresql-client powershell ruby-full \
            sphinxsearch subversion mongodb-org azure-cli microsoft-edge-stable \
            -y -f >/dev/null 2>&1
          sudo aptitude purge google-cloud-sdk -f -y >/dev/null 2>&1
          sudo aptitude purge microsoft-edge-stable -f -y >/dev/null 2>&1 || true
          sudo apt purge microsoft-edge-stable -f -y >/dev/null 2>&1 || true
          sudo aptitude purge '~n ^mysql' -f -y >/dev/null 2>&1
          sudo aptitude purge '~n ^php' -f -y >/dev/null 2>&1
          sudo aptitude purge '~n ^dotnet' -f -y >/dev/null 2>&1
          sudo apt-get autoremove -y >/dev/null 2>&1
          sudo apt-get autoclean -y >/dev/null 2>&1
          echo "extra packages purged"
      - name: Check disk space
        run: df . -h
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3
      - name: Check out the repo
        uses: actions/checkout@v6
      - name: Docker meta
        id: meta
        uses: docker/metadata-action@v5
        with:
          images: |
            gocv/opencv:4.13.0-gpu-cuda-11
            ghcr.io/${{ github.repository_owner }}/opencv:4.13.0-gpu-cuda-11
          tags: |
            type=sha,format=long
            type=raw,value=latest
      - name: Log in to Docker Hub
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKER_HUB_USERNAME }}
          password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
      - name: Log in to Github Container Registry
        uses: docker/login-action@v3
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
      - name: Build and push
        uses: docker/build-push-action@v6
        with:
          file: Dockerfile.opencv-gpu-cuda-11
          platforms: linux/amd64
          context: .
          push: true
          tags: |
            gocv/opencv:4.13.0-gpu-cuda-11
            ghcr.io/${{ github.repository_owner }}/opencv:4.13.0-gpu-cuda-11
          labels: ${{ steps.meta.outputs.labels }}
          cache-from: type=gha
          cache-to: type=gha,mode=max

  opencv-gpu-cuda-11-2-2:
    name: opencv-gpu-cuda-11-2-2
    runs-on: ubuntu-latest
    permissions:
      packages: write
      contents: read
    steps:
      - name: Check disk space
        run: df . -h
      - name: Free disk space
        run: |
          sudo docker rmi $(docker image ls -aq) >/dev/null 2>&1 || true
          sudo rm -rf \
            /usr/share/dotnet /usr/local/lib/android /opt/ghc \
            /usr/local/share/powershell /usr/share/swift /usr/local/.ghcup \
            /usr/lib/jvm || true
          echo "extra directories deleted"
          sudo apt install aptitude -y >/dev/null 2>&1
          sudo aptitude purge aria2 ansible azure-cli shellcheck rpm xorriso zsync \
            esl-erlang firefox gfortran-8 gfortran-9 google-chrome-stable \
            google-cloud-sdk imagemagick \
            libmagickcore-dev libmagickwand-dev libmagic-dev ant ant-optional kubectl \
            mercurial apt-transport-https mono-complete libmysqlclient \
            unixodbc-dev yarn chrpath libssl-dev libxft-dev \
            libfreetype6 libfreetype6-dev libfontconfig1 libfontconfig1-dev \
            snmp pollinate libpq-dev postgresql-client powershell ruby-full \
            sphinxsearch subversion mongodb-org azure-cli microsoft-edge-stable \
            -y -f >/dev/null 2>&1
          sudo aptitude purge google-cloud-sdk -f -y >/dev/null 2>&1
          sudo aptitude purge microsoft-edge-stable -f -y >/dev/null 2>&1 || true
          sudo apt purge microsoft-edge-stable -f -y >/dev/null 2>&1 || true
          sudo aptitude purge '~n ^mysql' -f -y >/dev/null 2>&1
          sudo aptitude purge '~n ^php' -f -y >/dev/null 2>&1
          sudo aptitude purge '~n ^dotnet' -f -y >/dev/null 2>&1
          sudo apt-get autoremove -y >/dev/null 2>&1
          sudo apt-get autoclean -y >/dev/null 2>&1
          echo "extra packages purged"
      - name: Check disk space
        run: df . -h
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3
      - name: Check out the repo
        uses: actions/checkout@v6
      - name: Docker meta
        id: meta
        uses: docker/metadata-action@v5
        with:
          images: |
            gocv/opencv:4.13.0-gpu-cuda-11.2.2
            ghcr.io/${{ github.repository_owner }}/opencv:4.13.0-gpu-cuda-11.2.2
          tags: |
            type=sha,format=long
            type=raw,value=latest
      - name: Log in to Docker Hub
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKER_HUB_USERNAME }}
          password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
      - name: Log in to Github Container Registry
        uses: docker/login-action@v3
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
      - name: Build and push
        uses: docker/build-push-action@v6
        with:
          file: Dockerfile.opencv-gpu-cuda-11.2.2
          platforms: linux/amd64
          context: .
          push: true
          tags: |
            gocv/opencv:4.13.0-gpu-cuda-11.2.2
            ghcr.io/${{ github.repository_owner }}/opencv:4.13.0-gpu-cuda-11.2.2
          labels: ${{ steps.meta.outputs.labels }}
          cache-from: type=gha
          cache-to: type=gha,mode=max

  opencv-gpu-cuda-12:
    name: opencv-gpu-cuda-12
    runs-on: ubuntu-latest
    permissions:
      packages: write
      contents: read
    steps:
      - name: Check disk space
        run: df . -h
      - name: Free disk space
        run: |
          sudo docker rmi $(docker image ls -aq) >/dev/null 2>&1 || true
          sudo rm -rf \
            /usr/share/dotnet /usr/local/lib/android /opt/ghc \
            /usr/local/share/powershell /usr/share/swift /usr/local/.ghcup \
            /usr/lib/jvm || true
          echo "extra directories deleted"
          sudo apt install aptitude -y >/dev/null 2>&1
          sudo aptitude purge aria2 ansible azure-cli shellcheck rpm xorriso zsync \
            esl-erlang firefox gfortran-8 gfortran-9 google-chrome-stable \
            google-cloud-sdk imagemagick \
            libmagickcore-dev libmagickwand-dev libmagic-dev ant ant-optional kubectl \
            mercurial apt-transport-https mono-complete libmysqlclient \
            unixodbc-dev yarn chrpath libssl-dev libxft-dev \
            libfreetype6 libfreetype6-dev libfontconfig1 libfontconfig1-dev \
            snmp pollinate libpq-dev postgresql-client powershell ruby-full \
            sphinxsearch subversion mongodb-org azure-cli microsoft-edge-stable \
            -y -f >/dev/null 2>&1
          sudo aptitude purge google-cloud-sdk -f -y >/dev/null 2>&1
          sudo aptitude purge microsoft-edge-stable -f -y >/dev/null 2>&1 || true
          sudo apt purge microsoft-edge-stable -f -y >/dev/null 2>&1 || true
          sudo aptitude purge '~n ^mysql' -f -y >/dev/null 2>&1
          sudo aptitude purge '~n ^php' -f -y >/dev/null 2>&1
          sudo aptitude purge '~n ^dotnet' -f -y >/dev/null 2>&1
          sudo apt-get autoremove -y >/dev/null 2>&1
          sudo apt-get autoclean -y >/dev/null 2>&1
          echo "extra packages purged"
      - name: Check disk space
        run: df . -h
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3
      - name: Check out the repo
        uses: actions/checkout@v6
      - name: Docker meta
        id: meta
        uses: docker/metadata-action@v5
        with:
          images: |
            gocv/opencv:4.13.0-gpu-cuda-12
            ghcr.io/${{ github.repository_owner }}/opemcv:4.13.0-gpu-cuda-12
          tags: |
            type=sha,format=long
            type=raw,value=latest
      - name: Log in to Docker Hub
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKER_HUB_USERNAME }}
          password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
      - name: Log in to Github Container Registry
        uses: docker/login-action@v3
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
      - name: Build and push
        uses: docker/build-push-action@v6
        with:
          file: Dockerfile.opencv-gpu-cuda-12
          platforms: linux/amd64
          context: .
          push: true
          tags: |
            gocv/opencv:4.13.0-gpu-cuda-12
            ghcr.io/${{ github.repository_owner }}/opencv:4.13.0-gpu-cuda-12
          labels: ${{ steps.meta.outputs.labels }}
          cache-from: type=gha
          cache-to: type=gha,mode=max

  opencv-gpu-cuda-13:
    name: opencv-gpu-cuda-13
    runs-on: ubuntu-latest
    permissions:
      packages: write
      contents: read
    steps:
      - name: Check disk space
        run: df . -h
      - name: Free disk space
        run: |
          sudo docker rmi $(docker image ls -aq) >/dev/null 2>&1 || true
          sudo rm -rf \
            /usr/share/dotnet /usr/local/lib/android /opt/ghc \
            /usr/local/share/powershell /usr/share/swift /usr/local/.ghcup \
            /usr/lib/jvm || true
          echo "extra directories deleted"
          sudo apt install aptitude -y >/dev/null 2>&1
          sudo aptitude purge aria2 ansible azure-cli shellcheck rpm xorriso zsync \
            esl-erlang firefox gfortran-8 gfortran-9 google-chrome-stable \
            google-cloud-sdk imagemagick \
            libmagickcore-dev libmagickwand-dev libmagic-dev ant ant-optional kubectl \
            mercurial apt-transport-https mono-complete libmysqlclient \
            unixodbc-dev yarn chrpath libssl-dev libxft-dev \
            libfreetype6 libfreetype6-dev libfontconfig1 libfontconfig1-dev \
            snmp pollinate libpq-dev postgresql-client powershell ruby-full \
            sphinxsearch subversion mongodb-org azure-cli microsoft-edge-stable \
            -y -f >/dev/null 2>&1
          sudo aptitude purge google-cloud-sdk -f -y >/dev/null 2>&1
          sudo aptitude purge microsoft-edge-stable -f -y >/dev/null 2>&1 || true
          sudo apt purge microsoft-edge-stable -f -y >/dev/null 2>&1 || true
          sudo aptitude purge '~n ^mysql' -f -y >/dev/null 2>&1
          sudo aptitude purge '~n ^php' -f -y >/dev/null 2>&1
          sudo aptitude purge '~n ^dotnet' -f -y >/dev/null 2>&1
          sudo apt-get autoremove -y >/dev/null 2>&1
          sudo apt-get autoclean -y >/dev/null 2>&1
          echo "extra packages purged"
      - name: Check disk space
        run: df . -h
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3
      - name: Check out the repo
        uses: actions/checkout@v6
      - name: Docker meta
        id: meta
        uses: docker/metadata-action@v5
        with:
          images: |
            gocv/opencv:4.13.0-gpu-cuda-13
            ghcr.io/${{ github.repository_owner }}/opemcv:4.13.0-gpu-cuda-13
          tags: |
            type=sha,format=long
            type=raw,value=latest
      - name: Log in to Docker Hub
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKER_HUB_USERNAME }}
          password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
      - name: Log in to Github Container Registry
        uses: docker/login-action@v3
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
      - name: Build and push
        uses: docker/build-push-action@v6
        with:
          file: Dockerfile.opencv-gpu-cuda-13
          platforms: linux/amd64
          context: .
          push: true
          tags: |
            gocv/opencv:4.13.0-gpu-cuda-13
            ghcr.io/${{ github.repository_owner }}/opencv:4.13.0-gpu-cuda-13
          labels: ${{ steps.meta.outputs.labels }}
          cache-from: type=gha
          cache-to: type=gha,mode=max

  opencv-ubuntu-18-04:
    name: opencv-ubuntu-18-04
    runs-on: ubuntu-latest
    permissions:
      packages: write
      contents: read
    steps:
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3
      - name: Check out the repo
        uses: actions/checkout@v6
      - name: Docker meta
        id: meta
        uses: docker/metadata-action@v5
        with:
          images: |
            gocv/opencv:4.13.0-ubuntu-18.04
            ghcr.io/${{ github.repository_owner }}/opencv:4.13.0-ubuntu-18.04
          tags: |
            type=sha,format=long
            type=raw,value=latest
      - name: Log in to Docker Hub
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKER_HUB_USERNAME }}
          password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
      - name: Log in to Github Container Registry
        uses: docker/login-action@v3
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
      - name: Build and push
        uses: docker/build-push-action@v6
        with:
          file: Dockerfile.opencv-ubuntu-18.04
          platforms: linux/amd64
          context: .
          push: true
          tags: |
            gocv/opencv:4.13.0-ubuntu-18.04
            ghcr.io/${{ github.repository_owner }}/opencv:4.13.0-ubuntu-18.04
          labels: ${{ steps.meta.outputs.labels }}
          cache-from: type=gha
          cache-to: type=gha,mode=max

  opencv-ubuntu-20-04:
    name: opencv-ubuntu-20-04
    runs-on: ubuntu-latest
    permissions:
      packages: write
      contents: read
    steps:
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3
      - name: Check out the repo
        uses: actions/checkout@v6
      - name: Docker meta
        id: meta
        uses: docker/metadata-action@v5
        with:
          images: |
            gocv/opencv:4.13.0-ubuntu-20.04
            ghcr.io/${{ github.repository_owner }}/opencv:4.13.0-ubuntu-20.04
          tags: |
            type=sha,format=long
            type=raw,value=latest
      - name: Log in to Docker Hub
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKER_HUB_USERNAME }}
          password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
      - name: Log in to Github Container Registry
        uses: docker/login-action@v3
        with:
          registry: ghcr.io
          username: ${{ github.repository_owner }}
          password: ${{ secrets.GITHUB_TOKEN }}
      - name: Build and push
        uses: docker/build-push-action@v6
        with:
          file: Dockerfile.opencv-ubuntu-20.04
          platforms: linux/amd64
          context: .
          push: true
          tags: |
            gocv/opencv:4.13.0-ubuntu-20.04
            ghcr.io/${{ github.repository_owner }}/opencv:4.13.0-ubuntu-20.04
          labels: ${{ steps.meta.outputs.labels }}
          cache-from: type=gha
          cache-to: type=gha,mode=max

  opencv-ubuntu-22-04:
    name: opencv-ubuntu-22-04
    runs-on: ubuntu-latest
    permissions:
      packages: write
      contents: read
    steps:
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3
      - name: Check out the repo
        uses: actions/checkout@v6
      - name: Docker meta
        id: meta
        uses: docker/metadata-action@v5
        with:
          images: |
            gocv/opencv:4.13.0-ubuntu-22.04
            ghcr.io/${{ github.repository_owner }}/opencv:4.13.0-ubuntu-22.04
          tags: |
            type=sha,format=long
            type=raw,value=latest
      - name: Log in to Docker Hub
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKER_HUB_USERNAME }}
          password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
      - name: Log in to Github Container Registry
        uses: docker/login-action@v3
        with:
          registry: ghcr.io
          username: ${{ github.repository_owner }}
          password: ${{ secrets.GITHUB_TOKEN }}
      - name: Build and push
        uses: docker/build-push-action@v6
        with:
          file: Dockerfile.opencv-ubuntu-22.04
          platforms: linux/amd64
          context: .
          push: true
          tags: |
            gocv/opencv:4.13.0-ubuntu-22.04
            ghcr.io/${{ github.repository_owner }}/opencv:4.13.0-ubuntu-22.04
          labels: ${{ steps.meta.outputs.labels }}
          cache-from: type=gha
          cache-to: type=gha,mode=max

  opencv-ubuntu-24-04:
    name: opencv-ubuntu-24-04
    runs-on: ubuntu-latest
    permissions:
      packages: write
      contents: read
    steps:
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v3
      - name: Check out the repo
        uses: actions/checkout@v6
      - name: Docker meta
        id: meta
        uses: docker/metadata-action@v5
        with:
          images: |
            gocv/opencv:4.13.0-ubuntu-24.04
            ghcr.io/${{ github.repository_owner }}/opencv:4.13.0-ubuntu-24.04
          tags: |
            type=sha,format=long
            type=raw,value=latest
      - name: Log in to Docker Hub
        uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKER_HUB_USERNAME }}
          password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
      - name: Log in to Github Container Registry
        uses: docker/login-action@v3
        with:
          registry: ghcr.io
          username: ${{ github.repository_owner }}
          password: ${{ secrets.GITHUB_TOKEN }}
      - name: Build and push
        uses: docker/build-push-action@v6
        with:
          file: Dockerfile.opencv-ubuntu-24.04
          platforms: linux/amd64
          context: .
          push: true
          tags: |
            gocv/opencv:4.13.0-ubuntu-24.04
            ghcr.io/${{ github.repository_owner }}/opencv:4.13.0-ubuntu-24.04
          labels: ${{ steps.meta.outputs.labels }}
          cache-from: type=gha
          cache-to: type=gha,mode=max


================================================
FILE: .github/workflows/linux.yml
================================================
name: Linux
on:
  pull_request:
  push:
    branches:
      - dev
      - release

jobs:
  build:
    runs-on: ubuntu-latest
    container: ghcr.io/hybridgroup/opencv:4.13.0

    steps:
      - name: Checkout
        uses: actions/checkout@v6
      - name: Enforce Go formatted code
        run: "test -z $(gofmt -l .) || gofmt -d ."
      - name: Install dependencies
        run: apt-get update -yqq && apt-get install xvfb unzip -y
      - name: Install WeChat test model
        run: |
          mkdir -p ${GITHUB_WORKSPACE}/testdata
          curl -sL https://raw.githubusercontent.com/WeChatCV/opencv_3rdparty/wechat_qrcode/detect.caffemodel > ${GITHUB_WORKSPACE}/testdata/detect.caffemodel
          curl -sL https://raw.githubusercontent.com/WeChatCV/opencv_3rdparty/wechat_qrcode/detect.prototxt > ${GITHUB_WORKSPACE}/testdata/detect.prototxt
          curl -sL https://raw.githubusercontent.com/WeChatCV/opencv_3rdparty/wechat_qrcode/sr.caffemodel > ${GITHUB_WORKSPACE}/testdata/sr.caffemodel
          curl -sL https://raw.githubusercontent.com/WeChatCV/opencv_3rdparty/wechat_qrcode/sr.prototxt > ${GITHUB_WORKSPACE}/testdata/sr.prototxt
      - name: Install GOTURN test model
        run: |
          mkdir -p ${GITHUB_WORKSPACE}/testdata
          curl -sL https://raw.githubusercontent.com/opencv/opencv_extra/c4219d5eb3105ed8e634278fad312a1a8d2c182d/testdata/tracking/goturn.prototxt > ${GITHUB_WORKSPACE}/testdata/goturn.prototxt
          curl -sL https://github.com/opencv/opencv_extra/raw/c4219d5eb3105ed8e634278fad312a1a8d2c182d/testdata/tracking/goturn.caffemodel.zip.001 > ${GITHUB_WORKSPACE}/testdata/goturn.caffemodel.zip.001
          curl -sL https://github.com/opencv/opencv_extra/raw/c4219d5eb3105ed8e634278fad312a1a8d2c182d/testdata/tracking/goturn.caffemodel.zip.002 > ${GITHUB_WORKSPACE}/testdata/goturn.caffemodel.zip.002
          curl -sL https://github.com/opencv/opencv_extra/raw/c4219d5eb3105ed8e634278fad312a1a8d2c182d/testdata/tracking/goturn.caffemodel.zip.003 > ${GITHUB_WORKSPACE}/testdata/goturn.caffemodel.zip.003
          curl -sL https://github.com/opencv/opencv_extra/raw/c4219d5eb3105ed8e634278fad312a1a8d2c182d/testdata/tracking/goturn.caffemodel.zip.004 > ${GITHUB_WORKSPACE}/testdata/goturn.caffemodel.zip.004
          cat ${GITHUB_WORKSPACE}/testdata/goturn.caffemodel.zip.001 ${GITHUB_WORKSPACE}/testdata/goturn.caffemodel.zip.002 ${GITHUB_WORKSPACE}/testdata/goturn.caffemodel.zip.003 ${GITHUB_WORKSPACE}/testdata/goturn.caffemodel.zip.004 > ${GITHUB_WORKSPACE}/testdata/goturn.caffemodel.zip
          unzip -o ${GITHUB_WORKSPACE}/testdata/goturn.caffemodel.zip goturn.caffemodel -d ${GITHUB_WORKSPACE}/testdata
      - name: Install Tensorflow test model
        run: |
          mkdir -p ${GITHUB_WORKSPACE}/testdata
          curl -sL https://storage.googleapis.com/download.tensorflow.org/models/inception5h.zip > ${GITHUB_WORKSPACE}/testdata/inception5h.zip
          unzip -o ${GITHUB_WORKSPACE}/testdata/inception5h.zip tensorflow_inception_graph.pb -d ${GITHUB_WORKSPACE}/testdata
      - name: Install ONNX test model
        run: |
          mkdir -p ${GITHUB_WORKSPACE}/testdata
          curl -sL https://huggingface.co/onnxmodelzoo/legacy_models/resolve/main/validated/vision/classification/inception_and_googlenet/googlenet/model/googlenet-9.onnx > ${GITHUB_WORKSPACE}/testdata/googlenet-9.onnx
          curl -sL https://huggingface.co/opencv/face_recognition_sface/resolve/main/face_recognition_sface_2021dec.onnx > ${GITHUB_WORKSPACE}/testdata/face_recognition_sface_2021dec.onnx
          curl -sL https://huggingface.co/opencv/face_detection_yunet/resolve/main/face_detection_yunet_2023mar.onnx > ${GITHUB_WORKSPACE}/testdata/face_detection_yunet_2023mar.onnx
          curl -sL https://huggingface.co/opencv/object_tracking_vittrack/resolve/main/object_tracking_vittrack_2023sep.onnx > ${GITHUB_WORKSPACE}/testdata/object_tracking_vittrack_2023sep.onnx
      - name: Run main tests
        run: xvfb-run -a --error-file /var/log/xvfb_error.log --server-args="-screen 0 1024x768x24 +extension RANDR" go test -v -coverprofile=/tmp/coverage.out -count=1 -tags matprofile .
        env:
          DISPLAY: 99.0
          GOCV_TENSORFLOW_TEST_FILES: ${{ github.workspace }}/testdata
          GOCV_ONNX_TEST_FILES: ${{ github.workspace }}/testdata
          GOCV_TRACKER_GOTURN_TEST_FILES: ${{ github.workspace }}/testdata
      - name: Run contrib tests
        run: xvfb-run -a --error-file /var/log/xvfb_error.log --server-args="-screen 0 1024x768x24 +extension RANDR" go test -v -coverprofile=/tmp/contrib.out -count=1 -tags matprofile ./contrib
        env:
          DISPLAY: 99.0
      - name: Code coverage
        run: |
          go tool cover -html=/tmp/coverage.out -o /tmp/coverage.html
          go tool cover -html=/tmp/contrib.out -o /tmp/contrib.html
      - name: Archive code coverage results
        uses: actions/upload-artifact@v4
        with:
          name: code-coverage-report
          path: /tmp/*.html


================================================
FILE: .github/workflows/macos.yml
================================================
name: macOS
on:
  pull_request:
  push:
    branches:
      - dev
      - release

jobs:
  build:
    strategy:
        matrix:
          os: [macos-14, macos-15]
    runs-on: ${{ matrix.os }}
    steps:
      - name: Install OpenCV
        run: |
          brew update
          brew install opencv
      - name: Install Go
        uses: actions/setup-go@v6
        with:
          go-version: '1.25.5'
          cache: true
      - name: Checkout
        uses: actions/checkout@v6
      - name: Install WeChat test model
        run: |
          mkdir -p ${GITHUB_WORKSPACE}/testdata
          curl -sL https://raw.githubusercontent.com/WeChatCV/opencv_3rdparty/wechat_qrcode/detect.caffemodel > ${GITHUB_WORKSPACE}/testdata/detect.caffemodel
          curl -sL https://raw.githubusercontent.com/WeChatCV/opencv_3rdparty/wechat_qrcode/detect.prototxt > ${GITHUB_WORKSPACE}/testdata/detect.prototxt
          curl -sL https://raw.githubusercontent.com/WeChatCV/opencv_3rdparty/wechat_qrcode/sr.caffemodel > ${GITHUB_WORKSPACE}/testdata/sr.caffemodel
          curl -sL https://raw.githubusercontent.com/WeChatCV/opencv_3rdparty/wechat_qrcode/sr.prototxt > ${GITHUB_WORKSPACE}/testdata/sr.prototxt
      - name: Install GOTURN test model
        run: |
          mkdir -p ${GITHUB_WORKSPACE}/testdata
          curl -sL https://raw.githubusercontent.com/opencv/opencv_extra/c4219d5eb3105ed8e634278fad312a1a8d2c182d/testdata/tracking/goturn.prototxt > ${GITHUB_WORKSPACE}/testdata/goturn.prototxt
          curl -sL https://github.com/opencv/opencv_extra/raw/c4219d5eb3105ed8e634278fad312a1a8d2c182d/testdata/tracking/goturn.caffemodel.zip.001 > ${GITHUB_WORKSPACE}/testdata/goturn.caffemodel.zip.001
          curl -sL https://github.com/opencv/opencv_extra/raw/c4219d5eb3105ed8e634278fad312a1a8d2c182d/testdata/tracking/goturn.caffemodel.zip.002 > ${GITHUB_WORKSPACE}/testdata/goturn.caffemodel.zip.002
          curl -sL https://github.com/opencv/opencv_extra/raw/c4219d5eb3105ed8e634278fad312a1a8d2c182d/testdata/tracking/goturn.caffemodel.zip.003 > ${GITHUB_WORKSPACE}/testdata/goturn.caffemodel.zip.003
          curl -sL https://github.com/opencv/opencv_extra/raw/c4219d5eb3105ed8e634278fad312a1a8d2c182d/testdata/tracking/goturn.caffemodel.zip.004 > ${GITHUB_WORKSPACE}/testdata/goturn.caffemodel.zip.004
          cat ${GITHUB_WORKSPACE}/testdata/goturn.caffemodel.zip.001 ${GITHUB_WORKSPACE}/testdata/goturn.caffemodel.zip.002 ${GITHUB_WORKSPACE}/testdata/goturn.caffemodel.zip.003 ${GITHUB_WORKSPACE}/testdata/goturn.caffemodel.zip.004 > ${GITHUB_WORKSPACE}/testdata/goturn.caffemodel.zip
          unzip -o ${GITHUB_WORKSPACE}/testdata/goturn.caffemodel.zip goturn.caffemodel -d ${GITHUB_WORKSPACE}/testdata
      - name: Install Tensorflow test model
        run: |
          mkdir -p ${GITHUB_WORKSPACE}/testdata
          curl -sL https://storage.googleapis.com/download.tensorflow.org/models/inception5h.zip > ${GITHUB_WORKSPACE}/testdata/inception5h.zip
          unzip -o ${GITHUB_WORKSPACE}/testdata/inception5h.zip tensorflow_inception_graph.pb -d ${GITHUB_WORKSPACE}/testdata
      - name: Install ONNX test model
        run: |
          mkdir -p ${GITHUB_WORKSPACE}/testdata
          curl -sL https://huggingface.co/onnxmodelzoo/legacy_models/resolve/main/validated/vision/classification/inception_and_googlenet/googlenet/model/googlenet-9.onnx > ${GITHUB_WORKSPACE}/testdata/googlenet-9.onnx
          curl -sL https://huggingface.co/opencv/face_recognition_sface/resolve/main/face_recognition_sface_2021dec.onnx > ${GITHUB_WORKSPACE}/testdata/face_recognition_sface_2021dec.onnx
          curl -sL https://huggingface.co/opencv/face_detection_yunet/resolve/main/face_detection_yunet_2023mar.onnx > ${GITHUB_WORKSPACE}/testdata/face_detection_yunet_2023mar.onnx
          curl -sL https://huggingface.co/opencv/object_tracking_vittrack/resolve/main/object_tracking_vittrack_2023sep.onnx > ${GITHUB_WORKSPACE}/testdata/object_tracking_vittrack_2023sep.onnx
      - name: Run main tests
        run: go test -v -tags matprofile .
        env:
          GOCV_TENSORFLOW_TEST_FILES: ${{ github.workspace }}/testdata
          GOCV_ONNX_TEST_FILES: ${{ github.workspace }}/testdata
          GOCV_TRACKER_GOTURN_TEST_FILES: ${{ github.workspace }}/testdata
      - name: Run contrib tests
        run: go test -v -tags matprofile ./contrib


================================================
FILE: .github/workflows/windows.yml
================================================
name: Windows

on:
  pull_request:
  push:
    branches:
      - dev
      - release

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  build-windows:
    runs-on: windows-2022
    steps:
      - name: Checkout
        uses: actions/checkout@v6
      - name: Install Go
        uses: actions/setup-go@v5
        with:
          go-version: '1.25.5'
          cache: true
      - name: Restore cached OpenCV source
        uses: actions/cache/restore@v4
        id: cache-opencv-source
        with:
          key: opencv-source-4130-windows-v3
          path: |
            ./opencv/opencv-4.13.0
            ./opencv/opencv_contrib-4.13.0
      - name: Download OpenCV source
        if: steps.cache-opencv-source.outputs.cache-hit != 'true'
        shell: cmd
        run: |
          call .\win_download_opencv.cmd "%GITHUB_WORKSPACE%\opencv"
      - name: Save cached OpenCV source
        uses: actions/cache/save@v4
        if: steps.cache-opencv-source.outputs.cache-hit != 'true'
        with:
          key: ${{ steps.cache-opencv-source.outputs.cache-primary-key }}
          path: |
            ./opencv/opencv-4.13.0
            ./opencv/opencv_contrib-4.13.0
      - name: Restore cached OpenCV build
        uses: actions/cache/restore@v4
        id: cache-opencv-build
        with:
          key: opencv-build-4130-windows-v4
          path: |
            ./opencv/build
      - name: Build OpenCV
        if: steps.cache-opencv-build.outputs.cache-hit != 'true'
        shell: cmd
        run: |
          call .\win_build_opencv.cmd "%GITHUB_WORKSPACE%\opencv"
      - name: Save cached OpenCV build
        uses: actions/cache/save@v4
        if: steps.cache-opencv-build.outputs.cache-hit != 'true'
        with:
          key: ${{ steps.cache-opencv-build.outputs.cache-primary-key }}
          path: |
            ./opencv/build
      - name: Set GoCV env
        run: |
            go env
            echo "CGO_CXXFLAGS=--std=c++11 -DNDEBUG" >> $env:GITHUB_ENV
            echo "CGO_CPPFLAGS=-I${env:GITHUB_WORKSPACE}\opencv\build\install\include" >> $env:GITHUB_ENV
            echo "CGO_LDFLAGS=-L${env:GITHUB_WORKSPACE}\opencv\build\install\x64\mingw\lib -lopencv_core4130 -lopencv_face4130 -lopencv_videoio4130 -lopencv_imgproc4130 -lopencv_highgui4130 -lopencv_imgcodecs4130 -lopencv_objdetect4130 -lopencv_features2d4130 -lopencv_video4130 -lopencv_dnn4130 -lopencv_xfeatures2d4130 -lopencv_plot4130 -lopencv_tracking4130 -lopencv_img_hash4130 -lopencv_calib3d4130 -lopencv_bgsegm4130 -lopencv_photo4130 -lopencv_aruco4130 -lopencv_wechat_qrcode4130 -lopencv_ximgproc4130 -lopencv_xphoto4130 -lopencv_xobjdetect4130 -lopencv_mcc4130" >> $env:GITHUB_ENV
            echo "${env:GITHUB_WORKSPACE}/opencv/build/install/x64/mingw/bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append
      - name: Install Tensorflow test model
        run: |
            mkdir -p ./testdata
            curl -sL https://storage.googleapis.com/download.tensorflow.org/models/inception5h.zip > ./testdata/inception5h.zip
            unzip -o ./testdata/inception5h.zip tensorflow_inception_graph.pb -d ./testdata
      - name: Install ONNX test model
        run: |
          curl -sL https://huggingface.co/onnxmodelzoo/legacy_models/resolve/main/validated/vision/classification/inception_and_googlenet/googlenet/model/googlenet-9.onnx > ./testdata/googlenet-9.onnx
          curl -sL https://huggingface.co/opencv/face_recognition_sface/resolve/main/face_recognition_sface_2021dec.onnx > ./testdata/face_recognition_sface_2021dec.onnx
          curl -sL https://huggingface.co/opencv/face_detection_yunet/resolve/main/face_detection_yunet_2023mar.onnx > ./testdata/face_detection_yunet_2023mar.onnx
          curl -sL https://huggingface.co/opencv/object_tracking_vittrack/resolve/main/object_tracking_vittrack_2023sep.onnx > ./testdata/object_tracking_vittrack_2023sep.onnx
      - name: Install GOTURN test model
        shell: bash
        run: |
          curl -sL https://raw.githubusercontent.com/opencv/opencv_extra/c4219d5eb3105ed8e634278fad312a1a8d2c182d/testdata/tracking/goturn.prototxt > ./testdata/goturn.prototxt
          curl -sL https://github.com/opencv/opencv_extra/raw/c4219d5eb3105ed8e634278fad312a1a8d2c182d/testdata/tracking/goturn.caffemodel.zip.001 > ./testdata/goturn.caffemodel.zip.001
          curl -sL https://github.com/opencv/opencv_extra/raw/c4219d5eb3105ed8e634278fad312a1a8d2c182d/testdata/tracking/goturn.caffemodel.zip.002 > ./testdata/goturn.caffemodel.zip.002
          curl -sL https://github.com/opencv/opencv_extra/raw/c4219d5eb3105ed8e634278fad312a1a8d2c182d/testdata/tracking/goturn.caffemodel.zip.003 > ./testdata/goturn.caffemodel.zip.003
          curl -sL https://github.com/opencv/opencv_extra/raw/c4219d5eb3105ed8e634278fad312a1a8d2c182d/testdata/tracking/goturn.caffemodel.zip.004 > ./testdata/goturn.caffemodel.zip.004
          cat ./testdata/goturn.caffemodel.zip.00*  > ./testdata/goturn.caffemodel.zip
          unzip -o ./testdata/goturn.caffemodel.zip goturn.caffemodel -d ./testdata/
      - name: Set GoCV model env
        run: |
            go env
            echo "GOCV_TENSORFLOW_TEST_FILES=${env:GITHUB_WORKSPACE}\testdata" >> $env:GITHUB_ENV
            echo "GOCV_ONNX_TEST_FILES=${env:GITHUB_WORKSPACE}\testdata" >> $env:GITHUB_ENV
            echo "GOCV_TRACKER_GOTURN_TEST_FILES=${env:GITHUB_WORKSPACE}\testdata" >> $env:GITHUB_ENV
      - name: Test GoCV
        run: |
            go test -v -tags="matprofile,customenv" .
      - name: Test GoCV Contrib
        run: |
            go test -v -tags="matprofile,customenv" ./contrib


================================================
FILE: .gitignore
================================================
profile.cov
count.out
*.swp
*.snap
/parts
/prime
/stage
.vscode/
/build
.idea/
contrib/data.yaml
contrib/testOilPainting.png


================================================
FILE: CHANGELOG.md
================================================
0.43.0
---
* **all**
    - update to OpenCV 4.13
* **core**
    - add Copy method to Mat (#1346)
    - improve implementation for NewPointVectorFromPoints
* **cuda**
    - add implmentations for more arith functions
* **imgproc**
    - added in missing colormaps
    - paramters types in improc dilate and erode functions
    - use same test values as OpenCV tests for TestMinAreaRect and TestMinAreaRect2f
* **videoio**
    - add RetrieveChannel function to make it possible to capture both video and audio
* **examples**
    - Fix bugs and memory leaks in yolov8 example (#1349)
* **contrib**
    - add support for Macbeth Chart module (MCC) (#1336)
* **install**
    - windows: split download and build scripts for easier usage/integration

0.42.0
---
* **all**
    - Update to OpenCV 4.12.0
    - Expose GpuMat's underlying object pointer
    - Add support for reduced size OpenCV builds using build tags for specific modules (cuda, contrib, etc.)
- **cuda**
    - Add LShift and RShift function implementations
    - Add Compare function implementation
    - Add implementations for Norm, CalcNorm, and CalcNormDiff functions
    - Add Cuda Morphology Filter (#1311)
- **core**
    - Add ReshapeWithSize() to provide specific control over the reshape operation
    - Add MeanStdDevWithMask for cv::meanStdDev with the optional mask
- **video**
    - Add video tracker implementation using Vit DNN
    - Add cv::stereoRectify binding
- **docker**
    - Update OpenCV containers to 4.12.0
- **docs**
    - Update ROADMAP links and add missing tracker functions
    - Update README with new features and usage
- **build**
    - Use build tags for reduced size OpenCV builds with specific modules
- **bugfix**
    - Fix bug where the package name was mismatched with contrib (#1293)

0.41.0
---
* **all**
    - opencv: patch for gstreamer cmake to handle static linking
- **bugfix**
    - correct ifndef for wrappers to avoid include conflcts
    - temporary fix for https://github.com/docker/setup-qemu-action/issues/198
- **core**
    - add exception handling functions and try/catch blocks
    - return error from calls to OpenCV functions that cause exceptions. The error shows the OpenCV exception description from the exception caught.
- **features2d**
    - Add BRISK with params support (#1280)
    - Params for features2d (#1283)
- **photo**
    - add Decolor() function
- **video**
    - ApplyWithParams for MOG2 bg subtractor (#1284)
- **build**
    - add manually launched workflows to build ffmpeg, gstreamer, and opencv docker images
    - add `Dockerfile.opencv-ubuntu-24.04` for Ubuntu 24.04 support
    - add `opencv-ubuntu-24-04` step for build img workflow
- **docker**
    - add static image with opencv and ffmpeg without gstreamer
    - gstreamer with a specific set of plugins
    - use OpenCV patch to build fully static GStreamer with plugins included
- **docs**
    - update ROADMAP for some functions that were completed already
    - Update wrong links in Readme for face detection from URL and find chessboard
- **make**
    - add install task for Ubuntu Manic Minotaur using @chewxy PR #1157
    - update make tasks for jetson based on latest available info
    - Update Makefile (#1276)

0.40.0
---
* **all**
    - Add support for OpenCV 4.11.0
    - Update license year to 2025
- **bugfix**
    - Correct signature for FindHomography, since dst is actually target format for the operation, not something changed by the operation
- **core**
    - Added new Mat constructor and tests
    - Added NewMatFromPoint2fVector function
- **videoio**
    - Change type of VideoCaptureProperties to int32
    - Added VideoWriterFile with API and API Params
- **docker**
    - Alpine static improved (#1243)
- **make**
    - Improve Linux distro dtection code, and add specific dependendcies for Ubunutu 24.04
- **examples**
    - GStreamer VideoWriter example
- **build**
    - Update homebrew when running macOS tests
    - Update GH actions in linux build to latest versions

0.39.0
---
- **bugfix**
  - Fixed MinGW link typo in README.md.
  - Fixed function name typo (#1236).
- **core**
  - Added `FaceDetectorYN` example.
  - Query I/O API backends registry (#1237).
  - Face detector YN face recognizer SF (#1232).
- **cuda**
  - Added `createLookUpTable` and `split` functions.
  - Added missing CUDA `imgproc` standalone functions.
  - Added `XXXWithStream` standalone functions.
- **docker**
  - Added Dockerfile for container that can perform static builds of your own GoCV project (HighGUI not supported by static builds).
  - Added Dockerfile example showing how to build using static linking.
  - Added static build examples.
  - Updated version for `gocv-static-builder` image.
- **build**
  - Updated workflow for Docker builds to latest versions.
  - Used most recent NVIDIA CUDA base image.
  - Used static FFmpeg build for static OpenCV build.
  - Downgraded static build to Go 1.22 to avoid [Go issue #68976](https://github.com/golang/go/issues/68976).
  - Modified Dockerfile used for static builds to build own versions for static linking.
  - Corrected build options for OpenCV on arm64 for static builds.
  - Separated build tags and linker flags for arm64 and amd64 targets.
  - Modified LDFLAGS for correct static compilation.
  - Removed extra file to clear space for static build/standard dev build images.
  - Added options for Linux arm64 and separate Darwin builds.
- **cgo**
  - Changed tags for static OpenCV to `opencvstatic`.
  - Added options for Linux arm64 and separate Darwin builds.
  - Removed unneeded lib from link for Linux/arm64.
  - Modified LDFLAGS for correct static compilation.
- **docs**
  - Added missing `videoio` functions to ROADMAP.
  - Updated ROADMAP with missing `objdetect` functions for DNN faces, and moved `aruco` under `objdetect` module.
  - Simplified the YOLO example.

0.38.0
---
* **bugfix**
    * aruco: correct test from latest OpenCV update
    * exclude freetype.cpp file from being included in windows build
    * feat(demosaicing): release mat when conversion to bayer encounters invalid pattern
    * imgproc HomographyMethod const values typo fixed
* **build**
    * add macOS build for GH actions CI
    * adjust make and docker build files to build freetype support
    * correct ONNX DNN tests on Linux/macOS
    * move download for GOTURN models into testdata subdirectory
    * remove Caffe tests
    * run DNN tests on Windows
    * make: add task to run all cuda tests
    * make: build non-free modules when building opencv with cuda support
    * skip tests on macOS that are not passing due to OpenCV different results on macOS. See https://forum.opencv.org/t/match-template-different-results-on-mac-m1/10026 and other similar issues.
    * update all generated docker images to Go 1.23.1
* **examples**
    * add asciicam video to ascii in your terminal
    * add object detection example using YOLOv8
* **core**
    * add Closed() function to Mat
    * add OpenCV types for half-float values
    * add TransposeND() function
    * persistance implement Filestorage roadmap (#1208)
    * RotatedRect type constructors
* **dnn**
    * add BlobFromImageWithParams() and BlobFromImagesWithParams() functions
    * add BlobRectToImageRect() and BlobRectsToImageRects() functions
    * allow ReadNet() function to only pass model file, and remove tests for Caffe
* **features2d**
    * SIFT with params (#1186)
* **highgui**
    * added window pollkey function (#1198)
    * added window WaitKeyEx support (#1195)
    * Window set mouse callback (#1220)
* **imgcodecs**
    * added immultiread support
* **imgproc**
    * feat(imgproc): demosaicing wrapper
    * add HomographyMethodRHO HomographyMethod added
* **objdetect**
    * change QRCodeDetector signature to avoid pointer to slice
* **video**
    * added TrackerGOTURN (see roadmap)
* **videoio**
    * Capture from device and file with HW acceleration
* **cuda**
    * add Closed() function to Mat/GpuMat
    * add DeviceSupports function
    * add implementations for AddWeighted and CopyMakeBorder functions
    * add Merge and Transpose functions
    * add support for convertFp16 function
    * add tests for demosaicing
    * feat(imgproc): demosaicing wrapper
    * correct go fmt error
* **contrib/face**
    * added face recognizer interface (#1211)
    * BasicFaceRecognizer + EigenFaceRecognizer + FisherFaceRecognizer (#1213)
    * extra setters and getters for LBPHFaceRecognizer (#1194)
* **contrib/freetype**
    * imported freetype code by lz1998 from PR 873

0.37.0
---
* **all**
    * Add support for OpenCV 4.10.0

0.36.1
---
* **bugfix**
    * Correct error in CUDA function signature
* **test**
    * correct CUDA tests
* **docker**
    * add test image for CUDA 12

0.36.0
---
* **all**
    * Add support for OpenCV 4.9.0
    * update Go to version 1.22
    * update minimum go version to 1.21
* **bugfix**
    * aruco: correct test from latest OpenCV update
* **build**
    * add GH action for Windows
    * remove appveyor
    * adjusted Makefile to build for debian bookworm
* **core**
    * Add additional signature for MinMaxLoc.
    * add color conversion alias
    * add Mahalanobis(), Inv(), Row(), amd Col() functions
    * add MulTransposed() function
    * add PCABackProject() and PCAProject() functions
    * add PSNR() function
    * add SVBackSubst() and SVDecomp() functions
* **calib3d**
    * add FisheyeCalibrate, FisheyeDistortPoints, and CheckChessboard functions
    * Add func comments and update readme
    * add Rodrigues function
    * add SolvePnP function
    * Add more smoke tests
    * Initial commit of more stereo bindings
* **feature2d**
    * Add interface for `Feature2D` algorithms
    * Asserting some algorithms conform to `Feature2D`
    * Prepend "Feature2D" prefix to component interfaces of Feature2D
* **imgproc**
    * add CreateHanningWindow()
    * add EMD()
    * Add float version of BoxPoints and MinAreaRect
    * Add new binding for cv::Erode.
* **videoio**
    * add Retrieve function
* **contrib/xfeatures2d**
    * Add BriefDescriptorExtractor to xfeatures2d (#1114)
    * add NewSURFWithParams func
    * Add separate "Compute" bindings for detection algorithms (#1117)
* **cuda/core**
    * ADD Cuda MultiplyWithStream (#1142)

0.35.0
---
* **all**
    * Add support for OpenCV 4.8.1
    * correct Go formatting
* **features2d**
    * Add Match method for BFMatcher
* **build**
    * remove extra files from GH actions runner so GPU images builds have enough temp file space to run correctly
* **make**
    * for build_raspi added conditional cmake build for 64 and 32bit platforms
    * remove ENABLE_VFPV3=ON and add WITH_TBB=ON from 64bit build.
    * added sudo_pre_install_clean to raspberry pi and jetson installs
    * change sudo_pre_install_clean to support cleanup on 64bit architechtures (arm and x86)

0.34.0
---
* **all**
    * Add support for OpenCV 4.8.0
    * Add support for Go 1.21
* **build**
    * update all builds to use OpenCV 4.8.0
* **core**
    * Adds support for PCACompute
* **docker**
    * add dockerfile for OpenCV static build
* **make**
    * Leave one processor free instead of using all of them when building


0.33.0
---
* **bugfix**
    * Remove opencv2/aruco.hpp include
* **all**
    * build performance tests with all OpenCV builds
* **build**
    * build and push Ubuntu 22.04 base image with OpenCV 4.7.0
    * docker images with opencv
    * docker production images with opencv 4.7.0
    * Docker push to GHCR
* **core**
    * Add ReduceArgMax and ReduceArgMin
* **dnn**
    * improved NMSBoxes code
* **docker**
    * add dockerfile for Ubuntu 22.04 OpenCV base image
    * updates to migrate to GHCR
* **examples**
    * Deallocate Mats in feature-matching example.
    * Fix G108 (CWE-200) and G114 (CWE-676)
    * Fix G304 (CWE-22) and G307 (CWE-703)
    * Fix G304 (CWE-22) and G307 (CWE-703)
    * Missed #nosec tag
* **make**
    * Ubuntu Jammy (22) opencv build support.


0.32.0
---
* **all**
    * update to OpenCV 4.7.0
* **core**
    * Add the number of thread setter and getter
* **calib3d**
    * add EstimateAffinePartial2DWithParams()
* **imgcodecs**
    * Add IMDecodeIntoMat to reduce heap allocations (#1035)
* **imgproc**
    * add matchShapes function support
* **objdetect**
    * move aruco from contrib and also refactor/update to match current OpenCV API
* **photo**
    * add inpaint function
* **video**
    * cv::KalmanFilter bindings.
* **cuda**
    * add support for cuda::TemplateMatching
* **docker**
    * update all dockerfiles for OpenCV 4.7.0/GoCV 0.32.0
    * multiplatform for both amd64 and arm64
    * install libjpeg-turbo into docker image
    * add Ubunutu 18.04 and 20.04 prebuilt OpenCV images
    * add dockerfile for older version of CUDA for those who cannot upgrade
* **ci**
    * remove circleci
    * correct actions that trigger build
* **make**
    * change download path for OpenCV release tag
* **windows**
    * Update win_build_opencv.cmd
* **docs**
    * correct docs on building docker
    * update ROADMAP
    * typo in comment
    * update comments style with gofmt
* **openvino**
    * Add openvino Dockerfile
    * Fix OpenvinoVersion dangling pointer
    * Update env.sh and README.md for 2022.1

0.31.0
---
* **all**
    * update to OpenCV 4.6.0
* **build**
    * Switch to Github Actions for Linux CI build
    * Use go -tags static when verifying static build
* **core**
    * Add Mat.ElemSize (#964)
    * avoid index out of range panic in NewPointsVectorFromPoints
* **video**
    * add findTransformECC function
* **contrib/ximgproc**
    * add PeiLinNormalization() function
    * add anisotropicDiffusion() function
    * implement edgePreservingFilter()
    * implement niBlackThreshold and thinning filters

0.30.0
---
* **all**
    * update to OpenCV 4.5.5
* **build**
    * add install_nonfree make task to build all opencv_contrib modules
    * correct download location for onnx test file
    * Update Makefile for missing version changes
* **core**
    * correct how memory is being allocated for Eye(), Zeros(), and Ones() to address issue #930
* **calib3d** 
    * Adding support for estimateAffine2DWithParams (#924)
* **imgproc**
    * Add DrawContoursWithParams function
* **photo**
    * Add bindings for fastNlMeansDenoising and fastNlMeansDenoisingColored
    * add detailEnhance function
    * add EdgePreservingFilter function
    * add PencilSketch function
    * add stylization function
* **docs**
    * add godoc comments for FastNlMeansDenoising functions
    * update README with info on latest mingw-w64 t use for Windows builds
    * dnn pose detect examples correct the order of the argument variable name
* **examples**
    * Fixed memory leaks in the motion detection example
* **openvino**
    * Update env.sh and README.md
* **windows**
    * use mingw-w64 8.1.0 for protobuf compile
* **contrib**
    * add cv::wechat_qrcode::WeChatQRCode (#949)
    * Update cgo_static.go

0.29.0
---
* **all**
    * update to OpenCV 4.5.4
* **build**
    * add static build ability on windows
    * use tbb for all builds for CPU accelerated operations
* **cuda**
    * implement a bunch of per-element operations
    * add get/set/reset device functions
    * add NewGpuMatWithSize() to preallocate device memory
    * Reshape() returns a new GpuMat with the changed data
    * correct use of Stream by adding WaitForCompletion() and passing pre-allocated GpuMats
* **docs**
    * update ROADMAP from recent contributions
* **videoio**
    * Fix open video capture with api test (#895)
* **calib3d**
    * added EstimateAffine2D
    * findChessboardCornersSB
* **aruco**
    * added many functions as part of initial implementation

0.28.0
---
* **all**
    * update to OpenCV 4.5.3
    * make task and build tag for static build of OpenCV/GoCV on Linux
    * add Makefile tasks for OpenCV install on Nvidia Jetson
    * add gotest for more colorful test output running tests from containers
* **build**
    * correcting output format for code coverage report
    * enforce rule that all Go code is correctly formatted
    * remove codecov
* **core**
    * add NewPointVectorFromMat() and NewPoint2fVectorFromMat() functions
    * Fix possible MatProfile race by ordering remove before free.
* **cuda**
    * add core functions for GpuMat like Cols(), Rows(), and Type()
    * initial implementation for the Flip function
* **docs**
    * update ROADMAP from recent contributions
* **examples**
    * correct list of examples and fix comment
* **features2d**
    * Add NewORBWithParams
* **tracking**
    * change MOSSE to KCF
* **highgui**
    * Add function CreateTrackbarWithValue to Window type.
* **imgcodec**
    * optimize IMEncode avoiding multiple data copies.
* **imgproc**
    * Add CircleWithParams function
    * Add DilateWithParams() function (#827)
    * Add EllipseWithParams function
    * Add FillPolyWithParams function
    * Add PointPolygonTest function
    * Add RectangleWithParams function
* **photo**
    * add MergeMertens, AlignMTB and Denoising function (#848)
* **xphoto**
    * Add Xphoto contrib (#844)

0.27.0
---
* **all**
    * update to OpenCV 4.5.2
* **core**
    * add Append() to PointsVector/PointVector
    * add cv::RNG
    * add implementation for Point2fVector
    * add rand functions
    * add test coverage for PointsVector
    * create new PointsVector/PointVector wrappers to avoid repetitive memory copying for seeming innocent operations involving slices of image.Point
    * test coverage for Point2f
    * use PointVector for everything that we can to speed up pipeline when passing around Point vectors
    * use enum instead of int for Invert Method
* **cuda**
    * adding HoughLinesDetector and HoughSegmentDetector
    * adding tests for the CannyEdgeDetector
    * some refactoring of the API
    * adding dockerfiles for OpenCV 4.5.2 with CUDA 11.2
    * add GaussianFilter
    * correct signature and test for Threshold
    * implement SobelFilter
    * move arithm module functions into correct location
    * rename files to get rid of so many cudas
    * add abs function implementation
* **dnn**
    * increase test coverage
* **docker**
    * make all Dockerfiles names/tags more consistent
* **docs**
    * add CUDA functions that need implementation to ROADMAP
    * remove invalid sections and add some missing functions from ROADMAP
* **imgproc**
    * Add FindContoursWithParams function
    * Add ToImageYUV and ToImageYUVWithParams
* **make**
    * add make task to show changelog for next release
* **wechat_qrcode**
    * disable module in Windows due to linker error

0.26.0
---
* **all**
    * update to OpenCV 4.5.1
* **core**
    * add Matrix initializers: eye, ones, zeros (#758)
    * add multidimensional mat creation
    * add ndim mat constructor
    * added accumulators
    * added norm call with two mats (#600)
    * keep a reference to a []byte that backs a Mat. (#755)
    * remove guard for DataPtrUint8 since any Mat can be treated an Uint8
    * add Mat IsContinuous() function, and ensure that any Mat data pointers used to create Go slices only apply to continuous Mats
    * fix buffer size for Go strings for 32-bit operating systems
* **build**
    * bring back codecov.io
* **calib3d**
    * correctly close mat after test
* **dnn**
    * add ReadNetFromONNX and ReadNetFromONNXBytes (#760)
    * increase test coverage
* **docker**
    * dockerfiles for opencv gpu builds
* **docs**
    * corrected links to CUDA and OpenVINO
    * list all unimplemented functions in photo module
    * replace GoDocs with pkg docs
    * update ROADMAP from recent contributions
* **imgproc**
    * add test coverage for GetTextSizeWithBaseline()
    * close all Mats even those based on memory slices
    * close Mat to avoid memory leak in ToImage()
    * refactoring of ToImage and ImageToMatXX functions
* **openvino**
    * fix dldt repo in makefile for openvino
* **os**
    * adding gcc-c++ package to rpm deps
* **photo**
    * add SeamlessClone function
* **profile**
    * add created mats in Split and ForwardLayers to profile (#780)

0.25.0
---
* **all**
    * update to opencv release 4.5.0
* **build** 
    * add file dependencies needed for DNN tests
    * add verbose output for tests on CircleCI
    * also run unit tests on non-free algorithms. YMMV.
    * fix build with cuda
    * remove Travis and switch to CircleCI using Docker based builds
    * update CI builds to Go 1.15
* **core**
    * add mixChannels() method to Mat (#746)
    * Add toGoStrings helper
    * support ConvertToWithParams method
* **dnn**
    * Add NMSBoxes function (#736)
    * Added ability to load Torch file. Tested features for extracting 128d vectors
    * fix using wrong type for unconnectedlayertype
    * use default ddepth for conversions to blob from image as recommended by @berak
* **docker** 
    * use separate dockerfile for opencv to avoid massive rebuild
* **docs**
    * add recent contributions to ROADMAP and also add cuda functions still in need of implementation
    * display CircleCI badge in README
    * minor improvements to CUDA docs in READMEs
* **features2d**
    * add FlannBasedMatcher
    * add drawmatches (#720)
    * fix memory leak in SIFT
* **highgui**
    * refactored ROI methods
* **imgproc**
    * Add option to return baseline with GetTextSizeWithBaseline
* **objdetect** 
    * Add QRCode DetectAndDecodeMulti
* **videoio**
    * Add video capture properties and set preferred api backend (#739)
    * fix needed as discussed in golang/go issue #32479

0.24.0
---
* **all**
    * update Makefile and READMEChange constants and corresponding function signatures to have the correct types (#689)
    * replace master branch terminology with release
    * update to OpenCV 4.4.0
* **calib3d**
    * add FindHomography()
    * add function EstimateAffinePartial2D()
    * add GetAffineTransform() and GetAffineTransform2f()
    * add UndistortPoints(), FisheyeUndistortPoints() and EstimateNewCameraMatrixForUndistortRectify()
* **core**
    * add MultiplyWithParams
* **docs**
    * add recent contributions to ROADMAP
    * create CODE_OF_CONDUCT.md
    * update copyright year
* **features2d**
    * close returned Mat from SIFT algorithm
    * fix issue 707 with DrawKeyPoints
    * SIFT patent now expired so is part of main OpenCV modules
* **imgproc**
    * change struct to remove GNU old-style field designator extension warning

0.23.0
---
* **build**
    * update Makefile and README
    * update to use go1.14
* **calib3d**
    * add draw chessboard
* **core**
    * fix memory leak in Mat.Size() and Mat.Split() (#580)
* **cuda**
    * add build support
    * add cuda backend/target
    * add support for:
        * cv::cuda::CannyEdgeDetector
        * cv::cuda::CascadeClassifier Class
        * cv::cuda::HOG Class
    * remove breaking case statement
* **dnn**
    * avoid parallel test runs
    * remove attempt at providing grayscale image blog conversion that uses mean adjustment
* **docker**
    * docker file last command change (#505)
* **docs**
    * add recent contributions to ROADMAP
* **imgproc**
    * add ErodeWithParams function
    * add getGaussianKernel function
    * add Go Point2f type and update GetPerspectiveTransform() (#589)
    * add PhaseCorrelate binding (#626)
    * added Polylines feature
    * do not free contours data until after we have drawn the needed contours
    * Threshold() should return a value (#620)
* **make**
    * added raspberry pi zero support to the makefile
* **opencv**
    * update to OpenCV 4.3.0
* **openvino**
    * add build support
* **windows**
    * add cmake flag for allocator stats counter type to avoid opencv issue #16398

0.22.0
---
* **bgsegm**
    * Add BackgroundSubtractorCNT
* **calib3d**
    * Added undistort function (#520)
* **core**
    * add functions (singular value decomposition, multiply between matrices, transpose matrix) (#559)
    * Add new funcs (#578)
    * add setIdentity() method to Mat
    * add String method (#552)
    * MatType: add missing constants
* **dnn**
    * Adding GetLayerNames()
    * respect the bit depth of the input image to set the expected output when converting an image to a blob
* **doc**
    * change opencv version 3.x to 4.x
* **docker**
    * use Go1.13.5 for image
* **imgcodecs**
    * Fix webp image decode error (#523)
imgcodecs: optimize copy of data used for IMDecode method
* **imgproc**
    * Add GetRectSubPix
    * Added ClipLine
    * Added InvertAffineTransform
    * Added LinearPolar function (#524)
    * correct ksize param used for MedianBlur unit test
    * Feature/put text with line type (#527)
    * FitEllipse
    * In FillPoly and DrawContours functions, remove func() wrap to avoid memory freed before calling opencv functions. (#543)
* **objdetect**
    * Add support QR codes
* **opencv**
    * update to OpenCV 4.2.0 release
* **openvino**
    * Add openvino async
* **test**
    * Tolerate imprecise result in SolvePoly
    * Tolerate imprecision in TestHoughLines

0.21.0
---
* **build**
    * added go clean --cache to clean target, see issue 458
* **core**
    * Add KMeans function
    * added MeanWithMask function for Mats (#487)
    * Fix possible resource leak
* **cuda**
    * added cudaoptflow
    * added NewGpuMatFromMat which creates a GpuMat from a Mat
    * Support for CUDA Image Warping (#494)
* **dnn**
    * add BlobFromImages (#467)
    * add ImagesFromBlob (#468)
* **docs**
    * update ROADMAP with all recent contributions. Thank you!
* **examples**
    * face detection from image url by using IMDecode (#499)
    * better format
* **imgproc**
    * Add calcBackProject
    * Add CompareHist
    * Add DistanceTransform and Watershed
    * Add GrabCut
    * Add Integral
    * Add MorphologyExWithParams
* **opencv**
    * update to version 4.1.2
* **openvino**
    * updates needed for 2019 R3
* **videoio**
    * Added ToCodec to convert FOURCC string to numeric representation (#485)

0.20.0
---
* **build**
    * Use Go 1.12.x for build
    * Update to OpenCV 4.1.0
* **cuda**
    * Initial cuda implementation
* **docs**
    * Fix the command to install xquartz via brew/cask
* **features2d**
    * Add support for SimpleBlobDetectorParams (#434)
    * Added FastFeatureDetectorWithParams
* **imgproc**
    * Added function call to cv::morphologyDefaultBorderValue
* **test**
    * Increase test coverage for FP16BlobFromImage()
* **video**
    * Added calcOpticalFlowPyrLKWithParams
    * Addition of MOG2/KNN constructor with options

0.19.0
---
* **build**
    * Adds Dockerfile. Updates Makefile and README.
    * make maintainer tag same as dockerhub organization name
    * make sure to run tests for non-free contrib algorithms
    * update Appveyor build to use Go 1.12
* **calib3d**
    * add func InitUndistortRectifyMap (#405)
* **cmd**
    * correct formatting of code in example
* **core**
    * Added Bitwise Operations With Masks
    * update to OpenCV4.0.1
* **dnn**
    * add new backend and target types for NVIDIA and FPGA
    * Added blobFromImages in ROADMAP.md (#403)
    * Implement dnn methods for loading in-memory models.
* **docker**
    * update Dockerfile to use OpenCV 4.0.1
* **docs**
    * update ROADMAP from recent contributions
* **examples**
    * Fixing filename in caffe-classifier example
* **imgproc**
    * Add 'MinEnclosingCircle' function
    * added BoxPoints function and BorderIsolated const
    * Added Connected Components
    * Added the HoughLinesPointSet function.
    * Implement CLAHE to imgproc
* **openvino**
    * remove lib no longer included during non-FPGA installations
* **test**
    * Add len(kp) == 232 to TestMSER, seems this is necessary for MacOS for some reason.

0.18.0
---
* **build**
    * add OPENCV_GENERATE_PKGCONFIG flag to generate pkg-config file
    * Add required curl package to the RPM and DEBS
    * correct name for zip directory used for code download
    * Removing linking against face contrib module
    * update CI to use 4.0.0 release
    * update Makefile and Windows build command file to OpenCV 4.0.0
    * use opencv4 file for pkg-config
* **core**
    * add ScaleAdd() method to Mat
* **docs**
    * replace OpenCV 3.4.3 references with OpenCV 4
    * update macOS installation info to refer to new OpenCV 4.0 brew
    * Updated function documentation with information about errors.
* **examples**
    * Improve accuracy in hand gesture sample
* **features2d**
    * update drawKeypoints() to use new stricter enum
* **openvino**
    * changes to accommodate release 2018R4
* **profile**
    * add build tag matprofile to allow for conditional inclusion of custom profile
    * Add Mat profile wrapper in other areas of the library.
    * Add MatProfile.
    * Add MatProfileTest.
    * move MatProfile tests into separate test file so they only run when custom profiler active
* **test**
    * Close images in tests.
    * More Closes in tests.
    * test that we are using 4.0.x version now
* **videoio**
    * Return the right type and error when opening VideoCapture fails

0.17.0
---
* **build** 
    * Update Makefile
    * update version of OpenCV used to 3.4.3
    * use link to OpenCV 3.4.3 for Windows builds
* **core** 
    * add mulSpectrums wrapper
    * add PolarToCart() method to Mat
    * add Reduce() method to Mat
    * add Repeat() method to Mat
    * add Solve() method to Mat
    * add SolveCubic() method to Mat
    * add SolvePoly() method to Mat
    * add Sort() method to Mat
    * add SortIdx() method to Mat
    * add Trace() method to Mat
    * Added new MatType
    * Added Phase function
* **dnn** 
    * update test to match OpenCV 3.4.3 behavior
* **docs**
    * Add example of how to run individual test
    * adding instructions for installing pkgconfig for macOS
    * fixed GOPATH bug.
    * update ROADMAP from recent contributions
* **examples**
    * add condition to handle no circle found in circle detection example
* **imgcodecs**
    * Added IMEncodeWithParams function
* **imgproc**
    * Added Filter2D function
    * Added fitLine function
    * Added logPolar function
    * Added Remap function
    * Added SepFilter2D function
    * Added Sobel function
    * Added SpatialGradient function
* **xfeatures2d**
    * do not run SIFT test unless OpenCV was built using OPENCV_ENABLE_NONFREE
    * do not run SURF test unless OpenCV was built using OPENCV_ENABLE_NONFREE

0.16.0
---
* **build**
    * add make task for Raspbian install with ARM hardware optimizations
    * use all available cores to compile OpenCV on Windows as discussed in issue #275
    * download performance improvements for OpenCV installs on Windows
    * correct various errors and issues with OpenCV installs on Fedora and CentOS
* **core**
    * correct spelling error in constant to fix issue #269
    * implemented & added test for Mat.SetTo
    * improve Multiply() GoDoc and test showing Scalar() multiplication
    * mutator functions for Mat add, subtract, multiply, and divide for uint8 and float32 values.
* **dnn**
    * add FP16BlobFromImage() function to convert an image Mat to a half-float aka FP16 slice of bytes
* **docs**
    * fix a varible error in example code in README

0.15.0
---
* **build**
    * add max to make -j
    * improve path for Windows to use currently configured GOPATH
* **core**
    * Add Mat.DataPtr methods for direct access to OpenCV data
    * Avoid extra copy in Mat.ToBytes + code review feedback
* **dnn**
    * add test coverage for ParseNetBackend and ParseNetTarget
    * complete test coverage
* **docs**
    * minor cleanup of language for install
    * use chdir instead of cd in Windows instructions
* **examples**
    * add 'hello, video' example to repo
    * add HoughLinesP example
    * correct message on device close to match actual event
    * small change in display message for when file is input source
    * use DrawContours in motion detect example
* **imgproc**
    * Add MinAreaRect() function
* **test**
    * filling test coverage gaps
* **videoio**
    * add test coverage for OpenVideoCapture

0.14.0
---
* **build**
    * Add -lopencv_calib3d341 to the linker
    * auto-confirm on package installs from make deps command
    * display PowerShell download status for OpenCV files
    * obtain caffe test config file from new location in Travis build
    * remove VS only dependencies from OpenCV build, copy caffe test config file from new location
    * return back to GoCV directory after OpenCV install
    * update for release of OpenCV v3.4.2
    * use PowerShell for scripted OpenCV install for Windows
    * win32 version number has not changed yet
* **calib3d**
    * Add Calibrate for Fisheye model(WIP)
* **core**
    * add GetTickCount function
    * add GetTickFrequency function
    * add Size() and FromPtr() methods to Mat
    * add Total method to Mat
    * Added RotateFlag type
    * correct CopyTo to use pointer to Mat as destination
    * functions converting Image to Mat
    * rename implementation to avoid conflicts with Windows
    * stricter use of reflect.SliceHeader
* **dnn**
    * add backend/device options to caffe and tensorflow DNN examples
    * add Close to Layer
    * add first version of dnn-pose-detection example
    * add further comments to object detection/tracking DNN example
    * add GetPerfProfile function to Net
    * add initial Layer implementation alongside enhancements to Net
    * add InputNameToIndex to Layer
    * add new functions allowing DNN backends such as OpenVINO
    * additional refactoring and comments in dnn-pose-detection example
    * cleanup DNN face detection example
    * correct const for device targets to be called Target
    * correct test that expected init slice with blank entries
    * do not init slice with blank entries, since added via append
    * further cleanup of DNN face detection example
    * make dnn-pose-detection example use Go channels for async operation
    * refactoring and additional comments for object detection/tracking DNN example
    * refine comment in header for style transfer example
    * working style transfer example
    * added ForwardLayers() to accomodate models with multiple output layers
* **docs**
    * add scripted Windows install info to README
    * Added a sample gocv workflow contributing guideline
    * mention docker image in README.
    * mention work in progress on Android
    * simplify and add missing step in Linux installation in README
    * update contributing instructions to match latest version
    * update ROADMAP from recent calib3d module contribution
    * update ROADMAP from recent imgproc histogram contribution
* **examples**
    * cleanup header for caffe dnn classifier
    * show how to use either Caffe or Tensorflow for DNN object detection
    * further improve dnn samples
    * rearrange and add comments to dnn style transfer example
    * remove old copy of pose detector
    * remove unused example
* **features2d**
    * free memory allocation bug for C.KeyPoints as pointed out by @tzununbekov
    * Adding opencv::drawKeypoints() support
* **imgproc**
    * add equalizeHist function
    * Added opencv::calcHist implementation
* **openvino**
    * add needed environment config to execute examples
    * further details in README explaining how to use
    * remove opencv contrib references as they are not included in OpenVINO
* **videoio**
    * Add OpenVideoCapture
    * Use gocv.VideoCaptureFile if string is specified for device.

0.13.0
---
* **build**
    * Add cgo directives to contrib
    * contrib subpackage also needs cpp 11 or greater for a warning free build on Linux
    * Deprecate env scripts and update README
    * Don't set --std=c++1z on non-macOS
    * Remove CGO vars from CI and correct Windows cgo directives
    * Support pkg-config via cgo directives
    * we actually do need cpp 11 or greater for a warning free build on Linux
* **docs**
    * add a Github issue template to project
    * provide specific examples of using custom environment
* **imgproc**
    * add HoughLinesPWithParams() function
* **openvino**
    * add build tag specific to openvino
    * add roadmap info
    * add smoke test for ie

0.12.0
---
* **build**
    * convert to CRLF
    * Enable verbosity for travisCI
    * Further improvements to Makefile
* **core**
    * Add Rotate, VConcat
    * Adding InScalarRange and NewMatFromScalarWithSize functions
    * Changed NewMatFromScalarWithSize to NewMatWithSizeFromScalar
    * implement CheckRange(), Determinant(), EigenNonSymmetric(), Min(), and MinMaxIdx() functions
    * implement PerspectiveTransform() and Sqrt() functions
    * implement Transform() and Transpose() functions
    * Make toByteArray safe for empty byte slices
    * Renamed InScalarRange to InRangeWithScalar
* **docs**
    * nicer error if we can't read haarcascade_frontalface_default
    * correct some ROADMAP links
    * Fix example command.
    * Fix executable name in help text.
    * update ROADMAP from recent contributions
* **imgproc** 
    * add BoxFilter and SqBoxFilter functions
    * Fix the hack to convert C arrays to Go slices.
* **videoio** 
    * Add isColor to VideoWriterFile
    * Check numerical parameters for gocv.VideoWriterFile
    * CodecString()
* **features2d** 
    * add BFMatcher
* **img_hash** 
    * Add contrib/img_hash module
    * add GoDocs for new img_hash module
    * Add img-similarity as an example for img_hash
* **openvino** 
    * adds support for Intel OpenVINO toolkit PVL
    * starting experimental work on OpenVINO IE
    * update README files for Intel OpenVINO toolkit support
    * WIP on IE can load an IR network

0.11.0
---
* **build**
    * Add astyle config
    * Astyle cpp/h files
    * remove duplication in Makefile for astyle
* **core**
    * Add GetVecfAt() function to Mat
    * Add GetVeciAt() function to Mat
    * Add Mat.ToImage()
    * add MeanStdDev() method to Mat
    * add more functions
    * Compare Mat Type directly
    * further cleanup for GoDocs and enforce type for convariance operations
    * Make borderType in CopyMakeBorder be type BorderType
    * Mat Type() should return MatType
    * remove unused convenience functions
    * use Mat* to indicate when a Mat is mutable aka an output parameter
* **dnn**
    * add a ssd sample and a GetBlobChannel helper
    * added another helper func and a pose detection demo
* **docs**
    * add some additional detail about adding OpenCV functions to GoCV
    * updates to contribution guidelines
    * fill out complete list of needed imgproc functions for sections that have work started
    * indicate that missing imgproc functions need implementation
    * mention the WithParams patterns to be used for functions with default params
    * update README for the Mat* based API changes
    * update ROADMAP for recent changes especially awesome recent core contributions from @berak
* **examples**
    * Fix tf-classifier example
    * move new DNN advanced examples into separate folders
    * Update doc for the face contrib package
    * Update links in caffe-classifier demo
    * WIP on hand gestures tracking example
* **highgui**
    * fix constant in NewWindow
* **imgproc**
    * Add Ellipse() and FillPoly() functions
    * Add HoughCirclesWithParams() func
    * correct output Mat to for ConvexHull()
    * rename param being used for Mat image to be modified
* **tracking**
    * add support for TrackerMIL, TrackerBoosting, TrackerMedianFlow, TrackerTLD, TrackerKCF, TrackerMOSSE, TrackerCSRT trackers
    * removed mutitracker, added Csrt, rebased
    * update GoDocs and minor renaming based on gometalint output

0.10.0
---
* **build** 
    * install unzip before build
    * overwrite when unzipping file to install Tensorflow test model
    * use -DCPU_DISPATCH= flag for build to avoid problem with disabled AVX on Windows
    * update unzipped file when installing Tensorflow test model
* **core** 
    * add Compare() and CountNonZero() functions
    * add getter/setter using optional params for multi-dimensional Mat using row/col/channel
    * Add mat subtract function
    * add new toRectangle function to DRY up conversion from CRects to []image.Rectangle
    * add split subtract sum wrappers
    * Add toCPoints() helper function
    * Added Mat.CopyToWithMask() per #47
    * added Pow() method
    * BatchDistance BorderInterpolate CalcCovarMatrix CartToPolar
    * CompleteSymm ConvertScaleAbs CopyMakeBorder Dct
    * divide, multiply
    * Eigen Exp ExtractChannels
    * operations on a 3d Mat are not same as a 2d multichannel Mat
    * resolve merge conflict with duplicate Subtract() function
    * run gofmt on core tests
    * Updated type for Mat.GetUCharAt() and Mat.SetUCharAt() to reflect uint8 instead of int8
* **docs** 
    * update ROADMAP of completed functions in core from recent contributions
* **env** 
    * check loading resources
    * Add distribution detection to deps rule
    * Add needed environment variables for Linux
* **highgui** 
    * add some missing test coverage on WaitKey()
* **imgproc** 
    * Add adaptive threshold function
    * Add pyrDown and pyrUp functions
    * Expose DrawContours()
    * Expose WarpPerspective and GetPerspectiveTransform
    * implement ConvexHull() and ConvexityDefects() functions
* **opencv** 
    * update to OpenCV version 3.4.1

0.9.0
---
* **bugfix** 
    * correct several errors in size parameter ordering
* **build**
    * add missing opencv_face lib reference to env.sh
    * Support for non-brew installs of opencv on Darwin
* **core**
    * add Channels() method to Mat
    * add ConvertTo() and NewMatFromBytes() functions
    * add Type() method to Mat
    * implement ConvertFp16() function
* **dnn** 
    * use correct size for blob used for Caffe/Tensorflow tests
* **docs** 
    * Update copyright date and Apache 2.0 license to include full text
* **examples** 
    * cleanup mjpeg streamer code
    * cleanup motion detector comments
    * correct use of defer in loop
    * use correct size for blob used for Caffe/Tensorflow examples
* **imgproc**
    * Add cv::approxPolyDP() bindings.
    * Add cv::arcLength() bindings.
    * Add cv::matchTemplate() bindings.
    * correct comment and link for Blur function
    * correct docs for BilateralFilter()

0.8.0
---
* **core**
    * add ColorMapFunctions and their test
    * add Mat ToBytes
    * add Reshape and MinMaxLoc functions
    * also delete points
    * fix mistake in the norm function by taking NormType instead of int as parameter
    * SetDoubleAt func and his test
    * SetFloatAt func and his test
    * SetIntAt func and his test
    * SetSCharAt func and his test
    * SetShortAt func and his test
    * SetUCharAt fun and his test
    * use correct delete operator for array of new, eliminates a bunch of memory leaks
* **dnn**
    * add support for loading Tensorflow models
    * adjust test for Caffe now that we are auto-cropping blob
    * first pass at adding Caffe support
    * go back to older function signature to avoid version conflicts with Intel CV SDK
    * properly close DNN Net class
    * use approx. value from test result to account forr windows precision differences
* **features2d**
    * implement GFTTDetector, KAZE, and MSER algorithms
    * modify MSER test for Windows results
* **highgui**
    * un-deprecate WaitKey function needed for CLI apps
* **imgcodec**
    * add fileExt type
* **imgproc**
    * add the norm wrapper and use it in test for WarpAffine and WarpAffineWithParams
    * GetRotationMatrix2D, WarpAffine and WarpAffineWithParams
    * use NormL2 in wrap affine
* **pvl**
    * add support for FaceRecognizer
    * complete wrappers for all missing FaceDetector functions
    * update instructions to match R3 of Intel CV SDK
* **docs**
    * add more detail about exactly which functions are not yet implememented in the modules that are marked as 'Work Started'
    * add refernece to Tensorflow example, and also suggest brew upgrade for MacOS
    * improve ROADMAP to help would-be contributors know where to get started
    * in the readme, explain compiling to a static library
    * remove many godoc warnings by improving function descriptions
    * update all OpenCV 3.3.1 references to v3.4.0
    * update CGO_LDFLAGS references to match latest requirements
    * update contribution guidelines to try to make it more inviting
* **examples**
    * add Caffe classifier example
    * add Tensorflow classifier example
    * fixed closing window in examples in infinite loop
    * fixed format of the examples with gofmt
* **test**
    * add helper function for test : floatEquals
    * add some attiribution from test function
    * display OpenCV version in case that test fails
    * add round function to allow for floating point accuracy differences due to GPU usage.
* **build**
    * improve search for already installed OpenCV on MacOS
    * update Appveyor build to Opencv 3.4.0
    * update to Opencv 3.4.0

0.7.0
---
* **core**
    * correct Merge implementation
* **docs**
    * change wording and formatting for roadmap
    * update roadmap for a more complete list of OpenCV functionality
    * sequence docs in README in same way as the web site, aka by OS
    * show in README that some work was done on contrib face module
* **face**
    * LBPH facerecognizer bindings
* **highgui**
    * complete implementation for remaining API functions
* **imgcodecs**
    * add IMDecode function
* **imgproc**
    * elaborate on HoughLines & HoughLinesP tests to fetch a few individual results
* **objdetect**
    * add GroupRectangles function
* **xfeatures2d**
    * add SIFT and SURF algorithms from OpenCV contrib
    * improve description for OpenCV contrib
    * run tests from OpenCV contrib

0.6.0
---
* **core**
    * Add cv::LUT binding
* **examples** 
    * do not try to go fullscreen, since does not work on OSX
* **features2d** 
    * add AKAZE algorithm
    * add BRISK algorithm
    * add FastFeatureDetector algorithm
    * implement AgastFeatureDetector algorithm
    * implement ORB algorithm
    * implement SimpleBlobDetector algorithm
* **osx**
    * Fix to get the OpenCV path with "brew info".
* **highgui** 
    * use new Window with thread lock, and deprecate WaitKey() in favor of Window.WaitKey()
    * use Window.WaitKey() in tests
* **imgproc** 
    * add tests for HoughCircles
* **pvl**
    * use correct Ptr referencing
* **video** 
    * use smart Ptr for Algorithms thanks to @alalek
    * use unsafe.Pointer for Algorithm    
    * move tests to single file now that they all pass

0.5.0
---
* **core**
    * add TermCriteria for iterative algorithms
* **imgproc**
    * add CornerSubPix() and GoodFeaturesToTrack() for corner detection
* **objdetect**
    * add DetectMultiScaleWithParams() for HOGDescriptor
    * add DetectMultiScaleWithParams() to allow override of defaults for CascadeClassifier
* **video**
    * add CalcOpticalFlowFarneback() for Farneback optical flow calculations
    * add CalcOpticalFlowPyrLK() for Lucas-Kanade optical flow calculations
* **videoio**
    * use temp directory for Windows test compat.
* **build**
    * enable Appveyor build w/cache
* **osx**
    * update env path to always match installed OpenCV from Homebrew

0.4.0
---
* **core**
    * Added cv::mean binding with single argument
    * fix the write-strings warning
    * return temp pointer fix
* **examples**
    * add counter example
    * add motion-detect command
    * correct counter
    * remove redundant cast and other small cleanup
    * set motion detect example to fullscreen
    * use MOG2 for continous motion detection, instead of simplistic first frame only
* **highgui**
    * ability to better control the fullscreen window
* **imgproc**
    * add BorderType param type for GaussianBlur
    * add BoundingRect() function
    * add ContourArea() function
    * add FindContours() function along with associated data types
    * add Laplacian and Scharr functions
    * add Moments() function
    * add Threshold function
* **pvl**
    * add needed lib for linker missing in README
* **test**
    * slightly more permissive version test
* **videoio**
    * Add image compression flags for gocv.IMWrite
    * Fixed possible looping out of compression parameters length
    * Make dedicated function to run cv::imwrite with compression parameters

0.3.1
---
* **overall**
    * Update to use OpenCV 3.3.1

0.3.0
---
* **docs** 
    * Correct Windows build location from same @jpfarias fix to gocv-site
* **core**
    * Add Resize
    * Add Mat merge and Discrete Fourier Transform
    * Add CopyTo() and Normalize()
    * Implement various important Mat logical operations
* **video**
    * BackgroundSubtractorMOG2 algorithm now working
    * Add BackgroundSubtractorKNN algorithm from video module
* **videoio**
    * Add VideoCapture::get
* **imgproc**
    * Add BilateralFilter and MedianBlur
    * Additional drawing functions implemented
    * Add HoughCircles filter
    * Implement various morphological operations
* **highgui**
    * Add Trackbar support
* **objdetect**
    * Add HOGDescriptor
* **build** 
    * Remove race from test on Travis, since it causes CGo segfault in MOG2

0.2.0
---
* Switchover to custom domain for package import
* Yes, we have Windows

0.1.0
---
Initial release!

- [X] Video capture
- [X] GUI Window to display video
- [X] Image load/save
- [X] CascadeClassifier for object detection/face tracking/etc.
- [X] Installation instructions for Ubuntu
- [X] Installation instructions for OS X
- [X] Code example to use VideoWriter
- [X] Intel CV SDK PVL FaceTracker support
- [X] imgproc Image processing
- [X] Travis CI build
- [X] At least minimal test coverage for each OpenCV class
- [X] Implement more of imgproc Image processing

================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Contributor Covenant Code of Conduct

## Our Pledge

In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, sex characteristics, gender identity and expression,
level of experience, education, socio-economic status, nationality, personal
appearance, race, religion, or sexual identity and orientation.

## Our Standards

Examples of behavior that contributes to creating a positive environment
include:

* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members

Examples of unacceptable behavior by participants include:

* The use of sexualized language or imagery and unwelcome sexual attention or
 advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
 address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
 professional setting

## Our Responsibilities

Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.

Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.

## Scope

This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.

## Enforcement

Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at info@hybridgroup.com. All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.

Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.

## Attribution

This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html

[homepage]: https://www.contributor-covenant.org

For answers to common questions about this code of conduct, see
https://www.contributor-covenant.org/faq


================================================
FILE: CONTRIBUTING.md
================================================
# How to contribute

Thank you for your interest in improving GoCV.

We would like your help to make this project better, so we appreciate any contributions. See if one of the following descriptions matches your situation:

### Newcomer to GoCV, to OpenCV, or to computer vision in general

We'd love to get your feedback on getting started with GoCV. Run into any difficulty, confusion, or anything else? You are not alone. We want to know about your experience, so we can help the next people. Please open a Github issue with your questions, or get in touch directly with us.

### Something in GoCV is not working as you expect

Please open a Github issue with your problem, and we will be happy to assist.

### Something you want/need from OpenCV does not appear to be in GoCV

We probably have not implemented it yet. Please take a look at our [ROADMAP.md](ROADMAP.md). Your pull request adding the functionality to GoCV would be greatly appreciated.

### You found some Python code on the Internet that performs some computer vision task, and you want to do it using GoCV

Please open a Github issue with your needs, and we can see what we can do.

## How to use our Github repository

The `release` branch of this repo will always have the latest released version of GoCV. All of the active development work for the next release will take place in the `dev` branch. GoCV will use semantic versioning and will create a tag/release for each release.

Here is how to contribute back some code or documentation:

- Fork repo
- Create a feature branch off of the `dev` branch
- Make some useful change
- Submit a pull request against the `dev` branch.
- Be kind

## How to add a function from OpenCV to GoCV

Here are a few basic guidelines on how to add a function from OpenCV to GoCV:

- Please open a Github issue. We want to help, and also make sure that there is no duplications of efforts. Sometimes what you need is already being worked on by someone else.
- Use the proper Go style naming `MissingFunction()` for the Go wrapper.
- Make any output parameters `Mat*` to indicate to developers that the underlying OpenCV data will be changed by the function.
- Use Go types when possible as parameters for example `image.Point` and then convert to the appropriate OpenCV struct. Also define a new type based on `int` and `const` values instead of just passing "magic numbers" as params. For example, the `VideoCaptureProperties` type used in `videoio.go`.
- Always add the function to the GoCV file named the same as the OpenCV module to which the function belongs.
- If the new function is in a module that is not yet implemented by GoCV, a new set of files for that module will need to be added.
- Always add a "smoke" test for the new function being added. We are not testing OpenCV itself, but just the GoCV wrapper, so all that is needed generally is just exercising the new function.
- If OpenCV has any default params for a function, we have been implementing 2 versions of the function since Go does not support overloading. For example, with a OpenCV function:

```c
opencv::xYZ(int p1, int p2, int p3=2, int p4=3);
```

We would define 2 functions in GoCV:

```go
// uses default param values
XYZ(p1, p2)

// sets each param
XYZWithParams(p2, p2, p3, p4)
```

## How to run tests

To run the tests:

```
go test .
go test ./contrib/.
```

If you want to run an individual test, you can provide a RegExp to the `-run` argument:
```
go test -run TestMat
```

If you are using Intel OpenVINO, you can run those tests using:

```
go test ./openvino/...
```

## Contributing workflow

This section provides a short description of one of many possible workflows you can follow to contribute to `GoCV`. This workflow is based on multiple [git remotes](https://git-scm.com/docs/git-remote) and it's by no means the only workflow you can use to contribute to `GoCV`. However, it's an option that might help you get started quickly without too much hassle as this workflow lets you work off the `gocv` repo directory path!

Assuming you have already forked the `gocv` repo, you need to add a new `git remote` which will point to your GitHub fork. Notice below that you **must** `cd` to `gocv` repo directory before you add the new `git remote`:

```shell
cd $GOPATH/src/gocv.io/x/gocv
git remote add gocv-fork https://github.com/YOUR_GH_HANDLE/gocv.git
```

Note, that in the command above we called our new `git remote`, **gocv-fork** for convenience so we can easily recognize it. You are free to choose any remote name of your liking.

You should now see your new `git remote` when running the command below:

```shell
git remote -v

gocv-fork	https://github.com/YOUR_GH_HANDLE/gocv.git (fetch)
gocv-fork	https://github.com/YOUR_GH_HANDLE/gocv.git (push)
origin	        https://github.com/hybridgroup/gocv (fetch)
origin	        https://github.com/hybridgroup/gocv (push)
```

Before you create a new branch from `dev` you should fetch the latests commits from the `dev` branch:

```shell
git fetch origin dev
```

You want the `dev` branch in your `gocv` fork to be in sync with the `dev` branch of `gocv`, so push the earlier fetched commits to your GitHub fork as shown below. Note, the `-f` force switch might not be needed:

```shell
git push gocv-fork dev -f
```

Create a new feature branch from `dev`:

```shell
git checkout -b new-feature
```

After you've made your changes you can run the tests using the `make` command listed below. Note, you're still working off the `gocv` project root directory, hence running the command below does not require complicated `$GOPATH` rewrites or whatnot:

```shell
make test
```

Once the tests have passed, commit your new code to the `new-feature` branch and push it to your fork running the command below:

```shell
git push gocv-fork new-feature
```

You can now open a new PR from `new-feature` branch in your forked repo against the `dev` branch of `gocv`.


================================================
FILE: Dockerfile
================================================
# to build this docker image:
#   docker build .
FROM ghcr.io/hybridgroup/opencv:4.13.0

ENV GOPATH /go

COPY . /go/src/gocv.io/x/gocv/

WORKDIR /go/src/gocv.io/x/gocv
RUN go build -tags example -o /build/gocv_version ./cmd/version/

CMD ["/build/gocv_version"]


================================================
FILE: Dockerfile-static
================================================
# to build this docker image:
#   docker buildx build -f Dockerfile-static -t gocv-static --platform=linux/amd64,linux/arm64 .
#
FROM --platform=$BUILDPLATFORM ghcr.io/hybridgroup/opencv:4.13.0-static AS gocv-build

ENV GOPATH /go

COPY . /go/src/gocv.io/x/gocv/

WORKDIR /go/src/gocv.io/x/gocv

RUN --mount=target=. \
    --mount=type=cache,target=/root/.cache/go-build \
    --mount=type=cache,target=/go/pkg/mod \
    go build -tags static -o /build/gocv_version ./cmd/version/

FROM debian:bullseye AS final

COPY --from=gocv-build /build/gocv_version /run/gocv_version

CMD ["/run/gocv_version"]


================================================
FILE: Dockerfile-static-alpine
================================================
# syntax=docker/dockerfile:1.3

# To build release:
#   docker buildx build -f Dockerfile.static-alpine -t gocv-static-alpine --platform=linux/arm64,linux/amd64 --load .

FROM --platform=$BUILDPLATFORM ghcr.io/hybridgroup/opencv:4.11-alpine AS builder-amd64

RUN apk update && apk add --no-cache \
    build-base \
    cmake \
    git \
    wget \
    unzip \
    pkgconfig

# Install Go
ARG GO_VERSION=1.22.8
RUN wget https://golang.org/dl/go${GO_VERSION}.linux-amd64.tar.gz && \
    tar -C /usr/local -xzf go${GO_VERSION}.linux-amd64.tar.gz && \
    rm go${GO_VERSION}.linux-amd64.tar.gz

ENV PATH="/usr/local/go/bin:${PATH}"
ENV GOPATH /go

# Copy the GoCV source code

COPY . /go/src/gocv.io/x/gocv/

WORKDIR /go/src/gocv.io/x/gocv

ENV CGO_CXXFLAGS="--std=c++11"
ENV CGO_CPPFLAGS="-I/usr/local/include/opencv4" 
ENV CGO_LDFLAGS="-static -L/usr/local/lib -lopencv_gapi -lopencv_stitching -lopencv_alphamat -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_dnn_objdetect -lopencv_dnn_superres -lopencv_dpm -lopencv_face -lopencv_fuzzy -lopencv_hfs -lopencv_img_hash -lopencv_intensity_transform -lopencv_line_descriptor -lopencv_mcc -lopencv_quality -lopencv_rapid -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_signal -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_superres -lopencv_optflow -lopencv_surface_matching -lopencv_tracking -lopencv_highgui -lopencv_datasets -lopencv_text -lopencv_plot -lopencv_videostab -lopencv_videoio -lopencv_wechat_qrcode -lopencv_xfeatures2d -lopencv_shape -lopencv_ml -lopencv_ximgproc -lopencv_video -lopencv_xobjdetect -lopencv_objdetect -lopencv_calib3d -lopencv_imgcodecs -lopencv_features2d -lopencv_dnn -lopencv_flann -lopencv_xphoto -lopencv_photo -lopencv_imgproc -lopencv_core -L/usr/local/lib/opencv4/3rdparty -llibprotobuf -lade -littnotify -llibwebp -llibtiff -llibopenjp2 -lippiw -lippicv -llibjpeg-turbo -llibpng -L/lib -lzlib -lIlmImf -ldl -lm -lpthread -lrt -lavdevice -lm -latomic -lavfilter -pthread -lm -latomic -lswscale -lm -latomic -lpostproc -lm -latomic -lavformat -lm -latomic -lavcodec -lvpx -lx264 -lswresample -lm -latomic -lavutil -lbz2_static -llzma"

# Build the GoCV version command
RUN --mount=target=. \
    --mount=type=cache,target=/root/.cache/go-build \
    --mount=type=cache,target=/go/pkg/mod \
    go build -tags customenv -o /build/gocv_version ./cmd/version/

# Stage 3: Final image

FROM alpine:3.20 AS final

# Copy the GoCV version command

COPY --from=builder /build/gocv_version /run/gocv_version

# Run the GoCV version command

CMD ["/run/gocv_version"]


================================================
FILE: Dockerfile-static-builder
================================================
# to build this docker image:
#   docker build -f Dockerfile-static-builder -t gocv-static-builder .
# or for multi-arch builds:
#   docker buildx build -f Dockerfile-static-builder -t ghcr.io/hybridgroup/gocv-static-builder --platform=linux/amd64,linux/arm64 --push .
#
# to use this docker image:
#   cd /path/to/my/project
#   docker run --rm -e "BINARYNAME=mjpeg-streamer" -e "SRCPATH=./cmd/mjpeg-streamer" -v $(pwd):/src -v $(pwd)/build:/build -a stdout -a stderr --platform linux/amd64 gocv-static-builder
#
# NOTE that you cannot use highgui from the static build!
#
FROM --platform=$BUILDPLATFORM ghcr.io/hybridgroup/opencv:4.13.0-static AS gocv-static-builder

WORKDIR /src

ENV BINARYNAME=gocv_static_binary
ENV SRCPATH=.

CMD go build -tags static -o /build/$BINARYNAME -buildvcs=false $SRCPATH


================================================
FILE: Dockerfile-test
================================================
# To build:
#   docker build -f Dockerfile-test -t gocv-test .
#
# To run tests:
#   xhost +
#   docker run -it --rm -e DISPLAY=$DISPLAY -v /tmp/.X11-unix:/tmp/.X11-unix gocv-test-4.x
#   xhost -
#
FROM ghcr.io/hybridgroup/opencv:4.13.0 AS gocv-test-4.13

ENV GOPATH /go

COPY . /go/src/gocv.io/x/gocv/

WORKDIR /go/src/gocv.io/x/gocv

RUN go install github.com/rakyll/gotest@latest

ENTRYPOINT ["gotest", "-v", ".", "./contrib/..."]


================================================
FILE: Dockerfile-test.gpu-cuda-10
================================================
# To build:
#   docker build -f Dockerfile-test.gpu-cuda-10 -t gocv-test-gpu-cuda-10 .
#
# To run tests:
#   docker run -it --rm --gpus all gocv-test-gpu-cuda-10
#
FROM ghcr.io/hybridgroup/opencv:4.13.0-gpu-cuda-10 AS gocv-gpu-test-cuda-10

ENV GOPATH /go
ENV PATH="${PATH}:/go/bin"

COPY . /go/src/gocv.io/x/gocv/

WORKDIR /go/src/gocv.io/x/gocv

RUN go install github.com/rakyll/gotest@latest

ENTRYPOINT ["gotest", "-v", "./cuda/..."]


================================================
FILE: Dockerfile-test.gpu-cuda-11
================================================
# To build:
#   docker build -f Dockerfile-test.gpu-cuda-11 -t gocv-test-gpu-cuda-11 .
#
# To run tests:
#   docker run -it --rm --gpus all gocv-test-gpu-cuda-11
#
FROM ghcr.io/hybridgroup/opencv:4.13.0-gpu-cuda-11 AS gocv-gpu-test-cuda-11

ENV GOPATH /go
ENV PATH="${PATH}:/go/bin"

COPY . /go/src/gocv.io/x/gocv/

WORKDIR /go/src/gocv.io/x/gocv

RUN go install github.com/rakyll/gotest@latest

ENTRYPOINT ["gotest", "-v", "./cuda/..."]


================================================
FILE: Dockerfile-test.gpu-cuda-11.2.2
================================================
# To build:
#   docker build -f Dockerfile-test.gpu-cuda-11.2.2 -t gocv-test-gpu-cuda-11.2.2 .
#
# To run tests:
#   docker run -it --rm --gpus all gocv-test-gpu-cuda-11.2.2
#
FROM ghcr.io/hybridgroup/opencv:4.13.0-gpu-cuda-11.2.2 AS gocv-gpu-test-cuda-11

ENV GOPATH /go
ENV PATH="${PATH}:/go/bin"

COPY . /go/src/gocv.io/x/gocv/

WORKDIR /go/src/gocv.io/x/gocv

RUN go install github.com/rakyll/gotest@latest

ENTRYPOINT ["gotest", "-v", "./cuda/..."]


================================================
FILE: Dockerfile-test.gpu-cuda-12
================================================
# To build:
#   docker build -f Dockerfile-test.gpu-cuda-12 -t gocv-test-gpu-cuda-12 .
#
# To run tests:
#   docker run -it --rm --gpus all gocv-test-gpu-cuda-12
#
FROM ghcr.io/hybridgroup/opencv:4.13.0-gpu-cuda-12 AS gocv-gpu-test-cuda-12

ENV GOPATH /go
ENV PATH="${PATH}:/go/bin"

COPY . /go/src/gocv.io/x/gocv/

WORKDIR /go/src/gocv.io/x/gocv

RUN go install github.com/rakyll/gotest@latest

ENTRYPOINT ["gotest", "-v", "./cuda/..."]


================================================
FILE: Dockerfile-test.gpu-cuda-13
================================================
# To build:
#   docker build -f Dockerfile-test.gpu-cuda-13 -t gocv-test-gpu-cuda-13 .
#
# To run tests:
#   docker run -it --rm --gpus all gocv-test-gpu-cuda-13
#
FROM ghcr.io/hybridgroup/opencv:4.13.0-gpu-cuda-13 AS gocv-gpu-test-cuda-13

ENV GOPATH /go
ENV PATH="${PATH}:/go/bin"

COPY . /go/src/gocv.io/x/gocv/

WORKDIR /go/src/gocv.io/x/gocv

RUN go install github.com/rakyll/gotest@latest

ENTRYPOINT ["gotest", "-v", "./cuda/..."]


================================================
FILE: Dockerfile.ffmpeg-static-alpine
================================================
# syntax=docker/dockerfile:1.3

# To build release:
#   docker buildx build -f Dockerfile.ffmpeg-static-alpine -t ghcr.io/hybridgroup/ffmpeg:5.16-alpine --platform=linux/arm64,linux/amd64 --load .

# linux/amd64 build
FROM --platform=linux/amd64 alpine:3.20 AS builder-amd64

WORKDIR /

ARG FFMPEG_VERSION=5.1.6
ARG XZ_VERSION=5.6.3

# download xz
RUN wget -O xz-${XZ_VERSION}.tar.bz2 "https://github.com/tukaani-project/xz/releases/download/v${XZ_VERSION}/xz-${XZ_VERSION}.tar.bz2" && \
        tar -xf xz-${XZ_VERSION}.tar.bz2

# download bzip2
RUN wget -O bzip2-master.tar.bz2 "https://gitlab.com/bzip2/bzip2/-/archive/master/bzip2-master.tar.bz2" && \
        tar -xf bzip2-master.tar.bz2

# download ffmpeg source
RUN wget -O ffmpeg-5.0.tar.bz2 "https://www.ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.bz2" && \
        tar -xf ffmpeg-5.0.tar.bz2

# Install dependencies
RUN apk update && apk add --no-cache \
    build-base \
    cmake \
    git \
    diffutils \
    perl \
    wget \
    unzip \
    pkgconfig \
    libjpeg-turbo-dev \
    libpng-dev \
    libwebp-dev \
    eigen-dev \
    nasm yasm \
    bzip2 xz zlib-dev x264-dev libvpx-dev \
    opus-dev dav1d-dev python3

# Build and install xz
RUN cd xz-${XZ_VERSION} && \
        ./configure --disable-shared && \
        make && make install

# Build and install bzip2
RUN cd bzip2-master && \
        mkdir build && cd build && \
        cmake .. -DCMAKE_BUILD_TYPE="Release" -DENABLE_STATIC_LIB=ON -DENABLE_LIB_ONLY=ON && \
        cmake --build . --target install

# Build and install libvpx
RUN cd ffmpeg-${FFMPEG_VERSION} && \
        git -C libvpx pull 2> /dev/null || git clone --depth 1 https://chromium.googlesource.com/webm/libvpx.git && \
        cd libvpx && \
        ./configure --enable-static --disable-examples --disable-unit-tests --enable-vp9-highbitdepth --as=yasm && \
        make -j $(nproc --all) && make install

# Now finish building ffmpeg
RUN cd ffmpeg-${FFMPEG_VERSION} && \
        ./configure --pkg-config-flags="--static" \
        --enable-static --disable-shared --enable-gpl --enable-libx264 --enable-libvpx --enable-zlib \
        --disable-sdl2 --disable-vaapi --disable-vdpau --disable-v4l2-m2m --disable-doc && \
        make -j $(nproc --all) && make install


# linux/arm64 build
FROM --platform=linux/arm64 alpine:3.20 AS builder-arm64

WORKDIR /

ARG FFMPEG_VERSION=5.1.6
ARG XZ_VERSION=5.6.3

# download xz
RUN wget -O xz-${XZ_VERSION}.tar.bz2 "https://github.com/tukaani-project/xz/releases/download/v${XZ_VERSION}/xz-${XZ_VERSION}.tar.bz2" && \
        tar -xf xz-${XZ_VERSION}.tar.bz2

# download bzip2
RUN wget -O bzip2-master.tar.bz2 "https://gitlab.com/bzip2/bzip2/-/archive/master/bzip2-master.tar.bz2" && \
        tar -xf bzip2-master.tar.bz2

# download ffmpeg source
RUN wget -O ffmpeg-5.0.tar.bz2 "https://www.ffmpeg.org/releases/ffmpeg-${FFMPEG_VERSION}.tar.bz2" && \
        tar -xf ffmpeg-5.0.tar.bz2

# Install dependencies
RUN apk update && apk add --no-cache \
    build-base \
    cmake \
    git \
    diffutils \
    perl \
    wget \
    unzip \
    pkgconfig \
    libjpeg-turbo-dev \
    libpng-dev \
    libwebp-dev \
    eigen-dev \
    nasm yasm \
    bzip2 xz zlib-dev x264-dev libvpx-dev \
    opus-dev dav1d-dev python3

# Build and install xz
RUN cd xz-${XZ_VERSION} && \
        ./configure --disable-shared && \
        make && make install

# Build and install bzip2
RUN cd bzip2-master && \
        mkdir build && cd build && \
        cmake .. -DCMAKE_BUILD_TYPE="Release" -DENABLE_STATIC_LIB=ON -DENABLE_LIB_ONLY=ON && \
        cmake --build . --target install

# Build and install libvpx
RUN cd ffmpeg-${FFMPEG_VERSION} && \
        git -C libvpx pull 2> /dev/null || git clone --depth 1 https://chromium.googlesource.com/webm/libvpx.git && \
        cd libvpx && \
        ./configure --enable-static --disable-examples --disable-unit-tests --enable-vp9-highbitdepth --as=yasm && \
        make -j $(nproc --all) && make install

# Now finish building ffmpeg
RUN cd ffmpeg-${FFMPEG_VERSION} && \
        ./configure --pkg-config-flags="--static" \
        --enable-static --disable-shared --enable-gpl --enable-libx264 --enable-libvpx --enable-zlib \
        --disable-sdl2 --disable-vaapi --disable-vdpau --disable-v4l2-m2m --disable-doc && \
        make -j $(nproc --all) && make install

# Stage 2: Create final image
FROM builder-${TARGETARCH} AS final

CMD ["ffmpeg"]


================================================
FILE: Dockerfile.gpu
================================================
# to build this docker image:
#   docker build -f Dockerfile.gpu .
FROM ghcr.io/hybridgroup/opencv:4.13.0-gpu-cuda-11 AS gocv-gpu

ENV GOPATH /go

COPY . /go/src/gocv.io/x/gocv/

WORKDIR /go/src/gocv.io/x/gocv
RUN go build -tags cuda -o /build/gocv_cuda_version ./cmd/cuda/

CMD ["/build/gocv_cuda_version"]


================================================
FILE: Dockerfile.gstreamer-static-alpine
================================================
# To build release:
#   docker buildx build -f Dockerfile.gstreamer-static-alpine -t ghcr.io/hybridgroup/gstreamer:1.24-alpine --platform=linux/arm64,linux/amd64 --progress plain  --load .

FROM --platform=linux/amd64 alpine:3.20 AS builder-amd64

WORKDIR /gstreamer

ARG GST_BUILD_VERSION=1.24
RUN wget https://gitlab.freedesktop.org/gstreamer/gstreamer/-/archive/${GST_BUILD_VERSION}/gstreamer-${GST_BUILD_VERSION}.tar.gz && \
	tar -xzf gstreamer-${GST_BUILD_VERSION}.tar.gz 

WORKDIR /gstreamer/gstreamer-${GST_BUILD_VERSION}

RUN apk update && apk add build-base \
		libxml2-dev \
		bison \
		flex \
		glib-dev \
		gobject-introspection-dev \
		libcap-dev \
		libcap-utils \
		meson \
		perl \
		wget \
		git cmake \
		nasm harfbuzz-static harfbuzz-dev fribidi-static fribidi-dev

RUN	meson --default-library=static --prefix=/gstbin  \
	-Dgst-full-target-type=static_library \
	-Dgst-full=enabled \
	-Dauto_features=disabled \
	-Dgst-plugins-base:app=enabled \
	-Dgst-plugins-base:playback=enabled \
	-Dgst-plugins-base:rawparse=enabled \
	-Dgst-plugins-base:tcp=enabled \
	-Dgst-plugins-base:videoconvertscale=enabled \
	-Dgst-plugins-base:videotestsrc=enabled \
	-Dgst-plugins-good:isomp4=enabled \
	-Dgst-plugins-good:rtp=enabled \
	-Dgst-plugins-good:udp=enabled \
	-Dgst-plugins-good:rtsp=enabled \
	-Dgst-plugins-good:rtpmanager=enabled \
	-Dgst-plugins-good:audioparsers=enabled \
	-Dgst-plugins-bad:videoparsers=enabled \
	-Dgst-plugins-bad:codectimestamper=enabled \
	-Dgst-plugins-bad:openh264=enabled \
	-Dtools=enabled \
	build

RUN meson compile -C build

RUN meson install -C build


FROM --platform=linux/arm64 alpine:3.20 AS builder-arm64

WORKDIR /gstreamer

ARG GST_BUILD_VERSION=1.24
RUN wget https://gitlab.freedesktop.org/gstreamer/gstreamer/-/archive/${GST_BUILD_VERSION}/gstreamer-${GST_BUILD_VERSION}.tar.gz && \
	tar -xzf gstreamer-${GST_BUILD_VERSION}.tar.gz 

WORKDIR /gstreamer/gstreamer-${GST_BUILD_VERSION}

RUN apk update && apk add build-base \
		libxml2-dev \
		bison \
		flex \
		glib-dev \
		gobject-introspection-dev \
		libcap-dev \
		libcap-utils \
		meson \
		perl \
		wget \
		git cmake \
		nasm harfbuzz-static harfbuzz-dev fribidi-static fribidi-dev

RUN	meson --default-library=static --prefix=/gstbin  \
	-Dgst-full-target-type=static_library \
	-Dgst-full=enabled \
	-Dauto_features=disabled \
	-Dgst-plugins-base:app=enabled \
	-Dgst-plugins-base:playback=enabled \
	-Dgst-plugins-base:tcp=enabled \
	-Dgst-plugins-base:rawparse=enabled \
	-Dgst-plugins-base:videoconvertscale=enabled \
	-Dgst-plugins-base:videotestsrc=enabled \
	-Dgst-plugins-good:isomp4=enabled \
	-Dgst-plugins-good:rtp=enabled \
	-Dgst-plugins-good:udp=enabled \
	-Dgst-plugins-good:rtsp=enabled \
	-Dgst-plugins-good:rtpmanager=enabled \
	-Dgst-plugins-good:audioparsers=enabled \
	-Dgst-plugins-bad:videoparsers=enabled \
	-Dgst-plugins-bad:codectimestamper=enabled \
	-Dgst-plugins-bad:openh264=enabled \
	-Dtools=enabled \
	build

RUN meson compile -C build

RUN meson install -C build

ARG TARGETARCH

FROM builder-${TARGETARCH} AS final

ENV PATH=/gstbin/bin:${PATH}
ENV PKG_CONFIG_PATH=/gstbin/lib/pkgconfig


================================================
FILE: Dockerfile.opencv
================================================
# OpenCV 4 prebuilt multiarchitecture image
#
# To build release:
#   docker buildx build -f Dockerfile.opencv -t ghcr.io/hybridgroup/opencv:4.13.0 -t ghcr.io/hybridgroup/opencv:latest --platform=linux/arm64,linux/amd64 --push .
#
# To build prerelease:
#   docker buildx build --build-arg OPENCV_VERSION="4.x" --build-arg OPENCV_FILE="https://github.com/opencv/opencv/archive/refs/heads/4.x.zip" --build-arg OPENCV_CONTRIB_FILE="https://github.com/opencv/opencv_contrib/archive/refs/heads/4.x.zip" -f Dockerfile.opencv -t ghcr.io/hybridgroup/opencv:4.13.0-dev --platform=linux/arm64,linux/amd64 --push .


###################
# amd64 build stage
###################

FROM --platform=linux/amd64 golang:1.25-bookworm AS opencv-base-amd64
LABEL maintainer="hybridgroup"

RUN apt-get update && apt-get install -y \
      git build-essential cmake pkg-config unzip libgtk2.0-dev \
      curl ca-certificates libcurl4-openssl-dev libssl-dev \
      libavcodec-dev libavformat-dev libswscale-dev libtbbmalloc2 libtbb-dev \
      libharfbuzz-dev libfreetype6-dev \
      libjpeg62-turbo-dev libpng-dev libtiff-dev libdc1394-dev nasm && \
      rm -rf /var/lib/apt/lists/*

FROM --platform=linux/amd64 opencv-base-amd64 AS opencv-build-amd64

ARG OPENCV_VERSION="4.13.0"
ENV OPENCV_VERSION $OPENCV_VERSION

ARG OPENCV_FILE="https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip"
ENV OPENCV_FILE $OPENCV_FILE

ARG OPENCV_CONTRIB_FILE="https://github.com/opencv/opencv_contrib/archive/${OPENCV_VERSION}.zip"
ENV OPENCV_CONTRIB_FILE $OPENCV_CONTRIB_FILE

RUN curl -Lo opencv.zip ${OPENCV_FILE} && \
      unzip -q opencv.zip && \
      curl -Lo opencv_contrib.zip ${OPENCV_CONTRIB_FILE} && \
      unzip -q opencv_contrib.zip && \
      rm opencv.zip opencv_contrib.zip

RUN cd opencv-${OPENCV_VERSION} && \
      mkdir build && cd build && \
      cmake -D CMAKE_BUILD_TYPE=RELEASE \
      -D WITH_IPP=OFF \
      -D WITH_OPENGL=OFF \
      -D WITH_QT=OFF \
      -D WITH_FREETYPE=ON \
      -D CMAKE_INSTALL_PREFIX=/usr/local \
      -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-${OPENCV_VERSION}/modules \
      -D OPENCV_ENABLE_NONFREE=ON \
      -D WITH_JASPER=OFF \
      -D WITH_TBB=ON \
      -D BUILD_JPEG=ON \
      -D WITH_SIMD=ON \
      -D ENABLE_LIBJPEG_TURBO_SIMD=ON \
      -D BUILD_DOCS=OFF \
      -D BUILD_EXAMPLES=OFF \
      -D BUILD_TESTS=OFF \
      -D BUILD_PERF_TESTS=ON \
      -D BUILD_opencv_java=NO \
      -D BUILD_opencv_python=NO \
      -D BUILD_opencv_python2=NO \
      -D BUILD_opencv_python3=NO \
      -D OPENCV_GENERATE_PKGCONFIG=ON .. && \
      make -j $(( $(nproc) - 1 )) && \
      make preinstall && make install && ldconfig && \
      cd / && rm -rf opencv*


###################
# arm64 build stage
###################

FROM --platform=linux/arm64 golang:1.25-bookworm AS opencv-base-arm64
LABEL maintainer="hybridgroup"

RUN apt-get update && apt-get install -y --no-install-recommends \
      git build-essential cmake pkg-config unzip libgtk2.0-dev \
      curl ca-certificates libcurl4-openssl-dev libssl-dev \
      libavcodec-dev libavformat-dev libswscale-dev libtbbmalloc2 libtbb-dev \
      libharfbuzz-dev libfreetype6-dev \
      libjpeg62-turbo-dev libpng-dev libtiff-dev libdc1394-dev && \
      apt-get autoremove -y && apt-get autoclean -y

FROM --platform=linux/arm64 opencv-base-arm64 AS opencv-build-arm64

ARG OPENCV_VERSION="4.13.0"
ENV OPENCV_VERSION $OPENCV_VERSION

ARG OPENCV_FILE="https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip"
ENV OPENCV_FILE $OPENCV_FILE

ARG OPENCV_CONTRIB_FILE="https://github.com/opencv/opencv_contrib/archive/${OPENCV_VERSION}.zip"
ENV OPENCV_CONTRIB_FILE $OPENCV_CONTRIB_FILE

RUN curl -Lo opencv.zip ${OPENCV_FILE} && \
      unzip -q opencv.zip && \
      curl -Lo opencv_contrib.zip ${OPENCV_CONTRIB_FILE} && \
      unzip -q opencv_contrib.zip && \
      rm opencv.zip opencv_contrib.zip

RUN cd opencv-${OPENCV_VERSION} && \
      mkdir build && cd build && \
      cmake -D CMAKE_BUILD_TYPE=RELEASE \
      -D CMAKE_INSTALL_PREFIX=/usr/local \
      -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-${OPENCV_VERSION}/modules \
      -D ENABLE_NEON=ON \
      -D WITH_FFMPEG=ON \
      -D WITH_TBB=ON \
      -D BUILD_TBB=ON \
      -D BUILD_TESTS=OFF \
      -D WITH_EIGEN=OFF \
      -D WITH_GSTREAMER=OFF \
      -D WITH_V4L=ON \
      -D WITH_LIBV4L=ON \
      -D WITH_VTK=OFF \
      -D WITH_QT=OFF \
      -D WITH_FREETYPE=ON \
      -D BUILD_JPEG=ON \
      -D OPENCV_ENABLE_NONFREE=ON \
      -D BUILD_DOCS=OFF \
      -D BUILD_EXAMPLES=OFF \
      -D BUILD_TESTS=OFF \
      -D BUILD_PERF_TESTS=ON \
      -D BUILD_opencv_java=NO \
      -D BUILD_opencv_python=NO \
      -D BUILD_opencv_python2=NO \
      -D BUILD_opencv_python3=NO \
      -D OPENCV_GENERATE_PKGCONFIG=ON \
      -D CMAKE_TOOLCHAIN_FILE=../platforms/linux/aarch64-gnu.toolchain.cmake .. && \
      make -j $(( $(nproc) - 1 )) && \
      make preinstall && make install && ldconfig && \
      cd / && rm -rf opencv*

ARG TARGETARCH

###################
# multiarch build stage
###################

FROM opencv-build-${TARGETARCH} as opencv-final

CMD ["opencv_version", "-b"]


================================================
FILE: Dockerfile.opencv-gpu-cuda-10
================================================
# to build this docker image:
#   docker build -f Dockerfile.opencv-gpu-cuda-10 -t ghcr.io/hybridgroup/opencv:4.13.0-gpu-cuda-10 .
FROM nvidia/cuda:10.2-cudnn8-devel AS opencv-gpu-base
LABEL maintainer="hybridgroup"

# needed for cuda repo key rotation. see:
# https://forums.developer.nvidia.com/t/notice-cuda-linux-repository-key-rotation/212771
#
RUN apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/3bf863cc.pub

RUN apt-get update && apt-get install -y --no-install-recommends \
    git build-essential cmake pkg-config unzip libgtk2.0-dev \
    wget curl ca-certificates libcurl4-openssl-dev libssl-dev \
    libavcodec-dev libavformat-dev libswscale-dev libtbb2 libtbb-dev \
    libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev && \
    rm -rf /var/lib/apt/lists/*

ARG OPENCV_VERSION="4.13.0"
ENV OPENCV_VERSION $OPENCV_VERSION

RUN curl -Lo opencv.zip https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip && \
    unzip -q opencv.zip && \
    curl -Lo opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/${OPENCV_VERSION}.zip && \
    unzip -q opencv_contrib.zip && \
    rm opencv.zip opencv_contrib.zip && \
    cd opencv-${OPENCV_VERSION} && \
    mkdir build && cd build && \
    cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D WITH_IPP=OFF \
    -D WITH_OPENGL=OFF \
    -D WITH_QT=OFF \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-${OPENCV_VERSION}/modules \
    -D OPENCV_ENABLE_NONFREE=ON \
    -D WITH_JASPER=OFF \
    -D BUILD_DOCS=OFF \
    -D BUILD_EXAMPLES=OFF \
    -D BUILD_TESTS=OFF \
    -D BUILD_PERF_TESTS=ON \
    -D BUILD_opencv_java=NO \
    -D BUILD_opencv_python=NO \
    -D BUILD_opencv_python2=NO \
    -D BUILD_opencv_python3=NO \
    -D WITH_TBB=ON \
    -D WITH_CUDA=ON \
    -D ENABLE_FAST_MATH=1 \
    -D CUDA_FAST_MATH=1 \
    -D WITH_CUBLAS=1 \
    -D CUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda/ \
    -D BUILD_opencv_cudacodec=OFF \
    -D WITH_CUDNN=ON \
    -D OPENCV_DNN_CUDA=ON \
    -D CUDA_GENERATION=Auto \
    -D OPENCV_GENERATE_PKGCONFIG=ON .. && \
    make -j $(nproc --all) && \
    make preinstall && make install && ldconfig && \
    cd / && rm -rf opencv*

# install golang here
FROM opencv-gpu-base AS opencv-gpu-golang

ENV GO_RELEASE=1.25.5
RUN wget https://dl.google.com/go/go${GO_RELEASE}.linux-amd64.tar.gz && \
    tar xfv go${GO_RELEASE}.linux-amd64.tar.gz -C /usr/local && \
    rm go${GO_RELEASE}.linux-amd64.tar.gz
ENV PATH="${PATH}:/usr/local/go/bin"

CMD ["go version"]


================================================
FILE: Dockerfile.opencv-gpu-cuda-11
================================================
# to build this docker image:
#   docker build -f Dockerfile.opencv-gpu-cuda-11 -t ghcr.io/hybridgroup/opencv:4.13.0-gpu-cuda-11 .
#   docker build --build-arg OPENCV_VERSION="4.x" --build-arg OPENCV_FILE="https://github.com/opencv/opencv/archive/refs/heads/4.x.zip" --build-arg OPENCV_CONTRIB_FILE="https://github.com/opencv/opencv_contrib/archive/refs/heads/4.x.zip" -f Dockerfile.opencv-gpu-cuda-11.2.2 -t ghcr.io/hybridgroup/opencv:4.13.0-dev-gpu-cuda-11 .
FROM nvidia/cuda:11.8.0-cudnn8-devel-ubuntu20.04 AS opencv-gpu-cuda-11-base
LABEL maintainer="hybridgroup"
ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update && apt-get install -y --no-install-recommends \
    git build-essential cmake pkg-config unzip libgtk2.0-dev \
    wget curl ca-certificates libcurl4-openssl-dev libssl-dev \
    libavcodec-dev libavformat-dev libswscale-dev libtbb2 libtbb-dev \
    libharfbuzz-dev libfreetype6-dev \
    libjpeg-turbo8-dev libpng-dev libtiff-dev libdc1394-22-dev nasm && \
    rm -rf /var/lib/apt/lists/*

ARG OPENCV_VERSION="4.13.0"
ENV OPENCV_VERSION $OPENCV_VERSION

ARG OPENCV_FILE="https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip"
ENV OPENCV_FILE $OPENCV_FILE

ARG OPENCV_CONTRIB_FILE="https://github.com/opencv/opencv_contrib/archive/${OPENCV_VERSION}.zip"
ENV OPENCV_CONTRIB_FILE $OPENCV_CONTRIB_FILE

RUN curl -Lo opencv.zip ${OPENCV_FILE} && \
    unzip -q opencv.zip && \
    curl -Lo opencv_contrib.zip ${OPENCV_CONTRIB_FILE} && \
    unzip -q opencv_contrib.zip && \
    rm opencv.zip opencv_contrib.zip && \
    cd opencv-${OPENCV_VERSION} && \
    mkdir build && cd build && \
    cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D WITH_IPP=OFF \
    -D WITH_OPENGL=OFF \
    -D WITH_QT=OFF \
    -D WITH_FREETYPE=ON \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-${OPENCV_VERSION}/modules \
    -D OPENCV_ENABLE_NONFREE=ON \
    -D WITH_JASPER=OFF \
    -D BUILD_DOCS=OFF \
    -D BUILD_EXAMPLES=OFF \
    -D BUILD_TESTS=OFF \
    -D BUILD_PERF_TESTS=ON \
    -D BUILD_opencv_java=NO \
    -D BUILD_opencv_python=NO \
    -D BUILD_opencv_python2=NO \
    -D BUILD_opencv_python3=NO \
    -D WITH_TBB=ON \
    -D BUILD_JPEG=ON \
    -D WITH_SIMD=ON \
    -D WITH_LIBJPEG_TURBO_SIMD=ON \
    -D WITH_CUDA=ON \
    -D ENABLE_FAST_MATH=1 \
    -D CUDA_FAST_MATH=1 \
    -D WITH_CUBLAS=1 \
    -D CUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda/ \
    -D BUILD_opencv_cudacodec=OFF \
    -D WITH_CUDNN=ON \
    -D OPENCV_DNN_CUDA=ON \
    -D CUDA_ARCH_BIN=6.0,6.1,7.0,7.5,8.0,8.6 \
    -D OPENCV_GENERATE_PKGCONFIG=ON .. && \
    make -j $(nproc --all) && \
    make preinstall && make install && ldconfig && \
    cd / && rm -rf opencv*

# install golang here
FROM opencv-gpu-cuda-11-base AS opencv-gpu-cuda-11-golang

ENV GO_RELEASE=1.25.5
RUN wget https://dl.google.com/go/go${GO_RELEASE}.linux-amd64.tar.gz && \
    tar xfv go${GO_RELEASE}.linux-amd64.tar.gz -C /usr/local && \
    rm go${GO_RELEASE}.linux-amd64.tar.gz
ENV PATH="${PATH}:/usr/local/go/bin"

CMD ["go version"]


================================================
FILE: Dockerfile.opencv-gpu-cuda-11.2.2
================================================
# to build this docker image:
#   docker build -f Dockerfile.opencv-gpu-cuda-11 -t ghcr.io/hybridgroup/opencv:4.13.0-gpu-cuda-11.2.2 .
#   docker build --build-arg OPENCV_VERSION="4.x" --build-arg OPENCV_FILE="https://github.com/opencv/opencv/archive/refs/heads/4.x.zip" --build-arg OPENCV_CONTRIB_FILE="https://github.com/opencv/opencv_contrib/archive/refs/heads/4.x.zip" -f Dockerfile.opencv-gpu-cuda-11.2.2 -t ghcr.io/hybridgroup/opencv:4.13.0-dev-gpu-cuda-11.2.2 .
FROM nvidia/cuda:11.2.2-cudnn8-devel-ubuntu20.04 AS opencv-gpu-cuda-11-base
LABEL maintainer="hybridgroup"
ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update && apt-get install -y --no-install-recommends \
    git build-essential cmake pkg-config unzip libgtk2.0-dev \
    wget curl ca-certificates libcurl4-openssl-dev libssl-dev \
    libavcodec-dev libavformat-dev libswscale-dev libtbb2 libtbb-dev \
    libharfbuzz-dev libfreetype6-dev \
    libjpeg-turbo8-dev libpng-dev libtiff-dev libdc1394-22-dev nasm && \
    rm -rf /var/lib/apt/lists/*

ARG OPENCV_VERSION="4.13.0"
ENV OPENCV_VERSION $OPENCV_VERSION

ARG OPENCV_FILE="https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip"
ENV OPENCV_FILE $OPENCV_FILE

ARG OPENCV_CONTRIB_FILE="https://github.com/opencv/opencv_contrib/archive/${OPENCV_VERSION}.zip"
ENV OPENCV_CONTRIB_FILE $OPENCV_CONTRIB_FILE

RUN curl -Lo opencv.zip ${OPENCV_FILE} && \
    unzip -q opencv.zip && \
    curl -Lo opencv_contrib.zip ${OPENCV_CONTRIB_FILE} && \
    unzip -q opencv_contrib.zip && \
    rm opencv.zip opencv_contrib.zip && \
    cd opencv-${OPENCV_VERSION} && \
    mkdir build && cd build && \
    cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D WITH_IPP=OFF \
    -D WITH_OPENGL=OFF \
    -D WITH_QT=OFF \
    -D WITH_FREETYPE=ON \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-${OPENCV_VERSION}/modules \
    -D OPENCV_ENABLE_NONFREE=ON \
    -D WITH_JASPER=OFF \
    -D BUILD_DOCS=OFF \
    -D BUILD_EXAMPLES=OFF \
    -D BUILD_TESTS=OFF \
    -D BUILD_PERF_TESTS=ON \
    -D BUILD_opencv_java=NO \
    -D BUILD_opencv_python=NO \
    -D BUILD_opencv_python2=NO \
    -D BUILD_opencv_python3=NO \
    -D WITH_TBB=ON \
    -D BUILD_JPEG=ON \
    -D WITH_SIMD=ON \
    -D WITH_LIBJPEG_TURBO_SIMD=ON \
    -D WITH_CUDA=ON \
    -D ENABLE_FAST_MATH=1 \
    -D CUDA_FAST_MATH=1 \
    -D WITH_CUBLAS=1 \
    -D CUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda/ \
    -D BUILD_opencv_cudacodec=OFF \
    -D WITH_CUDNN=ON \
    -D OPENCV_DNN_CUDA=ON \
    -D CUDA_ARCH_BIN=6.0,6.1,7.0,7.5,8.0,8.6 \
    -D OPENCV_GENERATE_PKGCONFIG=ON .. && \
    make -j $(nproc --all) && \
    make preinstall && make install && ldconfig && \
    cd / && rm -rf opencv*

# install golang here
FROM opencv-gpu-cuda-11-base AS opencv-gpu-cuda-11-golang

ENV GO_RELEASE=1.25.5
RUN wget https://dl.google.com/go/go${GO_RELEASE}.linux-amd64.tar.gz && \
    tar xfv go${GO_RELEASE}.linux-amd64.tar.gz -C /usr/local && \
    rm go${GO_RELEASE}.linux-amd64.tar.gz
ENV PATH="${PATH}:/usr/local/go/bin"

CMD ["go version"]


================================================
FILE: Dockerfile.opencv-gpu-cuda-12
================================================
# to build this docker image:
#   docker build -f Dockerfile.opencv-gpu-cuda-12 -t ghcr.io/hybridgroup/opencv:4.13.0-gpu-cuda-12 .
#   docker build --build-arg OPENCV_VERSION="4.x" --build-arg OPENCV_FILE="https://github.com/opencv/opencv/archive/refs/heads/4.x.zip" --build-arg OPENCV_CONTRIB_FILE="https://github.com/opencv/opencv_contrib/archive/refs/heads/4.x.zip" -f Dockerfile.opencv-gpu-cuda-12 -t ghcr.io/hybridgroup/opencv:4.13.0-dev-gpu-cuda-12 .
FROM nvidia/cuda:12.6.1-cudnn-devel-ubuntu22.04 AS opencv-gpu-cuda-12-base
LABEL maintainer="hybridgroup"
ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update && apt-get install -y --no-install-recommends \
    git build-essential cmake pkg-config unzip libgtk2.0-dev \
    wget curl ca-certificates libcurl4-openssl-dev libssl-dev \
    libavcodec-dev libavformat-dev libswscale-dev libtbb2 libtbb-dev \
    libharfbuzz-dev libfreetype6-dev \
    libjpeg-turbo8-dev libpng-dev libtiff-dev libdc1394-dev nasm && \
    rm -rf /var/lib/apt/lists/*

ARG OPENCV_VERSION="4.13.0"
ENV OPENCV_VERSION $OPENCV_VERSION

ARG OPENCV_FILE="https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip"
ENV OPENCV_FILE $OPENCV_FILE

ARG OPENCV_CONTRIB_FILE="https://github.com/opencv/opencv_contrib/archive/${OPENCV_VERSION}.zip"
ENV OPENCV_CONTRIB_FILE $OPENCV_CONTRIB_FILE

RUN curl -Lo opencv.zip ${OPENCV_FILE} && \
    unzip -q opencv.zip && \
    curl -Lo opencv_contrib.zip ${OPENCV_CONTRIB_FILE} && \
    unzip -q opencv_contrib.zip && \
    rm opencv.zip opencv_contrib.zip && \
    cd opencv-${OPENCV_VERSION} && \
    mkdir build && cd build && \
    cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D WITH_IPP=OFF \
    -D WITH_OPENGL=OFF \
    -D WITH_QT=OFF \
    -D WITH_FREETYPE=ON \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-${OPENCV_VERSION}/modules \
    -D OPENCV_ENABLE_NONFREE=ON \
    -D WITH_JASPER=OFF \
    -D BUILD_DOCS=OFF \
    -D BUILD_EXAMPLES=OFF \
    -D BUILD_TESTS=OFF \
    -D BUILD_PERF_TESTS=ON \
    -D BUILD_opencv_java=NO \
    -D BUILD_opencv_python=NO \
    -D BUILD_opencv_python2=NO \
    -D BUILD_opencv_python3=NO \
    -D WITH_TBB=ON \
    -D BUILD_JPEG=ON \
    -D WITH_SIMD=ON \
    -D WITH_LIBJPEG_TURBO_SIMD=ON \
    -D WITH_CUDA=ON \
    -D ENABLE_FAST_MATH=1 \
    -D CUDA_FAST_MATH=1 \
    -D WITH_CUBLAS=1 \
    -D CUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda/ \
    -D BUILD_opencv_cudacodec=OFF \
    -D WITH_CUDNN=ON \
    -D OPENCV_DNN_CUDA=ON \
    -D CUDA_ARCH_BIN=6.0,6.1,7.0,7.5,8.0,8.6,8.9,9.0 \
    -D OPENCV_GENERATE_PKGCONFIG=ON .. && \
    make -j $(nproc --all) && \
    make preinstall && make install && ldconfig && \
    cd / && rm -rf opencv*

# install golang here
FROM opencv-gpu-cuda-12-base AS opencv-gpu-cuda-12-golang

ENV GO_RELEASE=1.25.5
RUN wget https://dl.google.com/go/go${GO_RELEASE}.linux-amd64.tar.gz && \
    tar xfv go${GO_RELEASE}.linux-amd64.tar.gz -C /usr/local && \
    rm go${GO_RELEASE}.linux-amd64.tar.gz
ENV PATH="${PATH}:/usr/local/go/bin"

CMD ["go version"]


================================================
FILE: Dockerfile.opencv-gpu-cuda-13
================================================
# to build this docker image:
#   docker build -f Dockerfile.opencv-gpu-cuda-13 -t ghcr.io/hybridgroup/opencv:4.13.0-gpu-cuda-13 .
#   docker build --build-arg OPENCV_VERSION="4.x" --build-arg OPENCV_FILE="https://github.com/opencv/opencv/archive/refs/heads/4.x.zip" --build-arg OPENCV_CONTRIB_FILE="https://github.com/opencv/opencv_contrib/archive/refs/heads/4.x.zip" -f Dockerfile.opencv-gpu-cuda-13 -t ghcr.io/hybridgroup/opencv:4.13.0-dev-gpu-cuda-13 .
FROM nvidia/cuda:13.0.2-cudnn-devel-ubuntu24.04 AS opencv-gpu-cuda-13-base
LABEL maintainer="hybridgroup"
ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update && apt-get install -y --no-install-recommends \
    git build-essential cmake pkg-config unzip libgtk2.0-dev \
    wget curl ca-certificates libcurl4-openssl-dev libssl-dev \
    libavcodec-dev libavformat-dev libswscale-dev libtbbmalloc2 libtbb-dev \
    libharfbuzz-dev libfreetype6-dev \
    libjpeg-turbo8-dev libpng-dev libtiff-dev libdc1394-dev nasm && \
    rm -rf /var/lib/apt/lists/*

ARG OPENCV_VERSION="4.13.0"
ENV OPENCV_VERSION $OPENCV_VERSION

ARG OPENCV_FILE="https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip"
ENV OPENCV_FILE $OPENCV_FILE

ARG OPENCV_CONTRIB_FILE="https://github.com/opencv/opencv_contrib/archive/${OPENCV_VERSION}.zip"
ENV OPENCV_CONTRIB_FILE $OPENCV_CONTRIB_FILE

RUN curl -Lo opencv.zip ${OPENCV_FILE} && \
    unzip -q opencv.zip && \
    curl -Lo opencv_contrib.zip ${OPENCV_CONTRIB_FILE} && \
    unzip -q opencv_contrib.zip && \
    rm opencv.zip opencv_contrib.zip && \
    cd opencv-${OPENCV_VERSION} && \
    mkdir build && cd build && \
    cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D WITH_IPP=OFF \
    -D WITH_OPENGL=OFF \
    -D WITH_QT=OFF \
    -D WITH_FREETYPE=ON \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-${OPENCV_VERSION}/modules \
    -D OPENCV_ENABLE_NONFREE=ON \
    -D WITH_JASPER=OFF \
    -D BUILD_DOCS=OFF \
    -D BUILD_EXAMPLES=OFF \
    -D BUILD_TESTS=OFF \
    -D BUILD_PERF_TESTS=ON \
    -D BUILD_opencv_java=NO \
    -D BUILD_opencv_python=NO \
    -D BUILD_opencv_python2=NO \
    -D BUILD_opencv_python3=NO \
    -D WITH_TBB=ON \
    -D BUILD_JPEG=ON \
    -D WITH_SIMD=ON \
    -D WITH_LIBJPEG_TURBO_SIMD=ON \
    -D WITH_CUDA=ON \
    -D ENABLE_FAST_MATH=1 \
    -D CUDA_FAST_MATH=1 \
    -D WITH_CUBLAS=1 \
    -D CUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda/ \
    -D BUILD_opencv_cudacodec=OFF \
    -D WITH_CUDNN=ON \
    -D OPENCV_DNN_CUDA=ON \
    -D CUDA_ARCH_BIN=7.5,8.0,8.6,8.9,9.0,10.0,10.3,11.0,12.0,12.1 \
    -D OPENCV_GENERATE_PKGCONFIG=ON .. && \
    make -j $(nproc --all) && \
    make preinstall && make install && ldconfig && \
    cd / && rm -rf opencv*

# install golang here
FROM opencv-gpu-cuda-13-base AS opencv-gpu-cuda-13-golang

ENV GO_RELEASE=1.25.5
RUN wget https://dl.google.com/go/go${GO_RELEASE}.linux-amd64.tar.gz && \
    tar xfv go${GO_RELEASE}.linux-amd64.tar.gz -C /usr/local && \
    rm go${GO_RELEASE}.linux-amd64.tar.gz
ENV PATH="${PATH}:/usr/local/go/bin"

CMD ["go version"]


================================================
FILE: Dockerfile.opencv-openvino
================================================
# to build this docker image:
#   docker build -f Dockerfile.opencv-openvino -t ghcr.io/hybridgroup/opencv:4.13.0-openvino
FROM openvino/ubuntu20_dev:2022.1.0 AS opencv-openvino-base
LABEL maintainer="hybridgroup"
ENV DEBIAN_FRONTEND=noninteractive
USER root
RUN apt-get update && apt-get install -y --no-install-recommends \
    git build-essential cmake pkg-config unzip libgtk2.0-dev \
    wget curl ca-certificates libcurl4-openssl-dev libssl-dev \
    libavcodec-dev libavformat-dev libswscale-dev libtbb2 libtbb-dev \
    libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev && \
    rm -rf /var/lib/apt/lists/*

ARG OPENCV_VERSION="4.13.0"
ENV OPENCV_VERSION $OPENCV_VERSION

RUN curl -Lo opencv.zip https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip && \
    unzip -q opencv.zip && \
    curl -Lo opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/${OPENCV_VERSION}.zip && \
    unzip -q opencv_contrib.zip && \
    rm opencv.zip opencv_contrib.zip && \
    cd opencv-${OPENCV_VERSION} && \
    mkdir build && cd build && \
    cmake -D CMAKE_BUILD_TYPE=RELEASE \
    -D WITH_IPP=OFF \
    -D WITH_OPENGL=OFF \
    -D WITH_QT=OFF \
    -D CMAKE_INSTALL_PREFIX=/usr/local \
    -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-${OPENCV_VERSION}/modules \
    -D OPENCV_ENABLE_NONFREE=ON \
    -D WITH_JASPER=OFF \
    -D BUILD_DOCS=OFF \
    -D BUILD_EXAMPLES=OFF \
    -D BUILD_TESTS=OFF \
    -D BUILD_PERF_TESTS=ON \
    -D BUILD_opencv_java=NO \
    -D BUILD_opencv_python=NO \
    -D BUILD_opencv_python2=NO \
    -D BUILD_opencv_python3=NO \
    -D WITH_TBB=ON \
    -D WITH_OPENVINO=1 \
    -D ENABLE_FAST_MATH=1 \
    -D OPENCV_GENERATE_PKGCONFIG=ON .. && \
    make -j $(nproc --all) && \
    make preinstall && make install && ldconfig && \
    cd / && rm -rf opencv*

# install golang here
FROM opencv-openvino-base AS opencv-openvino-golang

ENV GO_RELEASE=1.25.5
RUN wget https://dl.google.com/go/go${GO_RELEASE}.linux-amd64.tar.gz && \
    tar xfv go${GO_RELEASE}.linux-amd64.tar.gz -C /usr/local && \
    rm go${GO_RELEASE}.linux-amd64.tar.gz
ENV PATH="${PATH}:/usr/local/go/bin"
USER openvino
CMD ["go version"]


================================================
FILE: Dockerfile.opencv-static
================================================
# OpenCV 4 prebuilt multiarchitecture image
#
# To build release:
#   docker buildx build -f Dockerfile.opencv-static -t ghcr.io/hybridgroup/opencv:4.13.0-static --platform=linux/arm64,linux/amd64 --push .
#
# To build prerelease:
#   docker buildx build --build-arg OPENCV_VERSION="4.x" --build-arg OPENCV_FILE="https://github.com/opencv/opencv/archive/refs/heads/4.x.zip" --build-arg OPENCV_CONTRIB_FILE="https://github.com/opencv/opencv_contrib/archive/refs/heads/4.x.zip" -f Dockerfile.opencv-static -t ghcr.io/hybridgroup/opencv:4.13.0-static-dev --platform=linux/arm64,linux/amd64 --push .


###################
# amd64 build stage
###################

FROM --platform=linux/amd64 golang:1.25-bookworm AS opencv-base-amd64
LABEL maintainer="hybridgroup"
RUN apt-get update && apt-get -y install \
      autoconf automake libass-dev libgnutls28-dev \
      libmp3lame-dev libtool libvorbis-dev \
      meson ninja-build pkg-config \
      texinfo wget yasm \
      zlib1g-dev libx264-dev libvpx-dev \
      libopus-dev libdav1d-dev \
      git build-essential cmake pkg-config unzip \
      curl ca-certificates libcurl4-openssl-dev libssl-dev \
      libharfbuzz-dev libfreetype6-dev \
      nasm && \
      rm -rf /var/lib/apt/lists/*

RUN wget -O ffmpeg-5.0.tar.bz2 "https://www.ffmpeg.org/releases/ffmpeg-5.1.6.tar.bz2" && \
      tar -xf ffmpeg-5.0.tar.bz2

RUN cd ffmpeg-5.1.6 && \
      ./configure --pkg-config-flags="--static" \
      --enable-static --disable-shared --enable-gpl --enable-libx264 --enable-libvpx --enable-zlib \
      --disable-sdl2 --disable-vaapi --disable-vdpau --disable-v4l2-m2m --disable-doc && \
      make -j $(nproc --all) && make install && ldconfig

FROM --platform=linux/amd64 opencv-base-amd64 AS opencv-build-amd64

ARG OPENCV_VERSION="4.13.0"
ENV OPENCV_VERSION $OPENCV_VERSION

ARG OPENCV_FILE="https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip"
ENV OPENCV_FILE $OPENCV_FILE

ARG OPENCV_CONTRIB_FILE="https://github.com/opencv/opencv_contrib/archive/${OPENCV_VERSION}.zip"
ENV OPENCV_CONTRIB_FILE $OPENCV_CONTRIB_FILE

RUN curl -Lo opencv.zip ${OPENCV_FILE} && \
      unzip -q opencv.zip && \
      curl -Lo opencv_contrib.zip ${OPENCV_CONTRIB_FILE} && \
      unzip -q opencv_contrib.zip && \
      rm opencv.zip opencv_contrib.zip

RUN cd opencv-${OPENCV_VERSION} && \
      mkdir build && cd build && \
      cmake -D CMAKE_BUILD_TYPE=RELEASE \
      -D WITH_IPP=ON \
      -D BUILD_WITH_DYNAMIC_IPP=OFF \
      -D BUILD_IPP_IW=ON \
      -D WITH_OPENGL=ON \
      -D BUILD_OPENGL=ON \
      -D WITH_QT=OFF \
      -D WITH_FREETYPE=ON \
      -D CMAKE_INSTALL_PREFIX=/usr/local \
      -D BUILD_SHARED_LIBS=OFF \
      -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-${OPENCV_VERSION}/modules \
      -D OPENCV_ENABLE_NONFREE=ON \
      -D WITH_JASPER=OFF \
      -D WITH_TBB=ON \
      -D BUILD_TBB=ON \
      -D BUILD_JPEG=ON \
      -D WITH_SIMD=ON \
      -D ENABLE_LIBJPEG_TURBO_SIMD=OFF \
      -D WITH_QUIRC=ON \
      -D WITH_GTK=OFF \
      -D WITH_FFMPEG=ON \
      -D WITH_1394=ON \
      -D BUILD_1394=ON \
      -D WITH_WEBP=ON \
      -D BUILD_WEBP=ON \
      -D WITH_OPENJPEG=ON \
      -D BUILD_OPENJPEG=ON \
      -D WITH_TIFF=ON \
      -D BUILD_TIFF=ON \
      -D BUILD_DOCS=OFF \
      -D BUILD_EXAMPLES=OFF \
      -D BUILD_TESTS=OFF \
      -D BUILD_PERF_TESTS=OFF \
      -D BUILD_opencv_java=NO \
      -D BUILD_opencv_python=NO \
      -D BUILD_opencv_python2=NO \
      -D BUILD_opencv_python3=NO \
      -D OPENCV_GENERATE_PKGCONFIG=ON .. && \
      make -j $(( $(nproc) - 1 )) && \
      make preinstall && make install && ldconfig && \
      cd / && rm -rf opencv*

###################
# arm64 build stage
###################

FROM --platform=linux/arm64 golang:1.25-bookworm AS opencv-base-arm64
LABEL maintainer="hybridgroup"
RUN apt-get update && apt-get -y install \
      autoconf automake libass-dev libgnutls28-dev \
      libmp3lame-dev libtool libvorbis-dev \
      meson ninja-build pkg-config \
      texinfo wget yasm \
      zlib1g-dev libx264-dev libvpx-dev \
      libopus-dev libdav1d-dev \
      git build-essential cmake pkg-config unzip \
      curl ca-certificates libcurl4-openssl-dev libssl-dev \
      libharfbuzz-dev libfreetype6-dev \
      nasm && \
      rm -rf /var/lib/apt/lists/*

RUN wget -O ffmpeg-5.0.tar.bz2 "https://www.ffmpeg.org/releases/ffmpeg-5.1.6.tar.bz2" && \
      tar -xf ffmpeg-5.0.tar.bz2

RUN cd ffmpeg-5.1.6 && \
      ./configure --pkg-config-flags="--static" \
      --enable-static --disable-shared --enable-gpl --enable-libx264 --enable-libvpx --enable-zlib \
      --disable-sdl2 --disable-vaapi --disable-vdpau --disable-v4l2-m2m --disable-doc && \
      make -j $(nproc --all) && make install && ldconfig

FROM --platform=linux/arm64 opencv-base-arm64 AS opencv-build-arm64

ARG OPENCV_VERSION="4.13.0"
ENV OPENCV_VERSION $OPENCV_VERSION

ARG OPENCV_FILE="https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip"
ENV OPENCV_FILE $OPENCV_FILE

ARG OPENCV_CONTRIB_FILE="https://github.com/opencv/opencv_contrib/archive/${OPENCV_VERSION}.zip"
ENV OPENCV_CONTRIB_FILE $OPENCV_CONTRIB_FILE

RUN curl -Lo opencv.zip ${OPENCV_FILE} && \
      unzip -q opencv.zip && \
      curl -Lo opencv_contrib.zip ${OPENCV_CONTRIB_FILE} && \
      unzip -q opencv_contrib.zip && \
      rm opencv.zip opencv_contrib.zip

RUN cd opencv-${OPENCV_VERSION} && \
      mkdir build && cd build && \
      cmake -D CMAKE_BUILD_TYPE=RELEASE \
      -D WITH_IPP=OFF \
      -D WITH_OPENGL=ON \
      -D BUILD_OPENGL=ON \
      -D WITH_QT=OFF \
      -D WITH_FREETYPE=ON \
      -D CMAKE_INSTALL_PREFIX=/usr/local \
      -D BUILD_SHARED_LIBS=OFF \
      -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-${OPENCV_VERSION}/modules \
      -D OPENCV_ENABLE_NONFREE=ON \
      -D WITH_JASPER=OFF \
      -D ENABLE_NEON=ON \
      -D WITH_TBB=ON \
      -D BUILD_TBB=ON \
      -D BUILD_JPEG=ON \
      -D WITH_SIMD=ON \
      -D ENABLE_LIBJPEG_TURBO_SIMD=OFF \
      -D WITH_QUIRC=ON \
      -D WITH_GTK=OFF \
      -D WITH_FFMPEG=ON \
      -D WITH_1394=ON \
      -D BUILD_1394=ON \
      -D WITH_WEBP=ON \
      -D BUILD_WEBP=ON \
      -D WITH_OPENJPEG=ON \
      -D BUILD_OPENJPEG=ON \
      -D WITH_TIFF=ON \
      -D BUILD_TIFF=ON \
      -D BUILD_DOCS=OFF \
      -D BUILD_EXAMPLES=OFF \
      -D BUILD_TESTS=OFF \
      -D BUILD_PERF_TESTS=OFF \
      -D BUILD_opencv_java=NO \
      -D BUILD_opencv_python=NO \
      -D BUILD_opencv_python2=NO \
      -D BUILD_opencv_python3=NO \
      -D OPENCV_GENERATE_PKGCONFIG=ON .. && \
      make -j $(( $(nproc) - 1 )) && \
      make preinstall && make install && ldconfig && \
      cd / && rm -rf opencv*

ARG TARGETARCH

###################
# multiarch build stage
###################

FROM opencv-build-${TARGETARCH} AS opencv-final

CMD ["opencv_version", "-b"]


================================================
FILE: Dockerfile.opencv-static-alpine
================================================
# syntax=docker/dockerfile:1.3

# To build release:
#   docker buildx build -f Dockerfile.opencv-static-alpine -t ghcr.io/hybridgroup/opencv:4.11-alpine --platform=linux/arm64,linux/amd64 --load .

# linux/amd64 build

FROM --platform=linux/amd64 ghcr.io/hybridgroup/gstreamer:1.24-alpine AS gstreamer-amd64

# Stage 1: Build OpenCV
FROM --platform=linux/amd64 ghcr.io/hybridgroup/ffmpeg:5.16-alpine AS builder-amd64

# Set OpenCV version
ARG OPENCV_VERSION=4.13.0

# Download OpenCV source code
WORKDIR /opencv
RUN wget -O opencv.zip https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip && \
    unzip -q opencv.zip && \
    mv opencv-${OPENCV_VERSION} opencv

WORKDIR /opencv_contrib
RUN wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/${OPENCV_VERSION}.zip && \
    unzip -q opencv_contrib.zip && \
    mv opencv_contrib-${OPENCV_VERSION} opencv_contrib

# Install dependencies
RUN apk update && apk add --no-cache \
    build-base \
    cmake \
    git \
    diffutils \
    perl \
    wget \
    unzip \
    pkgconfig \
    libjpeg-turbo-dev \
    libpng-dev \
    libwebp-dev \
    eigen-dev \
    nasm yasm \
    bzip2 xz zlib-dev x264-dev libvpx-dev \
    opus-dev dav1d-dev openssl \
    libxml2-dev \
    bison \
    flex \
    glib-dev glib-static \
    gobject-introspection-dev \
    libcap-dev \
    libcap-utils \
    meson

# copy gstreamer
COPY --from=gstreamer-amd64 /gstbin/lib /usr/local/lib
COPY --from=gstreamer-amd64 /gstbin/include/gstreamer-1.0/gst /usr/local/include/gst

# patch opencv for static gstreamer
COPY ./patches/gstreamer-full.patch /opencv/opencv
RUN cd /opencv/opencv && \
    patch -p1 < gstreamer-full.patch

# Build OpenCV
ENV PKG_CONFIG_PATH=/usr/local/lib/gstreamer-1.0/pkgconfig:/usr/local/lib/pkgconfig
ENV GSTREAMER_STATIC_LIB=/usr/local/lib/gstreamer-1.0

WORKDIR /opencv/opencv/build
RUN cmake -D CMAKE_BUILD_TYPE=Release \
          -D CMAKE_INSTALL_PREFIX=/usr/local \
          -D WITH_IPP=ON \
          -D BUILD_WITH_DYNAMIC_IPP=OFF \
          -D BUILD_IPP_IW=ON \
          -D WITH_OPENGL=ON \
          -D BUILD_OPENGL=ON \
          -D WITH_QT=OFF \
          -D WITH_FREETYPE=OFF \
          -D OPENCV_EXTRA_MODULES_PATH=/opencv_contrib/opencv_contrib/modules \
          -D OPENCV_ENABLE_NONFREE=ON \
          -D BUILD_SHARED_LIBS=OFF \
          -D WITH_FFMPEG=ON \
          -D WITH_GSTREAMER=ON \
          -D WITH_TBB=ON \
          -D WITH_SIMD=ON \
          -D BUILD_EXAMPLES=OFF \
          -D BUILD_TESTS=OFF \
          -D BUILD_PERF_TESTS=OFF \
          -D OPENCV_GENERATE_PKGCONFIG=ON \
          -D WITH_WEBP=ON \
          -D BUILD_WEBP=ON \
          -D WITH_OPENJPEG=ON \
          -D BUILD_OPENJPEG=ON \
          -D BUILD_TIFF=ON \
          -D BUILD_PNG=ON \
          -D BUILD_ZLIB=ON \
          -D BUILD_JPEG=ON \
          -D WITH_SIMD=ON \
          -D ENABLE_LIBJPEG_TURBO_SIMD=OFF \
          -D BUILD_opencv_java=NO \
          -D BUILD_opencv_python=NO \
          -D BUILD_opencv_python2=NO \
          -D BUILD_opencv_python3=NO \
          .. && \
    make -j$(nproc) && \
    make install


# linux/arm64 build
FROM --platform=linux/arm64 ghcr.io/hybridgroup/gstreamer:1.24-alpine AS gstreamer-arm64

FROM --platform=linux/arm64 ghcr.io/hybridgroup/ffmpeg:5.16-alpine AS builder-arm64

# Set OpenCV version
ARG OPENCV_VERSION=4.13.0

# Download OpenCV source code
WORKDIR /opencv
RUN wget -O opencv.zip https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip && \
    unzip -q opencv.zip && \
    mv opencv-${OPENCV_VERSION} opencv

WORKDIR /opencv_contrib
RUN wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/${OPENCV_VERSION}.zip && \
    unzip -q opencv_contrib.zip && \
    mv opencv_contrib-${OPENCV_VERSION} opencv_contrib

# Install dependencies
RUN apk update && apk add --no-cache \
    build-base \
    cmake \
    git \
    diffutils \
    perl \
    wget \
    unzip \
    pkgconfig \
    libjpeg-turbo-dev \
    libpng-dev \
    libwebp-dev \
    eigen-dev \
    nasm yasm \
    bzip2 xz zlib-dev x264-dev libvpx-dev \
    opus-dev dav1d-dev openssl \
    libxml2-dev \
    bison \
    flex \
    glib-dev glib-static \
    gobject-introspection-dev \
    libcap-dev \
    libcap-utils \
    meson

# copy gstreamer
COPY --from=gstreamer-arm64 /gstbin/lib /usr/local/lib
COPY --from=gstreamer-arm64 /gstbin/include/gstreamer-1.0/gst /usr/local/include/gst

# patch opencv for static gstreamer
COPY ./patches/gstreamer-full.patch /opencv/opencv
RUN cd /opencv/opencv && \
    patch -p1 < gstreamer-full.patch

# Build OpenCV
ENV PKG_CONFIG_PATH=/usr/local/lib/gstreamer-1.0/pkgconfig:/usr/local/lib/pkgconfig
ENV GSTREAMER_STATIC_LIB=/usr/local/lib/gstreamer-1.0

WORKDIR /opencv/opencv/build
RUN cmake -D CMAKE_BUILD_TYPE=Release \
          -D CMAKE_INSTALL_PREFIX=/usr/local \
          -D WITH_IPP=OFF \
          -D ENABLE_NEON=ON \
          -D WITH_OPENGL=ON \
          -D BUILD_OPENGL=ON \
          -D WITH_QT=OFF \
          -D WITH_FREETYPE=OFF \
          -D OPENCV_EXTRA_MODULES_PATH=/opencv_contrib/opencv_contrib/modules \
          -D OPENCV_ENABLE_NONFREE=ON \
          -D BUILD_SHARED_LIBS=OFF \
          -D WITH_FFMPEG=ON \
          -D WITH_GSTREAMER=ON \
          -D WITH_TBB=ON \
          -D WITH_SIMD=ON \
          -D ENABLE_LIBJPEG_TURBO_SIMD=OFF \
          -D BUILD_EXAMPLES=OFF \
          -D BUILD_TESTS=OFF \
          -D BUILD_PERF_TESTS=OFF \
          -D OPENCV_GENERATE_PKGCONFIG=ON \
          -D WITH_WEBP=ON \
          -D BUILD_WEBP=ON \
          -D WITH_OPENJPEG=ON \
          -D BUILD_OPENJPEG=ON \
          -D BUILD_TIFF=ON \
          -D BUILD_PNG=ON \
          -D BUILD_ZLIB=ON \
          -D BUILD_JPEG=ON \
          -D WITH_SIMD=ON \
          -D ENABLE_LIBJPEG_TURBO_SIMD=OFF \
          -D BUILD_opencv_java=NO \
          -D BUILD_opencv_python=NO \
          -D BUILD_opencv_python2=NO \
          -D BUILD_opencv_python3=NO \
          .. && \
    make -j$(nproc) && \
    make install

# Stage 2: Create final image
FROM builder-${TARGETARCH} AS final

# Set environment variables
ENV LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib/opencv4/3rdparty:${LD_LIBRARY_PATH}

CMD ["opencv_version", "-b"]


================================================
FILE: Dockerfile.opencv-static-alpine-ffmpeg
================================================
# syntax=docker/dockerfile:1.3

# To build release:
#   docker buildx build -f Dockerfile.opencv-static-alpine-ffmpeg -t ghcr.io/hybridgroup/opencv:4.10-alpine-ffmpeg --platform=linux/arm64,linux/amd64 --load .

# linux/amd64 build

# Stage 1: Build OpenCV
FROM --platform=linux/amd64 ghcr.io/hybridgroup/ffmpeg:5.16-alpine AS builder-amd64

# Set OpenCV version
ARG OPENCV_VERSION=4.13.0

# Download OpenCV source code
WORKDIR /opencv
RUN wget -O opencv.zip https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip && \
    unzip -q opencv.zip && \
    mv opencv-${OPENCV_VERSION} opencv

WORKDIR /opencv_contrib
RUN wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/${OPENCV_VERSION}.zip && \
    unzip -q opencv_contrib.zip && \
    mv opencv_contrib-${OPENCV_VERSION} opencv_contrib

# Install dependencies
RUN apk update && apk add --no-cache \
    build-base \
    cmake \
    git \
    diffutils \
    perl \
    wget \
    unzip \
    pkgconfig \
    libjpeg-turbo-dev \
    libpng-dev \
    libwebp-dev \
    eigen-dev \
    nasm yasm \
    bzip2 xz zlib-dev x264-dev libvpx-dev \
    opus-dev dav1d-dev openssl \
    libxml2-dev \
    bison \
    flex \
    glib-dev \
    gobject-introspection-dev \
    libcap-dev \
    libcap-utils \
    meson

# Build OpenCV
WORKDIR /opencv/opencv/build
RUN cmake -D CMAKE_BUILD_TYPE=Release \
          -D CMAKE_INSTALL_PREFIX=/usr/local \
          -D WITH_IPP=ON \
          -D BUILD_WITH_DYNAMIC_IPP=OFF \
          -D BUILD_IPP_IW=ON \
          -D WITH_OPENGL=ON \
          -D BUILD_OPENGL=ON \
          -D WITH_QT=OFF \
          -D WITH_FREETYPE=OFF \
          -D OPENCV_EXTRA_MODULES_PATH=/opencv_contrib/opencv_contrib/modules \
          -D OPENCV_ENABLE_NONFREE=ON \
          -D BUILD_SHARED_LIBS=OFF \
          -D WITH_FFMPEG=ON \
          -D WITH_GSTREAMER=OFF \
          -D WITH_TBB=ON \
          -D WITH_SIMD=ON \
          -D BUILD_EXAMPLES=OFF \
          -D BUILD_TESTS=OFF \
          -D BUILD_PERF_TESTS=OFF \
          -D OPENCV_GENERATE_PKGCONFIG=ON \
          -D WITH_WEBP=ON \
          -D BUILD_WEBP=ON \
          -D WITH_OPENJPEG=ON \
          -D BUILD_OPENJPEG=ON \
          -D BUILD_TIFF=ON \
          -D BUILD_PNG=ON \
          -D BUILD_ZLIB=ON \
          -D BUILD_JPEG=ON \
          -D WITH_SIMD=ON \
          -D ENABLE_LIBJPEG_TURBO_SIMD=OFF \
          -D BUILD_opencv_java=NO \
          -D BUILD_opencv_python=NO \
          -D BUILD_opencv_python2=NO \
          -D BUILD_opencv_python3=NO \
          .. && \
    make -j$(nproc) && \
    make install


# linux/arm64 build
FROM --platform=linux/arm64 ghcr.io/hybridgroup/ffmpeg:5.16-alpine AS builder-arm64

# Set OpenCV version
ARG OPENCV_VERSION=4.13.0

# Download OpenCV source code
WORKDIR /opencv
RUN wget -O opencv.zip https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip && \
    unzip -q opencv.zip && \
    mv opencv-${OPENCV_VERSION} opencv

WORKDIR /opencv_contrib
RUN wget -O opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/${OPENCV_VERSION}.zip && \
    unzip -q opencv_contrib.zip && \
    mv opencv_contrib-${OPENCV_VERSION} opencv_contrib

# Install dependencies
RUN apk update && apk add --no-cache \
    build-base \
    cmake \
    git \
    diffutils \
    perl \
    wget \
    unzip \
    pkgconfig \
    libjpeg-turbo-dev \
    libpng-dev \
    libwebp-dev \
    eigen-dev \
    nasm yasm \
    bzip2 xz zlib-dev x264-dev libvpx-dev \
    opus-dev dav1d-dev openssl \
    libxml2-dev \
    bison \
    flex \
    glib-dev \
    gobject-introspection-dev \
    libcap-dev \
    libcap-utils \
    meson

# Build OpenCV
WORKDIR /opencv/opencv/build
RUN cmake -D CMAKE_BUILD_TYPE=Release \
          -D CMAKE_INSTALL_PREFIX=/usr/local \
          -D WITH_IPP=OFF \
          -D ENABLE_NEON=ON \
          -D WITH_OPENGL=ON \
          -D BUILD_OPENGL=ON \
          -D WITH_QT=OFF \
          -D WITH_FREETYPE=OFF \
          -D OPENCV_EXTRA_MODULES_PATH=/opencv_contrib/opencv_contrib/modules \
          -D OPENCV_ENABLE_NONFREE=ON \
          -D BUILD_SHARED_LIBS=OFF \
          -D WITH_FFMPEG=ON \
          -D WITH_GSTREAMER=OFF \
          -D WITH_TBB=ON \
          -D WITH_SIMD=ON \
          -D ENABLE_LIBJPEG_TURBO_SIMD=OFF \
          -D BUILD_EXAMPLES=OFF \
          -D BUILD_TESTS=OFF \
          -D BUILD_PERF_TESTS=OFF \
          -D OPENCV_GENERATE_PKGCONFIG=ON \
          -D WITH_WEBP=ON \
          -D BUILD_WEBP=ON \
          -D WITH_OPENJPEG=ON \
          -D BUILD_OPENJPEG=ON \
          -D BUILD_TIFF=ON \
          -D BUILD_PNG=ON \
          -D BUILD_ZLIB=ON \
          -D BUILD_JPEG=ON \
          -D WITH_SIMD=ON \
          -D ENABLE_LIBJPEG_TURBO_SIMD=OFF \
          -D BUILD_opencv_java=NO \
          -D BUILD_opencv_python=NO \
          -D BUILD_opencv_python2=NO \
          -D BUILD_opencv_python3=NO \
          .. && \
    make -j$(nproc) && \
    make install

# Stage 2: Create final image
FROM builder-${TARGETARCH} AS final

# Set environment variables
ENV LD_LIBRARY_PATH=/usr/local/lib:/usr/local/lib/opencv4/3rdparty:${LD_LIBRARY_PATH}

CMD ["opencv_version", "-b"]


================================================
FILE: Dockerfile.opencv-ubuntu-18.04
================================================
# to build this docker image:
#   docker build -f Dockerfile.opencv-ubuntu-18.04 -t ghcr.io/hybridgroup/opencv:4.13.0-ubuntu-18.04 .
#   docker build --build-arg OPENCV_VERSION="4.x" --build-arg OPENCV_FILE="https://github.com/opencv/opencv/archive/refs/heads/4.x.zip" --build-arg OPENCV_CONTRIB_FILE="https://github.com/opencv/opencv_contrib/archive/refs/heads/4.x.zip" -f Dockerfile.opencv-ubuntu-18.04 -t ghcr.io/hybridgroup/opencv:4.13.0-dev-ubuntu-18.04 .
FROM ubuntu:18.04 AS opencv-base
LABEL maintainer="hybridgroup"

RUN apt-get update && apt-get install -y --no-install-recommends \
      git build-essential cmake pkg-config wget unzip libgtk2.0-dev \
      curl ca-certificates libcurl4-openssl-dev libssl-dev \
      libavcodec-dev libavformat-dev libswscale-dev libtbb2 libtbb-dev \
      libharfbuzz-dev libfreetype6-dev \
      libjpeg-turbo8-dev libpng-dev libtiff-dev libdc1394-22-dev nasm && \
      rm -rf /var/lib/apt/lists/*

ARG OPENCV_VERSION="4.13.0"
ENV OPENCV_VERSION $OPENCV_VERSION

ARG OPENCV_FILE="https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip"
ENV OPENCV_FILE $OPENCV_FILE

ARG OPENCV_CONTRIB_FILE="https://github.com/opencv/opencv_contrib/archive/${OPENCV_VERSION}.zip"
ENV OPENCV_CONTRIB_FILE $OPENCV_CONTRIB_FILE

RUN curl -Lo opencv.zip ${OPENCV_FILE} && \
      unzip -q opencv.zip && \
      curl -Lo opencv_contrib.zip ${OPENCV_CONTRIB_FILE} && \
      unzip -q opencv_contrib.zip && \
      rm opencv.zip opencv_contrib.zip && \
      cd opencv-${OPENCV_VERSION} && \
      mkdir build && cd build && \
      cmake -D CMAKE_BUILD_TYPE=RELEASE \
      -D WITH_IPP=OFF \
      -D WITH_OPENGL=OFF \
      -D WITH_QT=OFF \
      -D WITH_FREETYPE=ON \
      -D CMAKE_INSTALL_PREFIX=/usr/local \
      -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-${OPENCV_VERSION}/modules \
      -D OPENCV_ENABLE_NONFREE=ON \
      -D WITH_JASPER=OFF \
      -D WITH_TBB=ON \
      -D BUILD_JPEG=ON \
      -D WITH_SIMD=ON \
      -D ENABLE_LIBJPEG_TURBO_SIMD=ON \
      -D BUILD_DOCS=OFF \
      -D BUILD_EXAMPLES=OFF \
      -D BUILD_TESTS=OFF \
      -D BUILD_PERF_TESTS=ON \
      -D BUILD_opencv_java=NO \
      -D BUILD_opencv_python=NO \
      -D BUILD_opencv_python2=NO \
      -D BUILD_opencv_python3=NO \
      -D OPENCV_GENERATE_PKGCONFIG=ON .. && \
      make -j $(nproc --all) && \
      make preinstall && make install && ldconfig && \
      cd / && rm -rf opencv*

CMD ["opencv_version", "-b"]


================================================
FILE: Dockerfile.opencv-ubuntu-20.04
================================================
# to build this docker image:
#   docker build -f Dockerfile.opencv-ubuntu-20.04 -t ghcr.io/hybridgroup/opencv:4.13.0-ubuntu-20.04 .
#   docker build --build-arg OPENCV_VERSION="4.x" --build-arg OPENCV_FILE="https://github.com/opencv/opencv/archive/refs/heads/4.x.zip" --build-arg OPENCV_CONTRIB_FILE="https://github.com/opencv/opencv_contrib/archive/refs/heads/4.x.zip" -f Dockerfile.opencv-ubuntu-20.04 -t ghcr.io/hybridgroup/opencv:4.13.0-dev-ubuntu-20.04 .
FROM ubuntu:20.04 AS opencv-base
LABEL maintainer="hybridgroup"

ENV TZ=Europe/Madrid
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

RUN apt-get update && apt-get install -y --no-install-recommends \
      tzdata git build-essential cmake pkg-config wget unzip libgtk2.0-dev \
      curl ca-certificates libcurl4-openssl-dev libssl-dev \
      libavcodec-dev libavformat-dev libswscale-dev libtbb2 libtbb-dev \
      libharfbuzz-dev libfreetype6-dev \
      libjpeg-turbo8-dev libpng-dev libtiff-dev libdc1394-22-dev nasm && \
      rm -rf /var/lib/apt/lists/*

ARG OPENCV_VERSION="4.13.0"
ENV OPENCV_VERSION $OPENCV_VERSION

ARG OPENCV_FILE="https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip"
ENV OPENCV_FILE $OPENCV_FILE

ARG OPENCV_CONTRIB_FILE="https://github.com/opencv/opencv_contrib/archive/${OPENCV_VERSION}.zip"
ENV OPENCV_CONTRIB_FILE $OPENCV_CONTRIB_FILE

RUN curl -Lo opencv.zip ${OPENCV_FILE} && \
      unzip -q opencv.zip && \
      curl -Lo opencv_contrib.zip ${OPENCV_CONTRIB_FILE} && \
      unzip -q opencv_contrib.zip && \
      rm opencv.zip opencv_contrib.zip && \
      cd opencv-${OPENCV_VERSION} && \
      mkdir build && cd build && \
      cmake -D CMAKE_BUILD_TYPE=RELEASE \
      -D WITH_IPP=OFF \
      -D WITH_OPENGL=OFF \
      -D WITH_QT=OFF \
      -D WITH_FREETYPE=ON \
      -D CMAKE_INSTALL_PREFIX=/usr/local \
      -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-${OPENCV_VERSION}/modules \
      -D OPENCV_ENABLE_NONFREE=ON \
      -D WITH_JASPER=OFF \
      -D WITH_TBB=ON \
      -D BUILD_JPEG=ON \
      -D WITH_SIMD=ON \
      -D ENABLE_LIBJPEG_TURBO_SIMD=ON \
      -D BUILD_DOCS=OFF \
      -D BUILD_EXAMPLES=OFF \
      -D BUILD_TESTS=OFF \
      -D BUILD_PERF_TESTS=ON \
      -D BUILD_opencv_java=NO \
      -D BUILD_opencv_python=NO \
      -D BUILD_opencv_python2=NO \
      -D BUILD_opencv_python3=NO \
      -D OPENCV_GENERATE_PKGCONFIG=ON .. && \
      make -j $(nproc --all) && \
      make preinstall && make install && ldconfig && \
      cd / && rm -rf opencv*

CMD ["opencv_version", "-b"]


================================================
FILE: Dockerfile.opencv-ubuntu-22.04
================================================
# to build this docker image:
#   docker build -f Dockerfile.opencv-ubuntu-22.04 -t ghcr.io/hybridgroup/opencv:4.13.0-ubuntu-22.04 .
#   docker build --build-arg OPENCV_VERSION="4.x" --build-arg OPENCV_FILE="https://github.com/opencv/opencv/archive/refs/heads/4.x.zip" --build-arg OPENCV_CONTRIB_FILE="https://github.com/opencv/opencv_contrib/archive/refs/heads/4.x.zip" -f Dockerfile.opencv-ubuntu-20.04 -t ghcr.io/hybridgroup/opencv:4.13.0-dev-ubuntu-20.04 .
FROM ubuntu:22.04 AS opencv-base
LABEL maintainer="hybridgroup"

ENV TZ=Europe/Madrid
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

RUN apt-get update && apt-get install -y --no-install-recommends \
      tzdata git build-essential cmake pkg-config wget unzip libgtk2.0-dev \
      curl ca-certificates libcurl4-openssl-dev libssl-dev \
      libavcodec-dev libavformat-dev libswscale-dev libtbb2 libtbb-dev \
      libharfbuzz-dev libfreetype6-dev \
      libjpeg-turbo8-dev libpng-dev libtiff-dev libdc1394-dev nasm && \
      rm -rf /var/lib/apt/lists/*

ARG OPENCV_VERSION="4.13.0"
ENV OPENCV_VERSION $OPENCV_VERSION

ARG OPENCV_FILE="https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip"
ENV OPENCV_FILE $OPENCV_FILE

ARG OPENCV_CONTRIB_FILE="https://github.com/opencv/opencv_contrib/archive/${OPENCV_VERSION}.zip"
ENV OPENCV_CONTRIB_FILE $OPENCV_CONTRIB_FILE

RUN curl -Lo opencv.zip ${OPENCV_FILE} && \
      unzip -q opencv.zip && \
      curl -Lo opencv_contrib.zip ${OPENCV_CONTRIB_FILE} && \
      unzip -q opencv_contrib.zip && \
      rm opencv.zip opencv_contrib.zip && \
      cd opencv-${OPENCV_VERSION} && \
      mkdir build && cd build && \
      cmake -D CMAKE_BUILD_TYPE=RELEASE \
      -D WITH_IPP=OFF \
      -D WITH_OPENGL=OFF \
      -D WITH_QT=OFF \
      -D WITH_FREETYPE=ON \
      -D CMAKE_INSTALL_PREFIX=/usr/local \
      -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-${OPENCV_VERSION}/modules \
      -D OPENCV_ENABLE_NONFREE=ON \
      -D WITH_JASPER=OFF \
      -D WITH_TBB=ON \
      -D BUILD_JPEG=ON \
      -D WITH_SIMD=ON \
      -D ENABLE_LIBJPEG_TURBO_SIMD=ON \
      -D BUILD_DOCS=OFF \
      -D BUILD_EXAMPLES=OFF \
      -D BUILD_TESTS=OFF \
      -D BUILD_PERF_TESTS=ON \
      -D BUILD_opencv_java=NO \
      -D BUILD_opencv_python=NO \
      -D BUILD_opencv_python2=NO \
      -D BUILD_opencv_python3=NO \
      -D OPENCV_GENERATE_PKGCONFIG=ON .. && \
      make -j $(nproc --all) && \
      make preinstall && make install && ldconfig && \
      cd / && rm -rf opencv*

CMD ["opencv_version", "-b"]


================================================
FILE: Dockerfile.opencv-ubuntu-24.04
================================================
# to build this docker image:
#   docker build -f Dockerfile.opencv-ubuntu-24.04 -t ghcr.io/hybridgroup/opencv:4.13.0-ubuntu-24.04 .
#   docker build --build-arg OPENCV_VERSION="4.x" --build-arg OPENCV_FILE="https://github.com/opencv/opencv/archive/refs/heads/4.x.zip" --build-arg OPENCV_CONTRIB_FILE="https://github.com/opencv/opencv_contrib/archive/refs/heads/4.x.zip" -f Dockerfile.opencv-ubuntu-20.04 -t ghcr.io/hybridgroup/opencv:4.13.0-dev-ubuntu-20.04 .
FROM ubuntu:24.04 AS opencv-base
LABEL maintainer="hybridgroup"

ENV TZ=Europe/Madrid
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

RUN apt-get update && apt-get install -y --no-install-recommends \
      tzdata git build-essential cmake pkg-config wget unzip libgtk2.0-dev \
      curl ca-certificates libcurl4-openssl-dev libssl-dev \
      libavcodec-dev libavformat-dev libswscale-dev libtbbmalloc2 libtbb-dev \
      libharfbuzz-dev libfreetype6-dev \
      libjpeg-turbo8-dev libpng-dev libtiff-dev libdc1394-dev nasm && \
      rm -rf /var/lib/apt/lists/*

ARG OPENCV_VERSION="4.13.0"
ENV OPENCV_VERSION $OPENCV_VERSION

ARG OPENCV_FILE="https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip"
ENV OPENCV_FILE $OPENCV_FILE

ARG OPENCV_CONTRIB_FILE="https://github.com/opencv/opencv_contrib/archive/${OPENCV_VERSION}.zip"
ENV OPENCV_CONTRIB_FILE $OPENCV_CONTRIB_FILE

RUN curl -Lo opencv.zip ${OPENCV_FILE} && \
      unzip -q opencv.zip && \
      curl -Lo opencv_contrib.zip ${OPENCV_CONTRIB_FILE} && \
      unzip -q opencv_contrib.zip && \
      rm opencv.zip opencv_contrib.zip && \
      cd opencv-${OPENCV_VERSION} && \
      mkdir build && cd build && \
      cmake -D CMAKE_BUILD_TYPE=RELEASE \
      -D WITH_IPP=OFF \
      -D WITH_OPENGL=OFF \
      -D WITH_QT=OFF \
      -D WITH_FREETYPE=ON \
      -D CMAKE_INSTALL_PREFIX=/usr/local \
      -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-${OPENCV_VERSION}/modules \
      -D OPENCV_ENABLE_NONFREE=ON \
      -D WITH_JASPER=OFF \
      -D WITH_TBB=ON \
      -D BUILD_JPEG=ON \
      -D WITH_SIMD=ON \
      -D ENABLE_LIBJPEG_TURBO_SIMD=ON \
      -D BUILD_DOCS=OFF \
      -D BUILD_EXAMPLES=OFF \
      -D BUILD_TESTS=OFF \
      -D BUILD_PERF_TESTS=ON \
      -D BUILD_opencv_java=NO \
      -D BUILD_opencv_python=NO \
      -D BUILD_opencv_python2=NO \
      -D BUILD_opencv_python3=NO \
      -D OPENCV_GENERATE_PKGCONFIG=ON .. && \
      make -j $(nproc --all) && \
      make preinstall && make install && ldconfig && \
      cd / && rm -rf opencv*

CMD ["opencv_version", "-b"]


================================================
FILE: LICENSE.txt
================================================
Copyright (c) The Hybrid Group and friends

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.


================================================
FILE: Makefile
================================================
.ONESHELL:
.PHONY: test deps download build clean astyle cmds docker

# GoCV version to use.
GOCV_VERSION?="v0.43.0"

# OpenCV version to use.
OPENCV_VERSION?=4.13.0

# Go version to use when building Docker image
GOVERSION?=1.25.5

# Temporary directory to put files into.
TMP_DIR?=/tmp/

# Build shared or static library
BUILD_SHARED_LIBS?=ON

# Package list for each well-known Linux distribution
RPMS=cmake curl wget git gtk2-devel libpng-devel libjpeg-devel libtiff-devel tbb tbb-devel libdc1394-devel unzip gcc-c++
DEBS=unzip wget build-essential cmake curl git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev libharfbuzz-dev libfreetype6-dev
DEBS_BOOKWORM=unzip wget build-essential cmake curl git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev libtbbmalloc2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libharfbuzz-dev libfreetype6-dev
DEBS_UBUNTU_JAMMY=unzip wget build-essential cmake curl git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-dev libharfbuzz-dev libfreetype6-dev
DEBS_UBUNTU_MANTIC=unzip wget build-essential cmake curl git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev libtbbmalloc2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-dev libharfbuzz-dev libfreetype6-dev
DEBS_UBUNTU_NUMBAT=unzip wget build-essential cmake curl git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-dev libharfbuzz-dev libfreetype-dev
JETSON=build-essential cmake git unzip pkg-config libjpeg-dev libpng-dev libtiff-dev libavcodec-dev libavformat-dev libswscale-dev libgtk2.0-dev libcanberra-gtk* libxvidcore-dev libx264-dev libgtk-3-dev libtbb2 libtbb-dev libdc1394-dev libv4l-dev v4l-utils libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libavresample-dev libvorbis-dev libxine2-dev libfaac-dev libmp3lame-dev libtheora-dev libopencore-amrnb-dev libopencore-amrwb-dev libopenblas-dev libatlas-base-dev libblas-dev liblapack-dev libeigen3-dev gfortran libhdf5-dev protobuf-compiler libprotobuf-dev libgoogle-glog-dev libgflags-dev

explain:
	@echo "For quick install with typical defaults of both OpenCV and GoCV, run 'make install'"

# Detect Linux distribution
distro_deps=
ifneq ($(shell which dnf 2>/dev/null),)
	distro_deps=deps_fedora
endif
ifneq ($(shell which yum 2>/dev/null),)
	distro_deps=deps_rh_centos
endif
ifneq ($(shell which apt-get 2>/dev/null),)
ifneq ($(shell cat /etc/os-release 2>/dev/null | grep "Jammy Jellyfish"),)
	distro_deps=deps_ubuntu_jammy
endif
ifneq ($(shell cat /etc/os-release 2>/dev/null | grep "Mantic Minotaur"),)
	distro_deps=deps_ubuntu_mantic
endif
ifneq ($(shell cat /etc/os-release 2>/dev/null | grep "Noble Numbat"),)
	distro_deps=deps_ubuntu_numbat
endif
ifneq ($(shell cat /etc/debian_version 2>/dev/null | grep "11."),)
	distro_deps=deps_debian_bullseye
endif
ifneq ($(shell cat /etc/debian_version 2>/dev/null | grep "12."),)
	distro_deps=deps_debian_bookworm
endif
endif

# Install all necessary dependencies.
deps: $(distro_deps)

deps_rh_centos:
	sudo yum -y install pkgconfig $(RPMS)

deps_fedora:
	sudo dnf -y install pkgconf-pkg-config $(RPMS)

deps_debian_bookworm:
	sudo apt-get -y update
	sudo apt-get -y install $(DEBS_BOOKWORM)

deps_debian_bullseye:
	sudo apt-get -y update
	sudo apt-get -y install $(DEBS_BULLSEYE)

deps_ubuntu_jammy:
	sudo apt-get -y update
	sudo apt-get -y install $(DEBS_UBUNTU_JAMMY)

deps_ubuntu_mantic:
	sudo apt-get -y update
	sudo apt-get -y install $(DEBS_UBUNTU_MANTIC)

deps_ubuntu_numbat:
	sudo apt-get -y update
	sudo apt-get -y install $(DEBS_UBUNTU_NUMBAT)

deps_jetson:
	sudo sh -c "echo '/usr/local/cuda/lib64' >> /etc/ld.so.conf.d/nvidia-tegra.conf"
	sudo ldconfig
	sudo apt-get -y update
	sudo apt-get -y install $(JETSON)

# Download OpenCV source tarballs.
download:
	rm -rf $(TMP_DIR)opencv
	mkdir $(TMP_DIR)opencv
	cd $(TMP_DIR)opencv
	curl -Lo opencv.zip https://github.com/opencv/opencv/archive/refs/tags/$(OPENCV_VERSION).zip
	unzip -q opencv.zip
	curl -Lo opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/refs/tags/$(OPENCV_VERSION).zip
	unzip -q opencv_contrib.zip
	rm opencv.zip opencv_contrib.zip
	cd -

# Download openvino source tarballs.
download_openvino:
	sudo rm -rf /usr/local/dldt/
	sudo rm -rf /usr/local/openvino/
	sudo git clone https://github.com/openvinotoolkit/openvino -b 2019_R3.1 /usr/local/openvino/

# Build openvino.
build_openvino_package:
	cd /usr/local/openvino/inference-engine
	sudo git submodule init
	sudo git submodule update --recursive
	sudo ./install_dependencies.sh
	sudo mv -f thirdparty/clDNN/common/intel_ocl_icd/6.3/linux/Release thirdparty/clDNN/common/intel_ocl_icd/6.3/linux/RELEASE
	sudo mkdir build
	cd build
	sudo rm -rf *
	sudo cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_SHARED_LIBS=${BUILD_SHARED_LIBS} -D ENABLE_VPU=ON -D ENABLE_MKL_DNN=ON -D ENABLE_CLDNN=ON ..
	sudo $(MAKE) -j $(shell nproc --all --ignore 1)
	sudo touch VERSION
	sudo mkdir -p src/ngraph
	sudo cp thirdparty/ngraph/src/ngraph/version.hpp src/ngraph
	cd -

# Build OpenCV.
build:
	cd $(TMP_DIR)opencv/opencv-$(OPENCV_VERSION)
	mkdir build
	cd build
	rm -rf *
	cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_SHARED_LIBS=${BUILD_SHARED_LIBS} -D OPENCV_EXTRA_MODULES_PATH=$(TMP_DIR)opencv/opencv_contrib-$(OPENCV_VERSION)/modules -D BUILD_DOCS=OFF -D BUILD_EXAMPLES=OFF -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=ON -D BUILD_opencv_java=NO -D BUILD_opencv_python=NO -D BUILD_opencv_python2=NO -D BUILD_opencv_python3=NO -D WITH_JASPER=OFF -D WITH_TBB=ON -DOPENCV_GENERATE_PKGCONFIG=ON ..
	$(MAKE) -j $(shell nproc --all --ignore 1)
	$(MAKE) preinstall
	cd -

# Build OpenCV on Raspbian with ARM hardware optimizations.
build_raspi:
	cd $(TMP_DIR)opencv/opencv-$(OPENCV_VERSION)
	mkdir build
	cd build
	rm -rf *
ifneq ($(shell uname -m | grep "aarch64"),)
	cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_SHARED_LIBS=${BUILD_SHARED_LIBS} -D OPENCV_EXTRA_MODULES_PATH=$(TMP_DIR)opencv/opencv_contrib-$(OPENCV_VERSION)/modules -D BUILD_DOCS=OFF -D BUILD_EXAMPLES=OFF -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=ON -D BUILD_opencv_java=OFF -D BUILD_opencv_python=NO -D BUILD_opencv_python2=NO -D BUILD_opencv_python3=NO -D ENABLE_NEON=ON -D WITH_JASPER=OFF -D WITH_TBB=ON -D OPENCV_GENERATE_PKGCONFIG=ON -D WITH_FREETYPE=ON ..
else
	cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_SHARED_LIBS=${BUILD_SHARED_LIBS} -D OPENCV_EXTRA_MODULES_PATH=$(TMP_DIR)opencv/opencv_contrib-$(OPENCV_VERSION)/modules -D BUILD_DOCS=OFF -D BUILD_EXAMPLES=OFF -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=ON -D BUILD_opencv_java=OFF -D BUILD_opencv_python=NO -D BUILD_opencv_python2=NO -D BUILD_opencv_python3=NO -D ENABLE_NEON=ON -D ENABLE_VFPV3=ON -D WITH_JASPER=OFF -D OPENCV_GENERATE_PKGCONFIG=ON -D WITH_FREETYPE=ON ..
endif
	$(MAKE) -j $(shell nproc --all --ignore 1)
	$(MAKE) preinstall
	cd -

# Build OpenCV on Raspberry pi zero which has ARMv6.
build_raspi_zero:
	cd $(TMP_DIR)opencv/opencv-$(OPENCV_VERSION)
	mkdir build
	cd build
	rm -rf *
	cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_SHARED_LIBS=${BUILD_SHARED_LIBS} -D OPENCV_EXTRA_MODULES_PATH=$(TMP_DIR)opencv/opencv_contrib-$(OPENCV_VERSION)/modules -D BUILD_DOCS=OFF -D BUILD_EXAMPLES=OFF -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=ON -D BUILD_opencv_java=OFF -D BUILD_opencv_python=NO -D BUILD_opencv_python2=NO -D BUILD_opencv_python3=NO -D ENABLE_VFPV2=ON -D WITH_JASPER=OFF -D OPENCV_GENERATE_PKGCONFIG=ON ..
	$(MAKE) -j $(shell nproc --all --ignore 1)
	$(MAKE) preinstall
	cd -

# Build OpenCV for NVidia Jetson with CUDA.
build_jetson:
	cd $(TMP_DIR)opencv/opencv-$(OPENCV_VERSION)
	mkdir build
	cd build
	rm -rf *
	cmake -D CMAKE_BUILD_TYPE=RELEASE \
		-D CMAKE_INSTALL_PREFIX=/usr/local \
		-D EIGEN_INCLUDE_PATH=/usr/include/eigen3 \
		-D BUILD_SHARED_LIBS=${BUILD_SHARED_LIBS} \
		-D OPENCV_EXTRA_MODULES_PATH=$(TMP_DIR)opencv/opencv_contrib-$(OPENCV_VERSION)/modules \
		-D BUILD_DOCS=OFF -D BUILD_EXAMPLES=OFF -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=ON -D BUILD_opencv_java=OFF -D BUILD_opencv_python=NO -D BUILD_opencv_python2=NO -D BUILD_opencv_python3=NO \
		-D WITH_OPENCL=OFF \
		-D WITH_CUDA=ON \
		-D CUDA_ARCH_BIN=5.3 \
		-D CUDA_ARCH_PTX="" \
		-D WITH_CUDNN=ON \
		-D WITH_CUBLAS=ON \
		-D ENABLE_FAST_MATH=ON \
		-D CUDA_FAST_MATH=ON \
		-D OPENCV_DNN_CUDA=ON \
		-D ENABLE_NEON=ON \
		-D WITH_QT=OFF \
		-D WITH_OPENMP=ON \
		-D WITH_OPENGL=ON \
		-D BUILD_TIFF=ON \
		-D WITH_FFMPEG=ON \
		-D WITH_GSTREAMER=ON \
		-D WITH_TBB=ON \
		-D BUILD_TBB=ON \
		-D BUILD_TESTS=OFF \
		-D WITH_EIGEN=ON \
		-D WITH_V4L=ON \
		-D WITH_LIBV4L=ON \
		-D OPENCV_GENERATE_PKGCONFIG=ON ..
	$(MAKE) -j $(shell nproc --all --ignore 1)
	$(MAKE) preinstall
	cd -

# Build OpenCV with non-free contrib modules.
build_nonfree:
	cd $(TMP_DIR)opencv/opencv-$(OPENCV_VERSION)
	mkdir build
	cd build
	rm -rf *
	cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_SHARED_LIBS=${BUILD_SHARED_LIBS} -D OPENCV_EXTRA_MODULES_PATH=$(TMP_DIR)opencv/opencv_contrib-$(OPENCV_VERSION)/modules -D BUILD_DOCS=OFF -D BUILD_EXAMPLES=OFF -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=ON -D BUILD_opencv_java=NO -D BUILD_opencv_python=NO -D BUILD_opencv_python2=NO -D BUILD_opencv_python3=NO -D WITH_JASPER=OFF -D WITH_TBB=ON -DOPENCV_GENERATE_PKGCONFIG=ON -DOPENCV_ENABLE_NONFREE=ON ..
	$(MAKE) -j $(shell nproc --all --ignore 1)
	$(MAKE) preinstall
	cd -

# Build OpenCV with openvino.
build_openvino:
	cd $(TMP_DIR)opencv/opencv-$(OPENCV_VERSION)
	mkdir build
	cd build
	rm -rf *
	cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_SHARED_LIBS=${BUILD_SHARED_LIBS} -D ENABLE_CXX11=ON -D OPENCV_EXTRA_MODULES_PATH=$(TMP_DIR)opencv/opencv_contrib-$(OPENCV_VERSION)/modules -D WITH_INF_ENGINE=ON -D InferenceEngine_DIR=/usr/local/dldt/inference-engine/build -D BUILD_DOCS=OFF -D BUILD_EXAMPLES=OFF -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=ON -D BUILD_opencv_java=NO -D BUILD_opencv_python=NO -D BUILD_opencv_python2=NO -D BUILD_opencv_python3=NO -D WITH_JASPER=OFF -D WITH_TBB=ON -DOPENCV_GENERATE_PKGCONFIG=ON -DOPENCV_ENABLE_NONFREE=ON ..
	$(MAKE) -j $(shell nproc --all --ignore 1)
	$(MAKE) preinstall
	cd -

# Build OpenCV with cuda.
build_cuda:
	cd $(TMP_DIR)opencv/opencv-$(OPENCV_VERSION)
	mkdir build
	cd build
	rm -rf *
	cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_SHARED_LIBS=${BUILD_SHARED_LIBS} -D OPENCV_EXTRA_MODULES_PATH=$(TMP_DIR)opencv/opencv_contrib-$(OPENCV_VERSION)/modules -D BUILD_DOCS=OFF -D BUILD_EXAMPLES=OFF -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=ON -D BUILD_opencv_java=NO -D BUILD_opencv_python=NO -D BUILD_opencv_python2=NO -D BUILD_opencv_python3=NO -D WITH_JASPER=OFF -D WITH_TBB=ON -DOPENCV_GENERATE_PKGCONFIG=ON -DWITH_CUDA=ON -DENABLE_FAST_MATH=1 -DCUDA_FAST_MATH=1 -DWITH_CUBLAS=ON -DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda/ -DBUILD_opencv_cudacodec=OFF -D WITH_CUDNN=ON -D OPENCV_DNN_CUDA=ON -D CUDA_GENERATION=Auto -DOPENCV_ENABLE_NONFREE=ON -D WITH_GSTREAMER=ON ..
	$(MAKE) -j $(shell nproc --all --ignore 1)
	$(MAKE) preinstall
	cd -

# Build OpenCV statically linked
build_static:
	cd $(TMP_DIR)opencv/opencv-$(OPENCV_VERSION)
	mkdir build
	cd build
	rm -rf *
	cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_SHARED_LIBS=OFF -D OPENCV_EXTRA_MODULES_PATH=$(TMP_DIR)opencv/opencv_contrib-$(OPENCV_VERSION)/modules -D BUILD_DOCS=OFF -D BUILD_EXAMPLES=OFF -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=ON -D BUILD_opencv_java=NO -D BUILD_opencv_python=NO -D BUILD_opencv_python2=NO -D BUILD_opencv_python3=NO -DWITH_JASPER=OFF -DWITH_QT=OFF -DWITH_GTK=OFF -DWITH_FFMPEG=OFF -DWITH_TIFF=OFF -DWITH_WEBP=OFF -DWITH_PNG=OFF -DWITH_1394=OFF -DWITH_OPENJPEG=OFF -DOPENCV_GENERATE_PKGCONFIG=ON ..
	$(MAKE) -j $(shell nproc --all --ignore 1)
	$(MAKE) preinstall
	cd -

# Build OpenCV with cuda.
build_all:
	cd $(TMP_DIR)opencv/opencv-$(OPENCV_VERSION)
	mkdir build
	cd build
	rm -rf *
	cmake -j $(shell nproc --all --ignore 1) -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_SHARED_LIBS=${BUILD_SHARED_LIBS} -D ENABLE_CXX11=ON -D OPENCV_EXTRA_MODULES_PATH=$(TMP_DIR)opencv/opencv_contrib-$(OPENCV_VERSION)/modules -D WITH_INF_ENGINE=ON -D InferenceEngine_DIR=/usr/local/dldt/inference-engine/build -D BUILD_DOCS=OFF -D BUILD_EXAMPLES=OFF -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=ON -D BUILD_opencv_java=NO -D BUILD_opencv_python=NO -D BUILD_opencv_python2=NO -D BUILD_opencv_python3=NO -D WITH_JASPER=OFF -D WITH_TBB=ON -DOPENCV_GENERATE_PKGCONFIG=ON -DWITH_CUDA=ON -DENABLE_FAST_MATH=1 -DCUDA_FAST_MATH=1 -DWITH_CUBLAS
Download .txt
gitextract_b1fe3o02/

├── .astylerc
├── .github/
│   ├── FUNDING.yml
│   ├── ISSUE_TEMPLATE.md
│   └── workflows/
│       ├── docker-alpine-improved.yml
│       ├── docker-static-ffmpeg.yml
│       ├── docker-static-gstreamer.yml
│       ├── docker-static-opencv-cuda.yml
│       ├── docker-static-opencv.yml
│       ├── docker.yml
│       ├── linux.yml
│       ├── macos.yml
│       └── windows.yml
├── .gitignore
├── CHANGELOG.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── Dockerfile
├── Dockerfile-static
├── Dockerfile-static-alpine
├── Dockerfile-static-builder
├── Dockerfile-test
├── Dockerfile-test.gpu-cuda-10
├── Dockerfile-test.gpu-cuda-11
├── Dockerfile-test.gpu-cuda-11.2.2
├── Dockerfile-test.gpu-cuda-12
├── Dockerfile-test.gpu-cuda-13
├── Dockerfile.ffmpeg-static-alpine
├── Dockerfile.gpu
├── Dockerfile.gstreamer-static-alpine
├── Dockerfile.opencv
├── Dockerfile.opencv-gpu-cuda-10
├── Dockerfile.opencv-gpu-cuda-11
├── Dockerfile.opencv-gpu-cuda-11.2.2
├── Dockerfile.opencv-gpu-cuda-12
├── Dockerfile.opencv-gpu-cuda-13
├── Dockerfile.opencv-openvino
├── Dockerfile.opencv-static
├── Dockerfile.opencv-static-alpine
├── Dockerfile.opencv-static-alpine-ffmpeg
├── Dockerfile.opencv-ubuntu-18.04
├── Dockerfile.opencv-ubuntu-20.04
├── Dockerfile.opencv-ubuntu-22.04
├── Dockerfile.opencv-ubuntu-24.04
├── LICENSE.txt
├── Makefile
├── README.md
├── ROADMAP.md
├── aruco.cpp
├── aruco.go
├── aruco.h
├── aruco_dictionaries.go
├── aruco_test.go
├── asyncarray.cpp
├── asyncarray.go
├── asyncarray.h
├── asyncarray_test.go
├── calib3d.cpp
├── calib3d.go
├── calib3d.h
├── calib3d_string.go
├── calib3d_test.go
├── cgo.go
├── cgo_static.go
├── cgo_static_darwin.go
├── cgo_static_windows.go
├── cmd/
│   ├── README.md
│   ├── asciicam/
│   │   └── main.go
│   ├── basic-drawing/
│   │   └── main.go
│   ├── caffe-classifier/
│   │   └── main.go
│   ├── captest/
│   │   └── main.go
│   ├── capwindow/
│   │   └── main.go
│   ├── counter/
│   │   └── main.go
│   ├── cuda/
│   │   └── main.go
│   ├── dnn-detection/
│   │   └── main.go
│   ├── dnn-pose-detection/
│   │   └── main.go
│   ├── dnn-style-transfer/
│   │   └── main.go
│   ├── faceblur/
│   │   └── main.go
│   ├── facedetect/
│   │   └── main.go
│   ├── facedetect-from-url/
│   │   └── main.go
│   ├── facedetectYN/
│   │   └── main.go
│   ├── feature-matching/
│   │   └── main.go
│   ├── find-chessboard/
│   │   └── main.go
│   ├── find-circles/
│   │   └── main.go
│   ├── find-lines/
│   │   └── main.go
│   ├── gstreamer-writer/
│   │   └── main.go
│   ├── hand-gestures/
│   │   └── main.go
│   ├── hello/
│   │   └── main.go
│   ├── img-similarity/
│   │   └── main.go
│   ├── kalman-filter/
│   │   └── main.go
│   ├── mjpeg-streamer/
│   │   └── main.go
│   ├── motion-detect/
│   │   └── main.go
│   ├── openvino/
│   │   └── ie/
│   │       └── version/
│   │           └── main.go
│   ├── saveimage/
│   │   └── main.go
│   ├── savevideo/
│   │   └── main.go
│   ├── showimage/
│   │   └── main.go
│   ├── ssd-facedetect/
│   │   └── main.go
│   ├── tf-classifier/
│   │   └── main.go
│   ├── tracking/
│   │   └── main.go
│   ├── version/
│   │   └── main.go
│   ├── xphoto/
│   │   └── main.go
│   └── yolo-detection/
│       └── main.go
├── codecov.yml
├── contrib/
│   ├── README.md
│   ├── att_faces/
│   │   ├── README
│   │   ├── s1/
│   │   │   ├── 1.pgm
│   │   │   ├── 2.pgm
│   │   │   ├── 3.pgm
│   │   │   └── 4.pgm
│   │   ├── s2/
│   │   │   ├── 1.pgm
│   │   │   ├── 2.pgm
│   │   │   ├── 3.pgm
│   │   │   ├── 4.pgm
│   │   │   └── 5.pgm
│   │   └── s3/
│   │       ├── 1.pgm
│   │       ├── 10.pgm
│   │       ├── 2.pgm
│   │       ├── 3.pgm
│   │       ├── 4.pgm
│   │       ├── 5.pgm
│   │       ├── 6.pgm
│   │       ├── 7.pgm
│   │       ├── 8.pgm
│   │       └── 9.pgm
│   ├── bgsegm.cpp
│   ├── bgsegm.go
│   ├── bgsegm.h
│   ├── bgsegm_test.go
│   ├── cgo.go
│   ├── cgo_static.go
│   ├── cgo_static_darwin.go
│   ├── cgo_static_windows.go
│   ├── contrib.go
│   ├── errors.go
│   ├── face.cpp
│   ├── face.go
│   ├── face.h
│   ├── face_recognizer.go
│   ├── face_test.go
│   ├── freetype.cpp
│   ├── freetype.go
│   ├── freetype.h
│   ├── freetype_test.go
│   ├── img_hash.cpp
│   ├── img_hash.go
│   ├── img_hash.h
│   ├── img_hash_string.go
│   ├── img_hash_test.go
│   ├── mcc.cpp
│   ├── mcc.go
│   ├── mcc.h
│   ├── mcc_test.go
│   ├── tracking.cpp
│   ├── tracking.go
│   ├── tracking.h
│   ├── tracking_test.go
│   ├── wechat_qrcode.cpp
│   ├── wechat_qrcode.go
│   ├── wechat_qrcode.h
│   ├── wechat_qrcode_test.go
│   ├── xfeatures2d.cpp
│   ├── xfeatures2d.go
│   ├── xfeatures2d.h
│   ├── xfeatures2d_test.go
│   ├── ximgproc.cpp
│   ├── ximgproc.go
│   ├── ximgproc.h
│   ├── ximgproc_test.go
│   ├── xobjdetect.cpp
│   ├── xobjdetect.go
│   ├── xobjdetect.h
│   ├── xobjdetect_test.go
│   ├── xphoto.cpp
│   ├── xphoto.go
│   ├── xphoto.h
│   └── xphoto_test.go
├── core.cpp
├── core.go
├── core.h
├── core_string.go
├── core_test.go
├── cuda/
│   ├── README.md
│   ├── arithm.cpp
│   ├── arithm.go
│   ├── arithm.h
│   ├── arithm_test.go
│   ├── bgsegm.cpp
│   ├── bgsegm.go
│   ├── bgsegm.h
│   ├── bgsegm_test.go
│   ├── cgo.go
│   ├── cgo_static.go
│   ├── cgo_static_darwin.go
│   ├── cgo_static_windows.go
│   ├── core.cpp
│   ├── core.go
│   ├── core.h
│   ├── cuda.cpp
│   ├── cuda.go
│   ├── cuda.h
│   ├── cuda_test.go
│   ├── errors.go
│   ├── filters.cpp
│   ├── filters.go
│   ├── filters.h
│   ├── filters_test.go
│   ├── helpers_test.go
│   ├── imgproc.cpp
│   ├── imgproc.go
│   ├── imgproc.h
│   ├── imgproc_alphacomptypes.go
│   ├── imgproc_test.go
│   ├── objdetect.cpp
│   ├── objdetect.go
│   ├── objdetect.h
│   ├── optflow.cpp
│   ├── optflow.go
│   ├── optflow.h
│   ├── optflow_test.go
│   ├── warping.cpp
│   ├── warping.go
│   ├── warping.h
│   ├── warping_string.go
│   └── warping_test.go
├── data/
│   └── haarcascade_frontalface_default.xml
├── dnn.cpp
├── dnn.go
├── dnn.h
├── dnn_async_openvino.go
├── dnn_ext.go
├── dnn_string.go
├── dnn_test.go
├── env.cmd
├── env.sh
├── features2d.cpp
├── features2d.go
├── features2d.h
├── features2d_string.go
├── features2d_test.go
├── go.mod
├── go.sum
├── gocv.go
├── helpers_test.go
├── highgui.cpp
├── highgui.go
├── highgui_gocv.h
├── highgui_onmouse_test.go
├── highgui_string.go
├── highgui_test.go
├── images/
│   └── multipage.tif
├── imgcodecs.cpp
├── imgcodecs.go
├── imgcodecs.h
├── imgcodecs_test.go
├── imgproc.cpp
├── imgproc.go
├── imgproc.h
├── imgproc_colorcodes.go
├── imgproc_colorcodes_string.go
├── imgproc_string.go
├── imgproc_test.go
├── mat_noprofile.go
├── mat_profile.go
├── matprofile_test.go
├── objdetect.cpp
├── objdetect.go
├── objdetect.h
├── objdetect_test.go
├── openvino/
│   ├── README.md
│   ├── env.sh
│   ├── ie/
│   │   ├── README.md
│   │   ├── ie.go
│   │   ├── inference_engine.cpp
│   │   ├── inference_engine.go
│   │   ├── inference_engine.h
│   │   └── inference_engine_test.go
│   └── openvino.go
├── patches/
│   └── gstreamer-full.patch
├── persistence.h
├── persistence_filenode.cpp
├── persistence_filenode.go
├── persistence_filestorage.cpp
├── persistence_filestorage.go
├── persistence_test.go
├── photo.cpp
├── photo.go
├── photo.h
├── photo_string.go
├── photo_test.go
├── svd.cpp
├── svd.go
├── svd.h
├── svd_test.go
├── version.cpp
├── version.go
├── version.h
├── version_test.go
├── video.cpp
├── video.go
├── video.h
├── video_test.go
├── videoio.cpp
├── videoio.go
├── videoio.h
├── videoio_string.go
├── videoio_test.go
├── win_build_opencv.cmd
└── win_download_opencv.cmd
Download .txt
Showing preview only (398K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (4394 symbols across 198 files)

FILE: aruco.cpp
  function ArucoDetector (line 5) | ArucoDetector ArucoDetector_New() {
  function ArucoDetector (line 14) | ArucoDetector ArucoDetector_NewWithParams(ArucoDictionary dictionary, Ar...
  function ArucoDetector_Close (line 23) | void ArucoDetector_Close(ArucoDetector ad) {
  function ArucoDetector_DetectMarkers (line 27) | void ArucoDetector_DetectMarkers(ArucoDetector ad, Mat inputArr, Points2...
  function ArucoDetectorParameters (line 46) | ArucoDetectorParameters ArucoDetectorParameters_Create()
  function ArucoDetectorParameters_SetAdaptiveThreshWinSizeMin (line 56) | void ArucoDetectorParameters_SetAdaptiveThreshWinSizeMin(ArucoDetectorPa...
  function ArucoDetectorParameters_GetAdaptiveThreshWinSizeMin (line 60) | int ArucoDetectorParameters_GetAdaptiveThreshWinSizeMin(ArucoDetectorPar...
  function ArucoDetectorParameters_SetAdaptiveThreshWinSizeMax (line 64) | void ArucoDetectorParameters_SetAdaptiveThreshWinSizeMax(ArucoDetectorPa...
  function ArucoDetectorParameters_GetAdaptiveThreshWinSizeMax (line 68) | int ArucoDetectorParameters_GetAdaptiveThreshWinSizeMax(ArucoDetectorPar...
  function ArucoDetectorParameters_SetAdaptiveThreshWinSizeStep (line 72) | void ArucoDetectorParameters_SetAdaptiveThreshWinSizeStep(ArucoDetectorP...
  function ArucoDetectorParameters_GetAdaptiveThreshWinSizeStep (line 76) | int ArucoDetectorParameters_GetAdaptiveThreshWinSizeStep(ArucoDetectorPa...
  function ArucoDetectorParameters_SetAdaptiveThreshConstant (line 80) | void ArucoDetectorParameters_SetAdaptiveThreshConstant(ArucoDetectorPara...
  function ArucoDetectorParameters_GetAdaptiveThreshConstant (line 84) | double ArucoDetectorParameters_GetAdaptiveThreshConstant(ArucoDetectorPa...
  function ArucoDetectorParameters_SetMinMarkerPerimeterRate (line 88) | void ArucoDetectorParameters_SetMinMarkerPerimeterRate(ArucoDetectorPara...
  function ArucoDetectorParameters_GetMinMarkerPerimeterRate (line 92) | double ArucoDetectorParameters_GetMinMarkerPerimeterRate(ArucoDetectorPa...
  function ArucoDetectorParameters_SetMaxMarkerPerimeterRate (line 96) | void ArucoDetectorParameters_SetMaxMarkerPerimeterRate(ArucoDetectorPara...
  function ArucoDetectorParameters_GetMaxMarkerPerimeterRate (line 100) | double ArucoDetectorParameters_GetMaxMarkerPerimeterRate(ArucoDetectorPa...
  function ArucoDetectorParameters_SetPolygonalApproxAccuracyRate (line 104) | void ArucoDetectorParameters_SetPolygonalApproxAccuracyRate(ArucoDetecto...
  function ArucoDetectorParameters_GetPolygonalApproxAccuracyRate (line 108) | double ArucoDetectorParameters_GetPolygonalApproxAccuracyRate(ArucoDetec...
  function ArucoDetectorParameters_SetMinCornerDistanceRate (line 112) | void ArucoDetectorParameters_SetMinCornerDistanceRate(ArucoDetectorParam...
  function ArucoDetectorParameters_GetMinCornerDistanceRate (line 116) | double ArucoDetectorParameters_GetMinCornerDistanceRate(ArucoDetectorPar...
  function ArucoDetectorParameters_SetMinDistanceToBorder (line 120) | void ArucoDetectorParameters_SetMinDistanceToBorder(ArucoDetectorParamet...
  function ArucoDetectorParameters_GetMinDistanceToBorder (line 124) | int ArucoDetectorParameters_GetMinDistanceToBorder(ArucoDetectorParamete...
  function ArucoDetectorParameters_SetMinMarkerDistanceRate (line 128) | void ArucoDetectorParameters_SetMinMarkerDistanceRate(ArucoDetectorParam...
  function ArucoDetectorParameters_GetMinMarkerDistanceRate (line 132) | double ArucoDetectorParameters_GetMinMarkerDistanceRate(ArucoDetectorPar...
  function ArucoDetectorParameters_SetCornerRefinementMethod (line 136) | void ArucoDetectorParameters_SetCornerRefinementMethod(ArucoDetectorPara...
  function ArucoDetectorParameters_GetCornerRefinementMethod (line 140) | int ArucoDetectorParameters_GetCornerRefinementMethod(ArucoDetectorParam...
  function ArucoDetectorParameters_SetCornerRefinementWinSize (line 144) | void ArucoDetectorParameters_SetCornerRefinementWinSize(ArucoDetectorPar...
  function ArucoDetectorParameters_GetCornerRefinementWinSize (line 148) | int ArucoDetectorParameters_GetCornerRefinementWinSize(ArucoDetectorPara...
  function ArucoDetectorParameters_SetCornerRefinementMaxIterations (line 152) | void ArucoDetectorParameters_SetCornerRefinementMaxIterations(ArucoDetec...
  function ArucoDetectorParameters_GetCornerRefinementMaxIterations (line 156) | int ArucoDetectorParameters_GetCornerRefinementMaxIterations(ArucoDetect...
  function ArucoDetectorParameters_SetCornerRefinementMinAccuracy (line 160) | void ArucoDetectorParameters_SetCornerRefinementMinAccuracy(ArucoDetecto...
  function ArucoDetectorParameters_GetCornerRefinementMinAccuracy (line 164) | double ArucoDetectorParameters_GetCornerRefinementMinAccuracy(ArucoDetec...
  function ArucoDetectorParameters_SetMarkerBorderBits (line 168) | void ArucoDetectorParameters_SetMarkerBorderBits(ArucoDetectorParameters...
  function ArucoDetectorParameters_GetMarkerBorderBits (line 172) | int ArucoDetectorParameters_GetMarkerBorderBits(ArucoDetectorParameters ...
  function ArucoDetectorParameters_SetPerspectiveRemovePixelPerCell (line 176) | void ArucoDetectorParameters_SetPerspectiveRemovePixelPerCell(ArucoDetec...
  function ArucoDetectorParameters_GetPerspectiveRemovePixelPerCell (line 180) | int ArucoDetectorParameters_GetPerspectiveRemovePixelPerCell(ArucoDetect...
  function ArucoDetectorParameters_SetPerspectiveRemoveIgnoredMarginPerCell (line 184) | void ArucoDetectorParameters_SetPerspectiveRemoveIgnoredMarginPerCell(Ar...
  function ArucoDetectorParameters_GetPerspectiveRemoveIgnoredMarginPerCell (line 188) | double ArucoDetectorParameters_GetPerspectiveRemoveIgnoredMarginPerCell(...
  function ArucoDetectorParameters_SetMaxErroneousBitsInBorderRate (line 192) | void ArucoDetectorParameters_SetMaxErroneousBitsInBorderRate(ArucoDetect...
  function ArucoDetectorParameters_GetMaxErroneousBitsInBorderRate (line 196) | double ArucoDetectorParameters_GetMaxErroneousBitsInBorderRate(ArucoDete...
  function ArucoDetectorParameters_SetMinOtsuStdDev (line 200) | void ArucoDetectorParameters_SetMinOtsuStdDev(ArucoDetectorParameters ap...
  function ArucoDetectorParameters_GetMinOtsuStdDev (line 204) | double ArucoDetectorParameters_GetMinOtsuStdDev(ArucoDetectorParameters ...
  function ArucoDetectorParameters_SetErrorCorrectionRate (line 208) | void ArucoDetectorParameters_SetErrorCorrectionRate(ArucoDetectorParamet...
  function ArucoDetectorParameters_GetErrorCorrectionRate (line 212) | double ArucoDetectorParameters_GetErrorCorrectionRate(ArucoDetectorParam...
  function ArucoDetectorParameters_SetAprilTagQuadDecimate (line 216) | void ArucoDetectorParameters_SetAprilTagQuadDecimate(ArucoDetectorParame...
  function ArucoDetectorParameters_GetAprilTagQuadDecimate (line 220) | float ArucoDetectorParameters_GetAprilTagQuadDecimate(ArucoDetectorParam...
  function ArucoDetectorParameters_SetAprilTagQuadSigma (line 224) | void ArucoDetectorParameters_SetAprilTagQuadSigma(ArucoDetectorParameter...
  function ArucoDetectorParameters_GetAprilTagQuadSigma (line 228) | float ArucoDetectorParameters_GetAprilTagQuadSigma(ArucoDetectorParamete...
  function ArucoDetectorParameters_SetAprilTagMinClusterPixels (line 232) | void ArucoDetectorParameters_SetAprilTagMinClusterPixels(ArucoDetectorPa...
  function ArucoDetectorParameters_GetAprilTagMinClusterPixels (line 236) | int ArucoDetectorParameters_GetAprilTagMinClusterPixels(ArucoDetectorPar...
  function ArucoDetectorParameters_SetAprilTagMaxNmaxima (line 240) | void ArucoDetectorParameters_SetAprilTagMaxNmaxima(ArucoDetectorParamete...
  function ArucoDetectorParameters_GetAprilTagMaxNmaxima (line 244) | int ArucoDetectorParameters_GetAprilTagMaxNmaxima(ArucoDetectorParameter...
  function ArucoDetectorParameters_SetAprilTagCriticalRad (line 248) | void ArucoDetectorParameters_SetAprilTagCriticalRad(ArucoDetectorParamet...
  function ArucoDetectorParameters_GetAprilTagCriticalRad (line 252) | float ArucoDetectorParameters_GetAprilTagCriticalRad(ArucoDetectorParame...
  function ArucoDetectorParameters_SetAprilTagMaxLineFitMse (line 256) | void ArucoDetectorParameters_SetAprilTagMaxLineFitMse(ArucoDetectorParam...
  function ArucoDetectorParameters_GetAprilTagMaxLineFitMse (line 260) | float ArucoDetectorParameters_GetAprilTagMaxLineFitMse(ArucoDetectorPara...
  function ArucoDetectorParameters_SetAprilTagMinWhiteBlackDiff (line 264) | void ArucoDetectorParameters_SetAprilTagMinWhiteBlackDiff(ArucoDetectorP...
  function ArucoDetectorParameters_GetAprilTagMinWhiteBlackDiff (line 268) | int ArucoDetectorParameters_GetAprilTagMinWhiteBlackDiff(ArucoDetectorPa...
  function ArucoDetectorParameters_SetAprilTagDeglitch (line 272) | void ArucoDetectorParameters_SetAprilTagDeglitch(ArucoDetectorParameters...
  function ArucoDetectorParameters_GetAprilTagDeglitch (line 276) | int ArucoDetectorParameters_GetAprilTagDeglitch(ArucoDetectorParameters ...
  function ArucoDetectorParameters_SetDetectInvertedMarker (line 280) | void ArucoDetectorParameters_SetDetectInvertedMarker(ArucoDetectorParame...
  function ArucoDetectorParameters_GetDetectInvertedMarker (line 284) | bool ArucoDetectorParameters_GetDetectInvertedMarker(ArucoDetectorParame...
  function OpenCVResult (line 288) | OpenCVResult ArucoDrawDetectedMarkers(Mat image, Points2fVector markerCo...
  function OpenCVResult (line 304) | OpenCVResult ArucoGenerateImageMarker(int dictionaryId, int id, int side...
  function ArucoDictionary (line 315) | ArucoDictionary getPredefinedDictionary(int dictionaryId)

FILE: aruco.go
  type ArucoDetector (line 17) | type ArucoDetector struct
    method Close (line 32) | func (a *ArucoDetector) Close() error {
    method DetectMarkers (line 42) | func (a *ArucoDetector) DetectMarkers(input Mat) (
  function NewArucoDetector (line 22) | func NewArucoDetector() ArucoDetector {
  function NewArucoDetectorWithParams (line 27) | func NewArucoDetectorWithParams(dictionary ArucoDictionary, params Aruco...
  function ArucoDrawDetectedMarkers (line 70) | func ArucoDrawDetectedMarkers(img Mat, markerCorners [][]Point2f, marker...
  function ArucoGenerateImageMarker (line 96) | func ArucoGenerateImageMarker(dictionaryId ArucoDictionaryCode, id int, ...
  type ArucoDetectorParameters (line 100) | type ArucoDetectorParameters struct
    method SetAdaptiveThreshWinSizeMin (line 109) | func (ap *ArucoDetectorParameters) SetAdaptiveThreshWinSizeMin(adaptiv...
    method GetAdaptiveThreshWinSizeMin (line 113) | func (ap *ArucoDetectorParameters) GetAdaptiveThreshWinSizeMin() int {
    method SetAdaptiveThreshWinSizeMax (line 117) | func (ap *ArucoDetectorParameters) SetAdaptiveThreshWinSizeMax(adaptiv...
    method GetAdaptiveThreshWinSizeMax (line 121) | func (ap *ArucoDetectorParameters) GetAdaptiveThreshWinSizeMax() int {
    method SetAdaptiveThreshWinSizeStep (line 125) | func (ap *ArucoDetectorParameters) SetAdaptiveThreshWinSizeStep(adapti...
    method GetAdaptiveThreshWinSizeStep (line 129) | func (ap *ArucoDetectorParameters) GetAdaptiveThreshWinSizeStep() int {
    method SetAdaptiveThreshConstant (line 133) | func (ap *ArucoDetectorParameters) SetAdaptiveThreshConstant(adaptiveT...
    method GetAdaptiveThreshConstant (line 137) | func (ap *ArucoDetectorParameters) GetAdaptiveThreshConstant() float64 {
    method SetMinMarkerPerimeterRate (line 141) | func (ap *ArucoDetectorParameters) SetMinMarkerPerimeterRate(minMarker...
    method GetMinMarkerPerimeterRate (line 145) | func (ap *ArucoDetectorParameters) GetMinMarkerPerimeterRate() float64 {
    method SetMaxMarkerPerimeterRate (line 149) | func (ap *ArucoDetectorParameters) SetMaxMarkerPerimeterRate(maxMarker...
    method GetMaxMarkerPerimeterRate (line 153) | func (ap *ArucoDetectorParameters) GetMaxMarkerPerimeterRate() float64 {
    method SetPolygonalApproxAccuracyRate (line 157) | func (ap *ArucoDetectorParameters) SetPolygonalApproxAccuracyRate(poly...
    method GetPolygonalApproxAccuracyRate (line 161) | func (ap *ArucoDetectorParameters) GetPolygonalApproxAccuracyRate() fl...
    method SetMinCornerDistanceRate (line 165) | func (ap *ArucoDetectorParameters) SetMinCornerDistanceRate(minCornerD...
    method GetMinCornerDistanceRate (line 169) | func (ap *ArucoDetectorParameters) GetMinCornerDistanceRate() float64 {
    method SetMinDistanceToBorder (line 173) | func (ap *ArucoDetectorParameters) SetMinDistanceToBorder(minDistanceT...
    method GetMinDistanceToBorder (line 177) | func (ap *ArucoDetectorParameters) GetMinDistanceToBorder() int {
    method SetMinMarkerDistanceRate (line 181) | func (ap *ArucoDetectorParameters) SetMinMarkerDistanceRate(minMarkerD...
    method GetMinMarkerDistanceRate (line 185) | func (ap *ArucoDetectorParameters) GetMinMarkerDistanceRate() float64 {
    method SetCornerRefinementMethod (line 189) | func (ap *ArucoDetectorParameters) SetCornerRefinementMethod(cornerRef...
    method GetCornerRefinementMethod (line 193) | func (ap *ArucoDetectorParameters) GetCornerRefinementMethod() int {
    method SetCornerRefinementWinSize (line 197) | func (ap *ArucoDetectorParameters) SetCornerRefinementWinSize(cornerRe...
    method GetCornerRefinementWinSize (line 201) | func (ap *ArucoDetectorParameters) GetCornerRefinementWinSize() int {
    method SetCornerRefinementMaxIterations (line 205) | func (ap *ArucoDetectorParameters) SetCornerRefinementMaxIterations(co...
    method GetCornerRefinementMaxIterations (line 209) | func (ap *ArucoDetectorParameters) GetCornerRefinementMaxIterations() ...
    method SetCornerRefinementMinAccuracy (line 213) | func (ap *ArucoDetectorParameters) SetCornerRefinementMinAccuracy(corn...
    method GetCornerRefinementMinAccuracy (line 217) | func (ap *ArucoDetectorParameters) GetCornerRefinementMinAccuracy() fl...
    method SetMarkerBorderBits (line 221) | func (ap *ArucoDetectorParameters) SetMarkerBorderBits(markerBorderBit...
    method GetMarkerBorderBits (line 225) | func (ap *ArucoDetectorParameters) GetMarkerBorderBits() int {
    method SetPerspectiveRemovePixelPerCell (line 229) | func (ap *ArucoDetectorParameters) SetPerspectiveRemovePixelPerCell(pe...
    method GetPerspectiveRemovePixelPerCell (line 233) | func (ap *ArucoDetectorParameters) GetPerspectiveRemovePixelPerCell() ...
    method SetPerspectiveRemoveIgnoredMarginPerCell (line 237) | func (ap *ArucoDetectorParameters) SetPerspectiveRemoveIgnoredMarginPe...
    method GetPerspectiveRemoveIgnoredMarginPerCell (line 241) | func (ap *ArucoDetectorParameters) GetPerspectiveRemoveIgnoredMarginPe...
    method SetMaxErroneousBitsInBorderRate (line 245) | func (ap *ArucoDetectorParameters) SetMaxErroneousBitsInBorderRate(max...
    method GetMaxErroneousBitsInBorderRate (line 249) | func (ap *ArucoDetectorParameters) GetMaxErroneousBitsInBorderRate() f...
    method SetMinOtsuStdDev (line 253) | func (ap *ArucoDetectorParameters) SetMinOtsuStdDev(minOtsuStdDev floa...
    method GetMinOtsuStdDev (line 257) | func (ap *ArucoDetectorParameters) GetMinOtsuStdDev() float64 {
    method SetErrorCorrectionRate (line 261) | func (ap *ArucoDetectorParameters) SetErrorCorrectionRate(errorCorrect...
    method GetErrorCorrectionRate (line 265) | func (ap *ArucoDetectorParameters) GetErrorCorrectionRate() float64 {
    method SetAprilTagQuadDecimate (line 269) | func (ap *ArucoDetectorParameters) SetAprilTagQuadDecimate(aprilTagQua...
    method GetAprilTagQuadDecimate (line 273) | func (ap *ArucoDetectorParameters) GetAprilTagQuadDecimate() float32 {
    method SetAprilTagQuadSigma (line 277) | func (ap *ArucoDetectorParameters) SetAprilTagQuadSigma(aprilTagQuadSi...
    method GetAprilTagQuadSigma (line 281) | func (ap *ArucoDetectorParameters) GetAprilTagQuadSigma() float32 {
    method SetAprilTagMinClusterPixels (line 285) | func (ap *ArucoDetectorParameters) SetAprilTagMinClusterPixels(aprilTa...
    method GetAprilTagMinClusterPixels (line 289) | func (ap *ArucoDetectorParameters) GetAprilTagMinClusterPixels() int {
    method SetAprilTagMaxNmaxima (line 293) | func (ap *ArucoDetectorParameters) SetAprilTagMaxNmaxima(aprilTagMaxNm...
    method GetAprilTagMaxNmaxima (line 297) | func (ap *ArucoDetectorParameters) GetAprilTagMaxNmaxima() int {
    method SetAprilTagCriticalRad (line 301) | func (ap *ArucoDetectorParameters) SetAprilTagCriticalRad(aprilTagCrit...
    method GetAprilTagCriticalRad (line 305) | func (ap *ArucoDetectorParameters) GetAprilTagCriticalRad() float32 {
    method SetAprilTagMaxLineFitMse (line 309) | func (ap *ArucoDetectorParameters) SetAprilTagMaxLineFitMse(aprilTagMa...
    method GetAprilTagMaxLineFitMse (line 313) | func (ap *ArucoDetectorParameters) GetAprilTagMaxLineFitMse() float32 {
    method SetAprilTagMinWhiteBlackDiff (line 317) | func (ap *ArucoDetectorParameters) SetAprilTagMinWhiteBlackDiff(aprilT...
    method GetAprilTagMinWhiteBlackDiff (line 321) | func (ap *ArucoDetectorParameters) GetAprilTagMinWhiteBlackDiff() int {
    method SetAprilTagDeglitch (line 325) | func (ap *ArucoDetectorParameters) SetAprilTagDeglitch(aprilTagDeglitc...
    method GetAprilTagDeglitch (line 329) | func (ap *ArucoDetectorParameters) GetAprilTagDeglitch() int {
    method SetDetectInvertedMarker (line 333) | func (ap *ArucoDetectorParameters) SetDetectInvertedMarker(detectInver...
    method GetDetectInvertedMarker (line 337) | func (ap *ArucoDetectorParameters) GetDetectInvertedMarker() bool {
  function NewArucoDetectorParameters (line 105) | func NewArucoDetectorParameters() ArucoDetectorParameters {

FILE: aruco.h
  type cv (line 12) | typedef cv::aruco::Dictionary* ArucoDictionary;
  type cv (line 13) | typedef cv::aruco::DetectorParameters* ArucoDetectorParameters;
  type cv (line 14) | typedef cv::aruco::ArucoDetector* ArucoDetector;

FILE: aruco_dictionaries.go
  type ArucoDictionaryCode (line 12) | type ArucoDictionaryCode
  constant ArucoDict4x4_50 (line 15) | ArucoDict4x4_50         ArucoDictionaryCode = iota
  constant ArucoDict4x4_100 (line 16) | ArucoDict4x4_100        ArucoDictionaryCode = iota
  constant ArucoDict4x4_250 (line 17) | ArucoDict4x4_250        ArucoDictionaryCode = iota
  constant ArucoDict4x4_1000 (line 18) | ArucoDict4x4_1000       ArucoDictionaryCode = iota
  constant ArucoDict5x5_50 (line 19) | ArucoDict5x5_50         ArucoDictionaryCode = iota
  constant ArucoDict5x5_100 (line 20) | ArucoDict5x5_100        ArucoDictionaryCode = iota
  constant ArucoDict5x5_250 (line 21) | ArucoDict5x5_250        ArucoDictionaryCode = iota
  constant ArucoDict5x5_1000 (line 22) | ArucoDict5x5_1000       ArucoDictionaryCode = iota
  constant ArucoDict6x6_50 (line 23) | ArucoDict6x6_50         ArucoDictionaryCode = iota
  constant ArucoDict6x6_100 (line 24) | ArucoDict6x6_100        ArucoDictionaryCode = iota
  constant ArucoDict6x6_250 (line 25) | ArucoDict6x6_250        ArucoDictionaryCode = iota
  constant ArucoDict6x6_1000 (line 26) | ArucoDict6x6_1000       ArucoDictionaryCode = iota
  constant ArucoDict7x7_50 (line 27) | ArucoDict7x7_50         ArucoDictionaryCode = iota
  constant ArucoDict7x7_100 (line 28) | ArucoDict7x7_100        ArucoDictionaryCode = iota
  constant ArucoDict7x7_250 (line 29) | ArucoDict7x7_250        ArucoDictionaryCode = iota
  constant ArucoDict7x7_1000 (line 30) | ArucoDict7x7_1000       ArucoDictionaryCode = iota
  constant ArucoDictArucoOriginal (line 31) | ArucoDictArucoOriginal  ArucoDictionaryCode = iota
  constant ArucoDictAprilTag_16h5 (line 32) | ArucoDictAprilTag_16h5  ArucoDictionaryCode = iota
  constant ArucoDictAprilTag_25h9 (line 33) | ArucoDictAprilTag_25h9  ArucoDictionaryCode = iota
  constant ArucoDictAprilTag_36h10 (line 34) | ArucoDictAprilTag_36h10 ArucoDictionaryCode = iota
  constant ArucoDictAprilTag_36h11 (line 35) | ArucoDictAprilTag_36h11 ArucoDictionaryCode = iota
  type ArucoDictionary (line 38) | type ArucoDictionary struct
  function GetPredefinedDictionary (line 42) | func GetPredefinedDictionary(dictionaryId ArucoDictionaryCode) ArucoDict...

FILE: aruco_test.go
  constant arucoImage6X6_250 (line 13) | arucoImage6X6_250         = "./images/aruco_6X6_250_6.png"
  constant arucoImage6X6_250_contour (line 14) | arucoImage6X6_250_contour = "./images/aruco_6X6_250_6_contour.png"
  constant arucoImage6X6_250_1 (line 15) | arucoImage6X6_250_1       = "./images/aruco_6X6_250_1.png"
  function TestArucoDetectorParams (line 18) | func TestArucoDetectorParams(t *testing.T) {
  function TestDetectMarkers (line 170) | func TestDetectMarkers(t *testing.T) {
  function TestDrawDetectedMarkers (line 190) | func TestDrawDetectedMarkers(t *testing.T) {
  function TestArucoGenerateImageMarker (line 225) | func TestArucoGenerateImageMarker(t *testing.T) {

FILE: asyncarray.cpp
  function AsyncArray (line 8) | AsyncArray AsyncArray_New() {
  function AsyncArray_Close (line 18) | void AsyncArray_Close(AsyncArray a) {
  function AsyncArray (line 31) | AsyncArray Net_forwardAsync(Net net, const char* outputName) {

FILE: asyncarray.go
  type AsyncArray (line 18) | type AsyncArray struct
    method Ptr (line 28) | func (a *AsyncArray) Ptr() C.AsyncArray {
    method Get (line 33) | func (m *AsyncArray) Get(mat *Mat) error {
    method Close (line 49) | func (a *AsyncArray) Close() error {
  function NewAsyncArray (line 23) | func NewAsyncArray() AsyncArray {
  function newAsyncArray (line 44) | func newAsyncArray(p C.AsyncArray) AsyncArray {

FILE: asyncarray.h
  type cv (line 10) | typedef cv::AsyncArray* AsyncArray;

FILE: asyncarray_test.go
  function TestAsyncArray (line 10) | func TestAsyncArray(t *testing.T) {

FILE: calib3d.cpp
  function Fisheye_Calibrate (line 5) | double Fisheye_Calibrate(Points3fVector objectPoints, Points2fVector ima...
  function OpenCVResult (line 15) | OpenCVResult Fisheye_DistortPoints(Mat undistorted, Mat distorted, Mat k...
  function OpenCVResult (line 24) | OpenCVResult Fisheye_UndistortImage(Mat distorted, Mat undistorted, Mat ...
  function OpenCVResult (line 33) | OpenCVResult Fisheye_UndistortImageWithParams(Mat distorted, Mat undisto...
  function OpenCVResult (line 43) | OpenCVResult Fisheye_UndistortPoints(Mat distorted, Mat undistorted, Mat...
  function OpenCVResult (line 52) | OpenCVResult Fisheye_EstimateNewCameraMatrixForUndistortRectify(Mat k, M...
  function OpenCVResult (line 63) | OpenCVResult InitUndistortRectifyMap(Mat cameraMatrix,Mat distCoeffs,Mat...
  function Mat (line 73) | Mat GetOptimalNewCameraMatrixWithParams(Mat cameraMatrix,Mat distCoeffs,...
  function CalibrateCamera (line 90) | double CalibrateCamera(Points3fVector objectPoints, Points2fVector image...
  function OpenCVResult (line 99) | OpenCVResult Undistort(Mat src, Mat dst, Mat cameraMatrix, Mat distCoeff...
  function OpenCVResult (line 108) | OpenCVResult UndistortPoints(Mat distorted, Mat undistorted, Mat k, Mat ...
  function CheckChessboard (line 117) | bool CheckChessboard(Mat image, Size size) {
  function FindChessboardCorners (line 127) | bool FindChessboardCorners(Mat image, Size patternSize, Mat corners, int...
  function FindChessboardCornersSB (line 137) | bool FindChessboardCornersSB(Mat image, Size patternSize, Mat corners, i...
  function FindChessboardCornersSBWithMeta (line 147) | bool FindChessboardCornersSBWithMeta(Mat image, Size patternSize, Mat co...
  function OpenCVResult (line 157) | OpenCVResult DrawChessboardCorners(Mat image, Size patternSize, Mat corn...
  function Mat (line 167) | Mat EstimateAffinePartial2D(Point2fVector from, Point2fVector to) {
  function Mat (line 176) | Mat EstimateAffinePartial2DWithParams(Point2fVector from, Point2fVector ...
  function Mat (line 185) | Mat EstimateAffine2D(Point2fVector from, Point2fVector to) {
  function Mat (line 194) | Mat EstimateAffine2DWithParams(Point2fVector from, Point2fVector to, Mat...
  function OpenCVResult (line 203) | OpenCVResult TriangulatePoints(Mat projMatr1, Mat projMatr2, Point2fVect...
  function OpenCVResult (line 212) | OpenCVResult ConvertPointsFromHomogeneous(Mat src, Mat dst) {
  function OpenCVResult (line 221) | OpenCVResult Rodrigues(Mat src, Mat dst) {
  function SolvePnP (line 230) | bool SolvePnP(Point3fVector objectPoints, Point2fVector imagePoints, Mat...
  function OpenCVResult (line 239) | OpenCVResult StereoRectify(Mat cameraMatrix1, Mat distCoeffs1, Mat camer...
  function Mat (line 248) | Mat FindHomography(Mat src, Mat dst, int method, double ransacReprojThre...

FILE: calib3d.go
  type CalibFlag (line 21) | type CalibFlag
  constant CalibUseIntrinsicGuess (line 28) | CalibUseIntrinsicGuess CalibFlag = 1 << iota
  constant CalibRecomputeExtrinsic (line 32) | CalibRecomputeExtrinsic
  constant CalibCheckCond (line 35) | CalibCheckCond
  constant CalibFixSkew (line 38) | CalibFixSkew
  constant CalibFixK1 (line 41) | CalibFixK1
  constant CalibFixK2 (line 44) | CalibFixK2
  constant CalibFixK3 (line 47) | CalibFixK3
  constant CalibFixK4 (line 50) | CalibFixK4
  constant CalibFixIntrinsic (line 53) | CalibFixIntrinsic
  constant CalibFixPrincipalPoint (line 57) | CalibFixPrincipalPoint
  type CalibFlagPinhole (line 64) | type CalibFlagPinhole
  constant CalibFlagPinholeNIntrinsic (line 67) | CalibFlagPinholeNIntrinsic        CalibFlagPinhole = 18
  constant CalibFlagPinholeUseIntrinsicGuess (line 68) | CalibFlagPinholeUseIntrinsicGuess CalibFlagPinhole = 0x00001
  constant CalibFlagPinholeFixAspectRatio (line 69) | CalibFlagPinholeFixAspectRatio    CalibFlagPinhole = 0x00002
  constant CalibFlagPinholeFixPrincipalPoint (line 70) | CalibFlagPinholeFixPrincipalPoint CalibFlagPinhole = 0x00004
  constant CalibFlagPinholeZeroTangentDist (line 71) | CalibFlagPinholeZeroTangentDist   CalibFlagPinhole = 0x00008
  constant CalibFlagPinholeFixFocalLength (line 72) | CalibFlagPinholeFixFocalLength    CalibFlagPinhole = 0x00010
  constant CalibFlagPinholeFixK1 (line 73) | CalibFlagPinholeFixK1             CalibFlagPinhole = 0x00020
  constant CalibFlagPinholeFixK2 (line 74) | CalibFlagPinholeFixK2             CalibFlagPinhole = 0x00040
  constant CalibFlagPinholeFixK3 (line 75) | CalibFlagPinholeFixK3             CalibFlagPinhole = 0x00080
  constant CalibFlagPinholeFixK4 (line 76) | CalibFlagPinholeFixK4             CalibFlagPinhole = 0x00800
  constant CalibFlagPinholeFixK5 (line 77) | CalibFlagPinholeFixK5             CalibFlagPinhole = 0x01000
  constant CalibFlagPinholeFixK6 (line 78) | CalibFlagPinholeFixK6             CalibFlagPinhole = 0x02000
  constant CalibFlagPinholeRationalModel (line 79) | CalibFlagPinholeRationalModel     CalibFlagPinhole = 0x04000
  constant CalibFlagPinholeThinPrismModel (line 80) | CalibFlagPinholeThinPrismModel    CalibFlagPinhole = 0x08000
  constant CalibFlagPinholeFixS1S2S3S4 (line 81) | CalibFlagPinholeFixS1S2S3S4       CalibFlagPinhole = 0x10000
  constant CalibFlagPinholeTiltedModel (line 82) | CalibFlagPinholeTiltedModel       CalibFlagPinhole = 0x40000
  constant CalibFlagPinholeFixTauxTauy (line 83) | CalibFlagPinholeFixTauxTauy       CalibFlagPinhole = 0x80000
  constant CalibFlagPinholeUseQR (line 84) | CalibFlagPinholeUseQR             CalibFlagPinhole = 0x100000
  constant CalibFlagPinholeFixTangentDist (line 85) | CalibFlagPinholeFixTangentDist    CalibFlagPinhole = 0x200000
  constant CalibFlagPinholeFixIntrinsic (line 86) | CalibFlagPinholeFixIntrinsic      CalibFlagPinhole = 0x00100
  constant CalibFlagPinholeSameFocalLength (line 87) | CalibFlagPinholeSameFocalLength   CalibFlagPinhole = 0x00200
  constant CalibFlagPinholeZeroDisparity (line 88) | CalibFlagPinholeZeroDisparity     CalibFlagPinhole = 0x00400
  constant CalibFlagPinholeUseLU (line 89) | CalibFlagPinholeUseLU             CalibFlagPinhole = (1 << 17)
  constant CalibFlagPinholeUseExtrinsicGuess (line 90) | CalibFlagPinholeUseExtrinsicGuess CalibFlagPinhole = (1 << 22)
  function FisheyeCalibrate (line 97) | func FisheyeCalibrate(objectPoints Points3fVector, imagePoints Points2fV...
  function FisheyeDistortPoints (line 110) | func FisheyeDistortPoints(undistorted Mat, distorted *Mat, k, d Mat) err...
  function FisheyeUndistortImage (line 115) | func FisheyeUndistortImage(distorted Mat, undistorted *Mat, k, d Mat) er...
  function FisheyeUndistortImageWithParams (line 120) | func FisheyeUndistortImageWithParams(distorted Mat, undistorted *Mat, k,...
  function FisheyeUndistortPoints (line 132) | func FisheyeUndistortPoints(distorted Mat, undistorted *Mat, k, d, r, p ...
  function EstimateNewCameraMatrixForUndistortRectify (line 140) | func EstimateNewCameraMatrixForUndistortRectify(k, d Mat, imgSize image....
  function InitUndistortRectifyMap (line 156) | func InitUndistortRectifyMap(cameraMatrix Mat, distCoeffs Mat, r Mat, ne...
  function GetOptimalNewCameraMatrixWithParams (line 168) | func GetOptimalNewCameraMatrixWithParams(cameraMatrix Mat, distCoeffs Ma...
  function CalibrateCamera (line 185) | func CalibrateCamera(objectPoints Points3fVector, imagePoints Points2fVe...
  function Undistort (line 200) | func Undistort(src Mat, dst *Mat, cameraMatrix Mat, distCoeffs Mat, newC...
  function UndistortPoints (line 208) | func UndistortPoints(src Mat, dst *Mat, cameraMatrix, distCoeffs, rectif...
  function CheckChessboard (line 216) | func CheckChessboard(image Mat, size image.Point) bool {
  type CalibCBFlag (line 227) | type CalibCBFlag
  constant CalibCBAdaptiveThresh (line 232) | CalibCBAdaptiveThresh CalibCBFlag = 1 << iota
  constant CalibCBNormalizeImage (line 234) | CalibCBNormalizeImage
  constant CalibCBFilterQuads (line 236) | CalibCBFilterQuads
  constant CalibCBFastCheck (line 238) | CalibCBFastCheck
  constant CalibCBExhaustive (line 240) | CalibCBExhaustive
  constant CalibCBAccuracy (line 242) | CalibCBAccuracy
  constant CalibCBLarger (line 244) | CalibCBLarger
  constant CalibCBMarker (line 246) | CalibCBMarker
  function FindChessboardCorners (line 253) | func FindChessboardCorners(image Mat, patternSize image.Point, corners *...
  function FindChessboardCornersSB (line 265) | func FindChessboardCornersSB(image Mat, patternSize image.Point, corners...
  function FindChessboardCornersSBWithMeta (line 277) | func FindChessboardCornersSBWithMeta(image Mat, patternSize image.Point,...
  function DrawChessboardCorners (line 289) | func DrawChessboardCorners(image *Mat, patternSize image.Point, corners ...
  function EstimateAffinePartial2D (line 302) | func EstimateAffinePartial2D(from, to Point2fVector) Mat {
  function EstimateAffinePartial2DWithParams (line 312) | func EstimateAffinePartial2DWithParams(from Point2fVector, to Point2fVec...
  function EstimateAffine2D (line 320) | func EstimateAffine2D(from, to Point2fVector) Mat {
  function EstimateAffine2DWithParams (line 329) | func EstimateAffine2DWithParams(from Point2fVector, to Point2fVector, in...
  function TriangulatePoints (line 338) | func TriangulatePoints(projMatr1, projMatr2 Mat, projPoints1, projPoints...
  function ConvertPointsFromHomogeneous (line 346) | func ConvertPointsFromHomogeneous(src Mat, dst *Mat) error {
  function Rodrigues (line 354) | func Rodrigues(src Mat, dst *Mat) error {
  function SolvePnP (line 362) | func SolvePnP(objectPoints Point3fVector, imagePoints Point2fVector, cam...
  function StereoRectify (line 370) | func StereoRectify(cameraMatrix1, distCoeffs1, cameraMatrix2, distCoeffs...
  type HomographyMethod (line 378) | type HomographyMethod
  constant HomographyMethodAllPoints (line 381) | HomographyMethodAllPoints HomographyMethod = 0
  constant HomographyMethodLMEDS (line 382) | HomographyMethodLMEDS     HomographyMethod = 4
  constant HomographyMethodRANSAC (line 383) | HomographyMethodRANSAC    HomographyMethod = 8
  constant HomographyMethodRHO (line 384) | HomographyMethodRHO       HomographyMethod = 16
  function FindHomography (line 391) | func FindHomography(srcPoints Mat, targetPoints Mat, method HomographyMe...

FILE: calib3d_string.go
  method String (line 5) | func (c CalibFlag) String() string {
  method String (line 31) | func (c CalibCBFlag) String() string {

FILE: calib3d_test.go
  function TestFisheyeCalibrate (line 13) | func TestFisheyeCalibrate(t *testing.T) {
  function TestFisheyeDistortPoints (line 84) | func TestFisheyeDistortPoints(t *testing.T) {
  function TestFisheyeUndistorImage (line 141) | func TestFisheyeUndistorImage(t *testing.T) {
  function TestFisheyeUndistorImageWithParams (line 183) | func TestFisheyeUndistorImageWithParams(t *testing.T) {
  function TestInitUndistortRectifyMap (line 234) | func TestInitUndistortRectifyMap(t *testing.T) {
  function TestUndistort (line 292) | func TestUndistort(t *testing.T) {
  function TestUndistortPoint (line 342) | func TestUndistortPoint(t *testing.T) {
  function TestFisheyeUndistortPoint (line 412) | func TestFisheyeUndistortPoint(t *testing.T) {
  function TestCheckChessboard (line 482) | func TestCheckChessboard(t *testing.T) {
  function TestFindAndDrawChessboard (line 496) | func TestFindAndDrawChessboard(t *testing.T) {
  function TestFindAndDrawChessboardSB (line 526) | func TestFindAndDrawChessboardSB(t *testing.T) {
  function TestFindChessboardCornersSBWithMeta (line 556) | func TestFindChessboardCornersSBWithMeta(t *testing.T) {
  function TestCalibrateCamera (line 589) | func TestCalibrateCamera(t *testing.T) {
  function TestEstimateAffinePartial2D (line 668) | func TestEstimateAffinePartial2D(t *testing.T) {
  function TestEstimateAffinePartial2DWithParams (line 700) | func TestEstimateAffinePartial2DWithParams(t *testing.T) {
  function TestEstimateAffine2D (line 740) | func TestEstimateAffine2D(t *testing.T) {
  function TestEstimateAffine2DWithParams (line 772) | func TestEstimateAffine2DWithParams(t *testing.T) {
  function TestTriangulatePoints (line 812) | func TestTriangulatePoints(t *testing.T) {
  function TestConvertPointsFromHomogeneous (line 827) | func TestConvertPointsFromHomogeneous(t *testing.T) {
  function TestRodrigues (line 857) | func TestRodrigues(t *testing.T) {
  function TestSolvePnP (line 884) | func TestSolvePnP(t *testing.T) {
  function TestStereoRectify (line 928) | func TestStereoRectify(t *testing.T) {
  function TestFindHomography (line 1021) | func TestFindHomography(t *testing.T) {

FILE: cmd/asciicam/main.go
  constant FixedWidth (line 23) | FixedWidth = 80
  constant FixedHeight (line 26) | FixedHeight = 40
  function main (line 31) | func main() {

FILE: cmd/basic-drawing/main.go
  function main (line 22) | func main() {

FILE: cmd/caffe-classifier/main.go
  function main (line 37) | func main() {
  function readDescriptions (line 133) | func readDescriptions(path string) ([]string, error) {

FILE: cmd/captest/main.go
  function main (line 20) | func main() {

FILE: cmd/capwindow/main.go
  function main (line 20) | func main() {

FILE: cmd/counter/main.go
  function main (line 25) | func main() {

FILE: cmd/cuda/main.go
  function main (line 20) | func main() {

FILE: cmd/dnn-detection/main.go
  function main (line 40) | func main() {
  function performDetection (line 135) | func performDetection(frame *gocv.Mat, results gocv.Mat) {

FILE: cmd/dnn-pose-detection/main.go
  function main (line 41) | func main() {
  function processFrame (line 127) | func processFrame(i *gocv.Mat) {
  function performDetection (line 136) | func performDetection() {
  function drawPose (line 220) | func drawPose(frame *gocv.Mat) {

FILE: cmd/dnn-style-transfer/main.go
  function main (line 26) | func main() {

FILE: cmd/faceblur/main.go
  function main (line 24) | func main() {

FILE: cmd/facedetect-from-url/main.go
  function main (line 27) | func main() {

FILE: cmd/facedetect/main.go
  function main (line 24) | func main() {

FILE: cmd/facedetectYN/main.go
  function main (line 27) | func main() {

FILE: cmd/feature-matching/main.go
  function main (line 23) | func main() {

FILE: cmd/find-chessboard/main.go
  function main (line 20) | func main() {

FILE: cmd/find-circles/main.go
  function main (line 21) | func main() {

FILE: cmd/find-lines/main.go
  function main (line 22) | func main() {

FILE: cmd/gstreamer-writer/main.go
  constant gstreamerPipe (line 25) | gstreamerPipe = "appsrc ! videoconvert ! video/x-raw,format=YUY2,width=6...
  function main (line 28) | func main() {

FILE: cmd/hand-gestures/main.go
  constant MinimumArea (line 22) | MinimumArea = 3000
  function main (line 24) | func main() {
  function getBiggestContour (line 120) | func getBiggestContour(contours gocv.PointsVector) gocv.PointVector {

FILE: cmd/hello/main.go
  function main (line 7) | func main() {

FILE: cmd/img-similarity/main.go
  function setupHashes (line 36) | func setupHashes() []contrib.ImgHashBase {
  function main (line 72) | func main() {

FILE: cmd/kalman-filter/main.go
  function main (line 51) | func main() {

FILE: cmd/mjpeg-streamer/main.go
  function main (line 36) | func main() {
  function mjpegCapture (line 74) | func mjpegCapture() {

FILE: cmd/motion-detect/main.go
  constant MinimumArea (line 25) | MinimumArea = 3000
  function main (line 27) | func main() {

FILE: cmd/openvino/ie/version/main.go
  function main (line 19) | func main() {

FILE: cmd/saveimage/main.go
  function main (line 22) | func main() {

FILE: cmd/savevideo/main.go
  function main (line 22) | func main() {

FILE: cmd/showimage/main.go
  function main (line 20) | func main() {

FILE: cmd/ssd-facedetect/main.go
  function min (line 28) | func min(a, b float32) float32 {
  function max (line 35) | func max(a, b float32) float32 {
  function main (line 42) | func main() {

FILE: cmd/tf-classifier/main.go
  function main (line 31) | func main() {
  function readDescriptions (line 130) | func readDescriptions(path string) ([]string, error) {

FILE: cmd/tracking/main.go
  function main (line 29) | func main() {

FILE: cmd/version/main.go
  function main (line 18) | func main() {

FILE: cmd/xphoto/main.go
  function Inpaint (line 26) | func Inpaint() {
  function BalanceWhite (line 78) | func BalanceWhite() {
  function main (line 102) | func main() {

FILE: cmd/yolo-detection/main.go
  function main (line 36) | func main() {
  function detect (line 116) | func detect(net *gocv.Net, src *gocv.Mat, outputNames []string) {
  function getOutputNames (line 143) | func getOutputNames(net *gocv.Net) []string {
  function performDetection (line 156) | func performDetection(outs []gocv.Mat) ([]image.Rectangle, []float32, []...
  function drawRects (line 214) | func drawRects(img *gocv.Mat, boxes []image.Rectangle, classes []string,...

FILE: contrib/bgsegm.cpp
  function BackgroundSubtractorCNT (line 5) | BackgroundSubtractorCNT BackgroundSubtractorCNT_Create() {
  function BackgroundSubtractorCNT_Close (line 14) | void BackgroundSubtractorCNT_Close(BackgroundSubtractorCNT b) {
  function OpenCVResult (line 18) | OpenCVResult BackgroundSubtractorCNT_Apply(BackgroundSubtractorCNT b, Ma...

FILE: contrib/bgsegm.go
  type BackgroundSubtractorCNT (line 18) | type BackgroundSubtractorCNT struct
    method Close (line 35) | func (b *BackgroundSubtractorCNT) Close() error {
    method Apply (line 46) | func (b *BackgroundSubtractorCNT) Apply(src gocv.Mat, dst *gocv.Mat) e...
  function NewBackgroundSubtractorCNT (line 30) | func NewBackgroundSubtractorCNT() BackgroundSubtractorCNT {

FILE: contrib/bgsegm.h
  type cv (line 13) | typedef cv::Ptr<cv::bgsegm::BackgroundSubtractorCNT>* BackgroundSubtract...

FILE: contrib/bgsegm_test.go
  function TestCNT (line 11) | func TestCNT(t *testing.T) {

FILE: contrib/errors.go
  function OpenCVResult (line 10) | func OpenCVResult(result C.OpenCVResult) error {

FILE: contrib/face.cpp
  function FaceRecognizer_Empty (line 5) | bool FaceRecognizer_Empty(FaceRecognizer fr) {
  function OpenCVResult (line 14) | OpenCVResult FaceRecognizer_Train(FaceRecognizer fr, Mats mats, IntVecto...
  function OpenCVResult (line 35) | OpenCVResult FaceRecognizer_Update(FaceRecognizer fr, Mats mats, IntVect...
  function FaceRecognizer_Predict (line 56) | int FaceRecognizer_Predict(FaceRecognizer fr, Mat sample) {
  function FaceRecognizer_PredictExtended (line 68) | struct PredictResponse FaceRecognizer_PredictExtended(FaceRecognizer fr,...
  function FaceRecognizer_GetThreshold (line 86) | double FaceRecognizer_GetThreshold(FaceRecognizer fr){
  function FaceRecognizer_SetThreshold (line 95) | void FaceRecognizer_SetThreshold(FaceRecognizer fr, double threshold) {
  function OpenCVResult (line 103) | OpenCVResult FaceRecognizer_SaveFile(FaceRecognizer fr, const char*  fil...
  function OpenCVResult (line 112) | OpenCVResult FaceRecognizer_LoadFile(FaceRecognizer fr, const char*  fil...
  function OpenCVResult (line 121) | OpenCVResult BasicFaceRecognizer_Train(BasicFaceRecognizer fr, Mats mats...
  function OpenCVResult (line 142) | OpenCVResult BasicFaceRecognizer_Update(BasicFaceRecognizer fr, Mats mat...
  function Mat (line 162) | Mat BasicFaceRecognizer_getEigenValues(BasicFaceRecognizer fr){
  function Mat (line 171) | Mat BasicFaceRecognizer_getEigenVectors(BasicFaceRecognizer fr){
  function Mat (line 180) | Mat BasicFaceRecognizer_getLabels(BasicFaceRecognizer fr){
  function Mat (line 189) | Mat BasicFaceRecognizer_getMean(BasicFaceRecognizer fr){
  function BasicFaceRecognizer_getNumComponents (line 198) | int BasicFaceRecognizer_getNumComponents(BasicFaceRecognizer fr) {
  function Mats (line 207) | Mats BasicFaceRecognizer_getProjections(BasicFaceRecognizer fr) {
  function BasicFaceRecognizer_setNumComponents (line 227) | void BasicFaceRecognizer_setNumComponents(BasicFaceRecognizer fr, int val){
  function OpenCVResult (line 235) | OpenCVResult BasicFaceRecognizer_SaveFile(BasicFaceRecognizer fr, const ...
  function OpenCVResult (line 244) | OpenCVResult BasicFaceRecognizer_LoadFile(BasicFaceRecognizer fr, const ...
  function LBPHFaceRecognizer (line 253) | LBPHFaceRecognizer CreateLBPHFaceRecognizer() {
  function LBPHFaceRecognizer_SetRadius (line 262) | void LBPHFaceRecognizer_SetRadius(LBPHFaceRecognizer fr, int radius) {
  function LBPHFaceRecognizer_SetNeighbors (line 270) | void LBPHFaceRecognizer_SetNeighbors(LBPHFaceRecognizer fr, int neighbor...
  function LBPHFaceRecognizer_GetNeighbors (line 278) | int LBPHFaceRecognizer_GetNeighbors(LBPHFaceRecognizer fr) {
  function LBPHFaceRecognizer_SetGridX (line 287) | void LBPHFaceRecognizer_SetGridX(LBPHFaceRecognizer fr, int x) {
  function LBPHFaceRecognizer_SetGridY (line 295) | void LBPHFaceRecognizer_SetGridY(LBPHFaceRecognizer fr, int y) {
  function LBPHFaceRecognizer_GetGridX (line 303) | int LBPHFaceRecognizer_GetGridX(LBPHFaceRecognizer fr) {
  function LBPHFaceRecognizer_GetGridY (line 312) | int LBPHFaceRecognizer_GetGridY(LBPHFaceRecognizer fr) {
  function LBPHFaceRecognizer_Close (line 321) | void LBPHFaceRecognizer_Close(LBPHFaceRecognizer fr) {
  function FisherFaceRecognizer (line 325) | FisherFaceRecognizer FisherFaceRecognizer_Create(void) {
  function FisherFaceRecognizer (line 334) | FisherFaceRecognizer FisherFaceRecognizer_CreateWithParams(int num_compo...
  function FisherFaceRecognizer_Close (line 343) | void FisherFaceRecognizer_Close(FisherFaceRecognizer fr) {
  function EigenFaceRecognizer (line 347) | EigenFaceRecognizer EigenFaceRecognizer_Create(void) {
  function EigenFaceRecognizer (line 356) | EigenFaceRecognizer EigenFaceRecognizer_CreateWithParams(int num_compone...
  function EigenFaceRecognizer_Close (line 365) | void EigenFaceRecognizer_Close(EigenFaceRecognizer fr) {

FILE: contrib/face.go
  type PredictResponse (line 17) | type PredictResponse struct
  type LBPHFaceRecognizer (line 30) | type LBPHFaceRecognizer struct
    method Empty (line 35) | func (fr *LBPHFaceRecognizer) Empty() bool {
    method Train (line 50) | func (fr *LBPHFaceRecognizer) Train(images []gocv.Mat, labels []int) e...
    method Update (line 58) | func (fr *LBPHFaceRecognizer) Update(newImages []gocv.Mat, newLabels [...
    method Predict (line 67) | func (fr *LBPHFaceRecognizer) Predict(sample gocv.Mat) int {
    method PredictExtendedResponse (line 79) | func (fr *LBPHFaceRecognizer) PredictExtendedResponse(sample gocv.Mat)...
    method GetThreshold (line 90) | func (fr *LBPHFaceRecognizer) GetThreshold() float32 {
    method SetThreshold (line 100) | func (fr *LBPHFaceRecognizer) SetThreshold(threshold float32) {
    method SetNeighbors (line 110) | func (fr *LBPHFaceRecognizer) SetNeighbors(neighbors int) {
    method GetNeighbors (line 118) | func (fr *LBPHFaceRecognizer) GetNeighbors() int {
    method SetRadius (line 130) | func (fr *LBPHFaceRecognizer) SetRadius(radius int) {
    method SaveFile (line 138) | func (fr *LBPHFaceRecognizer) SaveFile(fname string) error {
    method LoadFile (line 146) | func (fr *LBPHFaceRecognizer) LoadFile(fname string) error {
    method SetGridX (line 154) | func (fr *LBPHFaceRecognizer) SetGridX(x int) {
    method SetGridY (line 162) | func (fr *LBPHFaceRecognizer) SetGridY(y int) {
    method GetGridX (line 170) | func (fr *LBPHFaceRecognizer) GetGridX() int {
    method GetGridY (line 179) | func (fr *LBPHFaceRecognizer) GetGridY() int {
    method SetGrid (line 185) | func (fr *LBPHFaceRecognizer) SetGrid(p image.Point) {
    method GetGrid (line 191) | func (fr *LBPHFaceRecognizer) GetGrid() image.Point {
    method Close (line 195) | func (fr *LBPHFaceRecognizer) Close() error {
  function NewLBPHFaceRecognizer (line 43) | func NewLBPHFaceRecognizer() *LBPHFaceRecognizer {
  type FisherFaceRecognizer (line 201) | type FisherFaceRecognizer struct
    method Empty (line 226) | func (fr *FisherFaceRecognizer) Empty() bool {
    method GetEigenValues (line 231) | func (fr *FisherFaceRecognizer) GetEigenValues() gocv.Mat {
    method GetEigenVectors (line 235) | func (fr *FisherFaceRecognizer) GetEigenVectors() gocv.Mat {
    method GetLabels (line 239) | func (fr *FisherFaceRecognizer) GetLabels() gocv.Mat {
    method GetMean (line 243) | func (fr *FisherFaceRecognizer) GetMean() gocv.Mat {
    method GetNumComponents (line 247) | func (fr *FisherFaceRecognizer) GetNumComponents() int {
    method SetNumComponents (line 251) | func (fr *FisherFaceRecognizer) SetNumComponents(val int) {
    method GetProjections (line 255) | func (fr *FisherFaceRecognizer) GetProjections() []gocv.Mat {
    method GetThreshold (line 264) | func (fr *FisherFaceRecognizer) GetThreshold() float32 {
    method SetThreshold (line 273) | func (fr *FisherFaceRecognizer) SetThreshold(threshold float32) {
    method LoadFile (line 281) | func (fr *FisherFaceRecognizer) LoadFile(filename string) error {
    method SaveFile (line 289) | func (fr *FisherFaceRecognizer) SaveFile(filename string) error {
    method Predict (line 298) | func (fr *FisherFaceRecognizer) Predict(sample gocv.Mat) int {
    method PredictExtendedResponse (line 308) | func (fr *FisherFaceRecognizer) PredictExtendedResponse(sample gocv.Ma...
    method Train (line 315) | func (fr *FisherFaceRecognizer) Train(images []gocv.Mat, labels []int)...
    method Update (line 323) | func (fr *FisherFaceRecognizer) Update(newImages []gocv.Mat, newLabels...
    method Close (line 328) | func (fr *FisherFaceRecognizer) Close() error {
  function NewFisherFaceRecognizer (line 209) | func NewFisherFaceRecognizer() *FisherFaceRecognizer {
  function NewFisherFaceRecognizerWithParams (line 221) | func NewFisherFaceRecognizerWithParams(numComponents int, threshold floa...
  type EigenFaceRecognizer (line 334) | type EigenFaceRecognizer struct
    method Empty (line 358) | func (fr *EigenFaceRecognizer) Empty() bool {
    method GetEigenValues (line 363) | func (fr *EigenFaceRecognizer) GetEigenValues() gocv.Mat {
    method GetEigenVectors (line 367) | func (fr *EigenFaceRecognizer) GetEigenVectors() gocv.Mat {
    method GetLabels (line 371) | func (fr *EigenFaceRecognizer) GetLabels() gocv.Mat {
    method GetMean (line 375) | func (fr *EigenFaceRecognizer) GetMean() gocv.Mat {
    method GetNumComponents (line 379) | func (fr *EigenFaceRecognizer) GetNumComponents() int {
    method SetNumComponents (line 383) | func (fr *EigenFaceRecognizer) SetNumComponents(val int) {
    method GetProjections (line 387) | func (fr *EigenFaceRecognizer) GetProjections() []gocv.Mat {
    method GetThreshold (line 396) | func (fr *EigenFaceRecognizer) GetThreshold() float32 {
    method SetThreshold (line 405) | func (fr *EigenFaceRecognizer) SetThreshold(threshold float32) {
    method LoadFile (line 413) | func (fr *EigenFaceRecognizer) LoadFile(filename string) error {
    method SaveFile (line 421) | func (fr *EigenFaceRecognizer) SaveFile(filename string) error {
    method Predict (line 430) | func (fr *EigenFaceRecognizer) Predict(sample gocv.Mat) int {
    method PredictExtendedResponse (line 440) | func (fr *EigenFaceRecognizer) PredictExtendedResponse(sample gocv.Mat...
    method Train (line 447) | func (fr *EigenFaceRecognizer) Train(images []gocv.Mat, labels []int) ...
    method Update (line 455) | func (fr *EigenFaceRecognizer) Update(newImages []gocv.Mat, newLabels ...
    method Close (line 459) | func (fr *EigenFaceRecognizer) Close() error {
  function NewEigenFaceRecognizer (line 342) | func NewEigenFaceRecognizer() *EigenFaceRecognizer {
  function NewEigenFaceRecognizerWithParams (line 353) | func NewEigenFaceRecognizerWithParams(numComponents int, threshold float...

FILE: contrib/face.h
  type cv (line 14) | typedef cv::Ptr<cv::face::FaceRecognizer>* FaceRecognizer;
  type cv (line 15) | typedef cv::Ptr<cv::face::BasicFaceRecognizer>* BasicFaceRecognizer;
  type cv (line 16) | typedef cv::Ptr<cv::face::LBPHFaceRecognizer>* LBPHFaceRecognizer;
  type cv (line 17) | typedef cv::Ptr<cv::face::EigenFaceRecognizer>* EigenFaceRecognizer;
  type cv (line 18) | typedef cv::Ptr<cv::face::FisherFaceRecognizer>* FisherFaceRecognizer;
  type PredictResponse (line 27) | struct PredictResponse {
  type PredictResponse (line 36) | struct PredictResponse

FILE: contrib/face_recognizer.go
  type FaceRecognizer (line 16) | type FaceRecognizer interface
  type BasicFaceRecognizer (line 29) | type BasicFaceRecognizer interface
  function faceRecognizer_Empty (line 41) | func faceRecognizer_Empty(fr C.FaceRecognizer) bool {
  function faceRecognizer_Train (line 46) | func faceRecognizer_Train(fr C.FaceRecognizer, images []gocv.Mat, labels...
  function faceRecognizer_Update (line 67) | func faceRecognizer_Update(fr C.FaceRecognizer, newImages []gocv.Mat, ne...
  function faceRecognizer_Predict (line 88) | func faceRecognizer_Predict(fr C.FaceRecognizer, sample gocv.Mat) int {
  function faceRecognizer_PredictExtendedResponse (line 94) | func faceRecognizer_PredictExtendedResponse(fr C.FaceRecognizer, sample ...
  function faceRecognizer_GetThreshold (line 104) | func faceRecognizer_GetThreshold(fr C.FaceRecognizer) float32 {
  function faceRecognizer_SetThreshold (line 109) | func faceRecognizer_SetThreshold(fr C.FaceRecognizer, threshold float32) {
  function faceRecognizer_SaveFile (line 113) | func faceRecognizer_SaveFile(fr C.FaceRecognizer, fname string) error {
  function faceRecognizer_LoadFile (line 119) | func faceRecognizer_LoadFile(fr C.FaceRecognizer, fname string) error {
  function basicFaceRecognizer_Train (line 125) | func basicFaceRecognizer_Train(fr C.BasicFaceRecognizer, images []gocv.M...
  function basicFaceRecognizer_Update (line 146) | func basicFaceRecognizer_Update(fr C.BasicFaceRecognizer, newImages []go...
  function basicFaceRecognizer_GetEigenValues (line 167) | func basicFaceRecognizer_GetEigenValues(fr C.BasicFaceRecognizer) gocv.M...
  function basicFaceRecognizer_GetEigenVectors (line 172) | func basicFaceRecognizer_GetEigenVectors(fr C.BasicFaceRecognizer) gocv....
  function basicFaceRecognizer_GetLabels (line 177) | func basicFaceRecognizer_GetLabels(fr C.BasicFaceRecognizer) gocv.Mat {
  function basicFaceRecognizer_GetMean (line 182) | func basicFaceRecognizer_GetMean(fr C.BasicFaceRecognizer) gocv.Mat {
  function basicFaceRecognizer_GetNumComponents (line 187) | func basicFaceRecognizer_GetNumComponents(fr C.BasicFaceRecognizer) int {
  function basicFaceRecognizer_SetNumComponents (line 192) | func basicFaceRecognizer_SetNumComponents(fr C.BasicFaceRecognizer, val ...
  function basicFaceRecognizer_GetProjections (line 196) | func basicFaceRecognizer_GetProjections(fr C.BasicFaceRecognizer) []gocv...
  function basicFaceRecognizer_SaveFile (line 212) | func basicFaceRecognizer_SaveFile(fr C.BasicFaceRecognizer, fname string...
  function basicFaceRecognizer_LoadFile (line 218) | func basicFaceRecognizer_LoadFile(fr C.BasicFaceRecognizer, fname string...

FILE: contrib/face_test.go
  function TestLBPHFaceRecognizer_Methods (line 13) | func TestLBPHFaceRecognizer_Methods(t *testing.T) {
  function TestLBPHFaceRecognizer_SetGridY_GetGridY (line 100) | func TestLBPHFaceRecognizer_SetGridY_GetGridY(t *testing.T) {
  function TestLBPHFaceRecognizer_SetGrid_GetGrid (line 109) | func TestLBPHFaceRecognizer_SetGrid_GetGrid(t *testing.T) {
  function TestEigenFaceRecognizer_Methods (line 119) | func TestEigenFaceRecognizer_Methods(t *testing.T) {
  function TestFisherFaceRecognizer_Methods (line 178) | func TestFisherFaceRecognizer_Methods(t *testing.T) {

FILE: contrib/freetype.cpp
  function FreeType2 (line 7) | FreeType2 FreeType2_CreateFreeType2() {
  function FreeType2_Close (line 16) | void FreeType2_Close(FreeType2 f) {
  function OpenCVResult (line 20) | OpenCVResult FreeType2_LoadFontData(FreeType2 f, const char *fontFileNam...
  function FreeType2_SetSplitNumber (line 29) | void FreeType2_SetSplitNumber(FreeType2 f, int num) {
  function OpenCVResult (line 37) | OpenCVResult FreeType2_PutText(FreeType2 f, Mat img, const char *text, P...
  function Size (line 50) | Size FreeType2_GetTextSize(FreeType2 f, const char *text, int fontHeight...

FILE: contrib/freetype.go
  type FreeType2 (line 18) | type FreeType2 struct
    method Close (line 32) | func (f *FreeType2) Close() error {
    method LoadFontData (line 42) | func (f *FreeType2) LoadFontData(fontFileName string, id int) error {
    method SetSplitNumber (line 54) | func (f *FreeType2) SetSplitNumber(num int) {
    method PutText (line 64) | func (f *FreeType2) PutText(img *gocv.Mat, text string, org image.Point,
    method GetTextSize (line 90) | func (f *FreeType2) GetTextSize(text string, fontHeight int, thickness...
  function NewFreeType2 (line 27) | func NewFreeType2() FreeType2 {

FILE: contrib/freetype.h
  type cv (line 13) | typedef cv::Ptr<cv::freetype::FreeType2>* FreeType2;

FILE: contrib/freetype_test.go
  function TestFreeTypeLoadFontData (line 13) | func TestFreeTypeLoadFontData(t *testing.T) {
  function TestFreeTypeGetTextSize (line 20) | func TestFreeTypeGetTextSize(t *testing.T) {
  function TestFreeTypePutText (line 41) | func TestFreeTypePutText(t *testing.T) {
  function TestFreeTypeSetSplitNumber (line 62) | func TestFreeTypeSetSplitNumber(t *testing.T) {

FILE: contrib/img_hash.cpp
  function pHashCompute (line 5) | void pHashCompute(Mat inputArr, Mat outputArr) {
  function pHashCompare (line 12) | double pHashCompare(Mat a, Mat b) {
  function averageHashCompute (line 21) | void averageHashCompute(Mat inputArr, Mat outputArr) {
  function averageHashCompare (line 29) | double averageHashCompare(Mat a, Mat b) {
  function blockMeanHashCompute (line 38) | void blockMeanHashCompute(Mat inputArr, Mat outputArr, int mode) {
  function blockMeanHashCompare (line 46) | double blockMeanHashCompare(Mat a, Mat b, int mode) {
  function colorMomentHashCompute (line 55) | void colorMomentHashCompute(Mat inputArr, Mat outputArr) {
  function colorMomentHashCompare (line 63) | double colorMomentHashCompare(Mat a, Mat b) {
  function marrHildrethHashCompute (line 72) | void marrHildrethHashCompute(Mat inputArr, Mat outputArr, float alpha, f...
  function marrHildrethHashCompare (line 80) | double marrHildrethHashCompare(Mat a, Mat b, float alpha, float scale) {
  function radialVarianceHashCompute (line 89) | void radialVarianceHashCompute(Mat inputArr, Mat outputArr, double sigma...
  function radialVarianceHashCompare (line 97) | double radialVarianceHashCompare(Mat a, Mat b, double sigma, int numOfAn...

FILE: contrib/img_hash.go
  type ImgHashBase (line 14) | type ImgHashBase interface
  type PHash (line 20) | type PHash struct
    method Compute (line 26) | func (hash PHash) Compute(input gocv.Mat, output *gocv.Mat) {
    method Compare (line 34) | func (hash PHash) Compare(a, b gocv.Mat) float64 {
  type AverageHash (line 39) | type AverageHash struct
    method Compute (line 45) | func (hash AverageHash) Compute(input gocv.Mat, output *gocv.Mat) {
    method Compare (line 53) | func (hash AverageHash) Compare(a, b gocv.Mat) float64 {
  type BlockMeanHash (line 58) | type BlockMeanHash struct
    method Compute (line 74) | func (hash BlockMeanHash) Compute(input gocv.Mat, output *gocv.Mat) {
    method Compare (line 82) | func (hash BlockMeanHash) Compare(a, b gocv.Mat) float64 {
  type BlockMeanHashMode (line 62) | type BlockMeanHashMode
  constant BlockMeanHashMode0 (line 65) | BlockMeanHashMode0 BlockMeanHashMode = iota
  constant BlockMeanHashMode1 (line 66) | BlockMeanHashMode1
  constant BlockMeanHashModeDefault (line 67) | BlockMeanHashModeDefault = BlockMeanHashMode0
  type ColorMomentHash (line 90) | type ColorMomentHash struct
    method Compute (line 96) | func (hash ColorMomentHash) Compute(input gocv.Mat, output *gocv.Mat) {
    method Compare (line 104) | func (hash ColorMomentHash) Compare(a, b gocv.Mat) float64 {
  type MarrHildrethHash (line 109) | type MarrHildrethHash struct
    method Compute (line 122) | func (hash MarrHildrethHash) Compute(input gocv.Mat, output *gocv.Mat) {
    method Compare (line 131) | func (hash MarrHildrethHash) Compare(a, b gocv.Mat) float64 {
  function NewMarrHildrethHash (line 114) | func NewMarrHildrethHash() MarrHildrethHash {
  type RadialVarianceHash (line 137) | type RadialVarianceHash struct
    method Compute (line 150) | func (hash RadialVarianceHash) Compute(input gocv.Mat, output *gocv.Ma...
    method Compare (line 159) | func (hash RadialVarianceHash) Compare(a, b gocv.Mat) float64 {
  function NewRadialVarianceHash (line 142) | func NewRadialVarianceHash() RadialVarianceHash {

FILE: contrib/img_hash_string.go
  method String (line 5) | func (c BlockMeanHashMode) String() string {

FILE: contrib/img_hash_test.go
  constant testImage (line 13) | testImage  = "../images/space_shuttle.jpg"
  constant testImage2 (line 14) | testImage2 = "../images/toy.jpg"
  function compute (line 17) | func compute(path string, hash ImgHashBase) (*gocv.Mat, error) {
  function testHash (line 34) | func testHash(t *testing.T, hash ImgHashBase) {
  function TestHashes (line 60) | func TestHashes(t *testing.T) {
  function BenchmarkCompute (line 69) | func BenchmarkCompute(b *testing.B) {
  function BenchmarkCompare (line 98) | func BenchmarkCompare(b *testing.B) {

FILE: contrib/mcc.cpp
  function MccCCheckerDetector (line 5) | MccCCheckerDetector MccCCheckerDetector_New()
  function MccCCheckerDetector_Close (line 18) | void MccCCheckerDetector_Close(MccCCheckerDetector md)
  function MccCCheckerVector (line 23) | MccCCheckerVector MccCCheckerDetector_GetListColorChecker(MccCCheckerDet...
  function MccCCheckerVector_Close (line 37) | void MccCCheckerVector_Close(MccCCheckerVector mv)
  function MccCCheckerVector_Size (line 42) | int MccCCheckerVector_Size(MccCCheckerVector mv)
  function MccCChecker (line 47) | MccCChecker MccCCheckerVector_At(MccCCheckerVector mv, int idx)
  function MccCChecker (line 56) | MccCChecker MccCCheckerDetector_GetBestColorChecker(MccCCheckerDetector md)
  function MccCCheckerDetector_Process (line 69) | bool MccCCheckerDetector_Process(MccCCheckerDetector md, Mat inputArr, i...
  function MccCCheckerDetector_ProcessWithRegionsOfInterest (line 82) | bool MccCCheckerDetector_ProcessWithRegionsOfInterest(MccCCheckerDetecto...
  function MccCCheckerDetector_SetNet (line 95) | bool MccCCheckerDetector_SetNet(MccCCheckerDetector md, MccDnnNet net)
  function Points2f (line 108) | Points2f MccCChecker_GetBox(MccCChecker mc)
  function Point2f (line 132) | Point2f MccCChecker_GetCenter(MccCChecker mc)
  function MccCChecker_SetTarget (line 150) | void MccCChecker_SetTarget(MccCChecker mc, int target)
  function MccCChecker_SetBox (line 154) | void MccCChecker_SetBox(MccCChecker mc, Point2f *pts, int length)
  function MccCChecker_SetChartsRGB (line 163) | void MccCChecker_SetChartsRGB(MccCChecker mc, Mat mat)
  function MccCChecker_SetChartsYCbCr (line 167) | void MccCChecker_SetChartsYCbCr(MccCChecker mc, Mat mat)
  function MccCChecker_SetCost (line 171) | void MccCChecker_SetCost(MccCChecker mc, float cost)
  function MccCChecker_SetCenter (line 175) | void MccCChecker_SetCenter(MccCChecker mc, Point2f pt)
  function MccCChecker_GetTarget (line 180) | int MccCChecker_GetTarget(MccCChecker mc)
  function Points2f (line 185) | Points2f MccCChecker_GetColorCharts(MccCChecker mc)
  function Mat (line 209) | Mat MccCChecker_GetChartsRGB(MccCChecker mc)
  function Mat (line 214) | Mat MccCChecker_GetChartsYCbCr(MccCChecker mc)
  function MccCChecker_GetCost (line 219) | float MccCChecker_GetCost(MccCChecker mc)
  function MccCCheckerDraw (line 224) | MccCCheckerDraw MccCCheckerDraw_Create(MccCChecker mc, double b, double ...
  function MccCCheckerDraw_Draw (line 238) | void MccCCheckerDraw_Draw(MccCCheckerDraw md, Mat img)
  function MccCCheckerDraw_Close (line 250) | void MccCCheckerDraw_Close(MccCCheckerDraw md)
  function MccRectVector (line 255) | MccRectVector MccRectVector_New()
  function MccRectVector_PushBack (line 260) | void MccRectVector_PushBack(MccRectVector mv, int x, int y, int width, i...
  function MccRectVector_Close (line 265) | void MccRectVector_Close(MccRectVector mv)
  function MccDetectorParameters (line 270) | MccDetectorParameters MccDetectorParameters_Create()
  function MccDetectorParameters_Close (line 283) | void MccDetectorParameters_Close(MccDetectorParameters mp)
  function MccDetectorParameters_SetAdaptiveThreshWinSizeMin (line 288) | void MccDetectorParameters_SetAdaptiveThreshWinSizeMin(MccDetectorParame...
  function MccDetectorParameters_GetAdaptiveThreshWinSizeMin (line 293) | int MccDetectorParameters_GetAdaptiveThreshWinSizeMin(MccDetectorParamet...
  function MccDetectorParameters_SetAdaptiveThreshWinSizeMax (line 298) | void MccDetectorParameters_SetAdaptiveThreshWinSizeMax(MccDetectorParame...
  function MccDetectorParameters_GetAdaptiveThreshWinSizeMax (line 303) | int MccDetectorParameters_GetAdaptiveThreshWinSizeMax(MccDetectorParamet...
  function MccDetectorParameters_SetAdaptiveThreshWinSizeStep (line 308) | void MccDetectorParameters_SetAdaptiveThreshWinSizeStep(MccDetectorParam...
  function MccDetectorParameters_GetAdaptiveThreshWinSizeStep (line 313) | int MccDetectorParameters_GetAdaptiveThreshWinSizeStep(MccDetectorParame...
  function MccDetectorParameters_SetBorderWidth (line 318) | void MccDetectorParameters_SetBorderWidth(MccDetectorParameters mp, int ...
  function MccDetectorParameters_GetBorderWidth (line 323) | int MccDetectorParameters_GetBorderWidth(MccDetectorParameters mp)
  function MccDetectorParameters_SetMinContourLengthAllowed (line 328) | void MccDetectorParameters_SetMinContourLengthAllowed(MccDetectorParamet...
  function MccDetectorParameters_GetMinContourLengthAllowed (line 333) | int MccDetectorParameters_GetMinContourLengthAllowed(MccDetectorParamete...
  function MccDetectorParameters_SetMinContourPointsAllowed (line 338) | void MccDetectorParameters_SetMinContourPointsAllowed(MccDetectorParamet...
  function MccDetectorParameters_GetMinContourPointsAllowed (line 343) | int MccDetectorParameters_GetMinContourPointsAllowed(MccDetectorParamete...
  function MccDetectorParameters_SetMinImageSize (line 348) | void MccDetectorParameters_SetMinImageSize(MccDetectorParameters mp, int...
  function MccDetectorParameters_GetMinImageSize (line 353) | int MccDetectorParameters_GetMinImageSize(MccDetectorParameters mp)
  function MccDetectorParameters_SetMinInterCheckerDistance (line 358) | void MccDetectorParameters_SetMinInterCheckerDistance(MccDetectorParamet...
  function MccDetectorParameters_GetMinInterCheckerDistance (line 363) | int MccDetectorParameters_GetMinInterCheckerDistance(MccDetectorParamete...
  function MccDetectorParameters_SetMinInterContourDistance (line 368) | void MccDetectorParameters_SetMinInterContourDistance(MccDetectorParamet...
  function MccDetectorParameters_GetMinInterContourDistance (line 373) | int MccDetectorParameters_GetMinInterContourDistance(MccDetectorParamete...
  function MccDetectorParameters_SetAdaptiveThreshConstant (line 378) | void MccDetectorParameters_SetAdaptiveThreshConstant(MccDetectorParamete...
  function MccDetectorParameters_GetAdaptiveThreshConstant (line 383) | double MccDetectorParameters_GetAdaptiveThreshConstant(MccDetectorParame...
  function MccDetectorParameters_SetConfidenceThreshold (line 388) | void MccDetectorParameters_SetConfidenceThreshold(MccDetectorParameters ...
  function MccDetectorParameters_GetConfidenceThreshold (line 393) | double MccDetectorParameters_GetConfidenceThreshold(MccDetectorParameter...
  function MccDetectorParameters_SetFindCandidatesApproxPolyDPEpsMultiplier (line 398) | void MccDetectorParameters_SetFindCandidatesApproxPolyDPEpsMultiplier(Mc...
  function MccDetectorParameters_GetFindCandidatesApproxPolyDPEpsMultiplier (line 403) | double MccDetectorParameters_GetFindCandidatesApproxPolyDPEpsMultiplier(...
  function MccDetectorParameters_SetMinContourSolidity (line 408) | void MccDetectorParameters_SetMinContourSolidity(MccDetectorParameters m...
  function MccDetectorParameters_GetMinContourSolidity (line 413) | double MccDetectorParameters_GetMinContourSolidity(MccDetectorParameters...
  function MccDetectorParameters_SetMinContoursArea (line 418) | void MccDetectorParameters_SetMinContoursArea(MccDetectorParameters mp, ...
  function MccDetectorParameters_GetMinContoursArea (line 423) | double MccDetectorParameters_GetMinContoursArea(MccDetectorParameters mp)
  function MccDetectorParameters_SetMinContoursAreaRate (line 428) | void MccDetectorParameters_SetMinContoursAreaRate(MccDetectorParameters ...
  function MccDetectorParameters_GetMinContoursAreaRate (line 433) | double MccDetectorParameters_GetMinContoursAreaRate(MccDetectorParameter...
  function MccDetectorParameters_SetB0factor (line 438) | void MccDetectorParameters_SetB0factor(MccDetectorParameters mp, float B...
  function MccDetectorParameters_GetB0factor (line 443) | float MccDetectorParameters_GetB0factor(MccDetectorParameters mp)
  function MccDetectorParameters_SetMaxError (line 448) | void MccDetectorParameters_SetMaxError(MccDetectorParameters mp, float m...
  function MccDetectorParameters_GetMaxError (line 453) | float MccDetectorParameters_GetMaxError(MccDetectorParameters mp)
  function MccDetectorParameters_SetMinGroupSize (line 458) | void MccDetectorParameters_SetMinGroupSize(MccDetectorParameters mp, uns...
  function MccDetectorParameters_GetMinGroupSize (line 463) | unsigned MccDetectorParameters_GetMinGroupSize(MccDetectorParameters mp)

FILE: contrib/mcc.go
  type TYPECHART (line 18) | type TYPECHART
  constant MCC24 (line 21) | MCC24 TYPECHART = iota
  constant SG140 (line 22) | SG140
  constant VINYL18 (line 23) | VINYL18
  type MccCCheckerDetector (line 26) | type MccCCheckerDetector struct
    method Close (line 40) | func (md *MccCCheckerDetector) Close() error {
    method GetBestColorChecker (line 50) | func (md *MccCCheckerDetector) GetBestColorChecker() MccCChecker {
    method GetListColorChecker (line 59) | func (md *MccCCheckerDetector) GetListColorChecker() []MccCChecker {
    method Process (line 74) | func (md *MccCCheckerDetector) Process(input gocv.Mat, chartType TYPEC...
    method ProcessWithRegionsOfInterest (line 83) | func (md *MccCCheckerDetector) ProcessWithRegionsOfInterest(input gocv...
    method ProcessWithParams (line 94) | func (md *MccCCheckerDetector) ProcessWithParams(input gocv.Mat, chart...
    method ProcessWithRegionsOfInterestWithParams (line 103) | func (md *MccCCheckerDetector) ProcessWithRegionsOfInterestWithParams(...
    method SetNet (line 114) | func (md *MccCCheckerDetector) SetNet(net MccDnnNet) bool {
  type MccDnnNet (line 30) | type MccDnnNet struct
  function NewMccCCheckerDetector (line 35) | func NewMccCCheckerDetector() MccCCheckerDetector {
  type MccCChecker (line 119) | type MccCChecker struct
    method SetTarget (line 123) | func (mc *MccCChecker) SetTarget(target TYPECHART) {
    method GetTarget (line 127) | func (mc *MccCChecker) GetTarget() TYPECHART {
    method SetBox (line 131) | func (mc *MccCChecker) SetBox(box []gocv.Point2f) {
    method GetBox (line 143) | func (mc *MccCChecker) GetBox() []gocv.Point2f {
    method SetChartsRGB (line 158) | func (mc *MccCChecker) SetChartsRGB(mat gocv.Mat) {
    method GetChartsRGB (line 162) | func (mc *MccCChecker) GetChartsRGB() gocv.Mat {
    method SetChartsYCbCr (line 168) | func (mc *MccCChecker) SetChartsYCbCr(mat gocv.Mat) {
    method GetChartsYCbCr (line 172) | func (mc *MccCChecker) GetChartsYCbCr() gocv.Mat {
    method SetCost (line 178) | func (mc *MccCChecker) SetCost(cost float32) {
    method GetCost (line 182) | func (mc *MccCChecker) GetCost() float32 {
    method SetCenter (line 186) | func (mc *MccCChecker) SetCenter(center gocv.Point2f) {
    method GetCenter (line 190) | func (mc *MccCChecker) GetCenter() gocv.Point2f {
    method GetColorCharts (line 200) | func (mc *MccCChecker) GetColorCharts() []gocv.Point2f {
  type MccDetectorParameters (line 215) | type MccDetectorParameters struct
    method SetAdaptiveThreshWinSizeMin (line 224) | func (mp *MccDetectorParameters) SetAdaptiveThreshWinSizeMin(adaptiveT...
    method GetAdaptiveThreshWinSizeMin (line 228) | func (mp *MccDetectorParameters) GetAdaptiveThreshWinSizeMin() int {
    method SetAdaptiveThreshWinSizeMax (line 232) | func (mp *MccDetectorParameters) SetAdaptiveThreshWinSizeMax(adaptiveT...
    method GetAdaptiveThreshWinSizeMax (line 236) | func (mp *MccDetectorParameters) GetAdaptiveThreshWinSizeMax() int {
    method SetAdaptiveThreshWinSizeStep (line 240) | func (mp *MccDetectorParameters) SetAdaptiveThreshWinSizeStep(adaptive...
    method GetAdaptiveThreshWinSizeStep (line 244) | func (mp *MccDetectorParameters) GetAdaptiveThreshWinSizeStep() int {
    method SetBorderWidth (line 248) | func (mp *MccDetectorParameters) SetBorderWidth(borderWidth int) {
    method GetBorderWidth (line 252) | func (mp *MccDetectorParameters) GetBorderWidth() int {
    method SetMinContourLengthAllowed (line 256) | func (mp *MccDetectorParameters) SetMinContourLengthAllowed(minContour...
    method GetMinContourLengthAllowed (line 260) | func (mp *MccDetectorParameters) GetMinContourLengthAllowed() int {
    method SetMinContourPointsAllowed (line 264) | func (mp *MccDetectorParameters) SetMinContourPointsAllowed(minContour...
    method GetMinContourPointsAllowed (line 267) | func (mp *MccDetectorParameters) GetMinContourPointsAllowed() int {
    method SetMinImageSize (line 271) | func (mp *MccDetectorParameters) SetMinImageSize(minImageSize int) {
    method GetMinImageSize (line 274) | func (mp *MccDetectorParameters) GetMinImageSize() int {
    method SetMinInterCheckerDistance (line 277) | func (mp *MccDetectorParameters) SetMinInterCheckerDistance(minInterCh...
    method GetMinInterCheckerDistance (line 280) | func (mp *MccDetectorParameters) GetMinInterCheckerDistance() int {
    method SetMinInterContourDistance (line 283) | func (mp *MccDetectorParameters) SetMinInterContourDistance(minInterCo...
    method GetMinInterContourDistance (line 286) | func (mp *MccDetectorParameters) GetMinInterContourDistance() int {
    method SetAdaptiveThreshConstant (line 290) | func (mp *MccDetectorParameters) SetAdaptiveThreshConstant(adaptiveThr...
    method GetAdaptiveThreshConstant (line 294) | func (mp *MccDetectorParameters) GetAdaptiveThreshConstant() float64 {
    method SetConfidenceThreshold (line 298) | func (mp *MccDetectorParameters) SetConfidenceThreshold(confidenceThre...
    method GetConfidenceThreshold (line 301) | func (mp *MccDetectorParameters) GetConfidenceThreshold() float64 {
    method SetFindCandidatesApproxPolyDPEpsMultiplier (line 304) | func (mp *MccDetectorParameters) SetFindCandidatesApproxPolyDPEpsMulti...
    method GetFindCandidatesApproxPolyDPEpsMultiplier (line 307) | func (mp *MccDetectorParameters) GetFindCandidatesApproxPolyDPEpsMulti...
    method SetMinContourSolidity (line 310) | func (mp *MccDetectorParameters) SetMinContourSolidity(minContourSolid...
    method GetMinContourSolidity (line 313) | func (mp *MccDetectorParameters) GetMinContourSolidity() float64 {
    method SetMinContoursArea (line 316) | func (mp *MccDetectorParameters) SetMinContoursArea(minContoursArea fl...
    method GetMinContoursArea (line 319) | func (mp *MccDetectorParameters) GetMinContoursArea() float64 {
    method SetMinContoursAreaRate (line 322) | func (mp *MccDetectorParameters) SetMinContoursAreaRate(minContoursAre...
    method GetMinContoursAreaRate (line 325) | func (mp *MccDetectorParameters) GetMinContoursAreaRate() float64 {
    method SetB0factor (line 329) | func (mp *MccDetectorParameters) SetB0factor(B0factor float32) {
    method GetB0factor (line 332) | func (mp *MccDetectorParameters) GetB0factor() float32 {
    method SetMaxError (line 335) | func (mp *MccDetectorParameters) SetMaxError(maxError float32) {
    method GetMaxError (line 338) | func (mp *MccDetectorParameters) GetMaxError() float32 {
    method SetMinGroupSize (line 341) | func (mp *MccDetectorParameters) SetMinGroupSize(minGroupSize uint) {
    method GetMinGroupSize (line 344) | func (mp *MccDetectorParameters) GetMinGroupSize() uint {
  function NewMccDetectorParameters (line 220) | func NewMccDetectorParameters() MccDetectorParameters {
  type MccCCheckerDraw (line 348) | type MccCCheckerDraw struct
    method Draw (line 359) | func (md *MccCCheckerDraw) Draw(img gocv.Mat) {
    method Close (line 363) | func (md *MccCCheckerDraw) Close() error {
  function NewMccCCheckerDraw (line 353) | func NewMccCCheckerDraw(cc MccCChecker, color gocv.Scalar, thickness int...
  type MccRectVector (line 369) | type MccRectVector struct
    method Close (line 381) | func (mv *MccRectVector) Close() error {
  function NewMccRectVector (line 373) | func NewMccRectVector(rects []image.Rectangle) MccRectVector {

FILE: contrib/mcc.h
  type cv (line 14) | typedef cv::mcc::CChecker* MccCChecker;
  type cv (line 15) | typedef cv::Ptr<cv::mcc::CCheckerDetector>* MccCCheckerDetector;
  type cv (line 16) | typedef cv::Ptr<cv::mcc::CCheckerDraw>* MccCCheckerDraw;
  type cv (line 17) | typedef cv::mcc::DetectorParameters* MccDetectorParameters;
  type cv (line 18) | typedef cv::dnn::Net* MccDnnNet;
  type std (line 19) | typedef std::vector<cv::Rect>* MccRectVector;
  type std (line 20) | typedef std::vector<cv::Ptr<cv::mcc::CChecker>>* MccCCheckerVector;

FILE: contrib/mcc_test.go
  constant macbethImage (line 13) | macbethImage = "../images/macbeth.png"
  function TestMccDetectorParams (line 16) | func TestMccDetectorParams(t *testing.T) {
  function TestProcess (line 117) | func TestProcess(t *testing.T) {
  function distPoint2f (line 163) | func distPoint2f(a, b gocv.Point2f) float64 {

FILE: contrib/tracking.cpp
  function TrackerSubclass_Init (line 6) | bool TrackerSubclass_Init(Tracker self, Mat image, Rect boundingBox) {
  function TrackerSubclass_Update (line 18) | bool TrackerSubclass_Update(Tracker self, Mat image, Rect* boundingBox) {
  function TrackerKCF (line 33) | TrackerKCF TrackerKCF_Create() {
  function TrackerKCF_Close (line 42) | void TrackerKCF_Close(TrackerKCF self) {
  function TrackerCSRT (line 46) | TrackerCSRT TrackerCSRT_Create() {
  function TrackerCSRT_Close (line 55) | void TrackerCSRT_Close(TrackerCSRT self) {

FILE: contrib/tracking.go
  type TrackerKCF (line 20) | type TrackerKCF struct
    method Close (line 30) | func (trk TrackerKCF) Close() error {
    method Init (line 37) | func (trk TrackerKCF) Init(img gocv.Mat, boundingBox image.Rectangle) ...
    method Update (line 42) | func (trk TrackerKCF) Update(img gocv.Mat) (image.Rectangle, bool) {
  function NewTrackerKCF (line 25) | func NewTrackerKCF() gocv.Tracker {
  type TrackerCSRT (line 51) | type TrackerCSRT struct
    method Close (line 61) | func (trk TrackerCSRT) Close() error {
    method Init (line 68) | func (trk TrackerCSRT) Init(img gocv.Mat, boundingBox image.Rectangle)...
    method Update (line 73) | func (trk TrackerCSRT) Update(img gocv.Mat) (image.Rectangle, bool) {
  function NewTrackerCSRT (line 56) | func NewTrackerCSRT() gocv.Tracker {
  function trackerInit (line 77) | func trackerInit(trk C.Tracker, img gocv.Mat, boundingBox image.Rectangl...
  function trackerUpdate (line 89) | func trackerUpdate(trk C.Tracker, img gocv.Mat) (image.Rectangle, bool) {

FILE: contrib/tracking.h
  type cv (line 15) | typedef cv::Ptr<cv::Tracker>* Tracker;
  type cv (line 16) | typedef cv::Ptr<cv::TrackerKCF>* TrackerKCF;
  type cv (line 17) | typedef cv::Ptr<cv::TrackerCSRT>* TrackerCSRT;

FILE: contrib/tracking_test.go
  function BaseTestTracker (line 12) | func BaseTestTracker(t *testing.T, tracker gocv.Tracker, name string) {
  function TestSingleTrackers (line 35) | func TestSingleTrackers(t *testing.T) {

FILE: contrib/wechat_qrcode.cpp
  function WeChatQRCode (line 5) | WeChatQRCode NewWeChatQRCode(const char *detector_prototxt_path,
  function StringsVector (line 20) | StringsVector NewStringsVector() {
  function WeChatQRCode_CStrings_Close (line 24) | void WeChatQRCode_CStrings_Close(struct CStrings cstrs) {
  function WeChatQRCode_Mats_to (line 31) | void WeChatQRCode_Mats_to(struct Mats mats, int i, Mat dst) {
  function WeChatQRCode_Mats_Close (line 39) | void WeChatQRCode_Mats_Close(struct Mats mats) {
  function CStrings (line 44) | CStrings WeChatQRCode_DetectAndDecode(WeChatQRCode wq, Mat img, struct M...

FILE: contrib/wechat_qrcode.go
  type WeChatQRCode (line 15) | type WeChatQRCode struct
    method DetectAndDecode (line 32) | func (wq *WeChatQRCode) DetectAndDecode(img gocv.Mat, point *[]gocv.Ma...
  function NewWeChatQRCode (line 19) | func NewWeChatQRCode(detectProtoTxt, detectCaffe, superProtoTxt, superCa...
  function toGoStrings (line 58) | func toGoStrings(strs C.CStrings) []string {

FILE: contrib/wechat_qrcode.h
  type cv (line 15) | typedef cv::Ptr<cv::wechat_qrcode::WeChatQRCode> *WeChatQRCode;
  type std (line 16) | typedef std::vector<std::string> *StringsVector;
  type Mats (line 24) | struct Mats
  type CStrings (line 26) | struct CStrings
  type Mats (line 27) | struct Mats
  type Mats (line 28) | struct Mats

FILE: contrib/wechat_qrcode_test.go
  function TestNewWeChatQRCode (line 12) | func TestNewWeChatQRCode(t *testing.T) {
  function TestWeChatQRCode_DetectAndDecode (line 36) | func TestWeChatQRCode_DetectAndDecode(t *testing.T) {

FILE: contrib/xfeatures2d.cpp
  function SURF (line 6) | SURF SURF_Create() {
  function SURF (line 15) | SURF SURF_CreateWithParams(double hessianThreshold, int nOctaves, int nO...
  function SURF_Close (line 24) | void SURF_Close(SURF d) {
  function SURF_Detect (line 28) | struct KeyPoints SURF_Detect(SURF d, Mat src) {
  function SURF_Compute (line 51) | struct KeyPoints SURF_Compute(SURF d, Mat src, struct KeyPoints kp, Mat ...
  function SURF_DetectAndCompute (line 81) | struct KeyPoints SURF_DetectAndCompute(SURF d, Mat src, Mat mask, Mat de...
  function BriefDescriptorExtractor (line 104) | BriefDescriptorExtractor BriefDescriptorExtractor_Create() {
  function BriefDescriptorExtractor (line 113) | BriefDescriptorExtractor BriefDescriptorExtractor_CreateWithParams(int b...
  function BriefDescriptorExtractor_Close (line 122) | void BriefDescriptorExtractor_Close(BriefDescriptorExtractor b) {
  function BriefDescriptorExtractor_Compute (line 126) | void BriefDescriptorExtractor_Compute(BriefDescriptorExtractor b, Mat sr...

FILE: contrib/xfeatures2d.go
  type SURF (line 21) | type SURF struct
    method Close (line 45) | func (d *SURF) Close() error {
    method Detect (line 55) | func (d *SURF) Detect(src gocv.Mat) []gocv.KeyPoint {
    method Compute (line 65) | func (d *SURF) Compute(src gocv.Mat, mask gocv.Mat, kps []gocv.KeyPoin...
    method DetectAndCompute (line 90) | func (d *SURF) DetectAndCompute(src gocv.Mat, mask gocv.Mat) ([]gocv.K...
  function NewSURF (line 32) | func NewSURF() SURF {
  function NewSURFWithParams (line 40) | func NewSURFWithParams(hessianThreshold float64, nOctaves int, nOctaveLa...
  function getKeyPoints (line 98) | func getKeyPoints(ret C.KeyPoints) []gocv.KeyPoint {
  type BriefDescriptorExtractor (line 118) | type BriefDescriptorExtractor struct
    method Close (line 140) | func (d *BriefDescriptorExtractor) Close() error {
    method Compute (line 150) | func (b *BriefDescriptorExtractor) Compute(keyPoints []gocv.KeyPoint, ...
  function NewBriefDescriptorExtractor (line 127) | func NewBriefDescriptorExtractor() BriefDescriptorExtractor {
  function NewBriefDescriptorExtractorWithParams (line 135) | func NewBriefDescriptorExtractorWithParams(bytes int, useOrientation boo...

FILE: contrib/xfeatures2d.h
  type cv (line 13) | typedef cv::Ptr<cv::xfeatures2d::SURF>* SURF;
  type cv (line 14) | typedef cv::Ptr<cv::xfeatures2d::BriefDescriptorExtractor>* BriefDescrip...
  type KeyPoints (line 23) | struct KeyPoints
  type KeyPoints (line 24) | struct KeyPoints
  type KeyPoints (line 24) | struct KeyPoints
  type KeyPoints (line 25) | struct KeyPoints
  type KeyPoints (line 29) | struct KeyPoints

FILE: contrib/xfeatures2d_test.go
  function TestSURF (line 12) | func TestSURF(t *testing.T) {
  function TestSURFWithParams (line 57) | func TestSURFWithParams(t *testing.T) {
  function TestBriefDescriptorExtractor (line 102) | func TestBriefDescriptorExtractor(t *testing.T) {
  function TestBriefDescriptorExtractorWithParams (line 129) | func TestBriefDescriptorExtractorWithParams(t *testing.T) {

FILE: contrib/ximgproc.cpp
  function OpenCVResult (line 5) | OpenCVResult anisotropicDiffusion(Mat src, Mat dst, float alpha, float K...
  function OpenCVResult (line 14) | OpenCVResult edgePreservingFilter(Mat src, Mat dst, int d, float thresho...
  function OpenCVResult (line 23) | OpenCVResult niBlackThreshold(Mat src, Mat dst, float maxValue, int type...
  function OpenCVResult (line 32) | OpenCVResult PeiLinNormalization(Mat src, Mat dst) {
  function OpenCVResult (line 41) | OpenCVResult thinning(Mat src, Mat dst, int typ) {

FILE: contrib/ximgproc.go
  function AnisotropicDiffusion (line 20) | func AnisotropicDiffusion(src gocv.Mat, dst *gocv.Mat, alpha float32, k ...
  function EdgePreservingFilter (line 28) | func EdgePreservingFilter(src gocv.Mat, dst *gocv.Mat, d int, threshold ...
  type BinarizationMethod (line 32) | type BinarizationMethod
  constant BinarizationNiblack (line 35) | BinarizationNiblack BinarizationMethod = iota
  constant BinarizationSauvola (line 36) | BinarizationSauvola
  constant BinarizationWolf (line 37) | BinarizationWolf
  constant BinarizationNICK (line 38) | BinarizationNICK
  function NiblackThreshold (line 46) | func NiblackThreshold(src gocv.Mat, dst *gocv.Mat, maxValue float32,
  function PeiLinNormalization (line 57) | func PeiLinNormalization(src gocv.Mat, dst *gocv.Mat) error {
  type ThinningType (line 61) | type ThinningType
  constant ThinningZhangSuen (line 64) | ThinningZhangSuen ThinningType = iota
  constant ThinningGuoHall (line 65) | ThinningGuoHall
  function Thinning (line 76) | func Thinning(src gocv.Mat, dst *gocv.Mat, typ ThinningType) error {

FILE: contrib/ximgproc_test.go
  function TestAnisotropicDiffusion (line 11) | func TestAnisotropicDiffusion(t *testing.T) {
  function TestAnisotropicDiffusionException (line 24) | func TestAnisotropicDiffusionException(t *testing.T) {
  function TestEdgePreservingFilter (line 39) | func TestEdgePreservingFilter(t *testing.T) {
  function TestNiblackThreshold (line 52) | func TestNiblackThreshold(t *testing.T) {
  function TestPeiLinNormalization (line 65) | func TestPeiLinNormalization(t *testing.T) {
  function TestThinning (line 78) | func TestThinning(t *testing.T) {

FILE: contrib/xobjdetect.cpp
  function WBDetector (line 5) | WBDetector WBDetector_Create(){
  function WBDetector_Close (line 14) | void WBDetector_Close(WBDetector det){
  function WBDetector_detect_result (line 18) | WBDetector_detect_result WBDetector_Detect(WBDetector det, Mat img){
  function WBDetector_Read (line 54) | void WBDetector_Read(WBDetector det, FileNode node){
  function WBDetector_Train (line 62) | void WBDetector_Train(WBDetector det, const char* pos_samples, const cha...
  function WBDetector_Write (line 70) | void WBDetector_Write(WBDetector det, FileStorage fs){

FILE: contrib/xobjdetect.go
  type WBDetector (line 18) | type WBDetector struct
    method Close (line 32) | func (det *WBDetector) Close() {
    method Detect (line 47) | func (det *WBDetector) Detect(img gocv.Mat) ([]image.Rectangle, []floa...
    method Read (line 80) | func (det *WBDetector) Read(node *gocv.FileNode) {
    method Train (line 94) | func (det *WBDetector) Train(posSamples string, negImgs string) {
    method Write (line 108) | func (det *WBDetector) Write(fs *gocv.FileStorage) {
  function NewWBDetector (line 26) | func NewWBDetector() WBDetector {

FILE: contrib/xobjdetect.h
  type WBDetector_detect_result (line 13) | typedef struct WBDetector_detect_result_t {
  type cv (line 19) | typedef cv::Ptr<cv::xobjdetect::WBDetector>* WBDetector;

FILE: contrib/xobjdetect_test.go
  function TestWBDetector (line 11) | func TestWBDetector(t *testing.T) {

FILE: contrib/xphoto.cpp
  function OpenCVResult (line 5) | OpenCVResult Xphoto_ApplyChannelGains(Mat src, Mat dst, float gainB, flo...
  function OpenCVResult (line 14) | OpenCVResult Xphoto_Bm3dDenoising_Step(Mat src, Mat dststep1, Mat dstste...
  function OpenCVResult (line 32) | OpenCVResult Xphoto_Bm3dDenoising_Step_WithParams(
  function OpenCVResult (line 57) | OpenCVResult Xphoto_Bm3dDenoising(Mat src, Mat dst) {
  function OpenCVResult (line 75) | OpenCVResult Xphoto_Bm3dDenoising_WithParams(
  function GrayworldWB (line 101) | GrayworldWB GrayworldWB_Create() {
  function GrayworldWB_Close (line 110) | void GrayworldWB_Close(GrayworldWB b) {
  function GrayworldWB_SetSaturationThreshold (line 114) | void GrayworldWB_SetSaturationThreshold(GrayworldWB b, float saturationT...
  function GrayworldWB_GetSaturationThreshold (line 122) | float GrayworldWB_GetSaturationThreshold(GrayworldWB b) {
  function OpenCVResult (line 131) | OpenCVResult GrayworldWB_BalanceWhite(GrayworldWB b, Mat src, Mat dst) {
  function LearningBasedWB (line 142) | LearningBasedWB LearningBasedWB_Create() {
  function LearningBasedWB (line 151) | LearningBasedWB LearningBasedWB_CreateWithParams(const char* pathmodel) {
  function LearningBasedWB_Close (line 161) | void LearningBasedWB_Close(LearningBasedWB b) {
  function OpenCVResult (line 165) | OpenCVResult LearningBasedWB_ExtractSimpleFeatures(LearningBasedWB b, Ma...
  function LearningBasedWB_GetHistBinNum (line 174) | int LearningBasedWB_GetHistBinNum(LearningBasedWB b)  {
  function LearningBasedWB_GetRangeMaxVal (line 183) | int LearningBasedWB_GetRangeMaxVal(LearningBasedWB b)  {
  function LearningBasedWB_GetSaturationThreshold (line 192) | float LearningBasedWB_GetSaturationThreshold(LearningBasedWB b)  {
  function LearningBasedWB_SetHistBinNum (line 201) | void LearningBasedWB_SetHistBinNum(LearningBasedWB b, int val)  {
  function LearningBasedWB_SetRangeMaxVal (line 209) | void LearningBasedWB_SetRangeMaxVal(LearningBasedWB b, int val) {
  function LearningBasedWB_SetSaturationThreshold (line 217) | void LearningBasedWB_SetSaturationThreshold(LearningBasedWB b, float val) {
  function OpenCVResult (line 225) | OpenCVResult LearningBasedWB_BalanceWhite(LearningBasedWB b, Mat src, Ma...
  function SimpleWB (line 237) | SimpleWB SimpleWB_Create() {
  function SimpleWB_Close (line 246) | void SimpleWB_Close(SimpleWB b) {
  function SimpleWB_GetInputMax (line 251) | float SimpleWB_GetInputMax(SimpleWB b) {
  function SimpleWB_GetInputMin (line 261) | float SimpleWB_GetInputMin(SimpleWB b) {
  function SimpleWB_GetOutputMax (line 271) | float SimpleWB_GetOutputMax(SimpleWB b) {
  function SimpleWB_GetOutputMin (line 281) | float SimpleWB_GetOutputMin(SimpleWB b) {
  function SimpleWB_GetP (line 291) | float SimpleWB_GetP(SimpleWB b) {
  function SimpleWB_SetInputMax (line 301) | void SimpleWB_SetInputMax(SimpleWB b, float val) {
  function SimpleWB_SetInputMin (line 310) | void SimpleWB_SetInputMin(SimpleWB b, float val) {
  function SimpleWB_SetOutputMax (line 319) | void SimpleWB_SetOutputMax(SimpleWB b, float val) {
  function SimpleWB_SetOutputMin (line 328) | void SimpleWB_SetOutputMin(SimpleWB b, float val) {
  function SimpleWB_SetP (line 337) | void SimpleWB_SetP(SimpleWB b, float val) {
  function OpenCVResult (line 345) | OpenCVResult SimpleWB_BalanceWhite(SimpleWB b, Mat src, Mat dst) {
  function TonemapDurand (line 357) | TonemapDurand TonemapDurand_Create() {
  function TonemapDurand (line 366) | TonemapDurand TonemapDurand_CreateWithParams(float gamma, float contrast...
  function TonemapDurand_Close (line 378) | void TonemapDurand_Close(TonemapDurand b) {
  function TonemapDurand_GetContrast (line 382) | float TonemapDurand_GetContrast(TonemapDurand b) {
  function TonemapDurand_GetSaturation (line 391) | float TonemapDurand_GetSaturation(TonemapDurand b) {
  function TonemapDurand_GetSigmaColor (line 400) | float TonemapDurand_GetSigmaColor(TonemapDurand b) {
  function TonemapDurand_GetSigmaSpace (line 409) | float TonemapDurand_GetSigmaSpace(TonemapDurand b) {
  function TonemapDurand_SetContrast (line 418) | void TonemapDurand_SetContrast(TonemapDurand b, float contrast) {
  function TonemapDurand_SetSaturation (line 426) | void TonemapDurand_SetSaturation(TonemapDurand b, float saturation) {
  function TonemapDurand_SetSigmaColor (line 434) | void TonemapDurand_SetSigmaColor(TonemapDurand b, float sigma_color) {
  function TonemapDurand_SetSigmaSpace (line 442) | void TonemapDurand_SetSigmaSpace(TonemapDurand b, float sigma_space) {
  function TonemapDurand_GetGamma (line 450) | float TonemapDurand_GetGamma(TonemapDurand b) {
  function TonemapDurand_SetGamma (line 459) | void TonemapDurand_SetGamma(TonemapDurand b, float gamma) {
  function OpenCVResult (line 467) | OpenCVResult TonemapDurand_Process(TonemapDurand b, Mat src, Mat dst) {
  function OpenCVResult (line 478) | OpenCVResult Inpaint(Mat src, Mat mask, Mat dst, int algorithmType) {
  function OpenCVResult (line 487) | OpenCVResult OilPaintingWithParams(Mat src, Mat dst, int size, int dynRa...
  function OpenCVResult (line 496) | OpenCVResult OilPainting(Mat src, Mat dst, int size, int dynRatio) {

FILE: contrib/xphoto.go
  type GrayworldWB (line 17) | type GrayworldWB struct
    method SetSaturationThreshold (line 138) | func (b *GrayworldWB) SetSaturationThreshold(saturationThreshold float...
    method GetSaturationThreshold (line 149) | func (b *GrayworldWB) GetSaturationThreshold() float32 {
    method Close (line 154) | func (b *GrayworldWB) Close() error {
    method BalanceWhite (line 164) | func (b *GrayworldWB) BalanceWhite(src gocv.Mat, dst *gocv.Mat) error {
  type LearningBasedWB (line 23) | type LearningBasedWB struct
    method Close (line 198) | func (b *LearningBasedWB) Close() error {
    method ExtractSimpleFeatures (line 209) | func (b *LearningBasedWB) ExtractSimpleFeatures(src gocv.Mat, dst *goc...
    method GetHistBinNum (line 218) | func (b *LearningBasedWB) GetHistBinNum() int {
    method GetRangeMaxVal (line 227) | func (b *LearningBasedWB) GetRangeMaxVal() int {
    method GetSaturationThreshold (line 236) | func (b *LearningBasedWB) GetSaturationThreshold() float32 {
    method SetHistBinNum (line 245) | func (b *LearningBasedWB) SetHistBinNum(val int) {
    method SetRangeMaxVal (line 255) | func (b *LearningBasedWB) SetRangeMaxVal(val int) {
    method SetSaturationThreshold (line 265) | func (b *LearningBasedWB) SetSaturationThreshold(val float32) {
    method BalanceWhite (line 274) | func (b *LearningBasedWB) BalanceWhite(src gocv.Mat, dst *gocv.Mat) er...
  type SimpleWB (line 29) | type SimpleWB struct
    method Close (line 295) | func (b *SimpleWB) Close() error {
    method GetInputMax (line 306) | func (b *SimpleWB) GetInputMax() float32 {
    method GetInputMin (line 315) | func (b *SimpleWB) GetInputMin() float32 {
    method GetOutputMax (line 324) | func (b *SimpleWB) GetOutputMax() float32 {
    method GetOutputMin (line 333) | func (b *SimpleWB) GetOutputMin() float32 {
    method GetP (line 342) | func (b *SimpleWB) GetP() float32 {
    method SetInputMax (line 351) | func (b *SimpleWB) SetInputMax(val float32) {
    method SetInputMin (line 361) | func (b *SimpleWB) SetInputMin(val float32) {
    method SetOutputMax (line 371) | func (b *SimpleWB) SetOutputMax(val float32) {
    method SetOutputMin (line 381) | func (b *SimpleWB) SetOutputMin(val float32) {
    method SetP (line 391) | func (b *SimpleWB) SetP(val float32) {
    method BalanceWhite (line 400) | func (b *SimpleWB) BalanceWhite(src gocv.Mat, dst *gocv.Mat) error {
  type TonemapDurand (line 35) | type TonemapDurand struct
    method Close (line 435) | func (b *TonemapDurand) Close() error {
    method GetContrast (line 445) | func (b *TonemapDurand) GetContrast() float32 {
    method GetSaturation (line 453) | func (b *TonemapDurand) GetSaturation() float32 {
    method GetSigmaColor (line 461) | func (b *TonemapDurand) GetSigmaColor() float32 {
    method GetSigmaSpace (line 469) | func (b *TonemapDurand) GetSigmaSpace() float32 {
    method SetContrast (line 477) | func (b *TonemapDurand) SetContrast(val float32) {
    method SetSaturation (line 486) | func (b *TonemapDurand) SetSaturation(val float32) {
    method SetSigmaColor (line 495) | func (b *TonemapDurand) SetSigmaColor(val float32) {
    method SetSigmaSpace (line 504) | func (b *TonemapDurand) SetSigmaSpace(val float32) {
    method GetGamma (line 513) | func (b *TonemapDurand) GetGamma() float32 {
    method SetGamma (line 521) | func (b *TonemapDurand) SetGamma(val float32) {
    method Process (line 530) | func (b *TonemapDurand) Process(src gocv.Mat, dst *gocv.Mat) error {
  type Bm3dSteps (line 41) | type Bm3dSteps
  constant Bm3dAlgoStepAll (line 44) | Bm3dAlgoStepAll Bm3dSteps = 0
  constant Bm3dAlgoSte1 (line 45) | Bm3dAlgoSte1    Bm3dSteps = 1
  constant Bm3dAlgoSte2 (line 46) | Bm3dAlgoSte2    Bm3dSteps = 2
  type TransformTypes (line 49) | type TransformTypes
  constant Bm3dTypeHaar (line 52) | Bm3dTypeHaar TransformTypes = 0
  type InpaintTypes (line 55) | type InpaintTypes
  constant ShitMap (line 58) | ShitMap InpaintTypes = 0
  constant FsrBest (line 59) | FsrBest InpaintTypes = 1
  constant FsrFast (line 60) | FsrFast InpaintTypes = 2
  function ApplyChannelGains (line 67) | func ApplyChannelGains(src gocv.Mat, dst *gocv.Mat, gainB float32, gainG...
  function Bm3dDenoisingStep (line 72) | func Bm3dDenoisingStep(src gocv.Mat, dststep1 *gocv.Mat, dststep2 *gocv....
  function Bm3dDenoisingStepWithParams (line 77) | func Bm3dDenoisingStepWithParams(src gocv.Mat, dststep1 *gocv.Mat, dstst...
  function Bm3dDenoising (line 94) | func Bm3dDenoising(src gocv.Mat, dst *gocv.Mat) error {
  function Bm3dDenoisingWithParams (line 99) | func Bm3dDenoisingWithParams(src gocv.Mat, dst *gocv.Mat,
  function NewGrayworldWB (line 128) | func NewGrayworldWB() GrayworldWB {
  function NewLearningBasedWB (line 179) | func NewLearningBasedWB() LearningBasedWB {
  function NewLearningBasedWBWithParams (line 191) | func NewLearningBasedWBWithParams(pathmodel string) LearningBasedWB {
  function NewSimpleWB (line 290) | func NewSimpleWB() SimpleWB {
  function NewTonemapDurand (line 416) | func NewTonemapDurand() TonemapDurand {
  function NewTonemapDurandWithParams (line 428) | func NewTonemapDurandWithParams(gamma float32, contrast float32, saturat...
  function Inpaint (line 542) | func Inpaint(src *gocv.Mat, mask *gocv.Mat, dst *gocv.Mat, algorithmType...
  function OilPaintingWithParams (line 551) | func OilPaintingWithParams(src gocv.Mat, dst gocv.Mat, size int, dynRati...
  function OilPainting (line 560) | func OilPainting(src gocv.Mat, dst *gocv.Mat, size int, dynRatio int) er...

FILE: contrib/xphoto.h
  type cv (line 17) | typedef cv::Ptr<cv::xphoto::GrayworldWB>* GrayworldWB;
  type cv (line 18) | typedef cv::Ptr<cv::xphoto::LearningBasedWB>* LearningBasedWB;
  type cv (line 19) | typedef cv::Ptr<cv::xphoto::SimpleWB>* SimpleWB;
  type cv (line 20) | typedef cv::Ptr<cv::xphoto::TonemapDurand>* TonemapDurand;

FILE: contrib/xphoto_test.go
  function TestBm3dDenoisingStepWithParams (line 12) | func TestBm3dDenoisingStepWithParams(t *testing.T) {
  function TestBm3dDenoisingWithParams (line 35) | func TestBm3dDenoisingWithParams(t *testing.T) {
  function TestSetSaturationThreshold (line 56) | func TestSetSaturationThreshold(t *testing.T) {
  function TestBalanceWhite (line 67) | func TestBalanceWhite(t *testing.T) {
  function TestNewLearningBasedWB (line 82) | func TestNewLearningBasedWB(t *testing.T) {
  function TestNewSimpleWB (line 109) | func TestNewSimpleWB(t *testing.T) {
  function TestNewTonemapDurand (line 116) | func TestNewTonemapDurand(t *testing.T) {
  function TestTonemapDurandProcess (line 155) | func TestTonemapDurandProcess(t *testing.T) {
  function TestOilPainting (line 171) | func TestOilPainting(t *testing.T) {

FILE: core.cpp
  function GetOpenCVException (line 7) | int GetOpenCVException() {
  function ClearOpenCVException (line 15) | void ClearOpenCVException() {
  function setExceptionInfo (line 20) | void setExceptionInfo(int code, const char* message) {
  function OpenCVResult (line 25) | OpenCVResult successResult() {
  function OpenCVResult (line 30) | OpenCVResult errorResult(int code, const char* message) {
  function Mat (line 43) | Mat Mat_New() {
  function Mat (line 48) | Mat Mat_NewWithSize(int rows, int cols, int type) {
  function Mat (line 53) | Mat Mat_NewWithSizes(struct IntVector sizes, int type) {
  function Mat (line 63) | Mat Mat_NewFromScalar(Scalar ar, int type) {
  function Mat (line 69) | Mat Mat_NewWithSizeFromScalar(Scalar ar, int rows, int cols, int type) {
  function Mat (line 74) | Mat Mat_NewFromBytes(int rows, int cols, int type, struct ByteArray buf) {
  function Mat (line 79) | Mat Mat_NewWithSizesFromScalar(IntVector sizes, int type, Scalar ar) {
  function Mat (line 90) | Mat Mat_NewWithSizesFromBytes(IntVector sizes, int type, struct ByteArra...
  function Mat (line 99) | Mat Mat_NewFromPoint2fVector(Point2fVector pfv, bool copy_data) {
  function Mat (line 103) | Mat Mat_NewFromPointVector(PointVector pv, bool copy_data) {
  function Mat (line 107) | Mat Eye(int rows, int cols, int type) {
  function Mat (line 118) | Mat Zeros(int rows, int cols, int type) {
  function Mat (line 129) | Mat Ones(int rows, int cols, int type) {
  function Mat (line 140) | Mat Mat_FromPtr(Mat m, int rows, int cols, int type, int prow, int pcol) {
  function Mat_Close (line 145) | void Mat_Close(Mat m) {
  function Mat_Empty (line 150) | int Mat_Empty(Mat m) {
  function Mat_IsContinuous (line 155) | bool Mat_IsContinuous(Mat m) {
  function Mat_Inv (line 159) | void Mat_Inv(Mat m) {
  function Mat (line 163) | Mat Mat_Col(Mat m, int c) {
  function Mat (line 167) | Mat Mat_Row(Mat m, int r) {
  function Mat (line 171) | Mat Mat_Copy(Mat m) {
  function Mat (line 176) | Mat Mat_Clone(Mat m) {
  function OpenCVResult (line 181) | OpenCVResult Mat_CopyTo(Mat m, Mat dst) {
  function OpenCVResult (line 191) | OpenCVResult Mat_CopyToWithMask(Mat m, Mat dst, Mat mask) {
  function OpenCVResult (line 200) | OpenCVResult Mat_ConvertTo(Mat m, Mat dst, int type) {
  function OpenCVResult (line 209) | OpenCVResult Mat_ConvertToWithParams(Mat m, Mat dst, int type, float alp...
  function Mat_ToBytes (line 219) | struct ByteArray Mat_ToBytes(Mat m) {
  function Mat_DataPtr (line 223) | struct ByteArray Mat_DataPtr(Mat m) {
  function Mat (line 228) | Mat Mat_Region(Mat m, Rect r) {
  function Mat (line 232) | Mat Mat_Reshape(Mat m, int cn, int rows) {
  function Mat (line 241) | Mat Mat_ReshapeWithSize(Mat m, int cn, struct IntVector dims) {
  function OpenCVResult (line 254) | OpenCVResult Mat_PatchNaNs(Mat m) {
  function Mat (line 263) | Mat Mat_ConvertFp16(Mat m) {
  function Mat (line 274) | Mat Mat_Sqrt(Mat m) {
  function Scalar (line 286) | Scalar Mat_Mean(Mat m) {
  function Scalar (line 300) | Scalar Mat_MeanWithMask(Mat m, Mat mask){
  function OpenCVResult (line 310) | OpenCVResult LUT(Mat src, Mat lut, Mat dst) {
  function Mat_Rows (line 320) | int Mat_Rows(Mat m) {
  function Mat_Cols (line 325) | int Mat_Cols(Mat m) {
  function Mat_Channels (line 330) | int Mat_Channels(Mat m) {
  function Mat_Type (line 335) | int Mat_Type(Mat m) {
  function Mat_Step (line 340) | int Mat_Step(Mat m) {
  function Mat_Total (line 344) | int Mat_Total(Mat m) {
  function Mat_ElemSize (line 348) | int Mat_ElemSize(Mat m){
  function Mat_Size (line 352) | void Mat_Size(Mat m, IntVector* res) {
  function Mat_GetUChar (line 367) | uint8_t Mat_GetUChar(Mat m, int row, int col) {
  function Mat_GetUChar3 (line 371) | uint8_t Mat_GetUChar3(Mat m, int x, int y, int z) {
  function Mat_GetSChar (line 377) | int8_t Mat_GetSChar(Mat m, int row, int col) {
  function Mat_GetSChar3 (line 381) | int8_t Mat_GetSChar3(Mat m, int x, int y, int z) {
  function Mat_GetShort (line 387) | int16_t Mat_GetShort(Mat m, int row, int col) {
  function Mat_GetShort3 (line 391) | int16_t Mat_GetShort3(Mat m, int x, int y, int z) {
  function Mat_GetInt (line 397) | int32_t Mat_GetInt(Mat m, int row, int col) {
  function Mat_GetInt3 (line 401) | int32_t Mat_GetInt3(Mat m, int x, int y, int z) {
  function Mat_GetFloat (line 407) | float Mat_GetFloat(Mat m, int row, int col) {
  function Mat_GetFloat3 (line 411) | float Mat_GetFloat3(Mat m, int x, int y, int z) {
  function Mat_GetDouble (line 417) | double Mat_GetDouble(Mat m, int row, int col) {
  function Mat_GetDouble3 (line 421) | double Mat_GetDouble3(Mat m, int x, int y, int z) {
  function Mat_SetTo (line 425) | void Mat_SetTo(Mat m, Scalar value) {
  function Mat_SetUChar (line 432) | void Mat_SetUChar(Mat m, int row, int col, uint8_t val) {
  function Mat_SetUChar3 (line 436) | void Mat_SetUChar3(Mat m, int x, int y, int z, uint8_t val) {
  function Mat_SetSChar (line 442) | void Mat_SetSChar(Mat m, int row, int col, int8_t val) {
  function Mat_SetSChar3 (line 446) | void Mat_SetSChar3(Mat m, int x, int y, int z, int8_t val) {
  function Mat_SetShort (line 452) | void Mat_SetShort(Mat m, int row, int col, int16_t val) {
  function Mat_SetShort3 (line 456) | void Mat_SetShort3(Mat m, int x, int y, int z, int16_t val) {
  function Mat_SetInt (line 462) | void Mat_SetInt(Mat m, int row, int col, int32_t val) {
  function Mat_SetInt3 (line 466) | void Mat_SetInt3(Mat m, int x, int y, int z, int32_t val) {
  function Mat_SetFloat (line 472) | void Mat_SetFloat(Mat m, int row, int col, float val) {
  function Mat_SetFloat3 (line 476) | void Mat_SetFloat3(Mat m, int x, int y, int z, float val) {
  function Mat_SetDouble (line 482) | void Mat_SetDouble(Mat m, int row, int col, double val) {
  function Mat_SetDouble3 (line 486) | void Mat_SetDouble3(Mat m, int x, int y, int z, double val) {
  function Mat_AddUChar (line 490) | void Mat_AddUChar(Mat m, uint8_t val) {
  function Mat_SubtractUChar (line 494) | void Mat_SubtractUChar(Mat m, uint8_t val) {
  function Mat_MultiplyUChar (line 498) | void Mat_MultiplyUChar(Mat m, uint8_t val) {
  function Mat_DivideUChar (line 502) | void Mat_DivideUChar(Mat m, uint8_t val) {
  function Mat_AddFloat (line 506) | void Mat_AddFloat(Mat m, float val) {
  function Mat_SubtractFloat (line 510) | void Mat_SubtractFloat(Mat m, float val) {
  function Mat_MultiplyFloat (line 514) | void Mat_MultiplyFloat(Mat m, float val) {
  function Mat_DivideFloat (line 518) | void Mat_DivideFloat(Mat m, float val) {
  function Mat (line 522) | Mat Mat_MultiplyMatrix(Mat x, Mat y) {
  function Mat (line 526) | Mat Mat_T(Mat x) {
  function OpenCVResult (line 535) | OpenCVResult Mat_AbsDiff(Mat src1, Mat src2, Mat dst) {
  function OpenCVResult (line 544) | OpenCVResult Mat_Add(Mat src1, Mat src2, Mat dst) {
  function OpenCVResult (line 553) | OpenCVResult Mat_AddWeighted(Mat src1, double alpha, Mat src2, double be...
  function OpenCVResult (line 562) | OpenCVResult Mat_BitwiseAnd(Mat src1, Mat src2, Mat dst) {
  function OpenCVResult (line 571) | OpenCVResult Mat_BitwiseAndWithMask(Mat src1, Mat src2, Mat dst, Mat mask){
  function OpenCVResult (line 580) | OpenCVResult Mat_BitwiseNot(Mat src1, Mat dst) {
  function OpenCVResult (line 589) | OpenCVResult Mat_BitwiseNotWithMask(Mat src1, Mat dst, Mat mask) {
  function OpenCVResult (line 598) | OpenCVResult Mat_BitwiseOr(Mat src1, Mat src2, Mat dst) {
  function OpenCVResult (line 607) | OpenCVResult Mat_BitwiseOrWithMask(Mat src1, Mat src2, Mat dst, Mat mask) {
  function OpenCVResult (line 616) | OpenCVResult Mat_BitwiseXor(Mat src1, Mat src2, Mat dst) {
  function OpenCVResult (line 625) | OpenCVResult Mat_BitwiseXorWithMask(Mat src1, Mat src2, Mat dst, Mat mas...
  function OpenCVResult (line 634) | OpenCVResult Mat_BatchDistance(Mat src1, Mat src2, Mat dist, int dtype, ...
  function Mat_BorderInterpolate (line 644) | int Mat_BorderInterpolate(int p, int len, int borderType) {
  function OpenCVResult (line 653) | OpenCVResult Mat_CalcCovarMatrix(Mat samples, Mat covar, Mat mean, int f...
  function OpenCVResult (line 662) | OpenCVResult Mat_CartToPolar(Mat x, Mat y, Mat magnitude, Mat angle, boo...
  function Mat_CheckRange (line 671) | bool Mat_CheckRange(Mat m) {
  function OpenCVResult (line 680) | OpenCVResult Mat_Compare(Mat src1, Mat src2, Mat dst, int ct) {
  function Mat_CountNonZero (line 689) | int Mat_CountNonZero(Mat src) {
  function OpenCVResult (line 698) | OpenCVResult Mat_CompleteSymm(Mat m, bool lowerToUpper) {
  function OpenCVResult (line 707) | OpenCVResult Mat_ConvertScaleAbs(Mat src, Mat dst, double alpha, double ...
  function OpenCVResult (line 716) | OpenCVResult Mat_CopyMakeBorder(Mat src, Mat dst, int top, int bottom, i...
  function OpenCVResult (line 727) | OpenCVResult Mat_DCT(Mat src, Mat dst, int flags) {
  function Mat_Determinant (line 736) | double Mat_Determinant(Mat m) {
  function OpenCVResult (line 745) | OpenCVResult Mat_DFT(Mat m, Mat dst, int flags) {
  function OpenCVResult (line 754) | OpenCVResult Mat_Divide(Mat src1, Mat src2, Mat dst) {
  function Mat_Eigen (line 763) | bool Mat_Eigen(Mat src, Mat eigenvalues, Mat eigenvectors) {
  function OpenCVResult (line 772) | OpenCVResult Mat_EigenNonSymmetric(Mat src, Mat eigenvalues, Mat eigenve...
  function OpenCVResult (line 781) | OpenCVResult Mat_PCABackProject(Mat data, Mat mean, Mat eigenvectors, Ma...
  function OpenCVResult (line 790) | OpenCVResult Mat_PCACompute(Mat src, Mat mean, Mat eigenvectors, Mat eig...
  function OpenCVResult (line 799) | OpenCVResult Mat_PCAProject(Mat data, Mat mean, Mat eigenvectors, Mat re...
  function PSNR (line 808) | double PSNR(Mat src1, Mat src2) {
  function OpenCVResult (line 817) | OpenCVResult SVBackSubst(Mat w, Mat u, Mat vt, Mat rhs, Mat dst) {
  function OpenCVResult (line 826) | OpenCVResult SVDecomp(Mat src, Mat w, Mat u, Mat vt) {
  function OpenCVResult (line 835) | OpenCVResult Mat_Exp(Mat src, Mat dst) {
  function OpenCVResult (line 844) | OpenCVResult Mat_ExtractChannel(Mat src, Mat dst, int coi) {
  function OpenCVResult (line 853) | OpenCVResult Mat_FindNonZero(Mat src, Mat idx) {
  function OpenCVResult (line 862) | OpenCVResult Mat_Flip(Mat src, Mat dst, int flipCode) {
  function OpenCVResult (line 871) | OpenCVResult Mat_Gemm(Mat src1, Mat src2, double alpha, Mat src3, double...
  function Mat_GetOptimalDFTSize (line 880) | int Mat_GetOptimalDFTSize(int vecsize) {
  function OpenCVResult (line 889) | OpenCVResult Mat_Hconcat(Mat src1, Mat src2, Mat dst) {
  function OpenCVResult (line 898) | OpenCVResult Mat_Vconcat(Mat src1, Mat src2, Mat dst) {
  function OpenCVResult (line 907) | OpenCVResult Rotate(Mat src, Mat dst, int rotateCode) {
  function OpenCVResult (line 916) | OpenCVResult Mat_Idct(Mat src, Mat dst, int flags) {
  function OpenCVResult (line 925) | OpenCVResult Mat_Idft(Mat src, Mat dst, int flags, int nonzeroRows) {
  function OpenCVResult (line 934) | OpenCVResult Mat_InRange(Mat src, Mat lowerb, Mat upperb, Mat dst) {
  function OpenCVResult (line 943) | OpenCVResult Mat_InRangeWithScalar(Mat src, Scalar lowerb, Scalar upperb...
  function OpenCVResult (line 954) | OpenCVResult Mat_InsertChannel(Mat src, Mat dst, int coi) {
  function Mat_Invert (line 963) | double Mat_Invert(Mat src, Mat dst, int flags) {
  function KMeans (line 972) | double KMeans(Mat data, int k, Mat bestLabels, TermCriteria criteria, in...
  function KMeansPoints (line 981) | double KMeansPoints(PointVector points, int k, Mat bestLabels, TermCrite...
  function OpenCVResult (line 992) | OpenCVResult Mat_Log(Mat src, Mat dst) {
  function OpenCVResult (line 1001) | OpenCVResult Mat_Magnitude(Mat x, Mat y, Mat magnitude) {
  function Mat_Mahalanobis (line 1010) | double Mat_Mahalanobis(Mat v1, Mat v2, Mat icovar) {
  function OpenCVResult (line 1019) | OpenCVResult MulTransposed(Mat src, Mat dest, bool ata) {
  function OpenCVResult (line 1028) | OpenCVResult Mat_Max(Mat src1, Mat src2, Mat dst) {
  function OpenCVResult (line 1037) | OpenCVResult Mat_MeanStdDev(Mat src, Mat dstMean, Mat dstStdDev) {
  function OpenCVResult (line 1046) | OpenCVResult Mat_MeanStdDevWithMask(Mat src, Mat dstMean, Mat dstStdDev,...
  function OpenCVResult (line 1055) | OpenCVResult Mat_Merge(struct Mats mats, Mat dst) {
  function OpenCVResult (line 1070) | OpenCVResult Mat_Min(Mat src1, Mat src2, Mat dst) {
  function OpenCVResult (line 1079) | OpenCVResult Mat_MinMaxIdx(Mat m, double* minVal, double* maxVal, int* m...
  function OpenCVResult (line 1088) | OpenCVResult Mat_MinMaxLoc(Mat m, double* minVal, double* maxVal, Point*...
  function OpenCVResult (line 1104) | OpenCVResult Mat_MinMaxLocWithMask(Mat m, double* minVal, double* maxVal...
  function OpenCVResult (line 1120) | OpenCVResult Mat_MixChannels(struct Mats src, struct Mats dst, struct In...
  function OpenCVResult (line 1147) | OpenCVResult Mat_MulSpectrums(Mat a, Mat b, Mat c, int flags) {
  function OpenCVResult (line 1156) | OpenCVResult Mat_Multiply(Mat src1, Mat src2, Mat dst) {
  function OpenCVResult (line 1165) | OpenCVResult Mat_MultiplyWithParams(Mat src1, Mat src2, Mat dst, double ...
  function OpenCVResult (line 1174) | OpenCVResult Mat_Normalize(Mat src, Mat dst, double alpha, double beta, ...
  function Norm (line 1183) | double Norm(Mat src1, int normType) {
  function NormWithMats (line 1192) | double NormWithMats(Mat src1, Mat src2, int normType) {
  function OpenCVResult (line 1201) | OpenCVResult Mat_PerspectiveTransform(Mat src, Mat dst, Mat tm) {
  function Mat_Solve (line 1210) | bool Mat_Solve(Mat src1, Mat src2, Mat dst, int flags) {
  function Mat_SolveCubic (line 1219) | int Mat_SolveCubic(Mat coeffs, Mat roots) {
  function Mat_SolvePoly (line 1228) | double Mat_SolvePoly(Mat coeffs, Mat roots, int maxIters) {
  function OpenCVResult (line 1237) | OpenCVResult Mat_Reduce(Mat src, Mat dst, int dim, int rType, int dType) {
  function OpenCVResult (line 1246) | OpenCVResult Mat_ReduceArgMax(Mat src, Mat dst, int axis, bool lastIndex) {
  function OpenCVResult (line 1255) | OpenCVResult Mat_ReduceArgMin(Mat src, Mat dst, int axis, bool lastIndex) {
  function OpenCVResult (line 1264) | OpenCVResult Mat_Repeat(Mat src, int nY, int nX, Mat dst) {
  function OpenCVResult (line 1273) | OpenCVResult Mat_ScaleAdd(Mat src1, double alpha, Mat src2, Mat dst) {
  function OpenCVResult (line 1282) | OpenCVResult Mat_SetIdentity(Mat src, double scalar) {
  function OpenCVResult (line 1291) | OpenCVResult Mat_Sort(Mat src, Mat dst, int flags) {
  function OpenCVResult (line 1300) | OpenCVResult Mat_SortIdx(Mat src, Mat dst, int flags) {
  function OpenCVResult (line 1309) | OpenCVResult Mat_Split(Mat src, struct Mats* mats) {
  function OpenCVResult (line 1326) | OpenCVResult Mat_Subtract(Mat src1, Mat src2, Mat dst) {
  function Scalar (line 1335) | Scalar Mat_Trace(Mat src) {
  function OpenCVResult (line 1350) | OpenCVResult Mat_Transform(Mat src, Mat dst, Mat tm) {
  function OpenCVResult (line 1359) | OpenCVResult Mat_Transpose(Mat src, Mat dst) {
  function OpenCVResult (line 1368) | OpenCVResult Mat_TransposeND(Mat src, struct IntVector order, Mat dst) {
  function OpenCVResult (line 1382) | OpenCVResult Mat_PolarToCart(Mat magnitude, Mat degree, Mat x, Mat y, bo...
  function OpenCVResult (line 1391) | OpenCVResult Mat_Pow(Mat src, double power, Mat dst) {
  function OpenCVResult (line 1400) | OpenCVResult Mat_Phase(Mat x, Mat y, Mat angle, bool angleInDegrees) {
  function Scalar (line 1409) | Scalar Mat_Sum(Mat src) {
  function TermCriteria (line 1425) | TermCriteria TermCriteria_New(int typ, int maxCount, double epsilon) {
  function Contours_Close (line 1434) | void Contours_Close(struct Contours cs) {
  function CStrings_Close (line 1442) | void CStrings_Close(struct CStrings cstrs) {
  function KeyPoints_Close (line 1449) | void KeyPoints_Close(struct KeyPoints ks) {
  function Points_Close (line 1453) | void Points_Close(Points ps) {
  function Point_Close (line 1461) | void Point_Close(Point p) {}
  function Points2f_Close (line 1463) | void Points2f_Close(Points2f ps) {
  function Point2f_Close (line 1471) | void Point2f_Close(Point2f p) {}
  function Rects_Close (line 1473) | void Rects_Close(struct Rects rs) {
  function DMatches_Close (line 1477) | void DMatches_Close(struct DMatches ds) {
  function MultiDMatches_Close (line 1481) | void MultiDMatches_Close(struct MultiDMatches mds) {
  function MultiDMatches_get (line 1489) | struct DMatches MultiDMatches_get(struct MultiDMatches mds, int index) {
  function Mat (line 1494) | Mat Mats_get(struct Mats mats, int i) {
  function Mats_Close (line 1498) | void Mats_Close(struct Mats mats) {
  function ByteArray_Release (line 1502) | void ByteArray_Release(struct ByteArray buf) {
  function toByteArray (line 1506) | struct ByteArray toByteArray(const char* buf, int len) {
  function int64 (line 1512) | int64 GetCVTickCount() {
  function GetTickFrequency (line 1521) | double GetTickFrequency() {
  function Mat (line 1530) | Mat Mat_rowRange(Mat m,int startrow,int endrow) {
  function Mat (line 1539) | Mat Mat_colRange(Mat m,int startrow,int endrow) {
  function PointVector (line 1548) | PointVector PointVector_New() {
  function PointVector (line 1552) | PointVector PointVector_NewFromPoints(Contour points) {
  function PointVector (line 1562) | PointVector PointVector_NewFromMat(Mat mat) {
  function Point (line 1568) | Point PointVector_At(PointVector pv, int idx) {
  function PointVector_Append (line 1573) | void PointVector_Append(PointVector pv, Point p) {
  function PointVector_Size (line 1577) | int PointVector_Size(PointVector p) {
  function PointVector_Close (line 1581) | void PointVector_Close(PointVector p) {
  function PointsVector (line 1586) | PointsVector PointsVector_New() {
  function PointsVector (line 1590) | PointsVector PointsVector_NewFromPoints(Contours points) {
  function PointsVector_Size (line 1608) | int PointsVector_Size(PointsVector ps) {
  function PointVector (line 1612) | PointVector PointsVector_At(PointsVector ps, int idx) {
  function PointsVector_Append (line 1617) | void PointsVector_Append(PointsVector psv, PointVector pv) {
  function PointsVector_Close (line 1621) | void PointsVector_Close(PointsVector ps) {
  function Point2fVector (line 1626) | Point2fVector Point2fVector_New() {
  function Point2fVector (line 1630) | Point2fVector Point2fVector_NewFromPoints(Contour2f points) {
  function Point2fVector (line 1640) | Point2fVector Point2fVector_NewFromMat(Mat mat) {
  function Point2f (line 1646) | Point2f Point2fVector_At(Point2fVector pfv, int idx) {
  function Point2fVector_Size (line 1651) | int Point2fVector_Size(Point2fVector pfv) {
  function Point2fVector_Close (line 1655) | void Point2fVector_Close(Point2fVector pv) {
  function IntVector_Close (line 1661) | void IntVector_Close(struct IntVector ivec) {
  function RNG (line 1665) | RNG TheRNG() {
  function SetRNGSeed (line 1669) | void SetRNGSeed(int seed) {
  function RNG_Fill (line 1673) | void RNG_Fill(RNG rng, Mat mat, int distType, double a, double b, bool s...
  function RNG_Gaussian (line 1681) | double RNG_Gaussian(RNG rng, double sigma) {
  function RNG_Next (line 1690) | unsigned int RNG_Next(RNG rng) {
  function RandN (line 1699) | void RandN(Mat mat, Scalar mean, Scalar stddev) {
  function RandShuffle (line 1709) | void RandShuffle(Mat mat) {
  function RandShuffleWithParams (line 1717) | void RandShuffleWithParams(Mat mat, double iterFactor, RNG rng) {
  function RandU (line 1725) | void RandU(Mat mat, Scalar low, Scalar high) {
  function copyPointVectorToPoint2fVector (line 1735) | void copyPointVectorToPoint2fVector(PointVector src, Point2fVector dest) {
  function StdByteVectorInitialize (line 1741) | void StdByteVectorInitialize(void* data) {
  function StdByteVectorFree (line 1745) | void StdByteVectorFree(void *data) {
  function StdByteVectorLen (line 1749) | size_t StdByteVectorLen(void *data) {
  function Points2fVector (line 1757) | Points2fVector Points2fVector_New(){
  function Points2fVector (line 1761) | Points2fVector Points2fVector_NewFromPoints(Contours2f points) {
  function Points2fVector_Size (line 1772) | int Points2fVector_Size(Points2fVector ps) {
  function Point2fVector (line 1776) | Point2fVector Points2fVector_At(Points2fVector ps, int idx) {
  function Points2fVector_Append (line 1780) | void Points2fVector_Append(Points2fVector psv, Point2fVector pv) {
  function Points2fVector_Close (line 1784) | void Points2fVector_Close(Points2fVector ps) {
  function Point3fVector (line 1789) | Point3fVector Point3fVector_New() {
  function Point3fVector (line 1794) | Point3fVector Point3fVector_NewFromPoints(Contour3f points) {
  function Point3fVector (line 1807) | Point3fVector Point3fVector_NewFromMat(Mat mat) {
  function Point3f (line 1813) | Point3f Point3fVector_At(Point3fVector pfv, int idx) {
  function Point3fVector_Append (line 1822) | void Point3fVector_Append(Point3fVector pfv, Point3f point) {
  function Point3fVector_Size (line 1826) | int Point3fVector_Size(Point3fVector pfv) {
  function Point3fVector_Close (line 1830) | void Point3fVector_Close(Point3fVector pv) {
  function Points3fVector (line 1835) | Points3fVector Points3fVector_New(){
  function Points3fVector (line 1839) | Points3fVector Points3fVector_NewFromPoints(Contours3f points) {
  function Points3fVector_Size (line 1850) | int Points3fVector_Size(Points3fVector ps) {
  function Point3fVector (line 1854) | Point3fVector Points3fVector_At(Points3fVector ps, int idx) {
  function Points3fVector_Append (line 1858) | void Points3fVector_Append(Points3fVector psv, Point3fVector pv) {
  function Points3fVector_Close (line 1862) | void Points3fVector_Close(Points3fVector ps) {
  function SetNumThreads (line 1867) | void SetNumThreads(int n) {
  function GetNumThreads (line 1871) | int GetNumThreads() {
  function RotatedRect_Create (line 1875) | struct RotatedRect RotatedRect_Create(struct Point2f center, int width, ...
  function RotatedRect2f_Create (line 1902) | struct RotatedRect2f RotatedRect2f_Create(struct Point2f center, float w...

FILE: core.go
  function GetLastException (line 17) | func GetLastException() int {
  function GetLastExceptionMessage (line 22) | func GetLastExceptionMessage() string {
  function ClearLastException (line 27) | func ClearLastException() {
  function LastExceptionError (line 32) | func LastExceptionError() error {
  function OpenCVResult (line 42) | func OpenCVResult(result C.OpenCVResult) error {
  constant MatChannels1 (line 55) | MatChannels1 = 0
  constant MatChannels2 (line 58) | MatChannels2 = 8
  constant MatChannels3 (line 61) | MatChannels3 = 16
  constant MatChannels4 (line 64) | MatChannels4 = 24
  type MatType (line 68) | type MatType
  constant MatTypeCV8U (line 72) | MatTypeCV8U MatType = 0
  constant MatTypeCV8S (line 75) | MatTypeCV8S MatType = 1
  constant MatTypeCV16U (line 78) | MatTypeCV16U MatType = 2
  constant MatTypeCV16S (line 81) | MatTypeCV16S MatType = 3
  constant MatTypeCV16SC2 (line 84) | MatTypeCV16SC2 = MatTypeCV16S + MatChannels2
  constant MatTypeCV32S (line 87) | MatTypeCV32S MatType = 4
  constant MatTypeCV32F (line 90) | MatTypeCV32F MatType = 5
  constant MatTypeCV64F (line 93) | MatTypeCV64F MatType = 6
  constant MatTypeCV16F (line 96) | MatTypeCV16F MatType = 7
  constant MatTypeCV8UC1 (line 99) | MatTypeCV8UC1 = MatTypeCV8U + MatChannels1
  constant MatTypeCV8UC2 (line 102) | MatTypeCV8UC2 = MatTypeCV8U + MatChannels2
  constant MatTypeCV8UC3 (line 105) | MatTypeCV8UC3 = MatTypeCV8U + MatChannels3
  constant MatTypeCV8UC4 (line 108) | MatTypeCV8UC4 = MatTypeCV8U + MatChannels4
  constant MatTypeCV8SC1 (line 111) | MatTypeCV8SC1 = MatTypeCV8S + MatChannels1
  constant MatTypeCV8SC2 (line 114) | MatTypeCV8SC2 = MatTypeCV8S + MatChannels2
  constant MatTypeCV8SC3 (line 117) | MatTypeCV8SC3 = MatTypeCV8S + MatChannels3
  constant MatTypeCV8SC4 (line 120) | MatTypeCV8SC4 = MatTypeCV8S + MatChannels4
  constant MatTypeCV16UC1 (line 123) | MatTypeCV16UC1 = MatTypeCV16U + MatChannels1
  constant MatTypeCV16UC2 (line 126) | MatTypeCV16UC2 = MatTypeCV16U + MatChannels2
  constant MatTypeCV16UC3 (line 129) | MatTypeCV16UC3 = MatTypeCV16U + MatChannels3
  constant MatTypeCV16UC4 (line 132) | MatTypeCV16UC4 = MatTypeCV16U + MatChannels4
  constant MatTypeCV16SC1 (line 135) | MatTypeCV16SC1 = MatTypeCV16S + MatChannels1
  constant MatTypeCV16SC3 (line 138) | MatTypeCV16SC3 = MatTypeCV16S + MatChannels3
  constant MatTypeCV16SC4 (line 141) | MatTypeCV16SC4 = MatTypeCV16S + MatChannels4
  constant MatTypeCV32SC1 (line 144) | MatTypeCV32SC1 = MatTypeCV32S + MatChannels1
  constant MatTypeCV32SC2 (line 147) | MatTypeCV32SC2 = MatTypeCV32S + MatChannels2
  constant MatTypeCV32SC3 (line 150) | MatTypeCV32SC3 = MatTypeCV32S + MatChannels3
  constant MatTypeCV32SC4 (line 153) | MatTypeCV32SC4 = MatTypeCV32S + MatChannels4
  constant MatTypeCV32FC1 (line 156) | MatTypeCV32FC1 = MatTypeCV32F + MatChannels1
  constant MatTypeCV32FC2 (line 159) | MatTypeCV32FC2 = MatTypeCV32F + MatChannels2
  constant MatTypeCV32FC3 (line 162) | MatTypeCV32FC3 = MatTypeCV32F + MatChannels3
  constant MatTypeCV32FC4 (line 165) | MatTypeCV32FC4 = MatTypeCV32F + MatChannels4
  constant MatTypeCV64FC1 (line 168) | MatTypeCV64FC1 = MatTypeCV64F + MatChannels1
  constant MatTypeCV64FC2 (line 171) | MatTypeCV64FC2 = MatTypeCV64F + MatChannels2
  constant MatTypeCV64FC3 (line 174) | MatTypeCV64FC3 = MatTypeCV64F + MatChannels3
  constant MatTypeCV64FC4 (line 177) | MatTypeCV64FC4 = MatTypeCV64F + MatChannels4
  constant MatTypeCV16FC1 (line 180) | MatTypeCV16FC1 = MatTypeCV16F + MatChannels1
  constant MatTypeCV16FC2 (line 183) | MatTypeCV16FC2 = MatTypeCV16F + MatChannels2
  constant MatTypeCV16FC3 (line 186) | MatTypeCV16FC3 = MatTypeCV16F + MatChannels3
  constant MatTypeCV16FC4 (line 189) | MatTypeCV16FC4 = MatTypeCV16F + MatChannels4
  type CompareType (line 194) | type CompareType
  constant CompareEQ (line 198) | CompareEQ CompareType = 0
  constant CompareGT (line 201) | CompareGT CompareType = 1
  constant CompareGE (line 204) | CompareGE CompareType = 2
  constant CompareLT (line 207) | CompareLT CompareType = 3
  constant CompareLE (line 210) | CompareLE CompareType = 4
  constant CompareNE (line 213) | CompareNE CompareType = 5
  type Point2f (line 216) | type Point2f struct
  function NewPoint2f (line 221) | func NewPoint2f(x, y float32) Point2f {
  type Mat (line 234) | type Mat struct
    method FromPtr (line 392) | func (m *Mat) FromPtr(rows int, cols int, mt MatType, prow int, pcol i...
    method Ptr (line 397) | func (m *Mat) Ptr() C.Mat {
    method Empty (line 402) | func (m *Mat) Empty() bool {
    method Closed (line 408) | func (m *Mat) Closed() bool {
    method IsContinuous (line 416) | func (m *Mat) IsContinuous() bool {
    method Inv (line 424) | func (m *Mat) Inv() {
    method Col (line 430) | func (m *Mat) Col(col int) Mat {
    method Row (line 436) | func (m *Mat) Row(row int) Mat {
    method Copy (line 444) | func (m *Mat) Copy() Mat {
    method Clone (line 452) | func (m *Mat) Clone() Mat {
    method CopyTo (line 460) | func (m *Mat) CopyTo(dst *Mat) error {
    method CopyToWithMask (line 468) | func (m *Mat) CopyToWithMask(dst *Mat, mask Mat) error {
    method ConvertTo (line 476) | func (m *Mat) ConvertTo(dst *Mat, mt MatType) error {
    method ConvertToWithParams (line 480) | func (m *Mat) ConvertToWithParams(dst *Mat, mt MatType, alpha, beta fl...
    method Total (line 488) | func (m *Mat) Total() int {
    method Size (line 496) | func (m *Mat) Size() (dims []int) {
    method ToBytes (line 518) | func (m *Mat) ToBytes() []byte {
    method DataPtrUint8 (line 527) | func (m *Mat) DataPtrUint8() ([]uint8, error) {
    method DataPtrInt8 (line 545) | func (m *Mat) DataPtrInt8() ([]int8, error) {
    method DataPtrUint16 (line 567) | func (m *Mat) DataPtrUint16() ([]uint16, error) {
    method DataPtrInt16 (line 589) | func (m *Mat) DataPtrInt16() ([]int16, error) {
    method DataPtrFloat32 (line 611) | func (m *Mat) DataPtrFloat32() ([]float32, error) {
    method DataPtrFloat64 (line 633) | func (m *Mat) DataPtrFloat64() ([]float64, error) {
    method Region (line 654) | func (m *Mat) Region(rio image.Rectangle) Mat {
    method Reshape (line 669) | func (m *Mat) Reshape(cn int, rows int) Mat {
    method ReshapeWithSize (line 677) | func (m *Mat) ReshapeWithSize(cn int, dims []int) Mat {
    method ConvertFp16 (line 695) | func (m *Mat) ConvertFp16() Mat {
    method Mean (line 702) | func (m *Mat) Mean() Scalar {
    method MeanWithMask (line 710) | func (m *Mat) MeanWithMask(mask Mat) Scalar {
    method Sqrt (line 719) | func (m *Mat) Sqrt() Mat {
    method Sum (line 727) | func (m *Mat) Sum() Scalar {
    method PatchNaNs (line 736) | func (m *Mat) PatchNaNs() error {
    method Rows (line 752) | func (m *Mat) Rows() int {
    method Cols (line 757) | func (m *Mat) Cols() int {
    method Channels (line 762) | func (m *Mat) Channels() int {
    method Type (line 767) | func (m *Mat) Type() MatType {
    method Step (line 772) | func (m *Mat) Step() int {
    method ElemSize (line 777) | func (m *Mat) ElemSize() int {
    method GetUCharAt (line 783) | func (m *Mat) GetUCharAt(row int, col int) uint8 {
    method GetUCharAt3 (line 789) | func (m *Mat) GetUCharAt3(x, y, z int) uint8 {
    method GetSCharAt (line 795) | func (m *Mat) GetSCharAt(row int, col int) int8 {
    method GetSCharAt3 (line 801) | func (m *Mat) GetSCharAt3(x, y, z int) int8 {
    method GetShortAt (line 807) | func (m *Mat) GetShortAt(row int, col int) int16 {
    method GetShortAt3 (line 813) | func (m *Mat) GetShortAt3(x, y, z int) int16 {
    method GetIntAt (line 819) | func (m *Mat) GetIntAt(row int, col int) int32 {
    method GetIntAt3 (line 825) | func (m *Mat) GetIntAt3(x, y, z int) int32 {
    method GetFloatAt (line 831) | func (m *Mat) GetFloatAt(row int, col int) float32 {
    method GetFloatAt3 (line 837) | func (m *Mat) GetFloatAt3(x, y, z int) float32 {
    method GetDoubleAt (line 843) | func (m *Mat) GetDoubleAt(row int, col int) float64 {
    method GetDoubleAt3 (line 849) | func (m *Mat) GetDoubleAt3(x, y, z int) float64 {
    method SetTo (line 854) | func (m *Mat) SetTo(s Scalar) {
    method SetUCharAt (line 867) | func (m *Mat) SetUCharAt(row int, col int, val uint8) {
    method SetUCharAt3 (line 873) | func (m *Mat) SetUCharAt3(x, y, z int, val uint8) {
    method SetSCharAt (line 879) | func (m *Mat) SetSCharAt(row int, col int, val int8) {
    method SetSCharAt3 (line 885) | func (m *Mat) SetSCharAt3(x, y, z int, val int8) {
    method SetShortAt (line 891) | func (m *Mat) SetShortAt(row int, col int, val int16) {
    method SetShortAt3 (line 897) | func (m *Mat) SetShortAt3(x, y, z int, val int16) {
    method SetIntAt (line 903) | func (m *Mat) SetIntAt(row int, col int, val int32) {
    method SetIntAt3 (line 909) | func (m *Mat) SetIntAt3(x, y, z int, val int32) {
    method SetFloatAt (line 915) | func (m *Mat) SetFloatAt(row int, col int, val float32) {
    method SetFloatAt3 (line 921) | func (m *Mat) SetFloatAt3(x, y, z int, val float32) {
    method SetDoubleAt (line 927) | func (m *Mat) SetDoubleAt(row int, col int, val float64) {
    method SetDoubleAt3 (line 933) | func (m *Mat) SetDoubleAt3(x, y, z int, val float64) {
    method AddUChar (line 939) | func (m *Mat) AddUChar(val uint8) {
    method SubtractUChar (line 945) | func (m *Mat) SubtractUChar(val uint8) {
    method MultiplyUChar (line 951) | func (m *Mat) MultiplyUChar(val uint8) {
    method DivideUChar (line 957) | func (m *Mat) DivideUChar(val uint8) {
    method AddFloat (line 963) | func (m *Mat) AddFloat(val float32) {
    method SubtractFloat (line 969) | func (m *Mat) SubtractFloat(val float32) {
    method MultiplyFloat (line 975) | func (m *Mat) MultiplyFloat(val float32) {
    method DivideFloat (line 981) | func (m *Mat) DivideFloat(val float32) {
    method MultiplyMatrix (line 986) | func (m *Mat) MultiplyMatrix(x Mat) Mat {
    method T (line 992) | func (m *Mat) T() Mat {
    method GetVecbAt (line 2118) | func (m *Mat) GetVecbAt(row int, col int) Vecb {
    method GetVecfAt (line 2134) | func (m *Mat) GetVecfAt(row int, col int) Vecf {
    method GetVecdAt (line 2150) | func (m *Mat) GetVecdAt(row int, col int) Vecd {
    method GetVeciAt (line 2166) | func (m *Mat) GetVeciAt(row int, col int) Veci {
    method RowRange (line 2554) | func (m *Mat) RowRange(start, end int) Mat {
    method ColRange (line 2562) | func (m *Mat) ColRange(start, end int) Mat {
  function NewMat (line 242) | func NewMat() Mat {
  function NewMatFromCMat (line 247) | func NewMatFromCMat(c_mat unsafe.Pointer) Mat {
  function NewMatWithSize (line 252) | func NewMatWithSize(rows int, cols int, mt MatType) Mat {
  function NewMatWithSizes (line 257) | func NewMatWithSizes(sizes []int, mt MatType) Mat {
  function NewMatWithSizesWithScalar (line 271) | func NewMatWithSizesWithScalar(sizes []int, mt MatType, s Scalar) Mat {
  function NewMatWithSizesFromBytes (line 291) | func NewMatWithSizesFromBytes(sizes []int, mt MatType, data []byte) (Mat...
  function NewMatFromScalar (line 309) | func NewMatFromScalar(s Scalar, mt MatType) Mat {
  function NewMatWithSizeFromScalar (line 322) | func NewMatWithSizeFromScalar(s Scalar, rows int, cols int, mt MatType) ...
  function NewMatFromBytes (line 334) | func NewMatFromBytes(rows int, cols int, mt MatType, data []byte) (Mat, ...
  function NewMatFromPoint2fVector (line 353) | func NewMatFromPoint2fVector(pfv Point2fVector, copyData bool) Mat {
  function NewMatFromPointVector (line 359) | func NewMatFromPointVector(pv PointVector, copyData bool) Mat {
  function Eye (line 369) | func Eye(rows int, cols int, mt MatType) Mat {
  function Zeros (line 378) | func Zeros(rows int, cols int, mt MatType) Mat {
  function Ones (line 387) | func Ones(rows int, cols int, mt MatType) Mat {
  function LUT (line 747) | func LUT(src, wbLUT Mat, dst *Mat) error {
  function AbsDiff (line 1001) | func AbsDiff(src1, src2 Mat, dst *Mat) error {
  function Add (line 1009) | func Add(src1, src2 Mat, dst *Mat) error {
  function AddWeighted (line 1017) | func AddWeighted(src1 Mat, alpha float64, src2 Mat, beta float64, gamma ...
  function BitwiseAnd (line 1027) | func BitwiseAnd(src1 Mat, src2 Mat, dst *Mat) error {
  function BitwiseAndWithMask (line 1037) | func BitwiseAndWithMask(src1 Mat, src2 Mat, dst *Mat, mask Mat) error {
  function BitwiseNot (line 1045) | func BitwiseNot(src1 Mat, dst *Mat) error {
  function BitwiseNotWithMask (line 1053) | func BitwiseNotWithMask(src1 Mat, dst *Mat, mask Mat) error {
  function BitwiseOr (line 1062) | func BitwiseOr(src1 Mat, src2 Mat, dst *Mat) error {
  function BitwiseOrWithMask (line 1071) | func BitwiseOrWithMask(src1 Mat, src2 Mat, dst *Mat, mask Mat) error {
  function BitwiseXor (line 1080) | func BitwiseXor(src1 Mat, src2 Mat, dst *Mat) error {
  function BitwiseXorWithMask (line 1089) | func BitwiseXorWithMask(src1 Mat, src2 Mat, dst *Mat, mask Mat) error {
  function BatchDistance (line 1097) | func BatchDistance(src1 Mat, src2 Mat, dist Mat, dtype MatType, nidx Mat...
  function BorderInterpolate (line 1105) | func BorderInterpolate(p int, len int, borderType CovarFlags) int {
  type CovarFlags (line 1114) | type CovarFlags
  constant CovarScrambled (line 1118) | CovarScrambled CovarFlags = 0
  constant CovarNormal (line 1121) | CovarNormal CovarFlags = 1
  constant CovarUseAvg (line 1124) | CovarUseAvg CovarFlags = 2
  constant CovarScale (line 1127) | CovarScale CovarFlags = 4
  constant CovarRows (line 1130) | CovarRows CovarFlags = 8
  constant CovarCols (line 1133) | CovarCols CovarFlags = 16
  function CalcCovarMatrix (line 1140) | func CalcCovarMatrix(samples Mat, covar *Mat, mean *Mat, flags CovarFlag...
  function CartToPolar (line 1148) | func CartToPolar(x Mat, y Mat, magnitude *Mat, angle *Mat, angleInDegree...
  function CheckRange (line 1156) | func CheckRange(src Mat) bool {
  function Compare (line 1165) | func Compare(src1 Mat, src2 Mat, dst *Mat, ct CompareType) error {
  function CountNonZero (line 1173) | func CountNonZero(src Mat) int {
  function CompleteSymm (line 1181) | func CompleteSymm(m Mat, lowerToUpper bool) error {
  function ConvertScaleAbs (line 1189) | func ConvertScaleAbs(src Mat, dst *Mat, alpha float64, beta float64) err...
  function CopyMakeBorder (line 1197) | func CopyMakeBorder(src Mat, dst *Mat, top int, bottom int, left int, ri...
  type DftFlags (line 1213) | type DftFlags
  constant DftForward (line 1217) | DftForward DftFlags = 0
  constant DftInverse (line 1220) | DftInverse DftFlags = 1
  constant DftScale (line 1223) | DftScale DftFlags = 2
  constant DftRows (line 1226) | DftRows DftFlags = 4
  constant DftComplexOutput (line 1229) | DftComplexOutput DftFlags = 16
  constant DftRealOutput (line 1234) | DftRealOutput DftFlags = 32
  constant DftComplexInput (line 1237) | DftComplexInput DftFlags = 64
  constant DctInverse (line 1240) | DctInverse = DftInverse
  constant DctRows (line 1243) | DctRows = DftRows
  function DCT (line 1250) | func DCT(src Mat, dst *Mat, flags DftFlags) error {
  function Determinant (line 1258) | func Determinant(src Mat) float64 {
  function DFT (line 1267) | func DFT(src Mat, dst *Mat, flags DftFlags) error {
  function Divide (line 1276) | func Divide(src1 Mat, src2 Mat, dst *Mat) error {
  function Eigen (line 1284) | func Eigen(src Mat, eigenvalues *Mat, eigenvectors *Mat) bool {
  function EigenNonSymmetric (line 1293) | func EigenNonSymmetric(src Mat, eigenvalues *Mat, eigenvectors *Mat) err...
  function PCABackProject (line 1301) | func PCABackProject(data Mat, mean Mat, eigenvectors Mat, result *Mat) e...
  function PCACompute (line 1314) | func PCACompute(src Mat, mean *Mat, eigenvectors *Mat, eigenvalues *Mat,...
  function PCAProject (line 1322) | func PCAProject(data Mat, mean Mat, eigenvectors Mat, result *Mat) error {
  function PSNR (line 1330) | func PSNR(src1 Mat, src2 Mat) float64 {
  function SVBackSubst (line 1338) | func SVBackSubst(w Mat, u Mat, vt Mat, rhs Mat, dst *Mat) error {
  function SVDecomp (line 1346) | func SVDecomp(src Mat, w *Mat, u *Mat, vt *Mat) error {
  function Exp (line 1354) | func Exp(src Mat, dst *Mat) error {
  function ExtractChannel (line 1362) | func ExtractChannel(src Mat, dst *Mat, coi int) error {
  function FindNonZero (line 1370) | func FindNonZero(src Mat, idx *Mat) error {
  function Flip (line 1378) | func Flip(src Mat, dst *Mat, flipCode int) error {
  function Gemm (line 1386) | func Gemm(src1, src2 Mat, alpha float64, src3 Mat, beta float64, dst *Ma...
  function GetOptimalDFTSize (line 1395) | func GetOptimalDFTSize(vecsize int) int {
  function Hconcat (line 1403) | func Hconcat(src1, src2 Mat, dst *Mat) error {
  function Vconcat (line 1411) | func Vconcat(src1, src2 Mat, dst *Mat) error {
  type RotateFlag (line 1419) | type RotateFlag
  constant Rotate90Clockwise (line 1423) | Rotate90Clockwise RotateFlag = 0
  constant Rotate180Clockwise (line 1425) | Rotate180Clockwise RotateFlag = 1
  constant Rotate90CounterClockwise (line 1427) | Rotate90CounterClockwise RotateFlag = 2
  function Rotate (line 1434) | func Rotate(src Mat, dst *Mat, code RotateFlag) error {
  function IDCT (line 1442) | func IDCT(src Mat, dst *Mat, flags int) error {
  function IDFT (line 1450) | func IDFT(src Mat, dst *Mat, flags, nonzeroRows int) error {
  function InRange (line 1458) | func InRange(src, lb, ub Mat, dst *Mat) error {
  function InRangeWithScalar (line 1466) | func InRangeWithScalar(src Mat, lb, ub Scalar, dst *Mat) error {
  function InsertChannel (line 1489) | func InsertChannel(src Mat, dst *Mat, coi int) error {
  function Invert (line 1497) | func Invert(src Mat, dst *Mat, flags SolveDecompositionFlags) float64 {
  type KMeansFlags (line 1506) | type KMeansFlags
  constant KMeansRandomCenters (line 1510) | KMeansRandomCenters KMeansFlags = 0
  constant KMeansPPCenters (line 1512) | KMeansPPCenters KMeansFlags = 1
  constant KMeansUseInitialLabels (line 1515) | KMeansUseInitialLabels KMeansFlags = 2
  function KMeans (line 1522) | func KMeans(data Mat, k int, bestLabels *Mat, criteria TermCriteria, att...
  function KMeansPoints (line 1531) | func KMeansPoints(points PointVector, k int, bestLabels *Mat, criteria T...
  function Log (line 1540) | func Log(src Mat, dst *Mat) error {
  function Magnitude (line 1548) | func Magnitude(x, y Mat, magnitude *Mat) error {
  function Mahalanobis (line 1556) | func Mahalanobis(v1, v2, icovar Mat) float64 {
  function MulTransposed (line 1564) | func MulTransposed(src Mat, dest *Mat, ata bool) error {
  function Max (line 1572) | func Max(src1, src2 Mat, dst *Mat) error {
  function MeanStdDev (line 1580) | func MeanStdDev(src Mat, dst *Mat, dstStdDev *Mat) error {
  function MeanStdDevWithMask (line 1588) | func MeanStdDevWithMask(src Mat, dstMean *Mat, dstStdDev *Mat, mask Mat)...
  function Merge (line 1596) | func Merge(mv []Mat, dst *Mat) error {
  function Min (line 1613) | func Min(src1, src2 Mat, dst *Mat) error {
  function MinMaxIdx (line 1621) | func MinMaxIdx(input Mat) (minVal, maxVal float32, minIdx, maxIdx int) {
  function MinMaxLoc (line 1636) | func MinMaxLoc(input Mat) (minVal, maxVal float32, minLoc, maxLoc image....
  function MinMaxLocWithMask (line 1654) | func MinMaxLocWithMask(input, mask Mat) (minVal, maxVal float32, minLoc,...
  function MixChannels (line 1672) | func MixChannels(src []Mat, dst []Mat, fromTo []int) error {
  function MulSpectrums (line 1713) | func MulSpectrums(a Mat, b Mat, dst *Mat, flags DftFlags) error {
  function Multiply (line 1722) | func Multiply(src1 Mat, src2 Mat, dst *Mat) error {
  function MultiplyWithParams (line 1731) | func MultiplyWithParams(src1 Mat, src2 Mat, dst *Mat, scale float64, dty...
  type NormType (line 1739) | type NormType
  constant NormInf (line 1743) | NormInf NormType = 1
  constant NormL1 (line 1746) | NormL1 NormType = 2
  constant NormL2 (line 1749) | NormL2 NormType = 4
  constant NormL2Sqr (line 1752) | NormL2Sqr NormType = 5
  constant NormHamming (line 1755) | NormHamming NormType = 6
  constant NormHamming2 (line 1758) | NormHamming2 NormType = 7
  constant NormTypeMask (line 1761) | NormTypeMask NormType = 7
  constant NormRelative (line 1764) | NormRelative NormType = 8
  constant NormMinMax (line 1767) | NormMinMax NormType = 32
  function Normalize (line 1774) | func Normalize(src Mat, dst *Mat, alpha float64, beta float64, typ NormT...
  function Norm (line 1782) | func Norm(src1 Mat, normType NormType) float64 {
  function NormWithMats (line 1790) | func NormWithMats(src1 Mat, src2 Mat, normType NormType) float64 {
  function PerspectiveTransform (line 1798) | func PerspectiveTransform(src Mat, dst *Mat, tm Mat) error {
  type TermCriteriaType (line 1806) | type TermCriteriaType
  constant Count (line 1810) | Count TermCriteriaType = 1
  constant MaxIter (line 1813) | MaxIter TermCriteriaType = 1
  constant EPS (line 1817) | EPS TermCriteriaType = 2
  type SolveDecompositionFlags (line 1820) | type SolveDecompositionFlags
  constant SolveDecompositionLu (line 1824) | SolveDecompositionLu SolveDecompositionFlags = 0
  constant SolveDecompositionSvd (line 1827) | SolveDecompositionSvd SolveDecompositionFlags = 1
  constant SolveDecompositionEing (line 1830) | SolveDecompositionEing SolveDecompositionFlags = 2
  constant SolveDecompositionCholesky (line 1833) | SolveDecompositionCholesky SolveDecompositionFlags = 3
  constant SolveDecompositionQr (line 1836) | SolveDecompositionQr SolveDecompositionFlags = 4
  constant SolveDecompositionNormal (line 1841) | SolveDecompositionNormal SolveDecompositionFlags = 5
  function Solve (line 1848) | func Solve(src1 Mat, src2 Mat, dst *Mat, flags SolveDecompositionFlags) ...
  function SolveCubic (line 1856) | func SolveCubic(coeffs Mat, roots *Mat) int {
  function SolvePoly (line 1864) | func SolvePoly(coeffs Mat, roots *Mat, maxIters int) float64 {
  type ReduceTypes (line 1868) | type ReduceTypes
  constant ReduceSum (line 1872) | ReduceSum ReduceTypes = 0
  constant ReduceAvg (line 1875) | ReduceAvg ReduceTypes = 1
  constant ReduceMax (line 1878) | ReduceMax ReduceTypes = 2
  constant ReduceMin (line 1881) | ReduceMin ReduceTypes = 3
  function Reduce (line 1888) | func Reduce(src Mat, dst *Mat, dim int, rType ReduceTypes, dType MatType...
  function ReduceArgMax (line 1896) | func ReduceArgMax(src Mat, dst *Mat, axis int, lastIndex bool) error {
  function ReduceArgMin (line 1904) | func ReduceArgMin(src Mat, dst *Mat, axis int, lastIndex bool) error {
  function Repeat (line 1912) | func Repeat(src Mat, nY int, nX int, dst *Mat) error {
  function ScaleAdd (line 1920) | func ScaleAdd(src1 Mat, alpha float64, src2 Mat, dst *Mat) error {
  function SetIdentity (line 1928) | func SetIdentity(src Mat, scalar float64) error {
  type SortFlags (line 1932) | type SortFlags
  constant SortEveryRow (line 1936) | SortEveryRow SortFlags = 0
  constant SortEveryColumn (line 1939) | SortEveryColumn SortFlags = 1
  constant SortAscending (line 1942) | SortAscending SortFlags = 0
  constant SortDescending (line 1945) | SortDescending SortFlags = 16
  function Sort (line 1952) | func Sort(src Mat, dst *Mat, flags SortFlags) error {
  function SortIdx (line 1961) | func SortIdx(src Mat, dst *Mat, flags SortFlags) error {
  function Split (line 1970) | func Split(src Mat) (mv []Mat) {
  function Subtract (line 1986) | func Subtract(src1 Mat, src2 Mat, dst *Mat) error {
  function Trace (line 1994) | func Trace(src Mat) Scalar {
  function Transform (line 2003) | func Transform(src Mat, dst *Mat, tm Mat) error {
  function Transpose (line 2011) | func Transpose(src Mat, dst *Mat) error {
  function TransposeND (line 2019) | func TransposeND(src Mat, order []int, dst *Mat) error {
  function Pow (line 2037) | func Pow(src Mat, power float64, dst *Mat) error {
  function PolarToCart (line 2045) | func PolarToCart(magnitude Mat, degree Mat, x *Mat, y *Mat, angleInDegre...
  function Phase (line 2053) | func Phase(x, y Mat, angle *Mat, angleInDegrees bool) error {
  type TermCriteria (line 2061) | type TermCriteria struct
    method Ptr (line 2071) | func (tc *TermCriteria) Ptr() C.TermCriteria {
  function NewTermCriteria (line 2066) | func NewTermCriteria(typ TermCriteriaType, maxCount int, epsilon float64...
  type Scalar (line 2079) | type Scalar struct
  function NewScalar (line 2087) | func NewScalar(v1 float64, v2 float64, v3 float64, v4 float64) Scalar {
  type KeyPoint (line 2096) | type KeyPoint struct
  type DMatch (line 2106) | type DMatch struct
  type Vecb (line 2114) | type Vecb
  type Vecf (line 2130) | type Vecf
  type Vecd (line 2146) | type Vecd
  type Veci (line 2162) | type Veci
  type PointVector (line 2179) | type PointVector struct
    method IsNil (line 2217) | func (pv PointVector) IsNil() bool {
    method Size (line 2222) | func (pv PointVector) Size() int {
    method At (line 2227) | func (pv PointVector) At(idx int) image.Point {
    method Append (line 2237) | func (pv PointVector) Append(point image.Point) {
    method ToPoints (line 2249) | func (pv PointVector) ToPoints() []image.Point {
    method Close (line 2259) | func (pv PointVector) Close() {
  function NewPointVector (line 2184) | func NewPointVector() PointVector {
  function NewPointVectorFromPoints (line 2190) | func NewPointVectorFromPoints(pts []image.Point) PointVector {
  function NewPointVectorFromMat (line 2212) | func NewPointVectorFromMat(mat Mat) PointVector {
  type PointsVector (line 2264) | type PointsVector struct
    method P (line 2313) | func (pvs PointsVector) P() C.PointsVector {
    method ToPoints (line 2318) | func (pvs PointsVector) ToPoints() [][]image.Point {
    method IsNil (line 2334) | func (pvs PointsVector) IsNil() bool {
    method Size (line 2339) | func (pvs PointsVector) Size() int {
    method At (line 2344) | func (pvs PointsVector) At(idx int) PointVector {
    method Append (line 2353) | func (pvs PointsVector) Append(pv PointVector) {
    method Close (line 2362) | func (pvs PointsVector) Close() {
  function NewPointsVector (line 2269) | func NewPointsVector() PointsVector {
  function NewPointsVectorFromPoints (line 2275) | func NewPointsVectorFromPoints(pts [][]image.Point) PointsVector {
  type Point2fVector (line 2368) | type Point2fVector struct
    method IsNil (line 2412) | func (pfv Point2fVector) IsNil() bool {
    method Size (line 2417) | func (pfv Point2fVector) Size() int {
    method At (line 2422) | func (pfv Point2fVector) At(idx int) Point2f {
    method ToPoints (line 2432) | func (pfv Point2fVector) ToPoints() []Point2f {
    method Close (line 2442) | func (pfv Point2fVector) Close() {
  function NewPoint2fVector (line 2373) | func NewPoint2fVector() Point2fVector {
  function NewPoint2fVectorFromPoints (line 2379) | func NewPoint2fVectorFromPoints(pts []Point2f) Point2fVector {
  function NewPoint2fVectorFromMat (line 2407) | func NewPoint2fVectorFromMat(mat Mat) Point2fVector {
  function GetTickCount (line 2450) | func GetTickCount() float64 {
  function GetTickFrequency (line 2458) | func GetTickFrequency() float64 {
  function toByteArray (line 2462) | func toByteArray(b []byte) (*C.struct_ByteArray, error) {
  function toGoBytes (line 2472) | func toGoBytes(b C.struct_ByteArray) []byte {
  function toGoStrings (line 2477) | func toGoStrings(strs C.CStrings) []string {
  function toRectangles (line 2487) | func toRectangles(ret C.Rects) []image.Rectangle {
  function toRect (line 2504) | func toRect(rect C.Rect) image.Rectangle {
  function toCPoints (line 2508) | func toCPoints(points []image.Point) C.struct_Points {
  function toCPoints2f (line 2523) | func toCPoints2f(points []Point2f) C.struct_Points2f {
  function toCStrings (line 2538) | func toCStrings(strs []string) C.struct_CStrings {
  type RNG (line 2573) | type RNG struct
    method Fill (line 2608) | func (r *RNG) Fill(mat *Mat, distType RNGDistType, a, b float64, satur...
    method Gaussian (line 2617) | func (r *RNG) Gaussian(sigma float64) float64 {
    method Next (line 2626) | func (r *RNG) Next() uint {
  type RNGDistType (line 2577) | type RNGDistType
  constant RNGDistUniform (line 2581) | RNGDistUniform RNGDistType = 0
  constant RNGDistNormal (line 2583) | RNGDistNormal RNGDistType = 1
  function TheRNG (line 2590) | func TheRNG() RNG {
  function SetRNGSeed (line 2600) | func SetRNGSeed(seed int) {
  function RandN (line 2634) | func RandN(mat *Mat, mean, stddev Scalar) {
  function RandShuffle (line 2655) | func RandShuffle(mat *Mat) {
  function RandShuffleWithParams (line 2663) | func RandShuffleWithParams(mat *Mat, iterFactor float64, rng RNG) {
  function RandU (line 2672) | func RandU(mat *Mat, low, high Scalar) {
  type NativeByteBuffer (line 2689) | type NativeByteBuffer struct
    method nativePointer (line 2700) | func (buffer *NativeByteBuffer) nativePointer() unsafe.Pointer {
    method dataPointer (line 2704) | func (buffer *NativeByteBuffer) dataPointer() unsafe.Pointer {
    method GetBytes (line 2709) | func (buffer *NativeByteBuffer) GetBytes() []byte {
    method Len (line 2720) | func (buffer *NativeByteBuffer) Len() int {
    method Close (line 2725) | func (buffer *NativeByteBuffer) Close() {
  function newNativeByteBuffer (line 2694) | func newNativeByteBuffer() *NativeByteBuffer {
  type Points2fVector (line 2730) | type Points2fVector struct
    method P (line 2751) | func (pvs Points2fVector) P() C.Points2fVector {
    method ToPoints (line 2756) | func (pvs Points2fVector) ToPoints() [][]Point2f {
    method IsNil (line 2767) | func (pvs Points2fVector) IsNil() bool {
    method Size (line 2772) | func (pvs Points2fVector) Size() int {
    method At (line 2777) | func (pvs Points2fVector) At(idx int) Point2fVector {
    method Append (line 2785) | func (pvs Points2fVector) Append(pv Point2fVector) {
    method Close (line 2792) | func (pvs Points2fVector) Close() {
  function NewPoints2fVector (line 2735) | func NewPoints2fVector() Points2fVector {
  function NewPoints2fVectorFromPoints (line 2741) | func NewPoints2fVectorFromPoints(pts [][]Point2f) Points2fVector {
  type Point3f (line 2796) | type Point3f struct
  function NewPoint3f (line 2802) | func NewPoint3f(x, y, z float32) Point3f {
  type Point3fVector (line 2807) | type Point3fVector struct
    method IsNil (line 2852) | func (pfv Point3fVector) IsNil() bool {
    method Size (line 2857) | func (pfv Point3fVector) Size() int {
    method At (line 2862) | func (pfv Point3fVector) At(idx int) Point3f {
    method Append (line 2870) | func (pfv Point3fVector) Append(point Point3f) {
    method ToPoints (line 2879) | func (pfv Point3fVector) ToPoints() []Point3f {
    method Close (line 2888) | func (pfv Point3fVector) Close() {
  function NewPoint3fVector (line 2812) | func NewPoint3fVector() Point3fVector {
  function NewPoint3fVectorFromPoints (line 2818) | func NewPoint3fVectorFromPoints(pts []Point3f) Point3fVector {
  function NewPoint3fVectorFromMat (line 2847) | func NewPoint3fVectorFromMat(mat Mat) Point3fVector {
  type Points3fVector (line 2893) | type Points3fVector struct
    method ToPoints (line 2915) | func (pvs Points3fVector) ToPoints() [][]Point3f {
    method IsNil (line 2926) | func (pvs Points3fVector) IsNil() bool {
    method Size (line 2931) | func (pvs Points3fVector) Size() int {
    method At (line 2936) | func (pvs Points3fVector) At(idx int) Point3fVector {
    method Append (line 2944) | func (pvs Points3fVector) Append(pv Point3fVector) {
    method Close (line 2951) | func (pvs Points3fVector) Close() {
  function NewPoints3fVector (line 2898) | func NewPoints3fVector() Points3fVector {
  function NewPoints3fVectorFromPoints (line 2904) | func NewPoints3fVectorFromPoints(pts [][]Point3f) Points3fVector {
  function SetNumThreads (line 2956) | func SetNumThreads(n int) {
  function GetNumThreads (line 2961) | func GetNumThreads() int {
  function NewRotatedRect (line 2969) | func NewRotatedRect(center image.Point, width int, height int, angle flo...
  function NewRotatedRect2f (line 2994) | func NewRotatedRect2f(center Point2f, width float32, height float32, ang...

FILE: core.h
  type CStrings (line 8) | typedef struct CStrings {
  type ByteArray (line 13) | typedef struct ByteArray {
  type IntVector (line 19) | typedef struct IntVector {
  type FloatVector (line 25) | typedef struct FloatVector {
  type RawData (line 35) | typedef struct RawData {
  type Point2f (line 42) | typedef struct Point2f {
  type Point3f (line 47) | typedef struct Point3f {
  type Point (line 54) | typedef struct Point {
  type Points (line 60) | typedef struct Points {
  type Points2f (line 66) | typedef struct Points2f {
  type Points3f (line 71) | typedef struct Points3f {
  type Points (line 77) | typedef Points Contour;
  type Points2f (line 81) | typedef Points2f Contour2f;
  type Contours2f (line 83) | typedef struct Contours2f {
  type Points3f (line 89) | typedef Points3f Contour3f;
  type Contours3f (line 92) | typedef struct Contours3f {
  type Contours (line 99) | typedef struct Contours {
  type Rect (line 105) | typedef struct Rect {
  type Rect2f (line 113) | typedef struct Rect2f {
  type Rects (line 121) | typedef struct Rects {
  type Size (line 127) | typedef struct Size {
  type Size2f (line 133) | typedef struct Size2f {
  type RotatedRect (line 139) | typedef struct RotatedRect {
  type RotatedRect2f (line 148) | typedef struct RotatedRect2f {
  type Scalar (line 157) | typedef struct Scalar {
  type KeyPoint (line 165) | typedef struct KeyPoint {
  type KeyPoints (line 176) | typedef struct KeyPoints {
  type SimpleBlobDetectorParams (line 182) | typedef struct SimpleBlobDetectorParams {
  type GFTTDetectorParams (line 204) | typedef struct GFTTDetectorParams {
  type DMatch (line 214) | typedef struct DMatch {
  type DMatches (line 222) | typedef struct DMatches {
  type MultiDMatches (line 228) | typedef struct MultiDMatches {
  type Moment (line 234) | typedef struct Moment {
  type OpenCVResult (line 268) | typedef struct OpenCVResult {
  type cv (line 279) | typedef cv::Mat* Mat;
  type cv (line 280) | typedef cv::TermCriteria* TermCriteria;
  type cv (line 281) | typedef cv::RNG* RNG;
  type std (line 282) | typedef std::vector< cv::Point >* PointVector;
  type std (line 283) | typedef std::vector< std::vector< cv::Point > >* PointsVector;
  type std (line 284) | typedef std::vector< cv::Point2f >* Point2fVector;
  type std (line 285) | typedef std::vector< std::vector< cv::Point2f> >* Points2fVector;
  type std (line 286) | typedef std::vector< cv::Point3f >* Point3fVector;
  type std (line 287) | typedef std::vector< std::vector< cv::Point3f > >* Points3fVector;
  type cv (line 288) | typedef cv::RotatedRect* RotatedRectT;
  type Mats (line 307) | typedef struct Mats {
  type Mats (line 312) | struct Mats
  type DMatches (line 313) | struct DMatches
  type MultiDMatches (line 313) | struct MultiDMatches
  type ByteArray (line 315) | struct ByteArray
  type ByteArray (line 316) | struct ByteArray
  type Contours (line 318) | struct Contours
  type KeyPoints (line 319) | struct KeyPoints
  type Rects (line 320) | struct Rects
  type Mats (line 321) | struct Mats
  type Point (line 322) | struct Point
  type Points (line 323) | struct Points
  type Point2f (line 324) | struct Point2f
  type Points2f (line 325) | struct Points2f
  type DMatches (line 326) | struct DMatches
  type MultiDMatches (line 327) | struct MultiDMatches
  type IntVector (line 331) | struct IntVector
  type ByteArray (line 333) | struct ByteArray
  type ByteArray (line 336) | struct ByteArray
  type ByteArray (line 354) | struct ByteArray
  type ByteArray (line 355) | struct ByteArray
  type IntVector (line 358) | struct IntVector
  type Mats (line 474) | struct Mats
  type Mats (line 479) | struct Mats
  type Mats (line 479) | struct Mats
  type IntVector (line 479) | struct IntVector
  type Mats (line 499) | struct Mats
  type IntVector (line 504) | struct IntVector
  type IntVector (line 540) | struct IntVector
  type CStrings (line 542) | struct CStrings
  type RotatedRect (line 594) | struct RotatedRect
  type Point2f (line 594) | struct Point2f
  type RotatedRect2f (line 595) | struct RotatedRect2f
  type Point2f (line 595) | struct Point2f

FILE: core_string.go
  method String (line 3) | func (c MatType) String() string {
  method String (line 57) | func (c CompareType) String() string {
  method String (line 75) | func (c CovarFlags) String() string {
  method String (line 93) | func (c DftFlags) String() string {
  method String (line 113) | func (c RotateFlag) String() string {
  method String (line 125) | func (c KMeansFlags) String() string {
  method String (line 137) | func (c NormType) String() string {
  method String (line 159) | func (c TermCriteriaType) String() string {
  method String (line 169) | func (c SolveDecompositionFlags) String() string {
  method String (line 187) | func (c ReduceTypes) String() string {
  method String (line 201) | func (c SortFlags) String() string {

FILE: core_test.go
  function TestMat (line 14) | func TestMat(t *testing.T) {
  function TestMatClosed (line 22) | func TestMatClosed(t *testing.T) {
  function TestMatWithSizes (line 30) | func TestMatWithSizes(t *testing.T) {
  function TestMatFromBytesWithEmptyByteSlice (line 193) | func TestMatFromBytesWithEmptyByteSlice(t *testing.T) {
  function TestMatFromBytesSliceGarbageCollected (line 206) | func TestMatFromBytesSliceGarbageCollected(t *testing.T) {
  function TestMatWithSize (line 226) | func TestMatWithSize(t *testing.T) {
  function TestMatWithSizeFromScalar (line 254) | func TestMatWithSizeFromScalar(t *testing.T) {
  function TestMatFromPtr (line 307) | func TestMatFromPtr(t *testing.T) {
  function TestMatClone (line 322) | func TestMatClone(t *testing.T) {
  function TestMatCopyTo (line 336) | func TestMatCopyTo(t *testing.T) {
  function TestMatCopyToWithMask (line 352) | func TestMatCopyToWithMask(t *testing.T) {
  function TestMatToBytes (line 387) | func TestMatToBytes(t *testing.T) {
  function TestMatEye (line 425) | func TestMatEye(t *testing.T) {
  function TestMatZeros (line 447) | func TestMatZeros(t *testing.T) {
  function TestMatOnes (line 468) | func TestMatOnes(t *testing.T) {
  function TestMatDataPtr (line 487) | func TestMatDataPtr(t *testing.T) {
  function TestMatRegion (line 765) | func TestMatRegion(t *testing.T) {
  function TestMatReshape (line 779) | func TestMatReshape(t *testing.T) {
  function TestMatReshapeWithSize (line 794) | func TestMatReshapeWithSize(t *testing.T) {
  function TestMatPatchNaNs (line 809) | func TestMatPatchNaNs(t *testing.T) {
  function TestMatConvert (line 819) | func TestMatConvert(t *testing.T) {
  function TestMatConvertWithParams (line 830) | func TestMatConvertWithParams(t *testing.T) {
  function TestMatConvertFp16 (line 841) | func TestMatConvertFp16(t *testing.T) {
  function TestMatSqrt (line 851) | func TestMatSqrt(t *testing.T) {
  function TestMatMean (line 862) | func TestMatMean(t *testing.T) {
  function TestMatMeanWithMask (line 871) | func TestMatMeanWithMask(t *testing.T) {
  function TestLUT (line 882) | func TestLUT(t *testing.T) {
  function TestMatAccessors (line 904) | func TestMatAccessors(t *testing.T) {
  function TestMatMutators (line 960) | func TestMatMutators(t *testing.T) {
  function TestMatAbsDiff (line 1148) | func TestMatAbsDiff(t *testing.T) {
  function TestMatAdd (line 1161) | func TestMatAdd(t *testing.T) {
  function TestMatAddWeighted (line 1174) | func TestMatAddWeighted(t *testing.T) {
  function TestMatBitwiseOperations (line 1187) | func TestMatBitwiseOperations(t *testing.T) {
  function TestMatBitwiseOperationsWithMasks (line 1216) | func TestMatBitwiseOperationsWithMasks(t *testing.T) {
  function TestMatInRange (line 1245) | func TestMatInRange(t *testing.T) {
  function TestMatInRangeWithScalar (line 1260) | func TestMatInRangeWithScalar(t *testing.T) {
  function TestMatDCT (line 1273) | func TestMatDCT(t *testing.T) {
  function TestMatDFT (line 1285) | func TestMatDFT(t *testing.T) {
  function TestMatDivide (line 1307) | func TestMatDivide(t *testing.T) {
  function TestMeanStdDev (line 1320) | func TestMeanStdDev(t *testing.T) {
  function TestMeanStdDevWithMask (line 1336) | func TestMeanStdDevWithMask(t *testing.T) {
  function TestMatMerge (line 1369) | func TestMatMerge(t *testing.T) {
  function TestMatMulSpectrums (line 1384) | func TestMatMulSpectrums(t *testing.T) {
  function TestMatMultiply (line 1404) | func TestMatMultiply(t *testing.T) {
  function TestMatMultiplyWithParams (line 1430) | func TestMatMultiplyWithParams(t *testing.T) {
  function TestMatNormalize (line 1456) | func TestMatNormalize(t *testing.T) {
  function TestMatPerspectiveTransform (line 1467) | func TestMatPerspectiveTransform(t *testing.T) {
  function TestMatSolve (line 1480) | func TestMatSolve(t *testing.T) {
  function TestSolveCubic (line 1521) | func TestSolveCubic(t *testing.T) {
  function TestSolvePoly (line 1547) | func TestSolvePoly(t *testing.T) {
  function TestMatReduceToSingleRow (line 1571) | func TestMatReduceToSingleRow(t *testing.T) {
  function TestMatReduceToSingleColumn (line 1598) | func TestMatReduceToSingleColumn(t *testing.T) {
  function TestMatReduceArgMax (line 1625) | func TestMatReduceArgMax(t *testing.T) {
  function TestMatReduceArgMin (line 1652) | func TestMatReduceArgMin(t *testing.T) {
  function TestRepeat (line 1679) | func TestRepeat(t *testing.T) {
  function TestScaleAdd (line 1715) | func TestScaleAdd(t *testing.T) {
  function TestSetIdentity (line 1757) | func TestSetIdentity(t *testing.T) {
  function TestMatSortEveryRowDescending (line 1783) | func TestMatSortEveryRowDescending(t *testing.T) {
  function TestMatSortIdxEveryRowDescending (line 1816) | func TestMatSortIdxEveryRowDescending(t *testing.T) {
  function TestMatSplit (line 1838) | func TestMatSplit(t *testing.T) {
  function TestMatSubtract (line 1860) | func TestMatSubtract(t *testing.T) {
  function TestMatTrace (line 1874) | func TestMatTrace(t *testing.T) {
  function TestMatTransform (line 1897) | func TestMatTransform(t *testing.T) {
  function TestMatTranspose (line 1910) | func TestMatTranspose(t *testing.T) {
  function TestMatTransposeND (line 1921) | func TestMatTransposeND(t *testing.T) {
  function TestPolarToCart (line 1941) | func TestPolarToCart(t *testing.T) {
  function TestMatPow (line 1959) | func TestMatPow(t *testing.T) {
  function TestMatSum (line 1972) | func TestMatSum(t *testing.T) {
  function TestTermCriteria (line 1981) | func TestTermCriteria(t *testing.T) {
  function TestScalar (line 1988) | func TestScalar(t *testing.T) {
  function TestToCPoints (line 1995) | func TestToCPoints(t *testing.T) {
  function TestToCStrings (line 2008) | func TestToCStrings(t *testing.T) {
  function TestMatBatchDistance (line 2022) | func TestMatBatchDistance(t *testing.T) {
  function TestMatBorderInterpolate (line 2039) | func TestMatBorderInterpolate(t *testing.T) {
  function TestMatCalcCovarMatrix (line 2046) | func TestMatCalcCovarMatrix(t *testing.T) {
  function TestMatCartToPolar (line 2059) | func TestMatCartToPolar(t *testing.T) {
  function TestMatCheckRange (line 2074) | func TestMatCheckRange(t *testing.T) {
  function TestMatCompleteSymm (line 2083) | func TestMatCompleteSymm(t *testing.T) {
  function TestMatConvertScaleAbs (line 2092) | func TestMatConvertScaleAbs(t *testing.T) {
  function TestMatCopyMakeBorder (line 2103) | func TestMatCopyMakeBorder(t *testing.T) {
  function TestMatDeterminant (line 2114) | func TestMatDeterminant(t *testing.T) {
  function TestMatEigen (line 2123) | func TestMatEigen(t *testing.T) {
  function TestMatEigenNonSymmetric (line 2136) | func TestMatEigenNonSymmetric(t *testing.T) {
  function TestPCABackProject (line 2149) | func TestPCABackProject(t *testing.T) {
  function TestPCACompute (line 2179) | func TestPCACompute(t *testing.T) {
  function TestPCAProject (line 2202) | func TestPCAProject(t *testing.T) {
  function TestPSNR (line 2241) | func TestPSNR(t *testing.T) {
  function TestSVBackSubst (line 2254) | func TestSVBackSubst(t *testing.T) {
  function TestSVDecomp (line 2276) | func TestSVDecomp(t *testing.T) {
  function TestMatExp (line 2299) | func TestMatExp(t *testing.T) {
  function TestMatExtractChannel (line 2310) | func TestMatExtractChannel(t *testing.T) {
  function TestMatFindNonZero (line 2321) | func TestMatFindNonZero(t *testing.T) {
  function TestMatFlip (line 2340) | func TestMatFlip(t *testing.T) {
  function TestMatPhase (line 2357) | func TestMatPhase(t *testing.T) {
  function TestMatGemm (line 2378) | func TestMatGemm(t *testing.T) {
  function TestMatHconcat (line 2401) | func TestMatHconcat(t *testing.T) {
  function TestMatVconcat (line 2418) | func TestMatVconcat(t *testing.T) {
  function TestRotate (line 2435) | func TestRotate(t *testing.T) {
  function TestMatIdct (line 2455) | func TestMatIdct(t *testing.T) {
  function TestMatIdft (line 2471) | func TestMatIdft(t *testing.T) {
  function TestMatInsertChannel (line 2487) | func TestMatInsertChannel(t *testing.T) {
  function TestMatInvert (line 2500) | func TestMatInvert(t *testing.T) {
  function TestKMeans (line 2513) | func TestKMeans(t *testing.T) {
  function TestKMeansPoints (line 2530) | func TestKMeansPoints(t *testing.T) {
  function TestMatLog (line 2551) | func TestMatLog(t *testing.T) {
  function TestMatMagnitude (line 2564) | func TestMatMagnitude(t *testing.T) {
  function TestMatMahalanobis (line 2579) | func TestMatMahalanobis(t *testing.T) {
  function TestMulTransposed (line 2604) | func TestMulTransposed(t *testing.T) {
  function TestMatMax (line 2617) | func TestMatMax(t *testing.T) {
  function TestMatMin (line 2632) | func TestMatMin(t *testing.T) {
  function TestMatMinMaxIdx (line 2647) | func TestMatMinMaxIdx(t *testing.T) {
  function TestMixChannels (line 2663) | func TestMixChannels(t *testing.T) {
  function TestGetVecfAt (line 2711) | func TestGetVecfAt(t *testing.T) {
  function TestGetVecdAt (line 2731) | func TestGetVecdAt(t *testing.T) {
  function TestGetVecbAt (line 2751) | func TestGetVecbAt(t *testing.T) {
  function TestGetVeciAt (line 2771) | func TestGetVeciAt(t *testing.T) {
  function TestGetTickFrequencyCount (line 2791) | func TestGetTickFrequencyCount(t *testing.T) {
  function TestMatT (line 2803) | func TestMatT(t *testing.T) {
  function compareImages (line 2827) | func compareImages(img0, img1 image.Image) bool {
  function TestColRowRange (line 2862) | func TestColRowRange(t *testing.T) {
  function TestNormWithMats (line 2890) | func TestNormWithMats(t *testing.T) {
  function Test_toGoStrings (line 2903) | func Test_toGoStrings(t *testing.T) {
  function TestTheRNG (line 2917) | func TestTheRNG(t *testing.T) {
  function TestSetRNGSeed (line 2924) | func TestSetRNGSeed(t *testing.T) {
  function TestRNG_Fill (line 2928) | func TestRNG_Fill(t *testing.T) {
  function TestRNG_Gaussian (line 2935) | func TestRNG_Gaussian(t *testing.T) {
  function TestRNG_Next (line 2940) | func TestRNG_Next(t *testing.T) {
  function TestRandN (line 2945) | func TestRandN(t *testing.T) {
  function TestRandShuffle (line 2951) | func TestRandShuffle(t *testing.T) {
  function TestRandShuffleWithParams (line 2957) | func TestRandShuffleWithParams(t *testing.T) {
  function TestRandU (line 2963) | func TestRandU(t *testing.T) {
  function TestNewPointsVector (line 2969) | func TestNewPointsVector(t *testing.T) {
  function TestNewPointVector (line 3038) | func TestNewPointVector(t *testing.T) {
  function TestNewPoint2fVector (line 3087) | func TestNewPoint2fVector(t *testing.T) {
  function TestNewPoints2fVector (line 3141) | func TestNewPoints2fVector(t *testing.T) {
  function TestNewPoint3fVector (line 3210) | func TestNewPoint3fVector(t *testing.T) {
  function TestNewPoints3fVector (line 3270) | func TestNewPoints3fVector(t *testing.T) {
  function TestElemSize (line 3339) | func TestElemSize(t *testing.T) {
  function TestSetThreadNumber (line 3366) | func TestSetThreadNumber(t *testing.T) {
  function TestMinMaxLoc (line 3387) | func TestMinMaxLoc(t *testing.T) {
  function TestMinMaxLocWithMask (line 3412) | func TestMinMaxLocWithMask(t *testing.T) {
  function TestNewRotatedRect (line 3441) | func TestNewRotatedRect(t *testing.T) {
  function TestNewRotatedRect2f (line 3450) | func TestNewRotatedRect2f(t *testing.T) {
  function TestNewMatFromPointVector (line 3464) | func TestNewMatFromPointVector(t *testing.T) {
  function TestNewMatFromPoint2fVector (line 3489) | func TestNewMatFromPoint2fVector(t *testing.T) {

FILE: cuda/arithm.cpp
  function OpenCVResult (line 7) | OpenCVResult GpuAbs(GpuMat src, GpuMat dst, Stream s) {
  function OpenCVResult (line 20) | OpenCVResult GpuAbsDiff(GpuMat src1, GpuMat src2, GpuMat dst, Stream s) {
  function OpenCVResult (line 33) | OpenCVResult GpuAdd(GpuMat src1, GpuMat src2, GpuMat dst, Stream s) {
  function OpenCVResult (line 46) | OpenCVResult GpuBitwiseAnd(GpuMat src1, GpuMat src2, GpuMat dst, Stream ...
  function OpenCVResult (line 59) | OpenCVResult GpuBitwiseNot(GpuMat src, GpuMat dst, Stream s) {
  function OpenCVResult (line 72) | OpenCVResult GpuBitwiseOr(GpuMat src1, GpuMat src2, GpuMat dst, Stream s) {
  function OpenCVResult (line 85) | OpenCVResult GpuBitwiseXor(GpuMat src1, GpuMat src2, GpuMat dst, Stream ...
  function OpenCVResult (line 98) | OpenCVResult GpuDivide(GpuMat src1, GpuMat src2, GpuMat dst, Stream s) {
  function OpenCVResult (line 111) | OpenCVResult GpuExp(GpuMat src, GpuMat dst, Stream s) {
  function OpenCVResult (line 124) | OpenCVResult GpuLog(GpuMat src, GpuMat dst, Stream s) {
  function OpenCVResult (line 137) | OpenCVResult GpuMax(GpuMat src1, GpuMat src2, GpuMat dst, Stream s) {
  function OpenCVResult (line 150) | OpenCVResult GpuMin(GpuMat src1, GpuMat src2, GpuMat dst, Stream s) {
  function OpenCVResult (line 163) | OpenCVResult GpuMultiply(GpuMat src1, GpuMat src2, GpuMat dst, Stream s) {
  function OpenCVResult (line 176) | OpenCVResult GpuSqr(GpuMat src, GpuMat dst, Stream s) {
  function OpenCVResult (line 189) | OpenCVResult GpuSqrt(GpuMat src, GpuMat dst, Stream s) {
  function OpenCVResult (line 202) | OpenCVResult GpuSubtract(GpuMat src1, GpuMat src2, GpuMat dst, Stream s) {
  function OpenCVResult (line 215) | OpenCVResult GpuThreshold(GpuMat src, GpuMat dst, double thresh, double ...
  function OpenCVResult (line 228) | OpenCVResult GpuFlip(GpuMat src, GpuMat dst, int flipCode, Stream s) {
  function OpenCVResult (line 241) | OpenCVResult GpuMerge(struct GpuMats mats, GpuMat dst, Stream s) {
  function OpenCVResult (line 260) | OpenCVResult GpuTranspose(GpuMat src, GpuMat dst, Stream s) {
  function OpenCVResult (line 273) | OpenCVResult GpuAddWeighted(GpuMat src1, double alpha, GpuMat src2, doub...
  function OpenCVResult (line 286) | OpenCVResult GpuCopyMakeBorder(GpuMat src, GpuMat dst, int top, int bott...
  function LookUpTable (line 301) | LookUpTable Cuda_Create_LookUpTable(GpuMat lut){
  function Cuda_LookUpTable_Close (line 310) | void Cuda_LookUpTable_Close(LookUpTable lt) {
  function Cuda_LookUpTable_Empty (line 314) | bool Cuda_LookUpTable_Empty(LookUpTable lut) {
  function OpenCVResult (line 323) | OpenCVResult Cuda_LookUpTable_Transform(LookUpTable lt, GpuMat src, GpuM...
  function OpenCVResult (line 338) | OpenCVResult Cuda_Split(GpuMat src, GpuMats dst, Stream s) {
  function OpenCVResult (line 357) | OpenCVResult GpuCalcNorm(GpuMat src, GpuMat dst, int typ, Stream s) {
  function OpenCVResult (line 370) | OpenCVResult GpuCalcNormDiff(GpuMat src1, GpuMat src2, GpuMat dst, int t...
  function GpuNorm (line 383) | double GpuNorm(GpuMat src1, GpuMat src2, int typ) {
  function OpenCVResult (line 392) | OpenCVResult GpuCompare(GpuMat src1, GpuMat src2, GpuMat dst, int typ, S...
  function OpenCVResult (line 405) | OpenCVResult GpuLShift(GpuMat src, Scalar shift, GpuMat dst, Stream s) {
  function OpenCVResult (line 420) | OpenCVResult GpuRShift(GpuMat src, Scalar shift, GpuMat dst, Stream s) {
  function OpenCVResult (line 435) | OpenCVResult GpuAbsSum(GpuMat src, GpuMat mask, struct Scalar* result) {
  function OpenCVResult (line 448) | OpenCVResult GpuCalcAbsSum(GpuMat src, GpuMat dst, GpuMat mask, Stream s) {
  function OpenCVResult (line 462) | OpenCVResult GpuMinMax(GpuMat src, GpuMat mask, double* minVal, double* ...
  function OpenCVResult (line 475) | OpenCVResult GpuMinMaxLoc(GpuMat src, GpuMat mask, double* minVal, doubl...
  function OpenCVResult (line 493) | OpenCVResult GpuNormalize(GpuMat src, GpuMat dst, double alpha, double b...
  function OpenCVResult (line 506) | OpenCVResult GpuFindMinMaxLoc(GpuMat src, GpuMat minMaxVals, GpuMat loc,...
  function OpenCVResult (line 519) | OpenCVResult GpuFindMinMax(GpuMat src, GpuMat dst, GpuMat mask, Stream s) {

FILE: cuda/arithm.go
  function Abs (line 24) | func Abs(src GpuMat, dst *GpuMat) error {
  function AbsWithStream (line 33) | func AbsWithStream(src GpuMat, dst *GpuMat, stream Stream) error {
  function AbsDiff (line 42) | func AbsDiff(src1, src2 GpuMat, dst *GpuMat) error {
  function AbsDiffWithStream (line 51) | func AbsDiffWithStream(src1, src2 GpuMat, dst *GpuMat, s Stream) error {
  function Add (line 59) | func Add(src1, src2 GpuMat, dst *GpuMat) error {
  function AddWithStream (line 68) | func AddWithStream(src1, src2 GpuMat, dst *GpuMat, s Stream) error {
  function BitwiseAnd (line 77) | func BitwiseAnd(src1, src2 GpuMat, dst *GpuMat) error {
  function BitwiseAndWithStream (line 86) | func BitwiseAndWithStream(src1, src2 GpuMat, dst *GpuMat, s Stream) error {
  function BitwiseNot (line 94) | func BitwiseNot(src GpuMat, dst *GpuMat) error {
  function BitwiseNotWithStream (line 103) | func BitwiseNotWithStream(src GpuMat, dst *GpuMat, s Stream) error {
  function BitwiseOr (line 112) | func BitwiseOr(src1, src2 GpuMat, dst *GpuMat) error {
  function BitwiseOrWithStream (line 121) | func BitwiseOrWithStream(src1, src2 GpuMat, dst *GpuMat, s Stream) error {
  function BitwiseXor (line 130) | func BitwiseXor(src1, src2 GpuMat, dst *GpuMat) error {
  function BitwiseXorWithStream (line 139) | func BitwiseXorWithStream(src1, src2 GpuMat, dst *GpuMat, s Stream) error {
  function Divide (line 147) | func Divide(src1, src2 GpuMat, dst *GpuMat) error {
  function DivideWithStream (line 156) | func DivideWithStream(src1, src2 GpuMat, dst *GpuMat, s Stream) error {
  function Exp (line 164) | func Exp(src GpuMat, dst *GpuMat) error {
  function ExpWithStream (line 173) | func ExpWithStream(src GpuMat, dst *GpuMat, s Stream) error {
  function Log (line 181) | func Log(src GpuMat, dst *GpuMat) error {
  function LogWithStream (line 190) | func LogWithStream(src GpuMat, dst *GpuMat, s Stream) error {
  function Max (line 198) | func Max(src1, src2 GpuMat, dst *GpuMat) error {
  function MaxWithStream (line 207) | func MaxWithStream(src1, src2 GpuMat, dst *GpuMat, s Stream) error {
  function Min (line 215) | func Min(src1, src2 GpuMat, dst *GpuMat) error {
  function MinWithStream (line 224) | func MinWithStream(src1, src2 GpuMat, dst *GpuMat, s Stream) error {
  function Multiply (line 232) | func Multiply(src1, src2 GpuMat, dst *GpuMat) error {
  function MultiplyWithStream (line 240) | func MultiplyWithStream(src1, src2 GpuMat, dst *GpuMat, s Stream) error {
  function Sqr (line 248) | func Sqr(src GpuMat, dst *GpuMat) error {
  function SqrWithStream (line 257) | func SqrWithStream(src GpuMat, dst *GpuMat, s Stream) error {
  function Sqrt (line 265) | func Sqrt(src GpuMat, dst *GpuMat) error {
  function SqrtWithStream (line 274) | func SqrtWithStream(src GpuMat, dst *GpuMat, s Stream) error {
  function Subtract (line 282) | func Subtract(src1, src2 GpuMat, dst *GpuMat) error {
  function SubtractWithStream (line 291) | func SubtractWithStream(src1, src2 GpuMat, dst *GpuMat, s Stream) error {
  function Threshold (line 299) | func Threshold(src GpuMat, dst *GpuMat, thresh, maxval float64, typ gocv...
  function ThresholdWithStream (line 308) | func ThresholdWithStream(src GpuMat, dst *GpuMat, thresh, maxval float64...
  function Flip (line 316) | func Flip(src GpuMat, dst *GpuMat, flipCode int) error {
  function FlipWithStream (line 325) | func FlipWithStream(src GpuMat, dst *GpuMat, flipCode int, stream Stream...
  function Merge (line 333) | func Merge(mv []GpuMat, dst *GpuMat) error {
  function MergeWithStream (line 351) | func MergeWithStream(mv []GpuMat, dst *GpuMat, s Stream) error {
  function Transpose (line 368) | func Transpose(src GpuMat, dst *GpuMat) error {
  function TransposeWithStream (line 376) | func TransposeWithStream(src GpuMat, dst *GpuMat, s Stream) error {
  function AddWeighted (line 384) | func AddWeighted(src1 GpuMat, alpha float64, src2 GpuMat, beta float64, ...
  function AddWeightedWithStream (line 392) | func AddWeightedWithStream(src1 GpuMat, alpha float64, src2 GpuMat, beta...
  function CopyMakeBorder (line 400) | func CopyMakeBorder(src GpuMat, dst *GpuMat, top, bottom, left, right in...
  function CopyMakeBorderWithStream (line 415) | func CopyMakeBorderWithStream(src GpuMat, dst *GpuMat, top, bottom, left...
  type LookUpTable (line 426) | type LookUpTable struct
    method Close (line 441) | func (lt *LookUpTable) Close() {
    method Transform (line 454) | func (lt *LookUpTable) Transform(src GpuMat, dst *GpuMat) error {
    method Empty (line 463) | func (lt *LookUpTable) Empty() bool {
    method TransformWithStream (line 480) | func (lt *LookUpTable) TransformWithStream(src GpuMat, dst *GpuMat, s ...
  function NewLookUpTable (line 436) | func NewLookUpTable(lut GpuMat) LookUpTable {
  function Split (line 492) | func Split(src GpuMat, dst []GpuMat) error {
  function SplitWithStream (line 518) | func SplitWithStream(src GpuMat, dst []GpuMat, s Stream) error {
  function CalcNorm (line 538) | func CalcNorm(src, dst GpuMat, normType gocv.NormType) error {
  function CalcNormWithStream (line 546) | func CalcNormWithStream(src, dst GpuMat, normType gocv.NormType, s Strea...
  function CalcNormDiff (line 554) | func CalcNormDiff(src1, src2, dst GpuMat, normType gocv.NormType) error {
  function CalcNormDiffWithStream (line 562) | func CalcNormDiffWithStream(src1, src2, dst GpuMat, normType gocv.NormTy...
  function Norm (line 570) | func Norm(src1, src2 GpuMat, normType gocv.NormType) float64 {
  function Compare (line 578) | func Compare(src1, src2, dst GpuMat, compareType gocv.CompareType) error {
  function CompareWithStream (line 586) | func CompareWithStream(src1, src2, dst GpuMat, compareType gocv.CompareT...
  function LShift (line 594) | func LShift(src GpuMat, shift gocv.Scalar, dst *GpuMat) error {
  function LShiftWithStream (line 608) | func LShiftWithStream(src GpuMat, shift gocv.Scalar, dst *GpuMat, s Stre...
  function RShift (line 622) | func RShift(src GpuMat, shift gocv.Scalar, dst *GpuMat) error {
  function RShiftWithStream (line 636) | func RShiftWithStream(src GpuMat, shift gocv.Scalar, dst *GpuMat, s Stre...
  function AbsSum (line 649) | func AbsSum(src GpuMat) (gocv.Scalar, error) {
  function AbsSumWithMask (line 663) | func AbsSumWithMask(src, mask GpuMat) (gocv.Scalar, error) {
  function CalcAbsSum (line 677) | func CalcAbsSum(src GpuMat, dst *GpuMat) error {
  function CalcAbsSumWithMask (line 684) | func CalcAbsSumWithMask(src GpuMat, dst *GpuMat, mask GpuMat) error {
  function CalcAbsSumWithStream (line 691) | func CalcAbsSumWithStream(src GpuMat, dst *GpuMat, mask GpuMat, s Stream...
  function MinMax (line 698) | func MinMax(src GpuMat) (minVal, maxVal float64, err error) {
  function MinMaxWithMask (line 707) | func MinMaxWithMask(src, mask GpuMat) (minVal, maxVal float64, err error) {
  function MinMaxLoc (line 716) | func MinMaxLoc(src GpuMat) (minVal, maxVal float64, minLoc, maxLoc image...
  function MinMaxLocWithMask (line 729) | func MinMaxLocWithMask(src, mask GpuMat) (minVal, maxVal float64, minLoc...
  function Normalize (line 742) | func Normalize(src GpuMat, dst *GpuMat, alpha, beta float64, normType go...
  function NormalizeWithMask (line 747) | func NormalizeWithMask(src GpuMat, dst *GpuMat, alpha, beta float64, nor...
  function NormalizeWithStream (line 752) | func NormalizeWithStream(src GpuMat, dst *GpuMat, alpha, beta float64, n...
  function FindMinMaxLoc (line 759) | func FindMinMaxLoc(src GpuMat, minMaxVals, loc *GpuMat) error {
  function FindMinMaxLocWithMask (line 764) | func FindMinMaxLocWithMask(src GpuMat, minMaxVals, loc *GpuMat, mask Gpu...
  function FindMinMaxLocWithStream (line 769) | func FindMinMaxLocWithStream(src GpuMat, minMaxVals, loc *GpuMat, mask G...
  function FindMinMax (line 776) | func FindMinMax(src GpuMat, dst *GpuMat) error {
  function FindMinMaxWithMask (line 781) | func FindMinMaxWithMask(src GpuMat, dst *GpuMat, mask GpuMat) error {
  function FindMinMaxWithStream (line 786) | func FindMinMaxWithStream(src GpuMat, dst *GpuMat, mask GpuMat, s Stream...

FILE: cuda/arithm.h
  type cv (line 15) | typedef cv::Ptr< cv::cuda::LookUpTable >* LookUpTable;
  type GpuMats (line 38) | struct GpuMats
  type Scalar (line 48) | struct Scalar
  type Scalar (line 49) | struct Scalar

FILE: cuda/arithm_test.go
  function TestAbs (line 11) | func TestAbs(t *testing.T) {
  function TestAbsException (line 34) | func TestAbsException(t *testing.T) {
  function TestAbsWithStream (line 56) | func TestAbsWithStream(t *testing.T) {
  function TestAbsDiff (line 82) | func TestAbsDiff(t *testing.T) {
  function TestAdd (line 107) | func TestAdd(t *testing.T) {
  function TestBitwiseAnd (line 132) | func TestBitwiseAnd(t *testing.T) {
  function TestBitwiseNot (line 157) | func TestBitwiseNot(t *testing.T) {
  function TestBitwiseOr (line 180) | func TestBitwiseOr(t *testing.T) {
  function TestBitwiseXor (line 205) | func TestBitwiseXor(t *testing.T) {
  function TestDivide (line 230) | func TestDivide(t *testing.T) {
  function TestDivideWithStream (line 255) | func TestDivideWithStream(t *testing.T) {
  function TestExp (line 285) | func TestExp(t *testing.T) {
  function TestLog (line 308) | func TestLog(t *testing.T) {
  function TestMax (line 331) | func TestMax(t *testing.T) {
  function TestMin (line 356) | func TestMin(t *testing.T) {
  function TestMultiply (line 381) | func TestMultiply(t *testing.T) {
  function TestMultiplyWithStream (line 406) | func TestMultiplyWithStream(t *testing.T) {
  function TestThreshold (line 437) | func TestThreshold(t *testing.T) {
  function TestThresholdWithStream (line 460) | func TestThresholdWithStream(t *testing.T) {
  function TestFlip (line 486) | func TestFlip(t *testing.T) {
  function TestFlipWithStream (line 509) | func TestFlipWithStream(t *testing.T) {
  function TestMerge (line 535) | func TestMerge(t *testing.T) {
  function TestMergeWithStream (line 552) | func TestMergeWithStream(t *testing.T) {
  function TestTranspose (line 573) | func TestTranspose(t *testing.T) {
  function TestTransposeWithStream (line 596) | func TestTransposeWithStream(t *testing.T) {
  function TestAddWeighted (line 623) | func TestAddWeighted(t *testing.T) {
  function TestAddWeightedWithStream (line 656) | func TestAddWeightedWithStream(t *testing.T) {
  function TestCopyMakeBorder (line 692) | func TestCopyMakeBorder(t *testing.T) {
  function TestCopyMakeBorderWithStream (line 716) | func TestCopyMakeBorderWithStream(t *testing.T) {
  function TestNewLookUpTable (line 743) | func TestNewLookUpTable(t *testing.T) {
  function TestLookUpTableEmpty (line 753) | func TestLookUpTableEmpty(t *testing.T) {
  function TestTransform (line 763) | func TestTransform(t *testing.T) {
  function TestTransformWithStream (line 780) | func TestTransformWithStream(t *testing.T) {
  function TestSplit (line 801) | func TestSplit(t *testing.T) {
  function TestSplitWithStream (line 817) | func TestSplitWithStream(t *testing.T) {
  function TestCalcNorm (line 837) | func TestCalcNorm(t *testing.T) {
  function TestCalcNormWithStream (line 860) | func TestCalcNormWithStream(t *testing.T) {
  function TestCalcNormDiff (line 886) | func TestCalcNormDiff(t *testing.T) {
  function TestCalcNormDiffWithStream (line 917) | func TestCalcNormDiffWithStream(t *testing.T) {
  function TestNorm (line 951) | func TestNorm(t *testing.T) {
  function TestCompareDiff (line 978) | func TestCompareDiff(t *testing.T) {
  function TestLShift (line 1009) | func TestLShift(t *testing.T) {
  function TestLShiftWithStream (line 1032) | func TestLShiftWithStream(t *testing.T) {
  function TestRShift (line 1059) | func TestRShift(t *testing.T) {
  function TestRShiftWithStream (line 1082) | func TestRShiftWithStream(t *testing.T) {
  function TestAbsSum (line 1109) | func TestAbsSum(t *testing.T) {
  function TestCalcAbsSum (line 1129) | func TestCalcAbsSum(t *testing.T) {
  function TestMinMax (line 1152) | func TestMinMax(t *testing.T) {
  function TestMinMaxLoc (line 1172) | func TestMinMaxLoc(t *testing.T) {
  function TestNormalize (line 1195) | func TestNormalize(t *testing.T) {
  function TestFindMinMaxLoc (line 1218) | func TestFindMinMaxLoc(t *testing.T) {
  function TestFindMinMax (line 1243) | func TestFindMinMax(t *testing.T) {

FILE: cuda/bgsegm.cpp
  function CudaBackgroundSubtractorMOG2 (line 5) | CudaBackgroundSubtractorMOG2 CudaBackgroundSubtractorMOG2_Create() {
  function CudaBackgroundSubtractorMOG2_Close (line 14) | void CudaBackgroundSubtractorMOG2_Close(CudaBackgroundSubtractorMOG2 b) {
  function OpenCVResult (line 18) | OpenCVResult CudaBackgroundSubtractorMOG2_Apply(CudaBackgroundSubtractor...
  function CudaBackgroundSubtractorMOG (line 31) | CudaBackgroundSubtractorMOG CudaBackgroundSubtractorMOG_Create() {
  function CudaBackgroundSubtractorMOG_Close (line 40) | void CudaBackgroundSubtractorMOG_Close(CudaBackgroundSubtractorMOG b) {
  function OpenCVResult (line 44) | OpenCVResult CudaBackgroundSubtractorMOG_Apply(CudaBackgroundSubtractorM...

FILE: cuda/bgsegm.go
  type BackgroundSubtractorMOG2 (line 13) | type BackgroundSubtractorMOG2 struct
    method Close (line 35) | func (b *BackgroundSubtractorMOG2) Close() error {
    method Apply (line 45) | func (b *BackgroundSubtractorMOG2) Apply(src GpuMat, dst *GpuMat) error {
    method ApplyWithStream (line 54) | func (b *BackgroundSubtractorMOG2) ApplyWithStream(src GpuMat, dst *Gp...
  type BackgroundSubtractorMOG (line 19) | type BackgroundSubtractorMOG struct
    method Close (line 69) | func (b *BackgroundSubtractorMOG) Close() error {
    method Apply (line 79) | func (b *BackgroundSubtractorMOG) Apply(src GpuMat, dst *GpuMat) error {
    method ApplyWithStream (line 88) | func (b *BackgroundSubtractorMOG) ApplyWithStream(src GpuMat, dst *Gpu...
  function NewBackgroundSubtractorMOG2 (line 30) | func NewBackgroundSubtractorMOG2() BackgroundSubtractorMOG2 {
  function NewBackgroundSubtractorMOG (line 64) | func NewBackgroundSubtractorMOG() BackgroundSubtractorMOG {

FILE: cuda/bgsegm.h
  type cv (line 15) | typedef cv::Ptr<cv::cuda::BackgroundSubtractorMOG2>* CudaBackgroundSubtr...
  type cv (line 16) | typedef cv::Ptr<cv::cuda::BackgroundSubtractorMOG>* CudaBackgroundSubtra...

FILE: cuda/bgsegm_test.go
  function TestCudaMOG2 (line 11) | func TestCudaMOG2(t *testing.T) {
  function TestCudaMOG2WithStream (line 39) | func TestCudaMOG2WithStream(t *testing.T) {
  function TestCudaMOG (line 68) | func TestCudaMOG(t *testing.T) {
  function TestCudaMOGWithStream (line 96) | func TestCudaMOGWithStream(t *testing.T) {

FILE: cuda/core.cpp
  function GpuRects_Close (line 5) | void GpuRects_Close(struct Rects rs) {

FILE: cuda/core.go
  function toRectangles (line 15) | func toRectangles(ret C.Rects) []image.Rectangle {

FILE: cuda/core.h
  type Rects (line 12) | struct Rects

FILE: cuda/cuda.cpp
  function GpuMat (line 3) | GpuMat GpuMat_New() {
  function GpuMat (line 12) | GpuMat GpuMat_NewFromMat(Mat mat) {
  function GpuMat (line 21) | GpuMat GpuMat_NewWithSize(int rows, int cols, int type) {
  function GpuMat_Upload (line 30) | void GpuMat_Upload(GpuMat m, Mat data, Stream s){
  function GpuMat_Download (line 42) | void GpuMat_Download(GpuMat m, Mat dst, Stream s){
  function GpuMat_Empty (line 54) | int GpuMat_Empty(GpuMat m){
  function GpuMat_Close (line 63) | void GpuMat_Close(GpuMat m){
  function PrintCudaDeviceInfo (line 67) | void PrintCudaDeviceInfo(int device){
  function PrintShortCudaDeviceInfo (line 75) | void PrintShortCudaDeviceInfo(int device){
  function GetCudaEnabledDeviceCount (line 83) | int GetCudaEnabledDeviceCount(){
  function GetCudaDevice (line 92) | int GetCudaDevice() {
  function SetCudaDevice (line 101) | void SetCudaDevice(int device) {
  function ResetCudaDevice (line 109) | void ResetCudaDevice(){
  function CudaDeviceSupports (line 117) | bool CudaDeviceSupports(int features) {
  function GpuMat_ConvertTo (line 126) | void GpuMat_ConvertTo(GpuMat m, GpuMat dst, int type, Stream s) {
  function GpuMat_ConvertFp16 (line 138) | void GpuMat_ConvertFp16(GpuMat m, GpuMat dst) {
  function GpuMat_CopyTo (line 146) | void GpuMat_CopyTo(GpuMat m, GpuMat dst, Stream s) {
  function GpuMat (line 158) | GpuMat GpuMat_Reshape(GpuMat m, int cn, int rows) {
  function GpuMat_Cols (line 167) | int GpuMat_Cols(GpuMat m) {
  function GpuMat_Rows (line 171) | int GpuMat_Rows(GpuMat m) {
  function GpuMat_Channels (line 175) | int GpuMat_Channels(GpuMat m) {
  function GpuMat_Type (line 179) | int GpuMat_Type(GpuMat m) {
  function Stream (line 183) | Stream Stream_New() {
  function Stream_Close (line 192) | void Stream_Close(Stream s){
  function Stream_QueryIfComplete (line 196) | bool Stream_QueryIfComplete(Stream s) {
  function Stream_WaitForCompletion (line 205) | void Stream_WaitForCompletion(Stream s) {

FILE: cuda/cuda.go
  type FeatureSet (line 16) | type FeatureSet
  constant FeatureSetCompute10 (line 19) | FeatureSetCompute10            FeatureSet = 10
  constant FeatureSetCompute11 (line 20) | FeatureSetCompute11            FeatureSet = 11
  constant FeatureSetCompute12 (line 21) | FeatureSetCompute12            FeatureSet = 12
  constant FeatureSetCompute13 (line 22) | FeatureSetCompute13            FeatureSet = 13
  constant FeatureSetCompute20 (line 23) | FeatureSetCompute20            FeatureSet = 20
  constant FeatureSetCompute21 (line 24) | FeatureSetCompute21            FeatureSet = 21
  constant FeatureSetCompute30 (line 25) | FeatureSetCompute30            FeatureSet = 30
  constant FeatureSetCompute32 (line 26) | FeatureSetCompute32            FeatureSet = 32
  constant FeatureSetCompute35 (line 27) | FeatureSetCompute35            FeatureSet = 35
  constant FeatureSetCompute50 (line 28) | FeatureSetCompute50            FeatureSet = 50
  constant FeatureSetGlobalAtomics (line 29) | FeatureSetGlobalAtomics                   = FeatureSetCompute11
  constant FeatureSetSharedAtomics (line 30) | FeatureSetSharedAtomics                   = FeatureSetCompute12
  constant FeatureSetNativeDouble (line 31) | FeatureSetNativeDouble                    = FeatureSetCompute13
  constant FeatureSetWarpShuffleFunctions (line 32) | FeatureSetWarpShuffleFunctions            = FeatureSetCompute30
  constant FeatureSetDynamicParallelism (line 33) | FeatureSetDynamicParallelism              = FeatureSetCompute35
  type GpuMat (line 40) | type GpuMat struct
    method Upload (line 48) | func (g *GpuMat) Upload(data gocv.Mat) {
    method UploadWithStream (line 56) | func (g *GpuMat) UploadWithStream(data gocv.Mat, s Stream) {
    method Download (line 64) | func (g *GpuMat) Download(dst *gocv.Mat) {
    method DownloadWithStream (line 72) | func (g *GpuMat) DownloadWithStream(dst *gocv.Mat, s Stream) {
    method Empty (line 77) | func (g *GpuMat) Empty() bool {
    method Close (line 82) | func (g *GpuMat) Close() error {
    method Closed (line 89) | func (g *GpuMat) Closed() bool {
    method ConvertTo (line 167) | func (m *GpuMat) ConvertTo(dst *GpuMat, mt gocv.MatType) {
    method ConvertToWithStream (line 176) | func (m *GpuMat) ConvertToWithStream(dst *GpuMat, mt gocv.MatType, s S...
    method ConvertFp16 (line 185) | func (m *GpuMat) ConvertFp16(dst *GpuMat) {
    method CopyTo (line 194) | func (m *GpuMat) CopyTo(dst *GpuMat) {
    method CopyToWithStream (line 203) | func (m *GpuMat) CopyToWithStream(dst *GpuMat, s Stream) {
    method Rows (line 209) | func (m *GpuMat) Rows() int {
    method Cols (line 214) | func (m *GpuMat) Cols() int {
    method Channels (line 219) | func (m *GpuMat) Channels() int {
    method Type (line 224) | func (m *GpuMat) Type() gocv.MatType {
    method Ptr (line 229) | func (m *GpuMat) Ptr() C.GpuMat {
    method Reshape (line 238) | func (m *GpuMat) Reshape(cn int, rows int) GpuMat {
  function NewGpuMat (line 94) | func NewGpuMat() GpuMat {
  function NewGpuMatFromMat (line 99) | func NewGpuMatFromMat(mat gocv.Mat) GpuMat {
  function NewGpuMatWithSize (line 104) | func NewGpuMatWithSize(rows int, cols int, mt gocv.MatType) GpuMat {
  function newGpuMat (line 108) | func newGpuMat(p C.GpuMat) GpuMat {
  function PrintCudaDeviceInfo (line 113) | func PrintCudaDeviceInfo(device int) {
  function PrintShortCudaDeviceInfo (line 118) | func PrintShortCudaDeviceInfo(device int) {
  function GetCudaEnabledDeviceCount (line 124) | func GetCudaEnabledDeviceCount() int {
  function GetDevice (line 132) | func GetDevice() int {
  function SetDevice (line 140) | func SetDevice(device int) {
  function ResetDevice (line 151) | func ResetDevice() {
  function DeviceSupports (line 159) | func DeviceSupports(feature FeatureSet) bool {
  type Stream (line 246) | type Stream struct
    method Close (line 256) | func (s *Stream) Close() error {
    method QueryIfComplete (line 266) | func (s *Stream) QueryIfComplete() bool {
    method WaitForCompletion (line 274) | func (s *Stream) WaitForCompletion() {
  function NewStream (line 251) | func NewStream() Stream {

FILE: cuda/cuda.h
  type cv (line 14) | typedef cv::cuda::GpuMat* GpuMat;
  type cv (line 15) | typedef cv::cuda::Stream* Stream;
  type GpuMats (line 22) | typedef struct GpuMats {

FILE: cuda/cuda_test.go
  function TestNewGpuMat (line 9) | func TestNewGpuMat(t *testing.T) {
  function TestGpuMatClosed (line 18) | func TestGpuMatClosed(t *testing.T) {
  function TestNewGpuMatFromMat (line 27) | func TestNewGpuMatFromMat(t *testing.T) {
  function TestNewGpuMatFromMatWithSize (line 39) | func TestNewGpuMatFromMatWithSize(t *testing.T) {
  function TestNewGpuMatWithSize (line 63) | func TestNewGpuMatWithSize(t *testing.T) {
  function TestGetCudaEnabledDeviceCount (line 84) | func TestGetCudaEnabledDeviceCount(t *testing.T) {
  function TestConvertFp16 (line 90) | func TestConvertFp16(t *testing.T) {
  function TestCudaDeviceSupports (line 116) | func TestCudaDeviceSupports(t *testing.T) {

FILE: cuda/errors.go
  function OpenCVResult (line 10) | func OpenCVResult(result C.OpenCVResult) error {

FILE: cuda/filters.cpp
  function GaussianFilter (line 7) | GaussianFilter CreateGaussianFilter(int srcType, int dstType, Size ksize...
  function GaussianFilter (line 17) | GaussianFilter CreateGaussianFilterWithParams(int srcType, int dstType, ...
  function GaussianFilter_Close (line 27) | void GaussianFilter_Close(GaussianFilter gf) {
  function OpenCVResult (line 31) | OpenCVResult GaussianFilter_Apply(GaussianFilter gf, GpuMat img, GpuMat ...
  function MorphologyFilter (line 44) | MorphologyFilter CreateMorphologyFilter(int op, int srcType, Mat kernel) {
  function MorphologyFilter (line 53) | MorphologyFilter CreateMorphologyFilterWithParams(int op, int srcType, M...
  function MorphologyFilter_Close (line 63) | void MorphologyFilter_Close(MorphologyFilter mf) {
  function OpenCVResult (line 67) | OpenCVResult MorphologyFilter_Apply(MorphologyFilter mf, GpuMat img, Gpu...
  function SobelFilter (line 81) | SobelFilter CreateSobelFilter(int srcType, int dstType, int dx, int dy) {
  function SobelFilter (line 90) | SobelFilter CreateSobelFilterWithParams(int srcType, int dstType, int dx...
  function SobelFilter_Close (line 99) | void SobelFilter_Close(SobelFilter sf) {
  function OpenCVResult (line 103) | OpenCVResult SobelFilter_Apply(SobelFilter sf, GpuMat img, GpuMat dst, S...

FILE: cuda/filters.go
  type GaussianFilter (line 23) | type GaussianFilter struct
    method Close (line 38) | func (gf *GaussianFilter) Close() error {
    method Apply (line 48) | func (gf *GaussianFilter) Apply(img GpuMat, dst *GpuMat) error {
    method ApplyWithStream (line 57) | func (gf *GaussianFilter) ApplyWithStream(img GpuMat, dst *GpuMat, s S...
  function NewGaussianFilter (line 28) | func NewGaussianFilter(srcType gocv.MatType, dstType gocv.MatType, ksize...
  type MorphologyFilter (line 65) | type MorphologyFilter struct
    method Close (line 84) | func (mf *MorphologyFilter) Close() error {
    method Apply (line 94) | func (mf *MorphologyFilter) Apply(img GpuMat, dst *GpuMat) error {
    method ApplyWithStream (line 103) | func (mf *MorphologyFilter) ApplyWithStream(img GpuMat, dst *GpuMat, s...
  function NewMorphologyFilter (line 70) | func NewMorphologyFilter(op gocv.MorphType, srcType gocv.MatType, kernel...
  function NewMorphologyFilterWithParams (line 75) | func NewMorphologyFilterWithParams(op gocv.MorphType, srcType gocv.MatTy...
  type SobelFilter (line 111) | type SobelFilter struct
    method Close (line 126) | func (sf *SobelFilter) Close() error {
    method Apply (line 136) | func (sf *SobelFilter) Apply(img GpuMat, dst *GpuMat) error {
    method ApplyWithStream (line 145) | func (sf *SobelFilter) ApplyWithStream(img GpuMat, dst *GpuMat, s Stre...
  function NewSobelFilter (line 116) | func NewSobelFilter(srcType gocv.MatType, dstType gocv.MatType, dx int, ...
  function NewSobelFilterWithParams (line 121) | func NewSobelFilterWithParams(srcType gocv.MatType, dstType gocv.MatType...

FILE: cuda/filters.h
  type cv (line 15) | typedef cv::Ptr<cv::cuda::Filter>* GaussianFilter;
  type cv (line 16) | typedef cv::Ptr<cv::cuda::Filter>* MorphologyFilter;
  type cv (line 17) | typedef cv::Ptr<cv::cuda::Filter>* SobelFilter;

FILE: cuda/filters_test.go
  function TestGaussianFilter_Apply (line 12) | func TestGaussianFilter_Apply(t *testing.T) {
  function TestGaussianFilter_ApplyWithStream (line 46) | func TestGaussianFilter_ApplyWithStream(t *testing.T) {
  function TestMorphologyFilter_Apply (line 83) | func TestMorphologyFilter_Apply(t *testing.T) {
  function TestMorphologyFilter_ApplyWithStream (line 118) | func TestMorphologyFilter_ApplyWithStream(t *testing.T) {
  function TestSobelFilter_Apply (line 158) | func TestSobelFilter_Apply(t *testing.T) {
  function TestSobelFilter_ApplyWithStream (line 190) | func TestSobelFilter_ApplyWithStream(t *testing.T) {

FILE: cuda/helpers_test.go
  function floatEquals (line 7) | func floatEquals(a, b float32) bool {
  function round (line 15) | func round(x, unit float32) float32 {

FILE: cuda/imgproc.cpp
  function OpenCVResult (line 5) | OpenCVResult GpuCvtColor(GpuMat src, GpuMat dst, int code, Stream s) {
  function OpenCVResult (line 18) | OpenCVResult GpuDemosaicing(GpuMat src, GpuMat dst, int code, Stream s) {
  function CannyEdgeDetector (line 31) | CannyEdgeDetector CreateCannyEdgeDetector(double lowThresh, double highT...
  function CannyEdgeDetector (line 40) | CannyEdgeDetector CreateCannyEdgeDetectorWithParams(double lowThresh, do...
  function CannyEdgeDetector_Close (line 49) | void CannyEdgeDetector_Close(CannyEdgeDetector det) {
  function OpenCVResult (line 53) | OpenCVResult CannyEdgeDetector_Detect(CannyEdgeDetector det, GpuMat img,...
  function CannyEdgeD
Condensed preview — 307 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (3,035K chars).
[
  {
    "path": ".astylerc",
    "chars": 351,
    "preview": "--lineend=linux\n\n--style=google\n\n--indent=spaces=4\n--indent-col1-comments\n--convert-tabs\n\n--attach-return-type\n--attach-"
  },
  {
    "path": ".github/FUNDING.yml",
    "chars": 21,
    "preview": "patreon: deadprogram\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE.md",
    "chars": 623,
    "preview": "<!--- Please provide a general summary of the issue in the Title above -->\n\n## Description\n<!--- Detailed information ab"
  },
  {
    "path": ".github/workflows/docker-alpine-improved.yml",
    "chars": 6539,
    "preview": "# This is the Github action to build and push the gocv/opencv Docker images.\n#\nname: Docker\non:\n  push:\n    branches: [b"
  },
  {
    "path": ".github/workflows/docker-static-ffmpeg.yml",
    "chars": 1761,
    "preview": "# This is the Github action to build and push the ffmpeg Docker images used for static builds.\n#\nname: ffmpeg\non:\n  work"
  },
  {
    "path": ".github/workflows/docker-static-gstreamer.yml",
    "chars": 1789,
    "preview": "# This is the Github action to build and push the GStreamer Docker images used for static builds.\n#\nname: GStreamer\non:\n"
  },
  {
    "path": ".github/workflows/docker-static-opencv-cuda.yml",
    "chars": 1810,
    "preview": "# This is the Github action to build and push the OpenCV Docker images used for static builds.\n#\nname: OpenCV\non:\n  work"
  },
  {
    "path": ".github/workflows/docker-static-opencv.yml",
    "chars": 1886,
    "preview": "# This is the Github action to build and push the OpenCV Docker images used for static builds.\n#\nname: OpenCV\non:\n  push"
  },
  {
    "path": ".github/workflows/docker.yml",
    "chars": 26264,
    "preview": "# This is the Github action to build and push the gocv/opencv Docker images.\n#\nname: Docker\non:\n  push:\n    branches: [b"
  },
  {
    "path": ".github/workflows/linux.yml",
    "chars": 5006,
    "preview": "name: Linux\non:\n  pull_request:\n  push:\n    branches:\n      - dev\n      - release\n\njobs:\n  build:\n    runs-on: ubuntu-la"
  },
  {
    "path": ".github/workflows/macos.yml",
    "chars": 4359,
    "preview": "name: macOS\non:\n  pull_request:\n  push:\n    branches:\n      - dev\n      - release\n\njobs:\n  build:\n    strategy:\n        "
  },
  {
    "path": ".github/workflows/windows.yml",
    "chars": 5674,
    "preview": "name: Windows\n\non:\n  pull_request:\n  push:\n    branches:\n      - dev\n      - release\n\nconcurrency:\n  group: ${{ github.w"
  },
  {
    "path": ".gitignore",
    "chars": 125,
    "preview": "profile.cov\ncount.out\n*.swp\n*.snap\n/parts\n/prime\n/stage\n.vscode/\n/build\n.idea/\ncontrib/data.yaml\ncontrib/testOilPainting"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 49802,
    "preview": "0.43.0\n---\n* **all**\n    - update to OpenCV 4.13\n* **core**\n    - add Copy method to Mat (#1346)\n    - improve implement"
  },
  {
    "path": "CODE_OF_CONDUCT.md",
    "chars": 3352,
    "preview": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, w"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 5920,
    "preview": "# How to contribute\n\nThank you for your interest in improving GoCV.\n\nWe would like your help to make this project better"
  },
  {
    "path": "Dockerfile",
    "chars": 262,
    "preview": "# to build this docker image:\n#   docker build .\nFROM ghcr.io/hybridgroup/opencv:4.13.0\n\nENV GOPATH /go\n\nCOPY . /go/src/"
  },
  {
    "path": "Dockerfile-static",
    "chars": 601,
    "preview": "# to build this docker image:\n#   docker buildx build -f Dockerfile-static -t gocv-static --platform=linux/amd64,linux/a"
  },
  {
    "path": "Dockerfile-static-alpine",
    "chars": 2610,
    "preview": "# syntax=docker/dockerfile:1.3\n\n# To build release:\n#   docker buildx build -f Dockerfile.static-alpine -t gocv-static-a"
  },
  {
    "path": "Dockerfile-static-builder",
    "chars": 806,
    "preview": "# to build this docker image:\n#   docker build -f Dockerfile-static-builder -t gocv-static-builder .\n# or for multi-arch"
  },
  {
    "path": "Dockerfile-test",
    "chars": 434,
    "preview": "# To build:\n#   docker build -f Dockerfile-test -t gocv-test .\n#\n# To run tests:\n#   xhost +\n#   docker run -it --rm -e "
  },
  {
    "path": "Dockerfile-test.gpu-cuda-10",
    "chars": 438,
    "preview": "# To build:\n#   docker build -f Dockerfile-test.gpu-cuda-10 -t gocv-test-gpu-cuda-10 .\n#\n# To run tests:\n#   docker run "
  },
  {
    "path": "Dockerfile-test.gpu-cuda-11",
    "chars": 438,
    "preview": "# To build:\n#   docker build -f Dockerfile-test.gpu-cuda-11 -t gocv-test-gpu-cuda-11 .\n#\n# To run tests:\n#   docker run "
  },
  {
    "path": "Dockerfile-test.gpu-cuda-11.2.2",
    "chars": 454,
    "preview": "# To build:\n#   docker build -f Dockerfile-test.gpu-cuda-11.2.2 -t gocv-test-gpu-cuda-11.2.2 .\n#\n# To run tests:\n#   doc"
  },
  {
    "path": "Dockerfile-test.gpu-cuda-12",
    "chars": 438,
    "preview": "# To build:\n#   docker build -f Dockerfile-test.gpu-cuda-12 -t gocv-test-gpu-cuda-12 .\n#\n# To run tests:\n#   docker run "
  },
  {
    "path": "Dockerfile-test.gpu-cuda-13",
    "chars": 438,
    "preview": "# To build:\n#   docker build -f Dockerfile-test.gpu-cuda-13 -t gocv-test-gpu-cuda-13 .\n#\n# To run tests:\n#   docker run "
  },
  {
    "path": "Dockerfile.ffmpeg-static-alpine",
    "chars": 4431,
    "preview": "# syntax=docker/dockerfile:1.3\n\n# To build release:\n#   docker buildx build -f Dockerfile.ffmpeg-static-alpine -t ghcr.i"
  },
  {
    "path": "Dockerfile.gpu",
    "chars": 308,
    "preview": "# to build this docker image:\n#   docker build -f Dockerfile.gpu .\nFROM ghcr.io/hybridgroup/opencv:4.13.0-gpu-cuda-11 AS"
  },
  {
    "path": "Dockerfile.gstreamer-static-alpine",
    "chars": 3137,
    "preview": "# To build release:\n#   docker buildx build -f Dockerfile.gstreamer-static-alpine -t ghcr.io/hybridgroup/gstreamer:1.24-"
  },
  {
    "path": "Dockerfile.opencv",
    "chars": 5175,
    "preview": "# OpenCV 4 prebuilt multiarchitecture image\n#\n# To build release:\n#   docker buildx build -f Dockerfile.opencv -t ghcr.i"
  },
  {
    "path": "Dockerfile.opencv-gpu-cuda-10",
    "chars": 2560,
    "preview": "# to build this docker image:\n#   docker build -f Dockerfile.opencv-gpu-cuda-10 -t ghcr.io/hybridgroup/opencv:4.13.0-gpu"
  },
  {
    "path": "Dockerfile.opencv-gpu-cuda-11",
    "chars": 3046,
    "preview": "# to build this docker image:\n#   docker build -f Dockerfile.opencv-gpu-cuda-11 -t ghcr.io/hybridgroup/opencv:4.13.0-gpu"
  },
  {
    "path": "Dockerfile.opencv-gpu-cuda-11.2.2",
    "chars": 3054,
    "preview": "# to build this docker image:\n#   docker build -f Dockerfile.opencv-gpu-cuda-11 -t ghcr.io/hybridgroup/opencv:4.13.0-gpu"
  },
  {
    "path": "Dockerfile.opencv-gpu-cuda-12",
    "chars": 3046,
    "preview": "# to build this docker image:\n#   docker build -f Dockerfile.opencv-gpu-cuda-12 -t ghcr.io/hybridgroup/opencv:4.13.0-gpu"
  },
  {
    "path": "Dockerfile.opencv-gpu-cuda-13",
    "chars": 3065,
    "preview": "# to build this docker image:\n#   docker build -f Dockerfile.opencv-gpu-cuda-13 -t ghcr.io/hybridgroup/opencv:4.13.0-gpu"
  },
  {
    "path": "Dockerfile.opencv-openvino",
    "chars": 2164,
    "preview": "# to build this docker image:\n#   docker build -f Dockerfile.opencv-openvino -t ghcr.io/hybridgroup/opencv:4.13.0-openvi"
  },
  {
    "path": "Dockerfile.opencv-static",
    "chars": 6847,
    "preview": "# OpenCV 4 prebuilt multiarchitecture image\n#\n# To build release:\n#   docker buildx build -f Dockerfile.opencv-static -t"
  },
  {
    "path": "Dockerfile.opencv-static-alpine",
    "chars": 6236,
    "preview": "# syntax=docker/dockerfile:1.3\n\n# To build release:\n#   docker buildx build -f Dockerfile.opencv-static-alpine -t ghcr.i"
  },
  {
    "path": "Dockerfile.opencv-static-alpine-ffmpeg",
    "chars": 5150,
    "preview": "# syntax=docker/dockerfile:1.3\n\n# To build release:\n#   docker buildx build -f Dockerfile.opencv-static-alpine-ffmpeg -t"
  },
  {
    "path": "Dockerfile.opencv-ubuntu-18.04",
    "chars": 2450,
    "preview": "# to build this docker image:\n#   docker build -f Dockerfile.opencv-ubuntu-18.04 -t ghcr.io/hybridgroup/opencv:4.13.0-ub"
  },
  {
    "path": "Dockerfile.opencv-ubuntu-20.04",
    "chars": 2558,
    "preview": "# to build this docker image:\n#   docker build -f Dockerfile.opencv-ubuntu-20.04 -t ghcr.io/hybridgroup/opencv:4.13.0-ub"
  },
  {
    "path": "Dockerfile.opencv-ubuntu-22.04",
    "chars": 2555,
    "preview": "# to build this docker image:\n#   docker build -f Dockerfile.opencv-ubuntu-22.04 -t ghcr.io/hybridgroup/opencv:4.13.0-ub"
  },
  {
    "path": "Dockerfile.opencv-ubuntu-24.04",
    "chars": 2561,
    "preview": "# to build this docker image:\n#   docker build -f Dockerfile.opencv-ubuntu-24.04 -t ghcr.io/hybridgroup/opencv:4.13.0-ub"
  },
  {
    "path": "LICENSE.txt",
    "chars": 568,
    "preview": "Copyright (c) The Hybrid Group and friends\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not "
  },
  {
    "path": "Makefile",
    "chars": 19741,
    "preview": ".ONESHELL:\n.PHONY: test deps download build clean astyle cmds docker\n\n# GoCV version to use.\nGOCV_VERSION?=\"v0.43.0\"\n\n# "
  },
  {
    "path": "README.md",
    "chars": 9770,
    "preview": "# GoCV\n\n[![GoCV](https://raw.githubusercontent.com/hybridgroup/gocv/release/images/gocvlogo.jpg)](http://gocv.io/)\n\n[![G"
  },
  {
    "path": "ROADMAP.md",
    "chars": 27973,
    "preview": "# Roadmap\n\nThis is a list of all of the functionality areas within OpenCV, and OpenCV Contrib.\n\nAny section listed with "
  },
  {
    "path": "aruco.cpp",
    "chars": 11659,
    "preview": "//go:build !gocv_specific_modules || (gocv_specific_modules && gocv_aruco)\n\n#include \"aruco.h\"\n\nArucoDetector ArucoDetec"
  },
  {
    "path": "aruco.go",
    "chars": 12853,
    "preview": "//go:build !gocv_specific_modules || (gocv_specific_modules && gocv_aruco)\n\npackage gocv\n\n/*\n#include <stdlib.h>\n#includ"
  },
  {
    "path": "aruco.h",
    "chars": 6951,
    "preview": "#ifndef _OPENCV3_ARUCO_H_\n#define _OPENCV3_ARUCO_H_\n\n#ifdef __cplusplus\n#include <opencv2/opencv.hpp>\nextern \"C\" {\n#endi"
  },
  {
    "path": "aruco_dictionaries.go",
    "chars": 1848,
    "preview": "//go:build !gocv_specific_modules || (gocv_specific_modules && gocv_aruco)\n\npackage gocv\n\n/*\n#include <stdlib.h>\n#includ"
  },
  {
    "path": "aruco_test.go",
    "chars": 10883,
    "preview": "//go:build !gocv_specific_modules || (gocv_specific_modules && gocv_aruco)\n\npackage gocv\n\nimport (\n\t\"errors\"\n\t\"fmt\"\n\t\"re"
  },
  {
    "path": "asyncarray.cpp",
    "chars": 850,
    "preview": "// +build openvino\n\n#include <string.h>\n#include \"asyncarray.h\"\n\n\n// AsyncArray_New creates a new empty AsyncArray\nAsync"
  },
  {
    "path": "asyncarray.go",
    "chars": 925,
    "preview": "//go:build openvino\n// +build openvino\n\npackage gocv\n\nimport (\n\t\"errors\"\n)\n\n/*\n#include <stdlib.h>\n#include \"dnn.h\"\n#inc"
  },
  {
    "path": "asyncarray.h",
    "chars": 422,
    "preview": "#ifdef __cplusplus\n#include <opencv2/opencv.hpp>\nextern \"C\" {\n#endif\n\n#include \"core.h\"\n#include \"dnn.h\"\n\n#ifdef __cplus"
  },
  {
    "path": "asyncarray_test.go",
    "chars": 252,
    "preview": "//go:build openvino\n// +build openvino\n\npackage gocv\n\nimport (\n\t\"testing\"\n)\n\nfunc TestAsyncArray(t *testing.T) {\n\tasynca"
  },
  {
    "path": "calib3d.cpp",
    "chars": 9778,
    "preview": "//go:build !gocv_specific_modules || (gocv_specific_modules && gocv_calib3d)\n\n#include \"calib3d.h\"\n\ndouble Fisheye_Calib"
  },
  {
    "path": "calib3d.go",
    "chars": 18746,
    "preview": "//go:build !gocv_specific_modules || (gocv_specific_modules && gocv_calib3d)\n\npackage gocv\n\n/*\n#include <stdlib.h>\n#incl"
  },
  {
    "path": "calib3d.h",
    "chars": 3164,
    "preview": "#ifndef _OPENCV3_CALIB_H_\n#define _OPENCV3_CALIB_H_\n\n#ifdef __cplusplus\n#include <opencv2/opencv.hpp>\n#include <opencv2/"
  },
  {
    "path": "calib3d_string.go",
    "chars": 1195,
    "preview": "//go:build !gocv_specific_modules || (gocv_specific_modules && gocv_calib3d)\n\npackage gocv\n\nfunc (c CalibFlag) String() "
  },
  {
    "path": "calib3d_test.go",
    "chars": 26221,
    "preview": "//go:build !gocv_specific_modules || (gocv_specific_modules && gocv_calib3d)\n\npackage gocv\n\nimport (\n\t\"fmt\"\n\t\"image\"\n\t\"i"
  },
  {
    "path": "cgo.go",
    "chars": 777,
    "preview": "//go:build !customenv && !opencvstatic\n\npackage gocv\n\n// Changes here should be mirrored in contrib/cgo.go and cuda/cgo."
  },
  {
    "path": "cgo_static.go",
    "chars": 6221,
    "preview": "//go:build !customenv && opencvstatic && linux\n\npackage gocv\n\n// Changes here should be mirrored in contrib/cgo_static.g"
  },
  {
    "path": "cgo_static_darwin.go",
    "chars": 249,
    "preview": "//go:build !customenv && opencvstatic && darwin\n\npackage gocv\n\n// Changes here should be mirrored in contrib/cgo_static_"
  },
  {
    "path": "cgo_static_windows.go",
    "chars": 1613,
    "preview": "//go:build !customenv && opencvstatic && windows\n\npackage gocv\n\n// Changes here should be mirrored in contrib/cgo_static"
  },
  {
    "path": "cmd/README.md",
    "chars": 5889,
    "preview": "# GoCV Commands\n\nGoCV comes with various useful command line utilities, that are also examples of how to use the package"
  },
  {
    "path": "cmd/asciicam/main.go",
    "chars": 1488,
    "preview": "// What it does:\n//\n// This example uses the VideoCapture class to capture video\n// then displays the ASCII representati"
  },
  {
    "path": "cmd/basic-drawing/main.go",
    "chars": 2483,
    "preview": "// What it does:\n//\n// This example draws two examples, an atom and a rook, based on:\n// https://docs.opencv.org/2.4/doc"
  },
  {
    "path": "cmd/caffe-classifier/main.go",
    "chars": 3876,
    "preview": "// What it does:\n//\n// This example uses the Caffe (http://caffe.berkeleyvision.org/) deep learning framework\n// to clas"
  },
  {
    "path": "cmd/captest/main.go",
    "chars": 936,
    "preview": "// What it does:\n//\n// This example uses the VideoCapture class to test if you can capture video\n// from a connected web"
  },
  {
    "path": "cmd/capwindow/main.go",
    "chars": 953,
    "preview": "// What it does:\n//\n// This example uses the VideoCapture class to capture frames from a connected webcam,\n// and displa"
  },
  {
    "path": "cmd/counter/main.go",
    "chars": 2336,
    "preview": "// What it does:\n//\n// This example tracks objects such as cars or people passing across\n// a horizontal or vertical lin"
  },
  {
    "path": "cmd/cuda/main.go",
    "chars": 501,
    "preview": "// What it does:\n//\n// \tThis program outputs the current OpenCV library version and CUDA version the console.\n//\n// How "
  },
  {
    "path": "cmd/dnn-detection/main.go",
    "chars": 4011,
    "preview": "// What it does:\n//\n// This example uses a deep neural network to perform object detection.\n// It can be used with eithe"
  },
  {
    "path": "cmd/dnn-pose-detection/main.go",
    "chars": 6298,
    "preview": "// What it does:\n//\n// This example shows how to perform pose detection using models from OpenPose, an open source\n// hu"
  },
  {
    "path": "cmd/dnn-style-transfer/main.go",
    "chars": 2639,
    "preview": "// What it does:\n//\n// This example performs real-time style transfer using a deep neural network.\n//\n// For more inform"
  },
  {
    "path": "cmd/faceblur/main.go",
    "chars": 1815,
    "preview": "// What it does:\n//\n// This example captures video from a connected camera,\n// then uses the CascadeClassifier to detect"
  },
  {
    "path": "cmd/facedetect/main.go",
    "chars": 2030,
    "preview": "// What it does:\n//\n// This example uses the CascadeClassifier class to detect faces,\n// and draw a rectangle around eac"
  },
  {
    "path": "cmd/facedetect-from-url/main.go",
    "chars": 1875,
    "preview": "// What it does:\n//\n// This example uses the CascadeClassifier class to detect faces from url,\n// and draw a rectangle a"
  },
  {
    "path": "cmd/facedetectYN/main.go",
    "chars": 3031,
    "preview": "// What it does:\n//\n// This example uses the FaceDetectorYN class to detect faces,\n// and draw a rectangle around each o"
  },
  {
    "path": "cmd/feature-matching/main.go",
    "chars": 1870,
    "preview": "// What it does:\n//\n// This example uses Brute-Force Matching\n// with SIFT Descriptors and Ratio Test\n//\n// How to run:\n"
  },
  {
    "path": "cmd/find-chessboard/main.go",
    "chars": 1250,
    "preview": "// What it does:\n//\n// This example shows how to find chessboard patterns in an image\n//\n// How to run:\n//\n// \t\tgo run ."
  },
  {
    "path": "cmd/find-circles/main.go",
    "chars": 1421,
    "preview": "// What it does:\n//\n// This example shows how to find circles in an image using Hough transform.\n//\n// How to run:\n//\n//"
  },
  {
    "path": "cmd/find-lines/main.go",
    "chars": 954,
    "preview": "// What it does:\n//\n// This example shows how to find lines in an image using Hough transform.\n//\n// How to run:\n//\n// \t"
  },
  {
    "path": "cmd/gstreamer-writer/main.go",
    "chars": 1186,
    "preview": "/*\n\tGStreamer Video Writer\n\nWhat it does:\n\n\tCaptures video from webcam and outputs the frames to a gocv VideoWriter\n\nHow"
  },
  {
    "path": "cmd/hand-gestures/main.go",
    "chars": 2999,
    "preview": "// What it does:\n//\n// This example detects how many fingers you hold up in front of the camera.\n//\n// How to run:\n//\n//"
  },
  {
    "path": "cmd/hello/main.go",
    "chars": 228,
    "preview": "package main\n\nimport (\n\t\"gocv.io/x/gocv\"\n)\n\nfunc main() {\n\twebcam, _ := gocv.OpenVideoCapture(0)\n\twindow := gocv.NewWind"
  },
  {
    "path": "cmd/img-similarity/main.go",
    "chars": 3574,
    "preview": "// What it does:\n//\n// This example calculates perceptual hashes for a pair of images,\n// and prints the hashes and calc"
  },
  {
    "path": "cmd/kalman-filter/main.go",
    "chars": 5075,
    "preview": "// What it does:\n//\n// This example implements the kalman filter example from:\n//\n//\thttps://docs.opencv.org/4.6.0/de/d7"
  },
  {
    "path": "cmd/mjpeg-streamer/main.go",
    "chars": 1660,
    "preview": "// What it does:\n//\n// This example opens a video capture device, then streams MJPEG from it.\n// Once running point your"
  },
  {
    "path": "cmd/motion-detect/main.go",
    "chars": 2464,
    "preview": "// What it does:\n//\n// This example detects motion using a delta threshold from the first frame,\n// and then finds conto"
  },
  {
    "path": "cmd/openvino/ie/version/main.go",
    "chars": 389,
    "preview": "// What it does:\n//\n// \tThis program outputs the current OpenVINO IE library version to the console.\n//\n// How to run:\n/"
  },
  {
    "path": "cmd/saveimage/main.go",
    "chars": 909,
    "preview": "// What it does:\n//\n// This example uses the VideoCapture class to capture a frame from a connected webcam,\n// then save"
  },
  {
    "path": "cmd/savevideo/main.go",
    "chars": 1202,
    "preview": "// What it does:\n//\n// This example uses the VideoCapture class to capture AVI video from a connected webcam,\n// then sa"
  },
  {
    "path": "cmd/showimage/main.go",
    "chars": 653,
    "preview": "// What it does:\n//\n// This example uses the Window class to open an image file, and then display\n// the image in a Wind"
  },
  {
    "path": "cmd/ssd-facedetect/main.go",
    "chars": 3315,
    "preview": "// What it does:\n//\n// This example shows, how to use pretrained SSD (Single Shot Detection) detection networks in gocv."
  },
  {
    "path": "cmd/tf-classifier/main.go",
    "chars": 3464,
    "preview": "// What it does:\n//\n// This example uses the Tensorflow (https://www.tensorflow.org/) deep learning framework\n// to clas"
  },
  {
    "path": "cmd/tracking/main.go",
    "chars": 2269,
    "preview": "// What it does:\n//\n// This example uses one of the Tracker classes from opencv_contrib to track a region of interest (e"
  },
  {
    "path": "cmd/version/main.go",
    "chars": 335,
    "preview": "// What it does:\n//\n// \tThis program outputs the current OpenCV library version to the console.\n//\n// How to run:\n//\n// "
  },
  {
    "path": "cmd/xphoto/main.go",
    "chars": 3112,
    "preview": "// What it does:\n//\n// This example demonstrates a couple of uses of the XPhoto module.\n// It can use the GrayworldWB cl"
  },
  {
    "path": "cmd/yolo-detection/main.go",
    "chars": 6341,
    "preview": "// What it does:\n//\n// This example uses the YOLOv8 deep neural network to perform object detection.\n//\n// Download the "
  },
  {
    "path": "codecov.yml",
    "chars": 46,
    "preview": "ignore:\n  - \"*_string.go\"\n  - \"*/*_string.go\"\n"
  },
  {
    "path": "contrib/README.md",
    "chars": 1019,
    "preview": "# Using OpenCV Contrib\n\nThe OpenCV Contrib library contains experimental or non-free (aka patented) algorithms.\n\nGoCV su"
  },
  {
    "path": "contrib/att_faces/README",
    "chars": 1579,
    "preview": "The ORL face database\n---------------------\n\nThis directory contains a set of faces taken between April 1992 and\nApril 1"
  },
  {
    "path": "contrib/att_faces/s1/1.pgm",
    "chars": 3859,
    "preview": "P5\n92 112\n255\n01-/19'*515<L[c_PKB6/12+.5=FTin^Qk_P97BVPJAG>T4JGC@XDGKB9=>4/2:<@B9.6BPPDGW@MBSM:.)+873886-4'.8-'/0('2,EFC"
  },
  {
    "path": "contrib/att_faces/s1/2.pgm",
    "chars": 1967,
    "preview": "P5\n92 112\n255\n<<>503=<GDNHGJNXXMS\\_drzw~}toihgfN@@N[<2=VKJ7$(5.:I6?>E==EEGUY[TVPLQanzqphon^HIKXN-<FM0A(\"23DMPC9BBAMQX_X"
  },
  {
    "path": "contrib/att_faces/s1/3.pgm",
    "chars": 3288,
    "preview": "P5\n92 112\n255\n',5%=0=-#(('7Tn`IHVgVXRMKXZ{[^gieamlox}}xppjdkolmSLTb\\^[RRPROA;(,779H=<&#\"././0/,,=3<2A+((,59LiWRRT"
  },
  {
    "path": "contrib/att_faces/s1/4.pgm",
    "chars": 3186,
    "preview": "P5\n92 112\n255\n)//.,10:=1:AV7TXH28<MQKD;-8@@:@JIINSYbfkmy{}rspksjbYOQCC?HDQ`o\\BMJLH@G7HWV\\TYWT;-61.204-04.1,+++5.%#+12BH0"
  },
  {
    "path": "contrib/att_faces/s2/1.pgm",
    "chars": 5976,
    "preview": "P5\n92 112\n255\n~||{|{{uuruozttyqj[e^MNGI=7*4:AC<>DMUTOE>DFINMVLXW[X\\WTGJVQIEGB=?Ugmsxsz{xzzzz}w{zywyyyvwypuorpuuwvsrsm"
  },
  {
    "path": "contrib/att_faces/s2/2.pgm",
    "chars": 6161,
    "preview": "P5\n92 112\n255\n~~~x{xuopnputvwnrnj]Y[LLDA6)'0-8?B?AINVUHI;BEFDFLITTVWNQBHLFA>??Mcgiqvyvxywyx{y{z{tzw|vzwwolqpvtstqts"
  },
  {
    "path": "contrib/att_faces/s2/4.pgm",
    "chars": 6025,
    "preview": "P5\n92 112\n255\n}}}pkinjkigkjja^YUPWY[\\URMKKQ<;831-().9FLWSUQOPL??73::;@BCCJT^ijjqwltwvzwxwyxuuuuxuvwutqssv}|{wqhiiebaie^"
  },
  {
    "path": "contrib/att_faces/s3/1.pgm",
    "chars": 6897,
    "preview": "P5\n92 112\n255\ngihligjmnkimjojmopplaZVmssiiad_[]i_[WR]qcW_w}`Zdhikfgb^ZVU``YWF8773?D^hmmomqkmqonjnmojpklokjfjkhigkkkjgnjo"
  },
  {
    "path": "contrib/att_faces/s3/10.pgm",
    "chars": 5895,
    "preview": "P5\n92 112\n255\nhmgmkmmlmkpknpkqdH5<J\\`WX\\UXHTVcQbd^dXV_SX[\\X}fIQWHOCM@-<1728?5--4\u00114SXTXfdZ\\]ZSeolsnroononnnfjikjlkkkohpln"
  },
  {
    "path": "contrib/att_faces/s3/2.pgm",
    "chars": 6734,
    "preview": "P5\n92 112\n255\ndclclfkhflhmgnkokmmmolphmgY_gmcb_a]ViaWW_jzljg[Ze|`ahbab_]UWPQMZX_TYjnrknopnonmnlllokoonmnohdifiblemgllijk"
  },
  {
    "path": "contrib/att_faces/s3/3.pgm",
    "chars": 6635,
    "preview": "P5\n92 112\n255\nejfhhfllhleknjkllnleOKYcqsnlfbc_]Tmuy|xtqnhffroi`fg`TPG8;6;.30297:Vcminiifhilmlokrimllklehfjfhhlgjgljmjoik"
  },
  {
    "path": "contrib/att_faces/s3/4.pgm",
    "chars": 6707,
    "preview": "P5\n92 112\n255\niflifmiihlkmmikqnnlnjolhqzrsuqiqjxipnjgcc\\ZZbpwjqmq\\XQOAB@<82)&%1-63:.F]aimiipknjkljjgijiegchihhkgllknllnm"
  },
  {
    "path": "contrib/att_faces/s3/5.pgm",
    "chars": 6519,
    "preview": "P5\n92 112\n255\nehhfgjfihkhjelgea}{{ksxrmpyrmhi]ilpjih[^PWKDG]`[TH=:DGH=;;?=59LJZa^WZekojnlonlmmnkmoleehdgiigihjgfklciut|r"
  },
  {
    "path": "contrib/att_faces/s3/6.pgm",
    "chars": 5830,
    "preview": "P5\n92 112\n255\nnjmmkmnklpmnnooqmntmnqokz`R[WVZQO?DWSOOL_a`mkpi_cXTa[XOOWKAA>:,6-7T]qlsnprnpoopmmooloommolpmmknnknpkolqjrl"
  },
  {
    "path": "contrib/att_faces/s3/7.pgm",
    "chars": 6010,
    "preview": "P5\n92 112\n255\nmoljrmoonnqplopqorpqsnUDN\\][MFQWN>MAmU9HA;BT[ccZXX\\aUVD:O:=57138%.<\u0015JXbqomlmnnklnnkqmnlljnlmojnmolomoqoppr"
  },
  {
    "path": "contrib/att_faces/s3/8.pgm",
    "chars": 5912,
    "preview": "P5\n92 112\n255\nkhmilnmmlmnlnompolnXKR`[WNCOZP<Q@knGFHD64K^ks{qlxyr^IB210,%\u001c\u001f\u0019 +-2/G_[nqmomnqonlpqnlnoonnnkmkjkimkmkklmolm"
  },
  {
    "path": "contrib/att_faces/s3/9.pgm",
    "chars": 5887,
    "preview": "P5\n92 112\n255\nhmhmjilljmlmmllimpi`]ab`LQOJAWNML>BXLDIHsofM@ABOV[f__QA<;92/-!+\u001e#!&WSfcnoghfjporopooopqplnomhljlkmjmklkpjn"
  },
  {
    "path": "contrib/bgsegm.cpp",
    "chars": 734,
    "preview": "//go:build !gocv_specific_modules || (gocv_specific_modules && gocv_contrib_bgsegm)\n\n#include \"bgsegm.h\"\n\nBackgroundSubt"
  },
  {
    "path": "contrib/bgsegm.go",
    "chars": 1545,
    "preview": "//go:build !gocv_specific_modules || (gocv_specific_modules && gocv_contrib_bgsegm)\n\npackage contrib\n\n/*\n#include <stdli"
  },
  {
    "path": "contrib/bgsegm.h",
    "chars": 596,
    "preview": "#ifndef _OPENCV3_BGSEGM_H_\n#define _OPENCV3_BGSEGM_H_\n\n#ifdef __cplusplus\n#include <opencv2/opencv.hpp>\n#include <opencv"
  },
  {
    "path": "contrib/bgsegm_test.go",
    "chars": 491,
    "preview": "//go:build !gocv_specific_modules || (gocv_specific_modules && gocv_contrib_bgsegm)\n\npackage contrib\n\nimport (\n\t\"testing"
  },
  {
    "path": "contrib/cgo.go",
    "chars": 801,
    "preview": "//go:build !customenv && !opencvstatic\n\npackage contrib\n\n// Changes here should be mirrored in gocv/cgo.go and cuda/cgo."
  },
  {
    "path": "contrib/cgo_static.go",
    "chars": 3227,
    "preview": "//go:build !customenv && opencvstatic && linux\n\npackage contrib\n\n// Changes here should be mirrored in contrib/cgo_stati"
  },
  {
    "path": "contrib/cgo_static_darwin.go",
    "chars": 252,
    "preview": "//go:build !customenv && opencvstatic && darwin\n\npackage contrib\n\n// Changes here should be mirrored in contrib/cgo_stat"
  },
  {
    "path": "contrib/cgo_static_windows.go",
    "chars": 1616,
    "preview": "//go:build !customenv && opencvstatic && windows\n\npackage contrib\n\n// Changes here should be mirrored in contrib/cgo_sta"
  },
  {
    "path": "contrib/contrib.go",
    "chars": 196,
    "preview": "// Package contrib is the GoCV wrapper around OpenCV Contrib.\n//\n// For further details, please see:\n// https://github.c"
  },
  {
    "path": "contrib/errors.go",
    "chars": 256,
    "preview": "package contrib\n\n/*\n#include \"../core.h\"\n*/\nimport \"C\"\nimport \"errors\"\n\n// Converts a OpenCVResult struct to an error.\nf"
  },
  {
    "path": "contrib/face.cpp",
    "chars": 9896,
    "preview": "//go:build !gocv_specific_modules || (gocv_specific_modules && gocv_contrib_face)\n\n#include \"face.h\"\n\nbool FaceRecognize"
  },
  {
    "path": "contrib/face.go",
    "chars": 17878,
    "preview": "//go:build !gocv_specific_modules || (gocv_specific_modules && gocv_contrib_face)\n\npackage contrib\n\n/*\n#include <stdlib."
  },
  {
    "path": "contrib/face.h",
    "chars": 3278,
    "preview": "#ifndef _OPENCV3_FACE_H_\n#define _OPENCV3_FACE_H_\n\n#ifdef __cplusplus\n#include <opencv2/opencv.hpp>\n#include <opencv2/fa"
  },
  {
    "path": "contrib/face_recognizer.go",
    "chars": 6273,
    "preview": "//go:build !gocv_specific_modules || (gocv_specific_modules && gocv_contrib_face)\n\npackage contrib\n\n/*\n#include <stdlib."
  },
  {
    "path": "contrib/face_test.go",
    "chars": 7143,
    "preview": "//go:build !gocv_specific_modules || (gocv_specific_modules && gocv_contrib_face)\n\npackage contrib\n\nimport (\n\t\"image\"\n\t\""
  },
  {
    "path": "contrib/freetype.cpp",
    "chars": 1929,
    "preview": "//go:build linux && (!gocv_specific_modules || (gocv_specific_modules && gocv_contrib_freetype))\n\n#ifndef _WIN32  // Exc"
  },
  {
    "path": "contrib/freetype.go",
    "chars": 3350,
    "preview": "//go:build linux && (!gocv_specific_modules || (gocv_specific_modules && gocv_contrib_freetype))\n\npackage contrib\n\n/*\n#i"
  },
  {
    "path": "contrib/freetype.h",
    "chars": 892,
    "preview": "#ifndef _OPENCV3_FREETYPE2_H_\n#define _OPENCV3_FREETYPE2_H_\n\n#ifdef __cplusplus\n#include <opencv2/opencv.hpp>\n#include <"
  },
  {
    "path": "contrib/freetype_test.go",
    "chars": 1351,
    "preview": "//go:build linux && (!gocv_specific_modules || (gocv_specific_modules && gocv_contrib_freetype))\n\npackage contrib\n\nimpor"
  },
  {
    "path": "contrib/img_hash.cpp",
    "chars": 3044,
    "preview": "//go:build !gocv_specific_modules || (gocv_specific_modules && gocv_contrib_img_hash)\n\n#include \"img_hash.h\"\n\nvoid pHash"
  },
  {
    "path": "contrib/img_hash.go",
    "chars": 6169,
    "preview": "//go:build !gocv_specific_modules || (gocv_specific_modules && gocv_contrib_img_hash)\n\npackage contrib\n\n//#include <stdl"
  },
  {
    "path": "contrib/img_hash.h",
    "chars": 977,
    "preview": "#ifndef _OPENCV3_IMG_HASH_H_\n#define _OPENCV3_IMG_HASH_H_\n\n#ifdef __cplusplus\n#include <opencv2/opencv.hpp>\n#include <op"
  },
  {
    "path": "contrib/img_hash_string.go",
    "chars": 295,
    "preview": "//go:build !gocv_specific_modules || (gocv_specific_modules && gocv_contrib_img_hash)\n\npackage contrib\n\nfunc (c BlockMea"
  },
  {
    "path": "contrib/img_hash_test.go",
    "chars": 3519,
    "preview": "//go:build !gocv_specific_modules || (gocv_specific_modules && gocv_contrib_img_hash)\n\npackage contrib\n\nimport (\n\t\"error"
  },
  {
    "path": "contrib/mcc.cpp",
    "chars": 11245,
    "preview": "// go:build !gocv_specific_modules || (gocv_specific_modules && gocv_mcc)\n\n#include \"mcc.h\"\n\nMccCCheckerDetector MccCChe"
  },
  {
    "path": "contrib/mcc.go",
    "chars": 13646,
    "preview": "//go:build !gocv_specific_modules || (gocv_specific_modules && gocv_mcc)\n\npackage contrib\n\n/*\n#include <stdlib.h>\n#inclu"
  },
  {
    "path": "contrib/mcc.h",
    "chars": 6099,
    "preview": "#ifndef _OPENCV3_MCC_H_\n#define _OPENCV3_MCC_H_\n\n#ifdef __cplusplus\n#include <opencv2/opencv.hpp>\n#include <opencv2/mcc."
  },
  {
    "path": "contrib/mcc_test.go",
    "chars": 6556,
    "preview": "//go:build !gocv_specific_modules || (gocv_specific_modules && gocv_mcc)\n\npackage contrib\n\nimport (\n\t\"math\"\n\t\"testing\"\n\n"
  },
  {
    "path": "contrib/tracking.cpp",
    "chars": 1502,
    "preview": "//go:build !gocv_specific_modules || (gocv_specific_modules && gocv_contrib_tracking)\n\n#include \"tracking.h\"\n#include <o"
  },
  {
    "path": "contrib/tracking.go",
    "chars": 2541,
    "preview": "//go:build !gocv_specific_modules || (gocv_specific_modules && gocv_contrib_tracking)\n\npackage contrib\n\n/*\n#include \"tra"
  },
  {
    "path": "contrib/tracking.h",
    "chars": 759,
    "preview": "\n#ifndef _OPENCV3_TRACKING_H_\n#define _OPENCV3_TRACKING_H_\n\n#include \"../core.h\"\n\n#ifdef __cplusplus\n#include <opencv2/t"
  },
  {
    "path": "contrib/tracking_test.go",
    "chars": 1005,
    "preview": "//go:build !gocv_specific_modules || (gocv_specific_modules && gocv_contrib_tracking)\n\npackage contrib\n\nimport (\n\t\"image"
  },
  {
    "path": "contrib/wechat_qrcode.cpp",
    "chars": 2289,
    "preview": "//go:build !gocv_specific_modules || (gocv_specific_modules && gocv_contrib_wechat_qrcode)\n\n#include \"wechat_qrcode.h\"\n\n"
  },
  {
    "path": "contrib/wechat_qrcode.go",
    "chars": 1659,
    "preview": "//go:build !gocv_specific_modules || (gocv_specific_modules && gocv_contrib_wechat_qrcode)\n\npackage contrib\n\n/*\n#include"
  },
  {
    "path": "contrib/wechat_qrcode.h",
    "chars": 1000,
    "preview": "#ifndef _OPENCV4_WECHAT_QRCODE_H_\n#define _OPENCV4_WECHAT_QRCODE_H_\n\n#ifdef __cplusplus\n\n#include <opencv2/opencv.hpp>\n#"
  },
  {
    "path": "contrib/wechat_qrcode_test.go",
    "chars": 1766,
    "preview": "//go:build !gocv_specific_modules || (gocv_specific_modules && gocv_contrib_wechat_qrcode)\n\npackage contrib\n\nimport (\n\t\""
  },
  {
    "path": "contrib/xfeatures2d.cpp",
    "chars": 4855,
    "preview": "//go:build !gocv_specific_modules || (gocv_specific_modules && gocv_contrib_xfeatures2d)\n\n#include \"xfeatures2d.h\"\n\n\nSUR"
  },
  {
    "path": "contrib/xfeatures2d.go",
    "chars": 5846,
    "preview": "//go:build !gocv_specific_modules || (gocv_specific_modules && gocv_contrib_xfeatures2d)\n\npackage contrib\n\n/*\n#include <"
  },
  {
    "path": "contrib/xfeatures2d.h",
    "chars": 1175,
    "preview": "#ifndef _OPENCV3_XFEATURES2D_H_\n#define _OPENCV3_XFEATURES2D_H_\n\n#ifdef __cplusplus\n#include <opencv2/opencv.hpp>\n#inclu"
  },
  {
    "path": "contrib/xfeatures2d_test.go",
    "chars": 3606,
    "preview": "//go:build !gocv_specific_modules || (gocv_specific_modules && gocv_contrib_xfeatures2d)\n\npackage contrib\n\nimport (\n\t\"os"
  },
  {
    "path": "contrib/ximgproc.cpp",
    "chars": 1541,
    "preview": "//go:build !gocv_specific_modules || (gocv_specific_modules && gocv_contrib_ximgproc)\n\n#include \"ximgproc.h\"\n\nOpenCVResu"
  },
  {
    "path": "contrib/ximgproc.go",
    "chars": 2866,
    "preview": "//go:build !gocv_specific_modules || (gocv_specific_modules && gocv_contrib_ximgproc)\n\npackage contrib\n\n/*\n#include <std"
  },
  {
    "path": "contrib/ximgproc.h",
    "chars": 640,
    "preview": "#ifndef _OPENCV3_XIMGPROC_H_\n#define _OPENCV3_XIMGPROC_H_\n\n#ifdef __cplusplus\n#include <opencv2/opencv.hpp>\n#include <op"
  },
  {
    "path": "contrib/ximgproc_test.go",
    "chars": 2058,
    "preview": "//go:build !gocv_specific_modules || (gocv_specific_modules && gocv_contrib_ximgproc)\n\npackage contrib\n\nimport (\n\t\"testi"
  },
  {
    "path": "contrib/xobjdetect.cpp",
    "chars": 2116,
    "preview": "//go:build !gocv_specific_modules || (gocv_specific_modules && gocv_contrib_xobjdetect)\n\n#include \"xobjdetect.h\"\n\nWBDete"
  },
  {
    "path": "contrib/xobjdetect.go",
    "chars": 3102,
    "preview": "//go:build !gocv_specific_modules || (gocv_specific_modules && gocv_contrib_xobjdetect)\n\npackage contrib\n\n/*\n#include <s"
  },
  {
    "path": "contrib/xobjdetect.h",
    "chars": 855,
    "preview": "#ifndef _OPENCV3_XOBJDETECT_H_\n#define _OPENCV3_XOBJDETECT_H_\n\n#ifdef __cplusplus\n#include <opencv2/opencv.hpp>\n#include"
  },
  {
    "path": "contrib/xobjdetect_test.go",
    "chars": 716,
    "preview": "//go:build !gocv_specific_modules || (gocv_specific_modules && gocv_contrib_xobjdetect)\n\npackage contrib\n\nimport (\n\t\"tes"
  },
  {
    "path": "contrib/xphoto.cpp",
    "chars": 13357,
    "preview": "//go:build !gocv_specific_modules || (gocv_specific_modules && gocv_contrib_xphoto)\n\n#include \"xphoto.h\"\n\nOpenCVResult X"
  },
  {
    "path": "contrib/xphoto.go",
    "chars": 21360,
    "preview": "//go:build !gocv_specific_modules || (gocv_specific_modules && gocv_contrib_xphoto)\n\npackage contrib\n\n/*\n#include <stdli"
  },
  {
    "path": "contrib/xphoto.h",
    "chars": 4675,
    "preview": "#ifndef _OPENCV3_XPHOTO_H_\n#define _OPENCV3_XPHOTO_H_\n\n#ifdef __cplusplus\n#include <opencv2/opencv.hpp>\n#include <opencv"
  },
  {
    "path": "contrib/xphoto_test.go",
    "chars": 5295,
    "preview": "//go:build !gocv_specific_modules || (gocv_specific_modules && gocv_contrib_xphoto)\n\npackage contrib\n\n//:testing\n\nimport"
  },
  {
    "path": "core.cpp",
    "chars": 50731,
    "preview": "#include \"core.h\"\n#include <string.h>\n\nint lastException = 0;\nchar lastExceptionMessage[1024];\n\nint GetOpenCVException()"
  },
  {
    "path": "core.go",
    "chars": 100383,
    "preview": "package gocv\n\n/*\n#include <stdlib.h>\n#include \"core.h\"\n*/\nimport \"C\"\nimport (\n\t\"errors\"\n\t\"image\"\n\t\"image/color\"\n\t\"reflec"
  },
  {
    "path": "core.h",
    "chars": 19987,
    "preview": "#ifndef _OPENCV3_CORE_H_\n#define _OPENCV3_CORE_H_\n\n#include <stdint.h>\n#include <stdbool.h>\n\n// Wrapper for std::vector<"
  },
  {
    "path": "core_string.go",
    "chars": 3901,
    "preview": "package gocv\n\nfunc (c MatType) String() string {\n\tswitch c {\n\tcase MatTypeCV8U:\n\t\treturn \"CV8U\"\n\tcase MatTypeCV8UC2:\n\t\tr"
  },
  {
    "path": "core_test.go",
    "chars": 82880,
    "preview": "package gocv\n\nimport (\n\t\"bytes\"\n\t\"image\"\n\t\"image/color\"\n\t_ \"image/jpeg\"\n\t_ \"image/png\"\n\t\"runtime\"\n\t\"strings\"\n\t\"testing\"\n"
  },
  {
    "path": "cuda/README.md",
    "chars": 3492,
    "preview": "# CUDA\n\nIn order to use the GoCV `cuda` package, the CUDA toolkit from nvidia needs to be installed on the host system. "
  },
  {
    "path": "cuda/arithm.cpp",
    "chars": 15726,
    "preview": "//go:build !gocv_specific_modules || (gocv_specific_modules && gocv_cuda_arithm)\n\n#include \"../core.h\"\n#include \"arithm."
  },
  {
    "path": "cuda/arithm.go",
    "chars": 32590,
    "preview": "//go:build !gocv_specific_modules || (gocv_specific_modules && gocv_cuda_arithm)\n\npackage cuda\n\n/*\n#include <stdlib.h>\n#"
  },
  {
    "path": "cuda/arithm.h",
    "chars": 3522,
    "preview": "#ifndef _OPENCV3_CUDA_ARITHM_H_\n#define _OPENCV3_CUDA_ARITHM_H_\n\n#include <stdint.h>\n#include <stdbool.h>\n\n#ifdef __cplu"
  },
  {
    "path": "cuda/arithm_test.go",
    "chars": 28554,
    "preview": "//go:build !gocv_specific_modules || (gocv_specific_modules && gocv_cuda_arithm)\n\npackage cuda\n\nimport (\n\t\"testing\"\n\n\t\"g"
  },
  {
    "path": "cuda/bgsegm.cpp",
    "chars": 1645,
    "preview": "//go:build !gocv_specific_modules || (gocv_specific_modules && gocv_cuda_bgsegm)\n\n#include \"bgsegm.h\"\n\nCudaBackgroundSub"
  },
  {
    "path": "cuda/bgsegm.go",
    "chars": 3624,
    "preview": "//go:build !gocv_specific_modules || (gocv_specific_modules && gocv_cuda_bgsegm)\n\npackage cuda\n\n/*\n#include <stdlib.h>\n#"
  },
  {
    "path": "cuda/bgsegm.h",
    "chars": 1061,
    "preview": "#ifndef _OPENCV3_CUDABGSEGM_H_\n#define _OPENCV3_CUDABGSEGM_H_\n\n#ifdef __cplusplus\n#include <opencv2/opencv.hpp>\n#include"
  },
  {
    "path": "cuda/bgsegm_test.go",
    "chars": 2313,
    "preview": "//go:build !gocv_specific_modules || (gocv_specific_modules && gocv_cuda_bgsegm)\n\npackage cuda\n\nimport (\n\t\"testing\"\n\n\t\"g"
  },
  {
    "path": "cuda/cgo.go",
    "chars": 782,
    "preview": "//go:build !customenv && !opencvstatic\n\npackage cuda\n\n// Changes here should be mirrored in gocv/cgo.go and contrib/cgo."
  },
  {
    "path": "cuda/cgo_static.go",
    "chars": 3224,
    "preview": "//go:build !customenv && opencvstatic && linux\n\npackage gocv\n\n// Changes here should be mirrored in contrib/cgo_static.g"
  },
  {
    "path": "cuda/cgo_static_darwin.go",
    "chars": 249,
    "preview": "//go:build !customenv && opencvstatic && darwin\n\npackage gocv\n\n// Changes here should be mirrored in contrib/cgo_static_"
  },
  {
    "path": "cuda/cgo_static_windows.go",
    "chars": 1613,
    "preview": "//go:build !customenv && opencvstatic && windows\n\npackage gocv\n\n// Changes here should be mirrored in contrib/cgo_static"
  },
  {
    "path": "cuda/core.cpp",
    "chars": 124,
    "preview": "#include \"../core.h\"\n#include \"core.h\"\n#include <string.h>\n\nvoid GpuRects_Close(struct Rects rs) {\n    delete[] rs.rects"
  },
  {
    "path": "cuda/core.go",
    "chars": 543,
    "preview": "package cuda\n\n/*\n#include <stdlib.h>\n#include \"../core.h\"\n#include \"core.h\"\n*/\nimport \"C\"\nimport (\n\t\"image\"\n\t\"reflect\"\n\t"
  },
  {
    "path": "cuda/core.h",
    "chars": 272,
    "preview": "#ifndef _OPENCV3_CUDA_CORE_H_\n#define _OPENCV3_CUDA_CORE_H_\n\n#include <stdint.h>\n#include <stdbool.h>\n\n#ifdef __cplusplu"
  },
  {
    "path": "cuda/cuda.cpp",
    "chars": 4532,
    "preview": "#include \"cuda.h\"\n\nGpuMat GpuMat_New() {\n    try {\n        return new cv::cuda::GpuMat();\n    } catch(const cv::Exceptio"
  },
  {
    "path": "cuda/cuda.go",
    "chars": 8720,
    "preview": "// Package cuda is the GoCV wrapper around OpenCV cuda.\n//\n// For further details, please see:\n// https://github.com/ope"
  },
  {
    "path": "cuda/cuda.h",
    "chars": 1469,
    "preview": "#ifndef _OPENCV3_CUDA_H_\n#define _OPENCV3_CUDA_H_\n\n#ifdef __cplusplus\n#include <opencv2/opencv.hpp>\n#include <opencv2/co"
  },
  {
    "path": "cuda/cuda_test.go",
    "chars": 2374,
    "preview": "package cuda\n\nimport (\n\t\"testing\"\n\n\t\"gocv.io/x/gocv\"\n)\n\nfunc TestNewGpuMat(t *testing.T) {\n\tmat := NewGpuMat()\n\tdefer ma"
  },
  {
    "path": "cuda/errors.go",
    "chars": 253,
    "preview": "package cuda\n\n/*\n#include \"../core.h\"\n*/\nimport \"C\"\nimport \"errors\"\n\n// Converts a OpenCVResult struct to an error.\nfunc"
  },
  {
    "path": "cuda/filters.cpp",
    "chars": 3658,
    "preview": "//go:build !gocv_specific_modules || (gocv_specific_modules && gocv_cuda_filters)\n\n#include \"../core.h\"\n#include \"filter"
  }
]

// ... and 107 more files (download for full content)

About this extraction

This page contains the full source code of the hybridgroup/gocv GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 307 files (2.7 MB), approximately 728.2k tokens, and a symbol index with 4394 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!