diff --git a/.github/workflows/docfx.yml b/.github/workflows/docfx.yml index 3ad92eb7d..3035fc5c6 100644 --- a/.github/workflows/docfx.yml +++ b/.github/workflows/docfx.yml @@ -3,7 +3,7 @@ name: DocFX on: push: branches: - - master + - main workflow_dispatch: jobs: @@ -13,17 +13,17 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 1 - name: Install .NET - uses: actions/setup-dotnet@v2 + uses: actions/setup-dotnet@v3 with: - dotnet-version: 6.0.x + dotnet-version: 8.0.x - name: Setup MSBuild.exe - uses: microsoft/setup-msbuild@v1.1 + uses: microsoft/setup-msbuild@v2 - name: DocFX shell: cmd @@ -32,12 +32,12 @@ jobs: docfx docfx\docfx.json - name: Upload DocFX packages - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: docfx_site path: ${{ github.workspace }}\docfx\_site - - uses: actions/upload-pages-artifact@v1 + - uses: actions/upload-pages-artifact@v3 with: path: docfx/_site @@ -53,10 +53,4 @@ jobs: steps: - name: Deploy to GitHub Pages id: deployment - uses: actions/deploy-pages@v1 - -# - name: Publish Documentation on GitHub Pages -# uses: peaceiris/actions-gh-pages@v3 -# with: -# github_token: ${{ secrets.GITHUB_TOKEN }} -# publish_dir: docfx/_site + uses: actions/deploy-pages@v4 diff --git a/.github/workflows/docker-deploy-ubuntu20.yml b/.github/workflows/docker-deploy-ubuntu20.yml index 22d300d98..77f98d595 100644 --- a/.github/workflows/docker-deploy-ubuntu20.yml +++ b/.github/workflows/docker-deploy-ubuntu20.yml @@ -9,8 +9,8 @@ on: env: DEBIAN_FRONTEND: noninteractive - DOCKER_IMAGE_NAME1: "ubuntu20-dotnet6-opencv4.6.0" - DOCKER_IMAGE_NAME2: "ubuntu20-dotnet6sdk-opencv4.6.0" + DOCKER_IMAGE_NAME1: "ubuntu22-dotnet6-opencv4.7.0" + DOCKER_IMAGE_NAME2: "ubuntu22-dotnet6sdk-opencv4.7.0" jobs: build: @@ -24,7 +24,7 @@ jobs: exit 1 fi - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: fetch-depth: 1 diff --git a/.github/workflows/docker-ubuntu20.yml b/.github/workflows/docker-ubuntu20.yml index 3c5a519ad..3b8cb454b 100644 --- a/.github/workflows/docker-ubuntu20.yml +++ b/.github/workflows/docker-ubuntu20.yml @@ -13,11 +13,9 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - with: - fetch-depth: 1 + - uses: actions/checkout@v3 - name: docker build run: | - cd docker/ubuntu20-dotnet6sdk-opencv4.6.0 - docker build -t shimat/ubuntu20-dotnet6sdk-opencv4.6.0 . + cd docker/ubuntu22-dotnet6sdk-opencv4.7.0 + docker build -t shimat/ubuntu22-dotnet6sdk-opencv4.7.0 . diff --git a/.github/workflows/linux-arm.yml b/.github/workflows/linux-arm.yml index a605fb7f9..d21d7ee89 100644 --- a/.github/workflows/linux-arm.yml +++ b/.github/workflows/linux-arm.yml @@ -5,23 +5,23 @@ on: types: [synchronize, opened] push: branches: - - master + - main env: DEBIAN_FRONTEND: noninteractive - OPENCV_VERSION: 4.6.0 + OPENCV_VERSION: 4.11.0 jobs: build: - runs-on: ubuntu-20.04 + runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v2.2.0 + - uses: actions/checkout@v4 - - uses: docker/setup-buildx-action@v1 + - uses: docker/setup-buildx-action@v3 with: install: true - - uses: docker/setup-qemu-action@v1 + - uses: docker/setup-qemu-action@v3 - name: Build with Docker run: | @@ -31,7 +31,7 @@ jobs: --output=type=docker \ --platform=linux/arm/v7 \ --build-arg OPENCV_VERSION \ - ./docker/ubuntu18-dotnetcore3.1-opencv4.5.3 + ./docker/ubuntu22-dotnet6-opencv4.8.0 - name: Extract build files from Docker instance run: | @@ -44,7 +44,7 @@ jobs: cp artifacts/libOpenCvSharpExtern.so nuget/ dotnet pack nuget/OpenCvSharp4.runtime.linux-arm.csproj -o artifacts_arm - - uses: actions/upload-artifact@v2 + - uses: actions/upload-artifact@v4 with: name: artifacts_linux_arm path: artifacts_arm diff --git a/.github/workflows/macos10.yml b/.github/workflows/macos10.yml.disabled similarity index 96% rename from .github/workflows/macos10.yml rename to .github/workflows/macos10.yml.disabled index 206d86e80..6335c77ca 100644 --- a/.github/workflows/macos10.yml +++ b/.github/workflows/macos10.yml.disabled @@ -5,19 +5,19 @@ on: types: [synchronize, opened] push: branches: - - master + - main env: DEBIAN_FRONTEND: noninteractive - OPENCV_VERSION: 4.6.0 + OPENCV_VERSION: 4.8.0 jobs: build: - runs-on: macos-10.15 + runs-on: macos-11 steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 with: fetch-depth: 1 @@ -27,7 +27,7 @@ jobs: # - name: Cache OpenCV # id: opencv-cache -# uses: actions/cache@v2 +# uses: actions/cache@v3 # with: # path: ${{ github.workspace }}/opencv_macos/ # key: opencv-${{ env.OPENCV_VERSION }}-macos-rev1 @@ -104,7 +104,7 @@ jobs: LD_LIBRARY_PATH=. ./test - name: Install .NET - uses: actions/setup-dotnet@v1 + uses: actions/setup-dotnet@v3 with: dotnet-version: '6.0.x' @@ -119,7 +119,7 @@ jobs: dotnet pack ${GITHUB_WORKSPACE}/nuget/OpenCvSharp4.runtime.osx.10.15-x64.csproj -o ${GITHUB_WORKSPACE}/artifacts_macos ls ${GITHUB_WORKSPACE}/artifacts_macos - - uses: actions/upload-artifact@v1 + - uses: actions/upload-artifact@v3 with: name: artifacts_macos_10 path: artifacts_macos diff --git a/.github/workflows/publish_nuget.yml b/.github/workflows/publish_nuget.yml index 77200fb0c..21e0878ea 100644 --- a/.github/workflows/publish_nuget.yml +++ b/.github/workflows/publish_nuget.yml @@ -5,41 +5,41 @@ on: jobs: Publish: - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Download windows artifact - uses: dawidd6/action-download-artifact@v2 + uses: dawidd6/action-download-artifact@v6 with: github_token: ${{secrets.GITHUB_TOKEN}} workflow: windows.yml name: packages_windows - name: Download ubuntu artifact - uses: dawidd6/action-download-artifact@v2 + uses: dawidd6/action-download-artifact@v8 with: github_token: ${{secrets.GITHUB_TOKEN}} - workflow: ubuntu18.yml - name: artifacts_ubuntu_18 + workflow: ubuntu22.yml + name: artifacts_ubuntu_22 - name: Download ubuntu arm artifact - uses: dawidd6/action-download-artifact@v2 + uses: dawidd6/action-download-artifact@v8 with: github_token: ${{secrets.GITHUB_TOKEN}} workflow: linux-arm.yml name: artifacts_linux_arm - - name: Download macos artifact - uses: dawidd6/action-download-artifact@v2 - with: - github_token: ${{secrets.GITHUB_TOKEN}} - workflow: macos10.yml - name: artifacts_macos_10 + #- name: Download macos artifact + # uses: dawidd6/action-download-artifact@v6 + # with: + # github_token: ${{secrets.GITHUB_TOKEN}} + # workflow: macos10.yml + # name: artifacts_macos_10 - name: Download wasm artifact - uses: dawidd6/action-download-artifact@v2 + uses: dawidd6/action-download-artifact@v8 with: github_token: ${{secrets.GITHUB_TOKEN}} workflow: wasm.yml @@ -49,9 +49,9 @@ jobs: ls -l - name: Install .NET - uses: actions/setup-dotnet@v1 + uses: actions/setup-dotnet@v4 with: - dotnet-version: 6.0.x + dotnet-version: 8.0.x - name: Rename run: | diff --git a/.github/workflows/ubuntu20.yml b/.github/workflows/ubuntu20.yml deleted file mode 100644 index a97c31835..000000000 --- a/.github/workflows/ubuntu20.yml +++ /dev/null @@ -1,169 +0,0 @@ -name: Ubuntu 20.04 - -on: - pull_request: - types: [synchronize, opened] - push: - branches: - - master - -env: - DEBIAN_FRONTEND: noninteractive - OPENCV_VERSION: 4.6.0 - -jobs: - build: - - runs-on: ubuntu-20.04 - - steps: - - uses: actions/checkout@v2 - with: - fetch-depth: 1 - - - name: Install dependencies - run: | - pwd - echo ${GITHUB_WORKSPACE} - current_path=$(pwd) - sudo apt-get update -y - sudo apt-get install -y --no-install-recommends \ - apt-transport-https \ - software-properties-common \ - wget \ - unzip \ - ca-certificates \ - build-essential \ - cmake \ - git \ - libtbb-dev \ - libatlas-base-dev \ - libgtk2.0-dev \ - libavcodec-dev \ - libavformat-dev \ - libswscale-dev \ - libdc1394-22-dev \ - libxine2-dev \ - libv4l-dev \ - libtheora-dev \ - libvorbis-dev \ - libxvidcore-dev \ - libopencore-amrnb-dev \ - libopencore-amrwb-dev \ - libavresample-dev \ - x264 \ - libtesseract-dev - - - name: Cache OpenCV - id: opencv-cache - uses: actions/cache@v2 - with: - path: ${{ github.workspace }}/opencv_ubuntu/ - key: opencv-${{ env.OPENCV_VERSION }}-rev1 - - - name: Build OpenCV - if: steps.opencv-cache.outputs.cache-hit != 'true' - run: | - wget https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip -Oopencv-${OPENCV_VERSION}.zip && unzip opencv-${OPENCV_VERSION}.zip - wget https://github.com/opencv/opencv_contrib/archive/${OPENCV_VERSION}.zip -Oopencv_contrib-${OPENCV_VERSION}.zip && unzip opencv_contrib-${OPENCV_VERSION}.zip - cd opencv-${OPENCV_VERSION} && mkdir build && cd build - cmake \ - -D CMAKE_BUILD_TYPE=Release \ - -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-${OPENCV_VERSION}/modules \ - -D BUILD_SHARED_LIBS=OFF \ - -D ENABLE_CXX11=ON \ - -D BUILD_EXAMPLES=OFF \ - -D BUILD_DOCS=OFF \ - -D BUILD_PERF_TESTS=OFF \ - -D BUILD_TESTS=OFF \ - -D BUILD_JAVA=OFF \ - -D BUILD_opencv_apps=OFF \ - -D BUILD_opencv_barcode=OFF \ - -D BUILD_opencv_java_bindings_generator=OFF \ - -D BUILD_opencv_python_bindings_generator=OFF \ - -D BUILD_opencv_python_tests=OFF \ - -D BUILD_opencv_ts=OFF \ - -D BUILD_opencv_js=OFF \ - -D BUILD_opencv_js_bindings_generator=OFF \ - -D BUILD_opencv_bioinspired=OFF \ - -D BUILD_opencv_ccalib=OFF \ - -D BUILD_opencv_datasets=OFF \ - -D BUILD_opencv_dnn_objdetect=OFF \ - -D BUILD_opencv_dpm=OFF \ - -D BUILD_opencv_fuzzy=OFF \ - -D BUILD_opencv_gapi=ON \ - -D BUILD_opencv_intensity_transform=OFF \ - -D BUILD_opencv_mcc=OFF \ - -D BUILD_opencv_objc_bindings_generator=OFF \ - -D BUILD_opencv_rapid=OFF \ - -D BUILD_opencv_reg=OFF \ - -D BUILD_opencv_stereo=OFF \ - -D BUILD_opencv_structured_light=OFF \ - -D BUILD_opencv_surface_matching=OFF \ - -D BUILD_opencv_wechat_qrcode=ON \ - -D BUILD_opencv_videostab=OFF \ - -D WITH_GSTREAMER=OFF \ - -D WITH_ADE=OFF \ - -D OPENCV_ENABLE_NONFREE=ON \ - -D CMAKE_INSTALL_PREFIX=${GITHUB_WORKSPACE}/opencv_ubuntu .. - make -j2 - make install - sudo ldconfig - cd ${GITHUB_WORKSPACE} - ls - - - name: Build OpenCvSharpExtern - run: | - ls ${GITHUB_WORKSPACE}/opencv_ubuntu - echo "-----" - ls ${GITHUB_WORKSPACE}/opencv_ubuntu/lib - echo "-----" - mkdir src/build && cd $_ - cmake -D CMAKE_PREFIX_PATH=${GITHUB_WORKSPACE}/opencv_ubuntu .. - make -j2 - ls OpenCvSharpExtern - cp OpenCvSharpExtern/libOpenCvSharpExtern.so ${GITHUB_WORKSPACE}/nuget/ - ldd OpenCvSharpExtern/libOpenCvSharpExtern.so - - - name: Check OpenCvSharpExtern - run: | - cd ${GITHUB_WORKSPACE}/nuget/ - ldd libOpenCvSharpExtern.so - nm libOpenCvSharpExtern.so - echo -ne "#include \n int core_Mat_sizeof(); int main(){ int i = core_Mat_sizeof(); printf(\"sizeof(Mat) = %d\", i); return 0; }" > test.c - gcc -I./ -L./ test.c -o test -lOpenCvSharpExtern - LD_LIBRARY_PATH=. ./test - - - name: Install .NET - uses: actions/setup-dotnet@v1 - with: - dotnet-version: '6.0.x' - - - name: Create NuGet package - env: - BETA: "" - run: | - yyyymmdd=`date '+%Y%m%d'` - echo $yyyymmdd - sed -E --in-place=.bak "s/[0-9]\.[0-9]{1,2}\.[0-9]{1,2}.[0-9]{8}(-beta[0-9]*)?<\/version>/${OPENCV_VERSION}.${yyyymmdd}${BETA}<\/version>/" ${GITHUB_WORKSPACE}/nuget/OpenCvSharp4.runtime.ubuntu.20.04-x64.nuspec - cat ${GITHUB_WORKSPACE}/nuget/OpenCvSharp4.runtime.ubuntu.20.04-x64.nuspec - dotnet pack ${GITHUB_WORKSPACE}/nuget/OpenCvSharp4.runtime.ubuntu.20.04-x64.csproj -o ${GITHUB_WORKSPACE}/artifacts_ubuntu - ls ${GITHUB_WORKSPACE}/artifacts_ubuntu - - - uses: actions/upload-artifact@v1 - with: - name: artifacts_ubuntu_20 - path: artifacts_ubuntu - - - name: Test - run: | - cd ${GITHUB_WORKSPACE}/test/OpenCvSharp.Tests - dotnet build -c Release -f net6.0 - cp ${GITHUB_WORKSPACE}/nuget/libOpenCvSharpExtern.so ${GITHUB_WORKSPACE}/test/OpenCvSharp.Tests/bin/Release/net6.0/ - cp ${GITHUB_WORKSPACE}/nuget/libOpenCvSharpExtern.so ${GITHUB_WORKSPACE}/test/OpenCvSharp.Tests/ - sudo cp ${GITHUB_WORKSPACE}/nuget/libOpenCvSharpExtern.so /usr/lib/ - # ls ${GITHUB_WORKSPACE}/test/OpenCvSharp.Tests/bin/Release/net6.0/ - # ls - LD_LIBRARY_PATH=. dotnet test OpenCvSharp.Tests.csproj -c Release -f net6.0 --runtime ubuntu.20.04-x64 --logger "trx;LogFileName=test-results.trx" < /dev/null - # ls - # ls TestResults diff --git a/.github/workflows/ubuntu18.yml b/.github/workflows/ubuntu22.yml similarity index 57% rename from .github/workflows/ubuntu18.yml rename to .github/workflows/ubuntu22.yml index c341025a9..cc61be85b 100644 --- a/.github/workflows/ubuntu18.yml +++ b/.github/workflows/ubuntu22.yml @@ -1,48 +1,44 @@ -name: Ubuntu 18.04 +name: Ubuntu 22.04 on: pull_request: types: [synchronize, opened] push: branches: - - master + - main env: DEBIAN_FRONTEND: noninteractive - OPENCV_VERSION: 4.6.0 + OPENCV_VERSION: 4.11.0 + OPENCV_CACHE_VERSION: 1 jobs: build: - runs-on: ubuntu-18.04 + runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 with: - fetch-depth: 1 + path: opencvsharp - name: Install dependencies run: | - pwd - echo ${GITHUB_WORKSPACE} - current_path=$(pwd) sudo apt-get update -y sudo apt-get install -y --no-install-recommends \ apt-transport-https \ software-properties-common \ - wget \ - unzip \ ca-certificates \ - build-essential \ + g++ \ + make \ cmake \ - git \ libtbb-dev \ libatlas-base-dev \ libgtk2.0-dev \ libavcodec-dev \ libavformat-dev \ libswscale-dev \ - libdc1394-22-dev \ + libdc1394-dev \ libxine2-dev \ libv4l-dev \ libtheora-dev \ @@ -50,26 +46,40 @@ jobs: libxvidcore-dev \ libopencore-amrnb-dev \ libopencore-amrwb-dev \ - libavresample-dev \ x264 \ libtesseract-dev - name: Cache OpenCV id: opencv-cache - uses: actions/cache@v2 + uses: actions/cache@v4 with: - path: ${{ github.workspace }}/opencv_ubuntu/ - key: opencv-${{ env.OPENCV_VERSION }}-rev1 - + path: ${{ github.workspace }}/opencv_artifacts/ + key: opencv-${{ env.OPENCV_VERSION }}-rev${{ env.OPENCV_CACHE_VERSION }} + + - name: Checkout OpenCV + if: steps.opencv-cache.outputs.cache-hit != 'true' + uses: actions/checkout@v4 + with: + repository: opencv/opencv + path: opencv + ref: ${{ env.OPENCV_VERSION }} + - name: Checkout OpenCV Contrib + if: steps.opencv-cache.outputs.cache-hit != 'true' + uses: actions/checkout@v4 + with: + repository: opencv/opencv_contrib + path: opencv_contrib + ref: ${{ env.OPENCV_VERSION }} + - name: Build OpenCV if: steps.opencv-cache.outputs.cache-hit != 'true' run: | - wget https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip -Oopencv-${OPENCV_VERSION}.zip && unzip opencv-${OPENCV_VERSION}.zip - wget https://github.com/opencv/opencv_contrib/archive/${OPENCV_VERSION}.zip -Oopencv_contrib-${OPENCV_VERSION}.zip && unzip opencv_contrib-${OPENCV_VERSION}.zip - cd opencv-${OPENCV_VERSION} && mkdir build && cd build + mkdir opencv/build && cd opencv/build cmake \ + -S . \ + -B build \ -D CMAKE_BUILD_TYPE=Release \ - -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-${OPENCV_VERSION}/modules \ + -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \ -D BUILD_SHARED_LIBS=OFF \ -D ENABLE_CXX11=ON \ -D BUILD_EXAMPLES=OFF \ @@ -105,29 +115,24 @@ jobs: -D WITH_GSTREAMER=OFF \ -D WITH_ADE=OFF \ -D OPENCV_ENABLE_NONFREE=ON \ - -D CMAKE_INSTALL_PREFIX=${GITHUB_WORKSPACE}/opencv_ubuntu .. - make -j2 - make install + -D CMAKE_INSTALL_PREFIX=${GITHUB_WORKSPACE}/opencv_artifacts .. + cmake --build build + cmake --install build sudo ldconfig cd ${GITHUB_WORKSPACE} ls - name: Build OpenCvSharpExtern - run: | - ls ${GITHUB_WORKSPACE}/opencv_ubuntu - echo "-----" - ls ${GITHUB_WORKSPACE}/opencv_ubuntu/lib - echo "-----" - mkdir src/build && cd $_ - cmake -D CMAKE_PREFIX_PATH=${GITHUB_WORKSPACE}/opencv_ubuntu .. - make -j2 + run: | + mkdir opencvsharp/src/build && cd $_ + cmake -D CMAKE_PREFIX_PATH=${GITHUB_WORKSPACE}/opencv_artifacts .. + make -j ls OpenCvSharpExtern - cp OpenCvSharpExtern/libOpenCvSharpExtern.so ${GITHUB_WORKSPACE}/nuget/ - ldd OpenCvSharpExtern/libOpenCvSharpExtern.so + cp OpenCvSharpExtern/libOpenCvSharpExtern.so ${GITHUB_WORKSPACE}/opencvsharp/nuget/ - name: Check OpenCvSharpExtern run: | - cd ${GITHUB_WORKSPACE}/nuget/ + cd ${GITHUB_WORKSPACE}/opencvsharp/nuget/ ldd libOpenCvSharpExtern.so nm libOpenCvSharpExtern.so echo -ne "#include \n int core_Mat_sizeof(); int main(){ int i = core_Mat_sizeof(); printf(\"sizeof(Mat) = %d\", i); return 0; }" > test.c @@ -135,9 +140,9 @@ jobs: LD_LIBRARY_PATH=. ./test - name: Install .NET - uses: actions/setup-dotnet@v1 + uses: actions/setup-dotnet@v4 with: - dotnet-version: '6.0.x' + dotnet-version: '8.0.x' - name: Create NuGet package env: @@ -145,25 +150,24 @@ jobs: run: | yyyymmdd=`date '+%Y%m%d'` echo $yyyymmdd - sed -E --in-place=.bak "s/[0-9]\.[0-9]{1,2}\.[0-9]{1,2}.[0-9]{8}(-beta[0-9]*)?<\/version>/${OPENCV_VERSION}.${yyyymmdd}${BETA}<\/version>/" ${GITHUB_WORKSPACE}/nuget/OpenCvSharp4.runtime.ubuntu.18.04-x64.nuspec - cat ${GITHUB_WORKSPACE}/nuget/OpenCvSharp4.runtime.ubuntu.18.04-x64.nuspec - dotnet pack ${GITHUB_WORKSPACE}/nuget/OpenCvSharp4.runtime.ubuntu.18.04-x64.csproj -o ${GITHUB_WORKSPACE}/artifacts_ubuntu + cd ${GITHUB_WORKSPACE}/opencvsharp + sed -E --in-place=.bak \ + "s/[0-9]\.[0-9]{1,2}\.[0-9]{1,2}.[0-9]{8}(-beta[0-9]*)?<\/version>/${OPENCV_VERSION}.${yyyymmdd}${BETA}<\/version>/" \ + nuget/OpenCvSharp4.official.runtime.linux-x64.nuspec + cat nuget/OpenCvSharp4.official.runtime.linux-x64.nuspec + dotnet pack nuget/OpenCvSharp4.official.runtime.linux-x64.csproj -o ${GITHUB_WORKSPACE}/artifacts_ubuntu ls ${GITHUB_WORKSPACE}/artifacts_ubuntu - - uses: actions/upload-artifact@v1 + - uses: actions/upload-artifact@v4 with: - name: artifacts_ubuntu_18 + name: artifacts_ubuntu_22 path: artifacts_ubuntu - name: Test run: | - cd ${GITHUB_WORKSPACE}/test/OpenCvSharp.Tests - dotnet build -c Release -f net6.0 - cp ${GITHUB_WORKSPACE}/nuget/libOpenCvSharpExtern.so ${GITHUB_WORKSPACE}/test/OpenCvSharp.Tests/bin/Release/net6.0/ - cp ${GITHUB_WORKSPACE}/nuget/libOpenCvSharpExtern.so ${GITHUB_WORKSPACE}/test/OpenCvSharp.Tests/ - sudo cp ${GITHUB_WORKSPACE}/nuget/libOpenCvSharpExtern.so /usr/lib/ - # ls ${GITHUB_WORKSPACE}/test/OpenCvSharp.Tests/bin/Release/net6.0/ - # ls - LD_LIBRARY_PATH=. dotnet test OpenCvSharp.Tests.csproj -c Release -f net6.0 --runtime ubuntu.18.04-x64 --logger "trx;LogFileName=test-results.trx" < /dev/null - # ls - # ls TestResults + cd ${GITHUB_WORKSPACE}/opencvsharp/test/OpenCvSharp.Tests + dotnet build -c Release -f net8.0 + cp ${GITHUB_WORKSPACE}/opencvsharp/nuget/libOpenCvSharpExtern.so ${GITHUB_WORKSPACE}/opencvsharp/test/OpenCvSharp.Tests/bin/Release/net8.0/ + cp ${GITHUB_WORKSPACE}/opencvsharp/nuget/libOpenCvSharpExtern.so ${GITHUB_WORKSPACE}/opencvsharp/test/OpenCvSharp.Tests/ + sudo cp ${GITHUB_WORKSPACE}/opencvsharp/nuget/libOpenCvSharpExtern.so /usr/lib/ + LD_LIBRARY_PATH=. dotnet test OpenCvSharp.Tests.csproj -c Release -f net8.0 --runtime linux-x64 --logger "trx;LogFileName=test-results.trx" < /dev/null diff --git a/.github/workflows/wasm.yml b/.github/workflows/wasm.yml index e603609ef..07826af59 100644 --- a/.github/workflows/wasm.yml +++ b/.github/workflows/wasm.yml @@ -5,21 +5,21 @@ on: types: [synchronize, opened] push: branches: - - master + - main env: DEBIAN_FRONTEND: noninteractive - OPENCV_VERSION: 4.6.0 - EM_VERSION: 2.0.23 + OPENCV_VERSION: 4.11.0 + EM_VERSION: 3.1.32 EM_CACHE_FOLDER: 'emsdk-cache' jobs: build: - runs-on: ubuntu-18.04 + runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 with: fetch-depth: 1 @@ -35,16 +35,16 @@ jobs: wget \ unzip \ ca-certificates \ - build-essential \ + g++ \ + make \ cmake \ - git \ libtbb-dev \ libatlas-base-dev \ libgtk2.0-dev \ libavcodec-dev \ libavformat-dev \ libswscale-dev \ - libdc1394-22-dev \ + libdc1394-dev \ libxine2-dev \ libv4l-dev \ libtheora-dev \ @@ -52,24 +52,23 @@ jobs: libxvidcore-dev \ libopencore-amrnb-dev \ libopencore-amrwb-dev \ - libavresample-dev \ x264 \ libtesseract-dev - name: Cache OpenCV id: opencv-cache - uses: actions/cache@v2 + uses: actions/cache@v4 with: path: ${{ github.workspace }}/opencv_wasm/ key: opencv-${{ env.OPENCV_VERSION }}-wasm - name: Setup Emscripten cache id: cache-system-libraries - uses: actions/cache@v2 + uses: actions/cache@v4 with: path: ${{env.EM_CACHE_FOLDER}} key: ${{env.EM_VERSION}}-${{ runner.os }} - - uses: mymindstorm/setup-emsdk@v10 + - uses: mymindstorm/setup-emsdk@v14 with: version: ${{env.EM_VERSION}} actions-cache-folder: ${{env.EM_CACHE_FOLDER}} @@ -129,7 +128,7 @@ jobs: -DCV_ENABLE_INTRINSICS=OFF \ -DBUILD_opencv_dnn=ON \ .. - make -j2 + make -j make install em++ -r -o ${GITHUB_WORKSPACE}/opencv_wasm/libopencv.o \ -Wl,--whole-archive ${GITHUB_WORKSPACE}/opencv_wasm/lib/*.a \ @@ -143,7 +142,7 @@ jobs: echo "-----" mkdir src/build && cd $_ emcmake cmake -DCMAKE_BUILD_TYPE=Release -DOpenCV_DIR=${GITHUB_WORKSPACE}/opencv_wasm/lib/cmake/opencv4 -DWASM_LIB=${GITHUB_WORKSPACE}/opencv_wasm/libopencv.o .. - make -j2 + make -j ls OpenCvSharpExtern cp OpenCvSharpExtern/libOpenCvSharpExtern.a ${GITHUB_WORKSPACE}/nuget/ @@ -152,9 +151,9 @@ jobs: echo TODO - name: Install .NET - uses: actions/setup-dotnet@v1 + uses: actions/setup-dotnet@v4 with: - dotnet-version: '6.0.x' + dotnet-version: '8.0.x' - name: Create NuGet package env: @@ -167,7 +166,7 @@ jobs: dotnet pack ${GITHUB_WORKSPACE}/nuget/OpenCvSharp4.runtime.wasm.csproj -o ${GITHUB_WORKSPACE}/artifacts_wasm ls ${GITHUB_WORKSPACE}/artifacts_wasm - - uses: actions/upload-artifact@v1 + - uses: actions/upload-artifact@v4 with: name: artifacts_wasm path: artifacts_wasm diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index d27646f12..082b09b7a 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -5,10 +5,12 @@ on: types: [synchronize, opened] push: branches: - - master + - main env: - OPENCV_VERSION: 4.6.0 + OPENCV_VERSION: "4.11.0" + OPENCV_FILES_TAG: "4.11.0.20250505" + TESSERACT_RELEASE_VERSION: "2024.08.19" jobs: build: @@ -17,7 +19,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v4 with: fetch-depth: 1 submodules: true @@ -30,44 +32,60 @@ jobs: # restore-keys: | # ${{ runner.os }}-nuget- - - name: NuGet restore - shell: cmd - run: | - nuget restore - - - name: Install Server-Media-Foundation - shell: powershell - run: | - Install-WindowsFeature Server-Media-Foundation - - name: Cache OpenCV binaries id: cache_opencv - uses: actions/cache@v2 + uses: actions/cache@v4 with: path: ${{ github.workspace }}/opencv_files - key: opencv-${{ env.OPENCV_VERSION }}-rev2 + key: opencv-${{ env.OPENCV_VERSION }}-rev1 - - name: Download OpenCV binaries + - name: Download OpenCV binaries if: steps.cache_opencv.outputs.cache-hit != 'true' shell: powershell + env: + GH_TOKEN: ${{ github.token }} run: | - . ".\download_opencv_windows.ps1" + gh release download --repo shimat/opencv_files ${env:OPENCV_FILES_TAG} --pattern "opencv_win_x64.zip" + gh release download --repo shimat/opencv_files ${env:OPENCV_FILES_TAG} --pattern "opencv_win_x86.zip" + Expand-Archive -Path opencv_win_x64.zip -DestinationPath opencv_files/opencv_win_x64 -Force -ErrorAction Stop + Expand-Archive -Path opencv_win_x86.zip -DestinationPath opencv_files/opencv_win_x86 -Force -ErrorAction Stop + ls opencv_files + ls opencv_files/opencv_win_x64 - name: Cache Tesseract binaries id: cache_tesseract - uses: actions/cache@v2 + uses: actions/cache@v4 with: path: ${{ github.workspace }}/tesseract_files - key: tesseract-41-rev1 + key: tesseract-41-rev2 - - name: Download Tesseract binaries + - name: Download Tesseract binaries if: steps.cache_tesseract.outputs.cache-hit != 'true' shell: powershell + env: + GH_TOKEN: ${{ github.token }} run: | - . ".\download_tesseract_windows.ps1" + gh release download --repo shimat/tesseract_vcpkg ${TESSERACT_RELEASE_VERSION} --pattern "*.zip" --output tesseract.zip + Expand-Archive -Path tesseract.zip -DestinationPath tesseract_files -Force -ErrorAction Stop + ls tesseract_files + Move-Item tesseract_files/tesseract_vcpkg.0.0.9-beta tesseract_files/tesseract_vcpkg + ls tesseract_files/tesseract_vcpkg + New-Item tesseract_files/tesseract_vcpkg -ItemType Directory -Force + Move-Item tesseract_files/tesseract_vcpkg/installed/* tesseract_files/tesseract_vcpkg/ + ls tesseract_files/tesseract_vcpkg + + - name: NuGet restore + shell: cmd + run: | + nuget restore + + - name: Install Server-Media-Foundation + shell: powershell + run: | + Install-WindowsFeature Server-Media-Foundation - name: Add msbuild to PATH - uses: microsoft/setup-msbuild@v1.1 + uses: microsoft/setup-msbuild@v2 - name: Build x64 shell: cmd @@ -77,18 +95,17 @@ jobs: shell: cmd run: msbuild OpenCvSharp.sln /t:build /p:configuration=Release /p:platform=x86 -maxcpucount - - name: Build ARM - shell: cmd - run: msbuild OpenCvSharp.sln /t:build /p:configuration=Release /p:platform=ARM -maxcpucount + #- name: Build ARM + # shell: cmd + # run: msbuild OpenCvSharp.sln /t:build /p:configuration=Release /p:platform=ARM -maxcpucount - name: Install .NET - uses: actions/setup-dotnet@v1 + uses: actions/setup-dotnet@v4 with: dotnet-version: | - 5.0.x - 6.0.x + 8.0.x - - name: Build net6.0 + - name: Build shell: cmd run: | dotnet build src/OpenCvSharp.Extensions/OpenCvSharp.Extensions.csproj -f net6.0 -p:configuration=Release -maxcpucount @@ -97,6 +114,8 @@ jobs: - name: Pack NuGet packages shell: powershell run: | + $ErrorActionPreference = "Stop" + $date = Get-Date -Format "yyyyMMdd" $version = "${env:OPENCV_VERSION}.${date}-beta" Write-Host "version = ${version}" @@ -134,7 +153,6 @@ jobs: nuget pack nuget/OpenCvSharp4.Extensions.nuspec -OutputDirectory artifacts -Symbols -SymbolPackageFormat snupkg nuget pack nuget/OpenCvSharp4.WpfExtensions.nuspec -OutputDirectory artifacts -Symbols -SymbolPackageFormat snupkg nuget pack nuget/OpenCvSharp4.runtime.win.nuspec -OutputDirectory artifacts - nuget pack nuget/OpenCvSharp4.runtime.uwp.nuspec -OutputDirectory artifacts - name: Test shell: powershell @@ -155,7 +173,7 @@ jobs: dotnet run -c Release --runtime win-x64 -- "${env:GITHUB_WORKSPACE}" "${env:GITHUB_WORKSPACE}\artifacts" ${{env.OPENCV_VERSION}} - name: Upload NuGet packages and Release packages - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v4 with: name: packages_windows path: ${{ github.workspace }}\artifacts diff --git a/LICENSE b/LICENSE index 261eeb9e9..434e92781 100644 --- a/LICENSE +++ b/LICENSE @@ -186,7 +186,7 @@ same "printed page" as the copyright notice for easier identification within third-party archives. - Copyright [yyyy] [name of copyright owner] + Copyright 2008 shimat Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/OpenCvSharp.sln b/OpenCvSharp.sln index ccc174031..73ba676ab 100644 --- a/OpenCvSharp.sln +++ b/OpenCvSharp.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.29503.13 +# Visual Studio Version 17 +VisualStudioVersion = 17.8.34330.188 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{E048D213-B3B9-453F-9A41-29FDEB0D496B}" EndProject @@ -24,8 +24,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tool", "tool", "{A6E578C0-A EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OpenCvSharp.NupkgBetaRemover", "tool\OpenCvSharp.NupkgBetaRemover\OpenCvSharp.NupkgBetaRemover.csproj", "{CC19F9A5-01A7-4BDF-B34C-CF56F46A474A}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "uwpOpenCvSharpExtern", "src\uwpOpenCvSharpExtern\uwpOpenCvSharpExtern.vcxproj", "{BD5471E5-7B55-5192-8DA4-042B66AF71AE}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OpenCvSharp.WpfExtensions", "src\OpenCvSharp.WpfExtensions\OpenCvSharp.WpfExtensions.csproj", "{01FD66CE-F81A-4641-BE30-3CF9DE84D6D5}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OpenCvSharp.ReleaseMaker", "tool\OpenCvSharp.ReleaseMaker\OpenCvSharp.ReleaseMaker.csproj", "{1C399497-5240-439A-879A-4ACB34C409AE}" @@ -37,7 +35,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenCvSharp.DebuggerVisualizers.Tester", "test\OpenCvSharp.DebuggerVisualizers.Tester\OpenCvSharp.DebuggerVisualizers.Tester.csproj", "{FFD602AA-0A08-40DD-8ACD-7F5A3BA51DEC}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenCvSharp.Tests.Windows", "test\OpenCvSharp.Tests.Windows\OpenCvSharp.Tests.Windows.csproj", "{36F6A125-3633-441E-9794-97EB91E50F20}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OpenCvSharp.Tests.Windows", "test\OpenCvSharp.Tests.Windows\OpenCvSharp.Tests.Windows.csproj", "{36F6A125-3633-441E-9794-97EB91E50F20}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -144,19 +142,6 @@ Global {CC19F9A5-01A7-4BDF-B34C-CF56F46A474A}.Release|x64.Build.0 = Release|Any CPU {CC19F9A5-01A7-4BDF-B34C-CF56F46A474A}.Release|x86.ActiveCfg = Release|Any CPU {CC19F9A5-01A7-4BDF-B34C-CF56F46A474A}.Release|x86.Build.0 = Release|Any CPU - {BD5471E5-7B55-5192-8DA4-042B66AF71AE}.Debug|Any CPU.ActiveCfg = Debug|Win32 - {BD5471E5-7B55-5192-8DA4-042B66AF71AE}.Debug|ARM.ActiveCfg = Debug|ARM - {BD5471E5-7B55-5192-8DA4-042B66AF71AE}.Debug|x64.ActiveCfg = Release|x64 - {BD5471E5-7B55-5192-8DA4-042B66AF71AE}.Debug|x64.Build.0 = Release|x64 - {BD5471E5-7B55-5192-8DA4-042B66AF71AE}.Debug|x86.ActiveCfg = Release|Win32 - {BD5471E5-7B55-5192-8DA4-042B66AF71AE}.Debug|x86.Build.0 = Release|Win32 - {BD5471E5-7B55-5192-8DA4-042B66AF71AE}.Release|Any CPU.ActiveCfg = Release|Win32 - {BD5471E5-7B55-5192-8DA4-042B66AF71AE}.Release|ARM.ActiveCfg = Release|ARM - {BD5471E5-7B55-5192-8DA4-042B66AF71AE}.Release|ARM.Build.0 = Release|ARM - {BD5471E5-7B55-5192-8DA4-042B66AF71AE}.Release|x64.ActiveCfg = Release|x64 - {BD5471E5-7B55-5192-8DA4-042B66AF71AE}.Release|x64.Build.0 = Release|x64 - {BD5471E5-7B55-5192-8DA4-042B66AF71AE}.Release|x86.ActiveCfg = Release|Win32 - {BD5471E5-7B55-5192-8DA4-042B66AF71AE}.Release|x86.Build.0 = Release|Win32 {01FD66CE-F81A-4641-BE30-3CF9DE84D6D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {01FD66CE-F81A-4641-BE30-3CF9DE84D6D5}.Debug|Any CPU.Build.0 = Debug|Any CPU {01FD66CE-F81A-4641-BE30-3CF9DE84D6D5}.Debug|ARM.ActiveCfg = Debug|Any CPU @@ -232,7 +217,6 @@ Global {8E7279F8-F801-4672-B42F-1ED2C68B16A4} = {E048D213-B3B9-453F-9A41-29FDEB0D496B} {4232CB4A-DFE3-46CA-9503-C5F1798BAED3} = {E048D213-B3B9-453F-9A41-29FDEB0D496B} {CC19F9A5-01A7-4BDF-B34C-CF56F46A474A} = {A6E578C0-A34A-4CCF-A808-CBAC81CB48C0} - {BD5471E5-7B55-5192-8DA4-042B66AF71AE} = {E048D213-B3B9-453F-9A41-29FDEB0D496B} {01FD66CE-F81A-4641-BE30-3CF9DE84D6D5} = {E048D213-B3B9-453F-9A41-29FDEB0D496B} {1C399497-5240-439A-879A-4ACB34C409AE} = {A6E578C0-A34A-4CCF-A808-CBAC81CB48C0} {FFD602AA-0A08-40DD-8ACD-7F5A3BA51DEC} = {1F113DD0-E292-47A5-8EFF-3FB5D0869BF3} diff --git a/OpenCvSharp.sln.DotSettings b/OpenCvSharp.sln.DotSettings index 9ff420506..63d9a7751 100644 --- a/OpenCvSharp.sln.DotSettings +++ b/OpenCvSharp.sln.DotSettings @@ -1,8 +1,10 @@  <NamingElement Priority="6"><Descriptor Static="Indeterminate" Constexpr="Indeterminate" Const="Indeterminate" Volatile="Indeterminate" Accessibility="NOT_APPLICABLE"><type Name="local variable" /></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></NamingElement> <NamingElement Priority="5"><Descriptor Static="Indeterminate" Constexpr="Indeterminate" Const="Indeterminate" Volatile="Indeterminate" Accessibility="NOT_APPLICABLE"><type Name="parameter" /></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></NamingElement> + LTRB LUT PCA + QR RB RNG SURF @@ -10,6 +12,13 @@ <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + True + True + <Policy><Descriptor Staticness="Static" AccessRightKinds="Private" Description="Static readonly fields (private)"><ElementKinds><Kind Name="READONLY_FIELD" /></ElementKinds></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></Policy> + <Policy><Descriptor Staticness="Any" AccessRightKinds="Private" Description="Constant fields (private)"><ElementKinds><Kind Name="CONSTANT_FIELD" /></ElementKinds></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></Policy> + <Policy><Descriptor Staticness="Instance" AccessRightKinds="Private" Description="Instance fields (private)"><ElementKinds><Kind Name="FIELD" /><Kind Name="READONLY_FIELD" /></ElementKinds></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></Policy> + <Policy><Descriptor Staticness="Static" AccessRightKinds="Private" Description="Static fields (private)"><ElementKinds><Kind Name="FIELD" /></ElementKinds></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></Policy> + True True True True @@ -64,7 +73,9 @@ True True + True True + True True True True @@ -88,6 +99,7 @@ True True True + True True True True @@ -100,6 +112,7 @@ True True True + True True True True @@ -134,9 +147,11 @@ True True True + True True True True + True True True diff --git a/README.md b/README.md index 6d6538894..0ebba09c2 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ ![opencvsharp](https://socialify.git.ci/shimat/opencvsharp/image?description=1&forks=1&language=1&owner=1&pattern=Plus&stargazers=1&theme=Light) -[![Github Actions Windows Status](https://github.com/shimat/opencvsharp/workflows/Windows%20Server%202022/badge.svg)](https://github.com/shimat/opencvsharp/actions) [![Github Actions Ubuntu Status](https://github.com/shimat/opencvsharp/workflows/Ubuntu%2018.04/badge.svg)](https://github.com/shimat/opencvsharp/actions) [![Github Actions MacOS Status](https://github.com/shimat/opencvsharp/workflows/macOS%2010.15/badge.svg)](https://github.com/shimat/opencvsharp/actions) [![GitHub license](https://img.shields.io/github/license/shimat/opencvsharp.svg)](https://github.com/shimat/opencvsharp/blob/master/LICENSE) +[![Github Actions Windows Status](https://github.com/shimat/opencvsharp/workflows/Windows%20Server%202022/badge.svg)](https://github.com/shimat/opencvsharp/actions) [![Github Actions Ubuntu Status](https://github.com/shimat/opencvsharp/workflows/Ubuntu%2022.04/badge.svg)](https://github.com/shimat/opencvsharp/actions) [![GitHub license](https://img.shields.io/github/license/shimat/opencvsharp.svg)](https://github.com/shimat/opencvsharp/blob/master/LICENSE) Old versions of OpenCvSharp are stored in [opencvsharp_2410](https://github.com/shimat/opencvsharp_2410). @@ -19,22 +19,17 @@ Old versions of OpenCvSharp are stored in [opencvsharp_2410](https://github.com/ |---------|-------------|------| |**OpenCvSharp4.runtime.win**| Native bindings for Windows x64/x86 (except UWP) | [![NuGet version](https://badge.fury.io/nu/OpenCvSharp4.runtime.win.svg)](https://badge.fury.io/nu/OpenCvSharp4.runtime.win) | |**OpenCvSharp4.runtime.uwp**| Native bindings for UWP (Universal Windows Platform) x64/x86/ARM | [![NuGet version](https://badge.fury.io/nu/OpenCvSharp4.runtime.uwp.svg)](https://badge.fury.io/nu/OpenCvSharp4.runtime.uwp) | -|**OpenCvSharp4.runtime.ubuntu.18.04-x64**| Native bindings for Ubuntu 18.04 x64 | [![NuGet version](https://badge.fury.io/nu/OpenCvSharp4.runtime.ubuntu.18.04-x64.svg)](https://badge.fury.io/nu/OpenCvSharp4.runtime.ubuntu.18.04-x64) | -|**OpenCvSharp4.runtime.osx.10.15-x64**| Native bindings for macOS 10.15 x64 | [![NuGet version](https://badge.fury.io/nu/OpenCvSharp4.runtime.osx.10.15-x64.svg)](https://www.nuget.org/packages/OpenCvSharp4.runtime.osx.10.15-x64/) | +|**OpenCvSharp4.official.runtime.linux-x64**| Native bindings for Linux x64 | [![NuGet version](https://badge.fury.io/nu/OpenCvSharp4.official.runtime.linux-x64.svg)](https://badge.fury.io/nu/OpenCvSharp4.official.runtime.linux-x64) | |**OpenCvSharp4.runtime.linux-arm**| Native bindings for Linux Arm | [![NuGet version](https://badge.fury.io/nu/OpenCvSharp4.runtime.linux-arm.svg)](https://www.nuget.org/packages/OpenCvSharp4.runtime.linux-arm/) | |**OpenCvSharp4.runtime.wasm**| Native bindings for WebAssembly | [![NuGet version](https://badge.fury.io/nu/OpenCvSharp4.runtime.wasm.svg)](https://www.nuget.org/packages/OpenCvSharp4.runtime.wasm/) | -Native binding (OpenCvSharpExtern.dll / libOpenCvSharpExtern.so) is required to work OpenCvSharp. To use OpenCvSharp, you should add both `OpenCvSharp4` and `OpenCvSharp4.runtime.*` packages to your project. Currently, native bindings for Windows, UWP, Ubuntu 18.04 and macOS are released. +Native binding (OpenCvSharpExtern.dll / libOpenCvSharpExtern.so) is required to work OpenCvSharp. To use OpenCvSharp, you should add both `OpenCvSharp4` and `OpenCvSharp4.runtime.*` packages to your project. Currently, native bindings for Windows, UWP and Ubuntu are released. Packages named OpenCvSharp3-* and OpenCvSharp-* are deprecated. > [OpenCvSharp3-AnyCPU](https://www.nuget.org/packages/OpenCvSharp3-AnyCPU/) / [OpenCvSharp3-WithoutDll](https://www.nuget.org/packages/OpenCvSharp3-WithoutDll/) / [OpenCvSharp-AnyCPU](https://www.nuget.org/packages/OpenCvSharp-AnyCPU/) / [OpenCvSharp-WithoutDll](https://www.nuget.org/packages/OpenCvSharp-WithoutDll/) ## Docker images -https://hub.docker.com/u/shimat -- Ubuntu 18.04 (.NET Core 3.1): [shimat/ubuntu18-dotnetcore3.1-opencv4.5.0](https://hub.docker.com/r/shimat/ubuntu18-dotnetcore3.1-opencv4.5.0) -- For Google App Engine Flexible (.NET Core 3.1): [shimat/appengine-aspnetcore3.1-opencv4.5.0](https://hub.docker.com/r/shimat/appengine-aspnetcore3.1-opencv4.5.0) -- For AWS Lambda (.NET 5): [shimat/al2-dotnet5-opencv4.5.0](https://hub.docker.com/r/shimat/al2-dotnet5-opencv4.5.0) - - Code sample: https://github.com/shimat/opencvsharp_AWSLambdaSample +https://github.com/shimat?tab=packages ## Installation @@ -44,47 +39,31 @@ Add `OpenCvSharp4` and `OpenCvSharp4.runtime.win` NuGet packages to your project ### UWP Add `OpenCvSharp4` and `OpenCvSharp4.runtime.uwp` NuGet packages to your project. Note that `OpenCvSharp4.runtime.win` and `OpenCvSharp4.Windows` don't work for UWP. -### Ubuntu 18.04 -Add `OpenCvSharp4` and `OpenCvSharp4.runtime.ubuntu.18.04.x64` NuGet packages to your project. +### Ubuntu 22.04 +Add `OpenCvSharp4` and `OpenCvSharp4.runtime.ubuntu.22.04.x64` NuGet packages to your project. ``` dotnet new console -n ConsoleApp01 cd ConsoleApp01 dotnet add package OpenCvSharp4 -dotnet add package OpenCvSharp4.runtime.ubuntu.18.04-x64 +dotnet add package OpenCvSharp4_.runtime.ubuntu.22.04-x64 # -- edit Program.cs --- # dotnet run ``` -### Google AppEngine Flexible (Ubuntu 16.04) -Some Docker images are provided to use OpenCvSharp with AppEngine Flexible. The native binding (libOpenCvSharpExtern) is already built in the docker image and you don't need to worry about it. -``` -FROM shimat/appengine-aspnetcore3.1-opencv4.5.0:20201030 - -ADD ./ /app -ENV ASPNETCORE_URLS=http://*:${PORT} - -WORKDIR /app -ENTRYPOINT [ "dotnet", "YourAspNetCoreProject.dll" ] -``` - -### Ubuntu 18.04 Docker image -You can use the `shimat/ubuntu18-dotnetcore3.1-opencv4.5.0` docker image. -This issue may be helpful: https://github.com/shimat/opencvsharp/issues/920 - ### Downloads If you do not use NuGet, get DLL files from the [release page](https://github.com/shimat/opencvsharp/releases). ## Target OpenCV -* [OpenCV 4.5.](http://opencv.org/) with [opencv_contrib](https://github.com/opencv/opencv_contrib) +* [OpenCV 4.10.0](http://opencv.org/) with [opencv_contrib](https://github.com/opencv/opencv_contrib) ## Requirements -* [.NET Framework 4.6.1](http://www.microsoft.com/ja-jp/download/details.aspx?id=1639) / [.NET Core 2.0](https://www.microsoft.com/net/download) / [Mono](http://www.mono-project.com/Main_Page) -* (Windows) [Visual C++ 2019 Redistributable Package](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads) +* [.NET Framework 4.8](http://www.microsoft.com/ja-jp/download/details.aspx?id=1639) / [.NET 6](https://www.microsoft.com/net/download) or later / .NET Standard 2.0 +* (Windows) [Visual C++ 2022 Redistributable Package](https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads) * (Windows Server) Media Foundation ``` PS1> Install-WindowsFeature Server-Media-Foundation ``` -* (Ubuntu, Mac) You must pre-install all the dependency packages needed to build OpenCV. Many packages such as libjpeg must be installed in order to work OpenCV. +* (Ubuntu) You must pre-install all the dependency packages needed to build OpenCV. Many packages such as libjpeg must be installed in order to work OpenCV. https://www.learnopencv.com/install-opencv-4-on-ubuntu-18-04/ @@ -154,14 +133,14 @@ using (var t = new ResourcesTracker()) ## Code samples https://github.com/shimat/opencvsharp_samples/ -## Documents +## API Documents http://shimat.github.io/opencvsharp/api/OpenCvSharp.html ## OpenCvSharp Build Instructions ### Windows -- Install Visual Studio 2019 or later +- Install Visual Studio 2022 or later - VC++ features are required. -- Run `download_opencv_windows.ps1` to download OpenCV libs and headers from https://github.com/shimat/opencv_files. Those lib files are precompiled by the owner of OpenCvSharp using AppVeyor CI. +- Run `download_opencv_windows.ps1` to download OpenCV libs and headers from https://github.com/shimat/opencv_files. Those lib files are precompiled by the owner of OpenCvSharp using GitHub Actions. ``` .\download_opencv_windows.ps1 ``` @@ -175,10 +154,10 @@ If you want to use some OpenCV features that are not provided by default in Open - Edit `build_windows.ps1` or `build_uwp.ps1` to customize the CMake parameters . - Run the PowerShell script. -### Ubuntu 18.04 +### Ubuntu - Build OpenCV with opencv_contrib. - https://www.learnopencv.com/install-opencv-4-on-ubuntu-18-04/ -- Install .NET Core SDK. https://docs.microsoft.com/ja-jp/dotnet/core/install/linux-package-manager-ubuntu-1804 +- Install .NET Core SDK. https://learn.microsoft.com/ja-jp/dotnet/core/install/linux-ubuntu - Get OpenCvSharp source files ``` git clone https://github.com/shimat/opencvsharp.git @@ -209,9 +188,6 @@ dotnet add package OpenCvSharp4 dotnet run ``` -### Older Ubuntu -Refer to the [Dockerfile](https://github.com/shimat/opencvsharp/blob/master/docker/google-appengine-ubuntu.16.04-x64/Dockerfile) and [Wiki pages](https://github.com/shimat/opencvsharp/wiki). - ## Donations If you find the OpenCvSharp library useful and would like to show your gratitude by donating, here are some donation options. Thank you. diff --git a/docker/ubuntu20-dotnet6-opencv4.5.3/Dockerfile b/docker/ubuntu20-dotnet6-opencv4.7.0/Dockerfile similarity index 94% rename from docker/ubuntu20-dotnet6-opencv4.5.3/Dockerfile rename to docker/ubuntu20-dotnet6-opencv4.7.0/Dockerfile index 566f5b484..9acaef9e9 100644 --- a/docker/ubuntu20-dotnet6-opencv4.5.3/Dockerfile +++ b/docker/ubuntu20-dotnet6-opencv4.7.0/Dockerfile @@ -1,7 +1,7 @@ FROM mcr.microsoft.com/dotnet/aspnet:6.0-focal as builder ENV DEBIAN_FRONTEND=noninteractive -ENV OPENCV_VERSION=4.5.3 +ENV OPENCV_VERSION=4.7.0 WORKDIR / @@ -37,12 +37,12 @@ RUN apt-get update && apt-get -y install --no-install-recommends \ && rm -rf /var/lib/apt/lists/* # Setup opencv and opencv-contrib source -RUN wget https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip && \ - unzip ${OPENCV_VERSION}.zip && \ +RUN wget -q https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip && \ + unzip -q ${OPENCV_VERSION}.zip && \ rm ${OPENCV_VERSION}.zip && \ mv opencv-${OPENCV_VERSION} opencv && \ - wget https://github.com/opencv/opencv_contrib/archive/${OPENCV_VERSION}.zip && \ - unzip ${OPENCV_VERSION}.zip && \ + wget -q https://github.com/opencv/opencv_contrib/archive/${OPENCV_VERSION}.zip && \ + unzip -q ${OPENCV_VERSION}.zip && \ rm ${OPENCV_VERSION}.zip && \ mv opencv_contrib-${OPENCV_VERSION} opencv_contrib diff --git a/docker/ubuntu18-dotnetcore3.1-opencv4.5.3/Dockerfile b/docker/ubuntu22-dotnet6-opencv4.7.0/Dockerfile similarity index 68% rename from docker/ubuntu18-dotnetcore3.1-opencv4.5.3/Dockerfile rename to docker/ubuntu22-dotnet6-opencv4.7.0/Dockerfile index c2a46a59f..4974f8c86 100644 --- a/docker/ubuntu18-dotnetcore3.1-opencv4.5.3/Dockerfile +++ b/docker/ubuntu22-dotnet6-opencv4.7.0/Dockerfile @@ -1,6 +1,7 @@ -FROM mcr.microsoft.com/dotnet/sdk:3.1-focal +FROM mcr.microsoft.com/dotnet/aspnet:6.0-jammy as builder + ENV DEBIAN_FRONTEND=noninteractive -ARG OPENCV_VERSION=4.5.3 +ENV OPENCV_VERSION=4.7.0 WORKDIR / @@ -20,7 +21,7 @@ RUN apt-get update && apt-get -y install --no-install-recommends \ libavcodec-dev \ libavformat-dev \ libswscale-dev \ - libdc1394-22-dev \ + libdc1394-dev \ libxine2-dev \ libv4l-dev \ libtheora-dev \ @@ -28,7 +29,6 @@ RUN apt-get update && apt-get -y install --no-install-recommends \ libxvidcore-dev \ libopencore-amrnb-dev \ libopencore-amrwb-dev \ - libavresample-dev \ x264 \ libtesseract-dev \ libgdiplus \ @@ -36,12 +36,12 @@ RUN apt-get update && apt-get -y install --no-install-recommends \ && rm -rf /var/lib/apt/lists/* # Setup opencv and opencv-contrib source -RUN wget https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip && \ - unzip ${OPENCV_VERSION}.zip && \ +RUN wget -q https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip && \ + unzip -q ${OPENCV_VERSION}.zip && \ rm ${OPENCV_VERSION}.zip && \ mv opencv-${OPENCV_VERSION} opencv && \ - wget https://github.com/opencv/opencv_contrib/archive/${OPENCV_VERSION}.zip && \ - unzip ${OPENCV_VERSION}.zip && \ + wget -q https://github.com/opencv/opencv_contrib/archive/${OPENCV_VERSION}.zip && \ + unzip -q ${OPENCV_VERSION}.zip && \ rm ${OPENCV_VERSION}.zip && \ mv opencv_contrib-${OPENCV_VERSION} opencv_contrib @@ -96,12 +96,21 @@ RUN mkdir /opencvsharp/make && cd /opencvsharp/make && \ make -j$(nproc) && make install && \ rm -rf /opencv && \ rm -rf /opencv_contrib && \ + cp /opencvsharp/make/OpenCvSharpExtern/libOpenCvSharpExtern.so /usr/lib/ && \ mkdir /artifacts && \ cp /opencvsharp/make/OpenCvSharpExtern/libOpenCvSharpExtern.so /artifacts/ -# Test OpenCvSharpExtern -RUN cp artifacts/libOpenCvSharpExtern.so /usr/lib/ && \ - echo "\n\ + +########## Test native .so file ########## + +FROM mcr.microsoft.com/dotnet/sdk:6.0-jammy +RUN apt-get update && apt-get -y install --no-install-recommends gcc +# /usr/lib/libOpenCvSharpExtern.so +# /usr/local/lib/libopencv_*.a +COPY --from=builder /usr/lib /usr/lib +#COPY --from=builder /usr/local/lib /usr/local/lib + +RUN echo "\n\ #include \n\ int core_Mat_sizeof(); \n\ int main(){ \n\ @@ -110,27 +119,24 @@ int main(){ \n\ return 0; \n\ }" > /test.c && \ gcc -I./ -L./ test.c -o test -lOpenCvSharpExtern && \ - LD_LIBRARY_PATH=. ./test && \ - rm -f /test* + LD_LIBRARY_PATH=. ./test -# Install Build the C# part of OpenCvSharp -#RUN cd /opencvsharp/src/OpenCvSharp && \ -# dotnet build -c Release -f netstandard2.1 && \ -# cd /opencvsharp/src/OpenCvSharp.Blob && \ -# dotnet build -c Release -f netstandard2.1 && \ -# cd /opencvsharp/src/OpenCvSharp.Extensions && \ -# dotnet build -c Release -f netstandard2.1 && \ -# cp /opencvsharp/src/OpenCvSharp/bin/Release/netstandard2.1/* /artifacts/ && \ -# cp /opencvsharp/src/OpenCvSharp.Blob/bin/Release/netstandard2.1/* /artifacts/ && \ -# cp /opencvsharp/src/OpenCvSharp.Extensions/bin/Release/netstandard2.1/* /artifacts/ -# Test OpenCvSharp -#RUN dotnet test /opencvsharp/test/OpenCvSharp.Tests/OpenCvSharp.Tests.csproj -c Release -f netcoreapp3.1 --runtime ubuntu.18.04-x64 --logger "trx;LogFileName=test-results.trx" < /dev/null +########## Test .NET class libraries ########## + +FROM mcr.microsoft.com/dotnet/sdk:6.0-jammy +COPY --from=builder /usr/lib /usr/lib +# Install Build the C# part of OpenCvSharp +RUN git clone https://github.com/shimat/opencvsharp.git && cd opencvsharp +RUN cd /opencvsharp/src/OpenCvSharp && \ + dotnet build -c Release -f net6.0 && \ + cd /opencvsharp/src/OpenCvSharp.Extensions && \ + dotnet build -c Release -f net6.0 -RUN rm -rf /opencvsharp +RUN dotnet test /opencvsharp/test/OpenCvSharp.Tests/OpenCvSharp.Tests.csproj -c Release -f net6.0 --runtime ubuntu.20.04-x64 --logger "trx;LogFileName=test-results.trx" < /dev/null # Simple console app test using NuGet -#RUN dotnet new console -f netcoreapp3.1 -o "ConsoleApp01" && cd /ConsoleApp01 && \ +# RUN dotnet new console -f net6.0 -o "ConsoleApp01" && cd /ConsoleApp01 && \ # echo "\n\ #using System; \n\ #using OpenCvSharp; \n\ @@ -146,3 +152,11 @@ RUN rm -rf /opencvsharp # rm -rf /ConsoleApp01 #RUN ldd /artifacts/libOpenCvSharpExtern.so + + + +########## Final image ########## + +FROM mcr.microsoft.com/dotnet/aspnet:6.0-jammy as final +COPY --from=builder /usr/lib /usr/lib +COPY --from=builder /artifacts /artifacts diff --git a/docker/ubuntu22-dotnet6-opencv4.8.0/Dockerfile b/docker/ubuntu22-dotnet6-opencv4.8.0/Dockerfile new file mode 100644 index 000000000..fe9d4235b --- /dev/null +++ b/docker/ubuntu22-dotnet6-opencv4.8.0/Dockerfile @@ -0,0 +1,162 @@ +FROM mcr.microsoft.com/dotnet/aspnet:6.0-jammy as builder + +ENV DEBIAN_FRONTEND=noninteractive +ENV OPENCV_VERSION=4.8.0 + +WORKDIR / + +# Install opencv dependencies +RUN apt-get update && apt-get -y install --no-install-recommends \ + apt-transport-https \ + software-properties-common \ + wget \ + unzip \ + ca-certificates \ + build-essential \ + cmake \ + git \ + libtbb-dev \ + libatlas-base-dev \ + libgtk2.0-dev \ + libavcodec-dev \ + libavformat-dev \ + libswscale-dev \ + libdc1394-dev \ + libxine2-dev \ + libv4l-dev \ + libtheora-dev \ + libvorbis-dev \ + libxvidcore-dev \ + libopencore-amrnb-dev \ + libopencore-amrwb-dev \ + x264 \ + libtesseract-dev \ + libgdiplus \ + && apt-get -y clean \ + && rm -rf /var/lib/apt/lists/* + +# Setup opencv and opencv-contrib source +RUN wget -q https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip && \ + unzip -q ${OPENCV_VERSION}.zip && \ + rm ${OPENCV_VERSION}.zip && \ + mv opencv-${OPENCV_VERSION} opencv && \ + wget -q https://github.com/opencv/opencv_contrib/archive/${OPENCV_VERSION}.zip && \ + unzip -q ${OPENCV_VERSION}.zip && \ + rm ${OPENCV_VERSION}.zip && \ + mv opencv_contrib-${OPENCV_VERSION} opencv_contrib + +# Build OpenCV +RUN cd opencv && mkdir build && cd build && \ + cmake \ + -D OPENCV_EXTRA_MODULES_PATH=/opencv_contrib/modules \ + -D CMAKE_BUILD_TYPE=RELEASE \ + -D BUILD_SHARED_LIBS=OFF \ + -D ENABLE_CXX11=ON \ + -D BUILD_EXAMPLES=OFF \ + -D BUILD_DOCS=OFF \ + -D BUILD_PERF_TESTS=OFF \ + -D BUILD_TESTS=OFF \ + -D BUILD_JAVA=OFF \ + -D BUILD_opencv_app=OFF \ + -D BUILD_opencv_barcode=OFF \ + -D BUILD_opencv_java_bindings_generator=OFF \ + -D BUILD_opencv_js_bindings_generator=OFF \ + -D BUILD_opencv_python_bindings_generator=OFF \ + -D BUILD_opencv_python_tests=OFF \ + -D BUILD_opencv_ts=OFF \ + -D BUILD_opencv_js=OFF \ + -D BUILD_opencv_bioinspired=OFF \ + -D BUILD_opencv_ccalib=OFF \ + -D BUILD_opencv_datasets=OFF \ + -D BUILD_opencv_dnn_objdetect=OFF \ + -D BUILD_opencv_dpm=OFF \ + -D BUILD_opencv_fuzzy=OFF \ + -D BUILD_opencv_gapi=OFF \ + -D BUILD_opencv_intensity_transform=OFF \ + -D BUILD_opencv_mcc=OFF \ + -D BUILD_opencv_objc_bindings_generator=OFF \ + -D BUILD_opencv_rapid=OFF \ + -D BUILD_opencv_reg=OFF \ + -D BUILD_opencv_stereo=OFF \ + -D BUILD_opencv_structured_light=OFF \ + -D BUILD_opencv_surface_matching=OFF \ + -D BUILD_opencv_videostab=OFF \ + -D BUILD_opencv_wechat_qrcode=ON \ + -D WITH_GSTREAMER=OFF \ + -D WITH_ADE=OFF \ + -D OPENCV_ENABLE_NONFREE=ON \ + .. && make -j$(nproc) && make install && ldconfig + +# Download OpenCvSharp +RUN git clone https://github.com/shimat/opencvsharp.git && cd opencvsharp + +# Install the Extern lib. +RUN mkdir /opencvsharp/make && cd /opencvsharp/make && \ + cmake -D CMAKE_INSTALL_PREFIX=/opencvsharp/make /opencvsharp/src && \ + make -j$(nproc) && make install && \ + rm -rf /opencv && \ + rm -rf /opencv_contrib && \ + cp /opencvsharp/make/OpenCvSharpExtern/libOpenCvSharpExtern.so /usr/lib/ && \ + mkdir /artifacts && \ + cp /opencvsharp/make/OpenCvSharpExtern/libOpenCvSharpExtern.so /artifacts/ + + +########## Test native .so file ########## + +FROM mcr.microsoft.com/dotnet/sdk:6.0-jammy +RUN apt-get update && apt-get -y install --no-install-recommends gcc +# /usr/lib/libOpenCvSharpExtern.so +# /usr/local/lib/libopencv_*.a +COPY --from=builder /usr/lib /usr/lib +#COPY --from=builder /usr/local/lib /usr/local/lib + +RUN echo "\n\ +#include \n\ +int core_Mat_sizeof(); \n\ +int main(){ \n\ + int i = core_Mat_sizeof(); \n\ + printf(\"sizeof(Mat) = %d\", i); \n\ + return 0; \n\ +}" > /test.c && \ + gcc -I./ -L./ test.c -o test -lOpenCvSharpExtern && \ + LD_LIBRARY_PATH=. ./test + + +########## Test .NET class libraries ########## + +FROM mcr.microsoft.com/dotnet/sdk:6.0-jammy +COPY --from=builder /usr/lib /usr/lib +# Install Build the C# part of OpenCvSharp +RUN git clone https://github.com/shimat/opencvsharp.git && cd opencvsharp +RUN cd /opencvsharp/src/OpenCvSharp && \ + dotnet build -c Release -f net6.0 && \ + cd /opencvsharp/src/OpenCvSharp.Extensions && \ + dotnet build -c Release -f net6.0 + +RUN dotnet test /opencvsharp/test/OpenCvSharp.Tests/OpenCvSharp.Tests.csproj -c Release -f net6.0 --runtime ubuntu.20.04-x64 --logger "trx;LogFileName=test-results.trx" < /dev/null + +# Simple console app test using NuGet +# RUN dotnet new console -f net6.0 -o "ConsoleApp01" && cd /ConsoleApp01 && \ +# echo "\n\ +#using System; \n\ +#using OpenCvSharp; \n\ +#class Program{ \n\ +# static void Main(){ \n\ +# Console.WriteLine(Cv2.GetTickCount()); \n\ +# using var mat = new Mat(1, 1, MatType.CV_8UC1); \n\ +# Console.WriteLine(mat.CvPtr); \n\ +# } \n\ +#}" > Program.cs && \ +# dotnet add package OpenCvSharp4 && \ +# dotnet run && \ +# rm -rf /ConsoleApp01 + +#RUN ldd /artifacts/libOpenCvSharpExtern.so + + + +########## Final image ########## + +FROM mcr.microsoft.com/dotnet/aspnet:6.0-jammy as final +COPY --from=builder /usr/lib /usr/lib +COPY --from=builder /artifacts /artifacts diff --git a/docker/ubuntu20-dotnet6sdk-opencv4.5.3/Dockerfile b/docker/ubuntu22-dotnet6sdk-opencv4.7.0/Dockerfile similarity index 89% rename from docker/ubuntu20-dotnet6sdk-opencv4.5.3/Dockerfile rename to docker/ubuntu22-dotnet6sdk-opencv4.7.0/Dockerfile index 6c057eb32..ac6dac800 100644 --- a/docker/ubuntu20-dotnet6sdk-opencv4.5.3/Dockerfile +++ b/docker/ubuntu22-dotnet6sdk-opencv4.7.0/Dockerfile @@ -1,7 +1,7 @@ -FROM mcr.microsoft.com/dotnet/aspnet:6.0-focal as builder +FROM mcr.microsoft.com/dotnet/aspnet:6.0-jammy as builder ENV DEBIAN_FRONTEND=noninteractive -ENV OPENCV_VERSION=4.5.3 +ENV OPENCV_VERSION=4.7.0 WORKDIR / @@ -21,7 +21,7 @@ RUN apt-get update && apt-get -y install --no-install-recommends \ libavcodec-dev \ libavformat-dev \ libswscale-dev \ - libdc1394-22-dev \ + libdc1394-dev \ libxine2-dev \ libv4l-dev \ libtheora-dev \ @@ -29,7 +29,6 @@ RUN apt-get update && apt-get -y install --no-install-recommends \ libxvidcore-dev \ libopencore-amrnb-dev \ libopencore-amrwb-dev \ - libavresample-dev \ x264 \ libtesseract-dev \ libgdiplus \ @@ -37,12 +36,12 @@ RUN apt-get update && apt-get -y install --no-install-recommends \ && rm -rf /var/lib/apt/lists/* # Setup opencv and opencv-contrib source -RUN wget https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip && \ - unzip ${OPENCV_VERSION}.zip && \ +RUN wget -q https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip && \ + unzip -q ${OPENCV_VERSION}.zip && \ rm ${OPENCV_VERSION}.zip && \ mv opencv-${OPENCV_VERSION} opencv && \ - wget https://github.com/opencv/opencv_contrib/archive/${OPENCV_VERSION}.zip && \ - unzip ${OPENCV_VERSION}.zip && \ + wget -q https://github.com/opencv/opencv_contrib/archive/${OPENCV_VERSION}.zip && \ + unzip -q ${OPENCV_VERSION}.zip && \ rm ${OPENCV_VERSION}.zip && \ mv opencv_contrib-${OPENCV_VERSION} opencv_contrib @@ -102,7 +101,7 @@ RUN mkdir /opencvsharp/make && cd /opencvsharp/make && \ ########## Test native .so file ########## -FROM mcr.microsoft.com/dotnet/sdk:6.0-focal +FROM mcr.microsoft.com/dotnet/sdk:6.0-jammy RUN apt-get update && apt-get -y install --no-install-recommends gcc # /usr/lib/libOpenCvSharpExtern.so # /usr/local/lib/libopencv_*.a @@ -123,7 +122,7 @@ int main(){ \n\ ########## Test .NET class libraries ########## -FROM mcr.microsoft.com/dotnet/sdk:6.0-focal +FROM mcr.microsoft.com/dotnet/sdk:6.0-jammy COPY --from=builder /usr/lib /usr/lib # Install Build the C# part of OpenCvSharp RUN git clone https://github.com/shimat/opencvsharp.git && cd opencvsharp @@ -156,5 +155,5 @@ RUN dotnet test /opencvsharp/test/OpenCvSharp.Tests/OpenCvSharp.Tests.csproj -c ########## Final image ########## -FROM mcr.microsoft.com/dotnet/sdk:6.0-focal as final +FROM mcr.microsoft.com/dotnet/sdk:6.0-jammy as final COPY --from=builder /usr/lib /usr/lib diff --git a/download_opencv_windows.ps1 b/download_opencv_windows.ps1 index e60b5efb5..1efcabe2e 100644 --- a/download_opencv_windows.ps1 +++ b/download_opencv_windows.ps1 @@ -1,11 +1,7 @@ -$tag = "4.6.0.20220607" -$version = "460" +$tag = "4.11.0.20250505" $uriArray = @( - "https://github.com/shimat/opencv_files/releases/download/${tag}/opencv${version}_win_x64.zip" - "https://github.com/shimat/opencv_files/releases/download/${tag}/opencv${version}_win_x86.zip" - "https://github.com/shimat/opencv_files/releases/download/${tag}/opencv${version}_uwp_x64.zip" - "https://github.com/shimat/opencv_files/releases/download/${tag}/opencv${version}_uwp_x86.zip" - "https://github.com/shimat/opencv_files/releases/download/${tag}/opencv${version}_uwp_ARM.zip" + "https://github.com/shimat/opencv_files/releases/download/${tag}/opencv_win_x64.zip" + "https://github.com/shimat/opencv_files/releases/download/${tag}/opencv_win_x86.zip" ) function Download($uri, $outFile) { diff --git a/download_tesseract_windows.ps1 b/download_tesseract_windows.ps1 index 2076517bb..515a685a1 100644 --- a/download_tesseract_windows.ps1 +++ b/download_tesseract_windows.ps1 @@ -1,5 +1,5 @@ $uriArray = @( - "https://github.com/shimat/tesseract_vcpkg/releases/download/2021.12.31/tesseract_vcpkg.0.0.7-beta.zip" + "https://github.com/shimat/tesseract_vcpkg/releases/download/2023.07.06/tesseract_vcpkg.0.0.8-beta.nupkg" ) function Download($uri, $outFile) { diff --git a/nuget/OpenCvSharp4.Extensions.nuspec b/nuget/OpenCvSharp4.Extensions.nuspec index 50ec6d1c8..773924eb8 100644 --- a/nuget/OpenCvSharp4.Extensions.nuspec +++ b/nuget/OpenCvSharp4.Extensions.nuspec @@ -2,7 +2,7 @@ OpenCvSharp4.Extensions - 4.3.0.20190901 + 4.6.0.20220607 OpenCvSharp GDI+ extension library. shimat Apache-2.0 @@ -18,23 +18,19 @@ - + - + - - - - - + - + @@ -56,12 +52,8 @@ - - - - - \ No newline at end of file + diff --git a/nuget/OpenCvSharp4.Windows.nuspec b/nuget/OpenCvSharp4.Windows.nuspec index 08775935e..7218edb0c 100644 --- a/nuget/OpenCvSharp4.Windows.nuspec +++ b/nuget/OpenCvSharp4.Windows.nuspec @@ -2,7 +2,7 @@ OpenCvSharp4.Windows - 4.3.0.20190901 + 4.6.0.20220607 OpenCvSharp NuGet package for x64/x86 Windows (same as OpenCvSharp3-AnyCPU) shimat Apache-2.0 diff --git a/nuget/OpenCvSharp4.WpfExtensions.nuspec b/nuget/OpenCvSharp4.WpfExtensions.nuspec index 0ba8e3e97..f4c0d2deb 100644 --- a/nuget/OpenCvSharp4.WpfExtensions.nuspec +++ b/nuget/OpenCvSharp4.WpfExtensions.nuspec @@ -2,7 +2,7 @@ OpenCvSharp4.WpfExtensions - 4.3.0.20190901 + 4.6.0.20220607 OpenCvSharp WPF extension library. shimat Apache-2.0 @@ -18,9 +18,11 @@ + - + + @@ -35,10 +37,10 @@ - + - - - + + + - \ No newline at end of file + diff --git a/nuget/OpenCvSharp4.nuspec b/nuget/OpenCvSharp4.nuspec index f517361c9..36593351c 100644 --- a/nuget/OpenCvSharp4.nuspec +++ b/nuget/OpenCvSharp4.nuspec @@ -2,7 +2,7 @@ OpenCvSharp4 - 4.3.0.20190901 + 4.6.0.20220607 OpenCvSharp core library. A package of separate native bindings for your OS is required. shimat Apache-2.0 @@ -17,25 +17,18 @@ - - - + + - - + - - - - - - + + - - + @@ -57,10 +50,6 @@ - - - - diff --git a/nuget/OpenCvSharp4.runtime.ubuntu.16.04-x64.csproj b/nuget/OpenCvSharp4.official.runtime.linux-x64.csproj similarity index 68% rename from nuget/OpenCvSharp4.runtime.ubuntu.16.04-x64.csproj rename to nuget/OpenCvSharp4.official.runtime.linux-x64.csproj index 89ce989d2..a3a5cda26 100644 --- a/nuget/OpenCvSharp4.runtime.ubuntu.16.04-x64.csproj +++ b/nuget/OpenCvSharp4.official.runtime.linux-x64.csproj @@ -1,9 +1,9 @@ - netstandard2.0;netstandard2.1;netcoreapp2.1; + netstandard2.0;netstandard2.1;net6.0; true false - OpenCvSharp4.runtime.ubuntu.16.04-x64.nuspec + OpenCvSharp4.official.runtime.linux-x64.nuspec https://github.com/shimat/opencvsharp https://raw.githubusercontent.com/shimat/opencvsharp/master/nuget/icon/opencvsharp.png false - Internal implementation package for OpenCvSharp to work on Ubuntu 20.04 - Internal implementation package for OpenCvSharp to work on Ubuntu 20.04 + Internal implementation package for OpenCvSharp to work on Linux + Internal implementation package for OpenCvSharp to work on Linux Copyright 2008-2019 Image Processing OpenCV Wrapper FFI opencvsharp @@ -19,12 +19,12 @@ - + - + \ No newline at end of file diff --git a/nuget/OpenCvSharp4.runtime.ubuntu.16.04-x64.nuspec b/nuget/OpenCvSharp4.runtime.ubuntu.16.04-x64.nuspec deleted file mode 100644 index 20815963d..000000000 --- a/nuget/OpenCvSharp4.runtime.ubuntu.16.04-x64.nuspec +++ /dev/null @@ -1,30 +0,0 @@ - - - - OpenCvSharp4.runtime.ubuntu.16.04-x64 - 4.3.0.20191030-beta1 - OpenCvSharp native bindings for ubuntu.16.04-x64 - shimat - Apache-2.0 - - https://github.com/shimat/opencvsharp - https://raw.githubusercontent.com/shimat/opencvsharp/master/nuget/icon/opencvsharp.png - false - Internal implementation package for OpenCvSharp to work on Ubuntu 16.04 - Internal implementation package for OpenCvSharp to work on Ubuntu 16.04 - - Copyright 2008-2019 - Image Processing OpenCV Wrapper FFI opencvsharp - - - - - - - - - - - - - \ No newline at end of file diff --git a/nuget/OpenCvSharp4.runtime.ubuntu.18.04-x64.csproj b/nuget/OpenCvSharp4.runtime.ubuntu.18.04-x64.csproj deleted file mode 100644 index 62c35a53c..000000000 --- a/nuget/OpenCvSharp4.runtime.ubuntu.18.04-x64.csproj +++ /dev/null @@ -1,12 +0,0 @@ - - - netstandard2.0;netstandard2.1;netcoreapp2.1; - true - false - OpenCvSharp4.runtime.ubuntu.18.04-x64.nuspec - - - - - diff --git a/nuget/OpenCvSharp4.runtime.ubuntu.18.04-x64.nuspec b/nuget/OpenCvSharp4.runtime.ubuntu.18.04-x64.nuspec deleted file mode 100644 index b12f16cfb..000000000 --- a/nuget/OpenCvSharp4.runtime.ubuntu.18.04-x64.nuspec +++ /dev/null @@ -1,30 +0,0 @@ - - - - OpenCvSharp4.runtime.ubuntu.18.04-x64 - 4.3.0.20191030 - OpenCvSharp native bindings for ubuntu.18.04-x64 - shimat - Apache-2.0 - - https://github.com/shimat/opencvsharp - https://raw.githubusercontent.com/shimat/opencvsharp/master/nuget/icon/opencvsharp.png - false - Internal implementation package for OpenCvSharp to work on Ubuntu 18.04 - Internal implementation package for OpenCvSharp to work on Ubuntu 18.04 - - Copyright 2008-2019 - Image Processing OpenCV Wrapper FFI opencvsharp - - - - - - - - - - - - - \ No newline at end of file diff --git a/nuget/OpenCvSharp4.runtime.ubuntu.20.04-x64.csproj b/nuget/OpenCvSharp4.runtime.ubuntu.20.04-x64.csproj deleted file mode 100644 index f4e960bdb..000000000 --- a/nuget/OpenCvSharp4.runtime.ubuntu.20.04-x64.csproj +++ /dev/null @@ -1,12 +0,0 @@ - - - netstandard2.0;netstandard2.1;netcoreapp2.1; - true - false - OpenCvSharp4.runtime.ubuntu.20.04-x64.nuspec - - - - - diff --git a/nuget/OpenCvSharp4.runtime.uwp.nuspec b/nuget/OpenCvSharp4.runtime.uwp.nuspec index dac4edf44..88eafec93 100644 --- a/nuget/OpenCvSharp4.runtime.uwp.nuspec +++ b/nuget/OpenCvSharp4.runtime.uwp.nuspec @@ -2,7 +2,7 @@ OpenCvSharp4.runtime.uwp - 4.3.0.20190901 + 4.6.0.20220607 OpenCvSharp4 native bindings for UWP x64/x86/ARM shimat Apache-2.0 @@ -26,11 +26,11 @@ - - - - - - + + + + + + diff --git a/nuget/OpenCvSharp4.runtime.win.nuspec b/nuget/OpenCvSharp4.runtime.win.nuspec index 747fbd68e..07ae74dfb 100644 --- a/nuget/OpenCvSharp4.runtime.win.nuspec +++ b/nuget/OpenCvSharp4.runtime.win.nuspec @@ -2,7 +2,7 @@ OpenCvSharp4.runtime.win - 4.3.0.20190901 + 4.6.0.20220607 OpenCvSharp4 native bindings for Windows x64/x86 (except UWP) shimat Apache-2.0 @@ -17,9 +17,9 @@ + - - + @@ -27,8 +27,8 @@ - - + + diff --git a/nuget/OpenCvSharp4.runtime.win.props b/nuget/OpenCvSharp4.runtime.win.props index 8563b2861..af4e6a20e 100644 --- a/nuget/OpenCvSharp4.runtime.win.props +++ b/nuget/OpenCvSharp4.runtime.win.props @@ -7,8 +7,8 @@ dll\x86\OpenCvSharpExtern.dll PreserveNewest - - dll\x86\opencv_videoio_ffmpeg455.dll + + dll\x86\opencv_videoio_ffmpeg4110.dll PreserveNewest @@ -17,8 +17,8 @@ dll\x64\OpenCvSharpExtern.dll PreserveNewest - - dll\x64\opencv_videoio_ffmpeg455_64.dll + + dll\x64\opencv_videoio_ffmpeg4110_64.dll PreserveNewest diff --git a/nuget/nuget.exe b/nuget/nuget.exe deleted file mode 100644 index 1a67d80c9..000000000 Binary files a/nuget/nuget.exe and /dev/null differ diff --git a/samples b/samples index a42e48358..42322d297 160000 --- a/samples +++ b/samples @@ -1 +1 @@ -Subproject commit a42e483587463fc9ed3aacfb2d12e3f86063e4bc +Subproject commit 42322d297b313d9f115cba80773f2496a8c9cd9f diff --git a/src/OpenCvSharp.DebuggerVisualizers/ImageViewer.cs b/src/OpenCvSharp.DebuggerVisualizers/ImageViewer.cs index 15702a1d5..4f7833ffd 100644 --- a/src/OpenCvSharp.DebuggerVisualizers/ImageViewer.cs +++ b/src/OpenCvSharp.DebuggerVisualizers/ImageViewer.cs @@ -4,25 +4,15 @@ namespace OpenCvSharp.DebuggerVisualizers { - /// - /// - /// public partial class ImageViewer : Form { private readonly Bitmap bitmap; - /// - /// - /// public ImageViewer() { InitializeComponent(); } - /// - /// - /// - /// public ImageViewer(MatProxy proxy) : this() { @@ -42,10 +32,11 @@ public ImageViewer(string imgFile) bitmap = new Bitmap(imgFile); } - /// - /// - /// - /// + private void DisposeBitmap() + { + bitmap?.Dispose(); + } + protected override void OnLoad(EventArgs e) { base.OnLoad(e); @@ -86,7 +77,7 @@ private double ReformRatio(double ratio) private void DisplayRatio(double ratio) { - this.Text = $"ImageViewer Zoom: {ratio:P1}"; + Text = $@"ImageViewer Zoom: {ratio:P1}"; } } } diff --git a/src/OpenCvSharp.DebuggerVisualizers/ImageViewer.designer.cs b/src/OpenCvSharp.DebuggerVisualizers/ImageViewer.designer.cs index 02eb5299d..331890f0d 100644 --- a/src/OpenCvSharp.DebuggerVisualizers/ImageViewer.designer.cs +++ b/src/OpenCvSharp.DebuggerVisualizers/ImageViewer.designer.cs @@ -13,9 +13,10 @@ partial class ImageViewer /// true if managed resources should be disposed; otherwise, false. protected override void Dispose(bool disposing) { - if (disposing && (components != null)) + if (disposing) { - components.Dispose(); + components?.Dispose(); + DisposeBitmap(); } base.Dispose(disposing); } @@ -63,4 +64,4 @@ private void InitializeComponent() } -} \ No newline at end of file +} diff --git a/src/OpenCvSharp.DebuggerVisualizers/MatDebuggerVisualizer.cs b/src/OpenCvSharp.DebuggerVisualizers/MatDebuggerVisualizer.cs index f2b57b3ba..26833207d 100644 --- a/src/OpenCvSharp.DebuggerVisualizers/MatDebuggerVisualizer.cs +++ b/src/OpenCvSharp.DebuggerVisualizers/MatDebuggerVisualizer.cs @@ -11,18 +11,17 @@ public class MatDebuggerVisualizer : DialogDebuggerVisualizer protected override void Show(IDialogVisualizerService windowService, IVisualizerObjectProvider objectProvider) { // MatProxyが送られてくるはず - using (var proxy = objectProvider.GetObject() as MatProxy) + var proxy = objectProvider.GetObject() as MatProxy; + if (proxy is null) { - if (proxy == null) - { - throw new ArgumentException(); - } - // Formに表示 - using (var form = new ImageViewer(proxy)) - { - windowService.ShowDialog(form); - } - } + throw new ArgumentException(); + } + + // Formに表示 + using (var form = new ImageViewer(proxy)) + { + windowService.ShowDialog(form); + } } } } diff --git a/src/OpenCvSharp.DebuggerVisualizers/MatObjectSource.cs b/src/OpenCvSharp.DebuggerVisualizers/MatObjectSource.cs index f8ae2e238..160921786 100644 --- a/src/OpenCvSharp.DebuggerVisualizers/MatObjectSource.cs +++ b/src/OpenCvSharp.DebuggerVisualizers/MatObjectSource.cs @@ -15,4 +15,4 @@ public override void GetData(object target, Stream outgoingData) bf.Serialize(outgoingData, new MatProxy((Mat)target)); } } -} \ No newline at end of file +} diff --git a/src/OpenCvSharp.DebuggerVisualizers/MatProxy.cs b/src/OpenCvSharp.DebuggerVisualizers/MatProxy.cs index 433dd93be..c4109308f 100644 --- a/src/OpenCvSharp.DebuggerVisualizers/MatProxy.cs +++ b/src/OpenCvSharp.DebuggerVisualizers/MatProxy.cs @@ -9,24 +9,19 @@ namespace OpenCvSharp.DebuggerVisualizers /// 送る際に、このProxyに表示に必要なシリアライズ可能なデータを詰めて送り、受信側で復元する。 /// [Serializable] - public class MatProxy : IDisposable + public class MatProxy { public byte[] ImageData { get; private set; } public MatProxy(Mat image) { - ImageData = image.ToBytes(".png"); - } - - public void Dispose() - { - ImageData = null; + ImageData = image.ToBytes(); } public Bitmap CreateBitmap() { - if (ImageData == null) - throw new Exception("ImageData == null"); + if (ImageData is null) + throw new Exception("ImageData is null"); using (var stream = new MemoryStream(ImageData)) { @@ -34,4 +29,4 @@ public Bitmap CreateBitmap() } } } -} \ No newline at end of file +} diff --git a/src/OpenCvSharp.Extensions/Binarizer.cs b/src/OpenCvSharp.Extensions/Binarizer.cs index c557a6355..1f29ce482 100644 --- a/src/OpenCvSharp.Extensions/Binarizer.cs +++ b/src/OpenCvSharp.Extensions/Binarizer.cs @@ -1,6 +1,4 @@ -using System; - -namespace OpenCvSharp.Extensions; +namespace OpenCvSharp.Extensions; /// /// Various binarization methods (ATTENTION : The methods of this class is not implemented in OpenCV) @@ -17,9 +15,9 @@ public static class Binarizer /// Adequate coefficient public static void Niblack(Mat src, Mat dst, int kernelSize, double k) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); // グレースケールのみ @@ -93,9 +91,9 @@ public static void Niblack(Mat src, Mat dst, int kernelSize, double k) /// Adequate coefficient public static void Sauvola(Mat src, Mat dst, int kernelSize, double k, double r) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); // グレースケールのみ @@ -171,9 +169,9 @@ public static void Sauvola(Mat src, Mat dst, int kernelSize, double k, double r) /// Adequate coefficient public static void Bernsen(Mat src, Mat dst, int kernelSize, byte constrastMin, byte bgThreshold) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); // グレースケールのみ @@ -229,9 +227,9 @@ public static void Bernsen(Mat src, Mat dst, int kernelSize, byte constrastMin, /// Adequate coefficient public static void Nick(Mat src, Mat dst, int kernelSize, double k) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); // グレースケールのみ diff --git a/src/OpenCvSharp.Extensions/BitmapConverter.cs b/src/OpenCvSharp.Extensions/BitmapConverter.cs index bf7f912cf..db60bc3e6 100644 --- a/src/OpenCvSharp.Extensions/BitmapConverter.cs +++ b/src/OpenCvSharp.Extensions/BitmapConverter.cs @@ -1,7 +1,5 @@ -using System; -using System.Drawing; +using System.Drawing; using System.Drawing.Imaging; -using System.Linq; using System.Runtime.InteropServices; namespace OpenCvSharp.Extensions; @@ -18,30 +16,26 @@ public static class BitmapConverter /// /// System.Drawing.Bitmap object to be converted /// A Mat object which is converted from System.Drawing.Bitmap +#if NET5_0_OR_GREATER + [System.Runtime.Versioning.SupportedOSPlatform("windows")] +#endif public static Mat ToMat(this Bitmap src) { - if (src == null) + if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + throw new NotSupportedException("Non-Windows OS are not supported"); + if (src is null) throw new ArgumentNullException(nameof(src)); - int w = src.Width; - int h = src.Height; - int channels; - switch (src.PixelFormat) + var w = src.Width; + var h = src.Height; + var channels = src.PixelFormat switch { - case PixelFormat.Format24bppRgb: - case PixelFormat.Format32bppRgb: - channels = 3; break; - case PixelFormat.Format32bppArgb: - case PixelFormat.Format32bppPArgb: - channels = 4; break; - case PixelFormat.Format8bppIndexed: - case PixelFormat.Format1bppIndexed: - channels = 1; break; - default: - throw new NotImplementedException(); - } - - Mat dst = new Mat(h, w, MatType.CV_8UC(channels)); + PixelFormat.Format24bppRgb or PixelFormat.Format32bppRgb => 3, + PixelFormat.Format32bppArgb or PixelFormat.Format32bppPArgb => 4, + PixelFormat.Format8bppIndexed or PixelFormat.Format1bppIndexed => 1, + _ => throw new NotImplementedException(), + }; + var dst = new Mat(h, w, MatType.CV_8UC(channels)); ToMat(src, dst); return dst; } @@ -51,11 +45,16 @@ public static Mat ToMat(this Bitmap src) /// /// System.Drawing.Bitmap object to be converted /// A Mat object which is converted from System.Drawing.Bitmap +#if NET5_0_OR_GREATER + [System.Runtime.Versioning.SupportedOSPlatform("windows")] +#endif public static unsafe void ToMat(this Bitmap src, Mat dst) { - if (src == null) + if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + throw new NotSupportedException("Non-Windows OS are not supported"); + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); if (dst.IsDisposed) throw new ArgumentException("The specified dst is disposed.", nameof(dst)); @@ -66,9 +65,9 @@ public static unsafe void ToMat(this Bitmap src, Mat dst) if (src.Width != dst.Width || src.Height != dst.Height) throw new ArgumentException("src.Size != dst.Size"); - int w = src.Width; - int h = src.Height; - Rectangle rect = new Rectangle(0, 0, w, h); + var w = src.Width; + var h = src.Height; + var rect = new Rectangle(0, 0, w, h); BitmapData? bd = null; try { @@ -97,7 +96,7 @@ public static unsafe void ToMat(this Bitmap src, Mat dst) } finally { - if (bd != null) + if (bd is not null) src.UnlockBits(bd); } @@ -108,26 +107,26 @@ void Format1bppIndexed() throw new ArgumentException("Invalid nChannels"); if (dst.IsSubmatrix()) throw new NotImplementedException("submatrix not supported"); - if (bd == null) - throw new NotSupportedException("BitmapData == null (Format1bppIndexed)"); + if (bd is null) + throw new NotSupportedException("BitmapData is null (Format1bppIndexed)"); - byte* srcPtr = (byte*)bd.Scan0.ToPointer(); - byte* dstPtr = dst.DataPointer; - int srcStep = bd.Stride; - uint dstStep = (uint)dst.Step(); - int x = 0; + var srcPtr = (byte*)bd.Scan0.ToPointer(); + var dstPtr = dst.DataPointer; + var srcStep = bd.Stride; + var dstStep = (uint)dst.Step(); + var x = 0; - for (int y = 0; y < h; y++) + for (var y = 0; y < h; y++) { // 横は必ず4byte幅に切り上げられる。 // この行の各バイトを調べていく - for (int bytePos = 0; bytePos < srcStep; bytePos++) + for (var bytePos = 0; bytePos < srcStep; bytePos++) { if (x < w) { // 現在の位置のバイトからそれぞれのビット8つを取り出す - byte b = srcPtr[bytePos]; - for (int i = 0; i < 8; i++) + var b = srcPtr[bytePos]; + for (var i = 0; i < 8; i++) { if (x >= w) { @@ -154,7 +153,7 @@ static void Ch1(Mat dst, int height, int srcStep, uint dstStep, IntPtr srcData, if (dstStep == srcStep && !dst.IsSubmatrix() && dst.IsContinuous()) { // Read Bitmap pixel data to managed array - long length = dst.DataEnd.ToInt64() - dst.Data.ToInt64(); + var length = dst.DataEnd.ToInt64() - dst.Data.ToInt64(); if (length > int.MaxValue) throw new NotSupportedException("Too big dst Mat"); var buffer = new byte[length]; @@ -167,10 +166,10 @@ static void Ch1(Mat dst, int height, int srcStep, uint dstStep, IntPtr srcData, else { // Copy line bytes from src to dst for each line - byte* sp = (byte*) srcData; - byte* dp = (byte*) dst.Data; + var sp = (byte*) srcData; + var dp = (byte*) dst.Data; var buffer = new byte[srcStep]; - for (int y = 0; y < height; y++) + for (var y = 0; y < height; y++) { // Read Bitmap pixel data to managed array Marshal.Copy(new IntPtr(sp), buffer, 0, buffer.Length); @@ -185,15 +184,15 @@ static void Ch1(Mat dst, int height, int srcStep, uint dstStep, IntPtr srcData, } } - int srcStep = bd.Stride; - uint dstStep = (uint)dst.Step(); + var srcStep = bd.Stride; + var dstStep = (uint)dst.Step(); - int channels = dst.Channels(); + var channels = dst.Channels(); if (channels == 1) { var palette = new byte[256]; var paletteLength = Math.Min(256, src.Palette.Entries.Length); - for (int i = 0; i < paletteLength; i++) + for (var i = 0; i < paletteLength; i++) { // TODO src.Palette.Flags & 2 == 2 // https://docs.microsoft.com/ja-jp/dotnet/api/system.drawing.imaging.colorpalette.flags?view=netframework-4.8 @@ -208,7 +207,7 @@ static void Ch1(Mat dst, int height, int srcStep, uint dstStep, IntPtr srcData, var paletteG = new byte[256]; var paletteB = new byte[256]; var paletteLength = Math.Min(256, src.Palette.Entries.Length); - for (int i = 0; i < paletteLength; i++) + for (var i = 0; i < paletteLength; i++) { var c = src.Palette.Entries[i]; paletteR[i] = c.R; @@ -223,7 +222,7 @@ static void Ch1(Mat dst, int height, int srcStep, uint dstStep, IntPtr srcData, Ch1(dstR, h, srcStep, (uint)dstR.Step(), bd.Scan0, paletteR); Ch1(dstG, h, srcStep, (uint)dstG.Step(), bd.Scan0, paletteG); Ch1(dstB, h, srcStep, (uint)dstB.Step(), bd.Scan0, paletteB); - Cv2.Merge(new []{dstB, dstG, dstR}, dst); + Cv2.Merge([dstB, dstG, dstR], dst); } else { @@ -239,20 +238,20 @@ void Format24bppRgb() if (dst.Depth() != MatType.CV_8U && dst.Depth() != MatType.CV_8S) throw new ArgumentException("Invalid depth of dst Mat"); - int srcStep = bd.Stride; - long dstStep = dst.Step(); + var srcStep = bd.Stride; + var dstStep = dst.Step(); if (dstStep == srcStep && !dst.IsSubmatrix() && dst.IsContinuous()) { - IntPtr dstData = dst.Data; - long bytesToCopy = dst.DataEnd.ToInt64() - dstData.ToInt64(); + var dstData = dst.Data; + var bytesToCopy = dst.DataEnd.ToInt64() - dstData.ToInt64(); Buffer.MemoryCopy(bd.Scan0.ToPointer(), dstData.ToPointer(), bytesToCopy, bytesToCopy); } else { // Copy line bytes from src to dst for each line - byte* sp = (byte*) bd.Scan0; - byte* dp = (byte*) dst.Data; - for (int y = 0; y < h; y++) + var sp = (byte*) bd.Scan0; + var dp = (byte*) dst.Data; + for (var y = 0; y < h; y++) { Buffer.MemoryCopy(sp, dp, dstStep, dstStep); sp += srcStep; @@ -264,23 +263,23 @@ void Format24bppRgb() // ReSharper disable once InconsistentNaming void Format32bppRgb() { - int srcStep = bd.Stride; - long dstStep = dst.Step(); + var srcStep = bd.Stride; + var dstStep = dst.Step(); switch (dst.Channels()) { case 4: if (!dst.IsSubmatrix() && dst.IsContinuous()) { - IntPtr dstData = dst.Data; - long bytesToCopy = dst.DataEnd.ToInt64() - dstData.ToInt64(); + var dstData = dst.Data; + var bytesToCopy = dst.DataEnd.ToInt64() - dstData.ToInt64(); Buffer.MemoryCopy(bd.Scan0.ToPointer(), dstData.ToPointer(), bytesToCopy, bytesToCopy); } else { - byte* sp = (byte*) bd.Scan0; - byte* dp = (byte*) dst.Data; - for (int y = 0; y < h; y++) + var sp = (byte*) bd.Scan0; + var dp = (byte*) dst.Data; + for (var y = 0; y < h; y++) { Buffer.MemoryCopy(sp, dp, dstStep, dstStep); sp += srcStep; @@ -290,11 +289,11 @@ void Format32bppRgb() break; case 3: - byte* srcPtr = (byte*)bd.Scan0.ToPointer(); - byte* dstPtr = (byte*)dst.Data.ToPointer(); - for (int y = 0; y < h; y++) + var srcPtr = (byte*)bd.Scan0.ToPointer(); + var dstPtr = (byte*)dst.Data.ToPointer(); + for (var y = 0; y < h; y++) { - for (int x = 0; x < w; x++) + for (var x = 0; x < w; x++) { dstPtr[y * dstStep + x * 3 + 0] = srcPtr[y * srcStep + x * 4 + 0]; dstPtr[y * dstStep + x * 3 + 1] = srcPtr[y * srcStep + x * 4 + 1]; @@ -317,25 +316,22 @@ void Format32bppRgb() /// /// Mat /// +#if NET5_0_OR_GREATER + [System.Runtime.Versioning.SupportedOSPlatform("windows")] +#endif public static Bitmap ToBitmap(this Mat src) { - if (src == null) - { + if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + throw new NotSupportedException("Non-Windows OS are not supported"); + if (src is null) throw new ArgumentNullException(nameof(src)); - } - - PixelFormat pf; - switch (src.Channels()) + var pf = src.Channels() switch { - case 1: - pf = PixelFormat.Format8bppIndexed; break; - case 3: - pf = PixelFormat.Format24bppRgb; break; - case 4: - pf = PixelFormat.Format32bppArgb; break; - default: - throw new ArgumentException("Number of channels must be 1, 3 or 4.", nameof(src)); - } + 1 => PixelFormat.Format8bppIndexed, + 3 => PixelFormat.Format24bppRgb, + 4 => PixelFormat.Format32bppArgb, + _ => throw new ArgumentException("Number of channels must be 1, 3 or 4.", nameof(src)), + }; return ToBitmap(src, pf); } @@ -345,13 +341,18 @@ public static Bitmap ToBitmap(this Mat src) /// Mat /// Pixel Depth /// +#if NET5_0_OR_GREATER + [System.Runtime.Versioning.SupportedOSPlatform("windows")] +#endif public static Bitmap ToBitmap(this Mat src, PixelFormat pf) { - if (src == null) + if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + throw new NotSupportedException("Non-Windows OS are not supported"); + if (src is null) throw new ArgumentNullException(nameof(src)); src.ThrowIfDisposed(); - Bitmap bitmap = new Bitmap(src.Width, src.Height, pf); + var bitmap = new Bitmap(src.Width, src.Height, pf); ToBitmap(src, bitmap); return bitmap; } @@ -362,11 +363,16 @@ public static Bitmap ToBitmap(this Mat src, PixelFormat pf) /// Mat /// Mat /// Author: shimat, Gummo (ROI support) +#if NET5_0_OR_GREATER + [System.Runtime.Versioning.SupportedOSPlatform("windows")] +#endif public static unsafe void ToBitmap(this Mat src, Bitmap dst) { - if (src == null) + if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + throw new NotSupportedException("Non-Windows OS are not supported"); + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); if (src.IsDisposed) throw new ArgumentException("The image is disposed.", nameof(src)); @@ -377,38 +383,38 @@ public static unsafe void ToBitmap(this Mat src, Bitmap dst) if (src.Width != dst.Width || src.Height != dst.Height) throw new ArgumentException(""); - PixelFormat pf = dst.PixelFormat; + var pf = dst.PixelFormat; // 1プレーン用の場合、グレースケールのパレット情報を生成する if (pf == PixelFormat.Format8bppIndexed) { - ColorPalette plt = dst.Palette; - for (int x = 0; x < 256; x++) + var plt = dst.Palette; + for (var x = 0; x < 256; x++) { plt.Entries[x] = Color.FromArgb(x, x, x); } dst.Palette = plt; } - int w = src.Width; - int h = src.Height; - Rectangle rect = new Rectangle(0, 0, w, h); + var w = src.Width; + var h = src.Height; + var rect = new Rectangle(0, 0, w, h); BitmapData? bd = null; - bool submat = src.IsSubmatrix(); - bool continuous = src.IsContinuous(); + var submat = src.IsSubmatrix(); + var continuous = src.IsContinuous(); try { bd = dst.LockBits(rect, ImageLockMode.WriteOnly, pf); - IntPtr srcData = src.Data; - byte* pSrc = (byte*)(srcData.ToPointer()); - byte* pDst = (byte*)(bd.Scan0.ToPointer()); - int ch = src.Channels(); - int srcStep = (int)src.Step(); - int dstStep = ((src.Width * ch) + 3) / 4 * 4; // 4の倍数に揃える - int stride = bd.Stride; + var srcData = src.Data; + var pSrc = (byte*)(srcData.ToPointer()); + var pDst = (byte*)(bd.Scan0.ToPointer()); + var ch = src.Channels(); + var srcStep = (int)src.Step(); + var dstStep = ((src.Width * ch) + 3) / 4 * 4; // 4の倍数に揃える + var stride = bd.Stride; switch (pf) { @@ -422,9 +428,9 @@ public static unsafe void ToBitmap(this Mat src, Bitmap dst) //int offset = stride - (w / 8); int x = 0; byte b = 0; - for (int y = 0; y < h; y++) + for (var y = 0; y < h; y++) { - for (int bytePos = 0; bytePos < stride; bytePos++) + for (var bytePos = 0; bytePos < stride; bytePos++) { if (x < w) { @@ -474,7 +480,7 @@ public static unsafe void ToBitmap(this Mat src, Bitmap dst) } finally { - if (bd != null) + if (bd is not null) dst.UnlockBits(bd); } } diff --git a/src/OpenCvSharp.Extensions/CvExtensions.cs b/src/OpenCvSharp.Extensions/CvExtensions.cs index ff2bece82..7ad7faaf5 100644 --- a/src/OpenCvSharp.Extensions/CvExtensions.cs +++ b/src/OpenCvSharp.Extensions/CvExtensions.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; - -#pragma warning disable CA5394 // Do not use insecure randomness +#pragma warning disable CA5394 // Do not use insecure randomness namespace OpenCvSharp.Extensions; @@ -27,7 +24,7 @@ public static class CvExtensions public static LineSegmentPoint[] HoughLinesProbabilisticEx(this Mat img, double rho, double theta, int threshold, double minLineLength, double maxLineGap, double thetaMin = 0, double thetaMax = Math.PI) { - if (img == null) + if (img is null) throw new ArgumentNullException(nameof(img)); if (img.Type() != MatType.CV_8UC1) throw new ArgumentException("The source matrix must be 8-bit, single-channel image."); diff --git a/src/OpenCvSharp.Extensions/OpenCvSharp.Extensions.csproj b/src/OpenCvSharp.Extensions/OpenCvSharp.Extensions.csproj index e82658eec..caea99cd8 100644 --- a/src/OpenCvSharp.Extensions/OpenCvSharp.Extensions.csproj +++ b/src/OpenCvSharp.Extensions/OpenCvSharp.Extensions.csproj @@ -1,7 +1,7 @@  - net48;netstandard2.0;netstandard2.1;netcoreapp3.1;net6.0; + net48;netstandard2.0;netstandard2.1;net6.0; true true OpenCvSharp.Extensions @@ -12,8 +12,9 @@ false false false - 10 + 12 enable + enable true true https://github.com/shimat/opencvsharp.git @@ -43,12 +44,12 @@ - 5.0.3 + 8.0.11 - + diff --git a/src/OpenCvSharp.Extensions/Platform.cs b/src/OpenCvSharp.Extensions/Platform.cs index 9e6cdfb9f..d72d636fe 100644 --- a/src/OpenCvSharp.Extensions/Platform.cs +++ b/src/OpenCvSharp.Extensions/Platform.cs @@ -1,6 +1,4 @@ -using System; - -#pragma warning disable 1591 +#pragma warning disable 1591 namespace OpenCvSharp.Extensions; @@ -44,6 +42,6 @@ static Platform() int p = (int)Environment.OSVersion.Platform; OS = ((p == 4) || (p == 6) || (p == 128)) ? OS.Unix : OS.Windows; - Runtime = (Type.GetType("Mono.Runtime") == null) ? Runtime.Mono : Runtime.DotNet; + Runtime = (Type.GetType("Mono.Runtime") is null) ? Runtime.Mono : Runtime.DotNet; } } diff --git a/src/OpenCvSharp.WpfExtensions/BitmapSourceConverter.cs b/src/OpenCvSharp.WpfExtensions/BitmapSourceConverter.cs index 1578fbb10..c77e57130 100644 --- a/src/OpenCvSharp.WpfExtensions/BitmapSourceConverter.cs +++ b/src/OpenCvSharp.WpfExtensions/BitmapSourceConverter.cs @@ -1,263 +1,252 @@ #if WINDOWS && (NET48 || NETCOREAPP3_1_OR_GREATER) -using System; using System.Drawing; using System.Drawing.Imaging; using System.IO; -using System.Linq; using System.Windows; using System.Windows.Media.Imaging; using System.Windows.Threading; using PixelFormat = System.Windows.Media.PixelFormat; -namespace OpenCvSharp.WpfExtensions +namespace OpenCvSharp.WpfExtensions; + +/// +/// Static class which provides conversion between System.Windows.Media.Imaging.BitmapSource and IplImage +/// +public static class BitmapSourceConverter { /// - /// Static class which provides conversion between System.Windows.Media.Imaging.BitmapSource and IplImage + /// Converts Mat to BitmapSource. /// - public static class BitmapSourceConverter + /// Input IplImage + /// BitmapSource + public static BitmapSource ToBitmapSource( + this Mat src) => + src.ToWriteableBitmap(); + + /// + /// Converts Mat to BitmapSource. + /// + /// Input IplImage + /// + /// + /// + /// + /// BitmapSource + public static BitmapSource ToBitmapSource( + this Mat src, + int horizontalResolution, + int verticalResolution, + PixelFormat pixelFormat, + BitmapPalette palette) => + src.ToWriteableBitmap(horizontalResolution, verticalResolution, pixelFormat, palette); + + /// + /// Converts System.Drawing.Bitmap to BitmapSource. + /// + /// Input System.Drawing.Bitmap + /// http://www.codeproject.com/Articles/104929/Bitmap-to-BitmapSource + /// BitmapSource + public static BitmapSource ToBitmapSource(this Bitmap src) { - /// - /// Converts Mat to BitmapSource. - /// - /// Input IplImage - /// BitmapSource - public static BitmapSource ToBitmapSource( - this Mat src) - { - return src.ToWriteableBitmap(); - } + if (src is null) + throw new ArgumentNullException(nameof(src)); - /// - /// Converts Mat to BitmapSource. - /// - /// Input IplImage - /// - /// - /// - /// - /// BitmapSource - public static BitmapSource ToBitmapSource( - this Mat src, - int horizontalResolution, - int verticalResolution, - PixelFormat pixelFormat, - BitmapPalette palette) + if (Application.Current?.Dispatcher is null) { - return src.ToWriteableBitmap(horizontalResolution, verticalResolution, pixelFormat, palette); + using var memoryStream = new MemoryStream(); + src.Save(memoryStream, ImageFormat.Png); + return CreateBitmapSourceFromBitmap(memoryStream); } - /// - /// Converts System.Drawing.Bitmap to BitmapSource. - /// - /// Input System.Drawing.Bitmap - /// http://www.codeproject.com/Articles/104929/Bitmap-to-BitmapSource - /// BitmapSource - public static BitmapSource ToBitmapSource(this Bitmap src) + using (var memoryStream = new MemoryStream()) { - if (src == null) - throw new ArgumentNullException(nameof(src)); + // You need to specify the image format to fill the stream. + // I'm assuming it is PNG + src.Save(memoryStream, ImageFormat.Png); + memoryStream.Seek(0, SeekOrigin.Begin); + + // Make sure to create the bitmap in the UI thread + if (IsInvokeRequired()) + return (BitmapSource) Application.Current.Dispatcher.Invoke( + new Func(CreateBitmapSourceFromBitmap), + DispatcherPriority.Normal, + memoryStream); + + return CreateBitmapSourceFromBitmap(memoryStream); + } + } - if (Application.Current?.Dispatcher == null) - { - using (var memoryStream = new MemoryStream()) - { - src.Save(memoryStream, ImageFormat.Png); - return CreateBitmapSourceFromBitmap(memoryStream); - } - } + // http://www.codeproject.com/Articles/104929/Bitmap-to-BitmapSource + private static bool IsInvokeRequired() + => Dispatcher.CurrentDispatcher != Application.Current.Dispatcher; - using (var memoryStream = new MemoryStream()) - { - // You need to specify the image format to fill the stream. - // I'm assuming it is PNG - src.Save(memoryStream, ImageFormat.Png); - memoryStream.Seek(0, SeekOrigin.Begin); + // http://www.codeproject.com/Articles/104929/Bitmap-to-BitmapSource + private static BitmapSource CreateBitmapSourceFromBitmap(Stream stream) + { + var bitmapDecoder = BitmapDecoder.Create( + stream, + BitmapCreateOptions.PreservePixelFormat, + BitmapCacheOption.OnLoad); - // Make sure to create the bitmap in the UI thread - if (IsInvokeRequired()) - return (BitmapSource) Application.Current.Dispatcher.Invoke( - new Func(CreateBitmapSourceFromBitmap), - DispatcherPriority.Normal, - memoryStream); + // This will disconnect the stream from the image completely... + var writable = new WriteableBitmap(bitmapDecoder.Frames.Single()); + writable.Freeze(); - return CreateBitmapSourceFromBitmap(memoryStream); - } - } + return writable; + } - // http://www.codeproject.com/Articles/104929/Bitmap-to-BitmapSource - private static bool IsInvokeRequired() - { - return Dispatcher.CurrentDispatcher != Application.Current.Dispatcher; - } + #region ToMat - // http://www.codeproject.com/Articles/104929/Bitmap-to-BitmapSource - private static BitmapSource CreateBitmapSourceFromBitmap(Stream stream) + /// + /// Converts BitmapSource to Mat + /// + /// Input BitmapSource + /// IplImage + public static Mat ToMat(this BitmapSource src) + { + if (src is null) { - var bitmapDecoder = BitmapDecoder.Create( - stream, - BitmapCreateOptions.PreservePixelFormat, - BitmapCacheOption.OnLoad); - - // This will disconnect the stream from the image completely... - var writable = new WriteableBitmap(bitmapDecoder.Frames.Single()); - writable.Freeze(); - - return writable; + throw new ArgumentNullException(nameof(src)); } - #region ToMat + int w = src.PixelWidth; + int h = src.PixelHeight; + MatType type = WriteableBitmapConverter.GetOptimumType(src.Format); + Mat dst = new Mat(h, w, type); + ToMat(src, dst); + return dst; + } - /// - /// Converts BitmapSource to Mat - /// - /// Input BitmapSource - /// IplImage - public static Mat ToMat(this BitmapSource src) + /// + /// Converts BitmapSource to Mat + /// + /// Input BitmapSource + /// Output Mat + public static void ToMat(this BitmapSource src, Mat dst) + { + if (src is null) + throw new ArgumentNullException(nameof(src)); + if (dst is null) + throw new ArgumentNullException(nameof(dst)); + if (src.PixelWidth != dst.Width || src.PixelHeight != dst.Height) + throw new ArgumentException("size of src must be equal to size of dst"); + if (dst.Dims > 2) + throw new ArgumentException("Mat dimensions must be 2"); + + int w = src.PixelWidth; + int h = src.PixelHeight; + int bpp = src.Format.BitsPerPixel; + int channels = WriteableBitmapConverter.GetOptimumChannels(src.Format); + if (dst.Channels() != channels) { - if (src == null) - { - throw new ArgumentNullException(nameof(src)); - } - - int w = src.PixelWidth; - int h = src.PixelHeight; - MatType type = WriteableBitmapConverter.GetOptimumType(src.Format); - Mat dst = new Mat(h, w, type); - ToMat(src, dst); - return dst; + throw new ArgumentException("nChannels of dst is invalid", nameof(dst)); } - /// - /// Converts BitmapSource to Mat - /// - /// Input BitmapSource - /// Output Mat - public static void ToMat(this BitmapSource src, Mat dst) - { - if (src == null) - throw new ArgumentNullException(nameof(src)); - if (dst == null) - throw new ArgumentNullException(nameof(dst)); - if (src.PixelWidth != dst.Width || src.PixelHeight != dst.Height) - throw new ArgumentException("size of src must be equal to size of dst"); - if (dst.Dims > 2) - throw new ArgumentException("Mat dimensions must be 2"); + bool submat = dst.IsSubmatrix(); + bool continuous = dst.IsContinuous(); - int w = src.PixelWidth; - int h = src.PixelHeight; - int bpp = src.Format.BitsPerPixel; - int channels = WriteableBitmapConverter.GetOptimumChannels(src.Format); - if (dst.Channels() != channels) - { - throw new ArgumentException("nChannels of dst is invalid", nameof(dst)); - } - - bool submat = dst.IsSubmatrix(); - bool continuous = dst.IsContinuous(); + unsafe + { + byte* p = (byte*)(dst.Data); + long step = dst.Step(); - unsafe + // 1bppは手作業でコピー + if (bpp == 1) { - byte* p = (byte*)(dst.Data); - long step = dst.Step(); - - // 1bppは手作業でコピー - if (bpp == 1) + if (submat) + throw new NotImplementedException("submatrix not supported"); + + // BitmapImageのデータを配列にコピー + // 要素1つに横8ピクセル分のデータが入っている。 + int stride = (w / 8) + 1; + byte[] pixels = new byte[h * stride]; + src.CopyPixels(pixels, stride, 0); + int x = 0; + for (int y = 0; y < h; y++) { - if (submat) - throw new NotImplementedException("submatrix not supported"); - - // BitmapImageのデータを配列にコピー - // 要素1つに横8ピクセル分のデータが入っている。 - int stride = (w / 8) + 1; - byte[] pixels = new byte[h * stride]; - src.CopyPixels(pixels, stride, 0); - int x = 0; - for (int y = 0; y < h; y++) + int offset = y * stride; + // この行の各バイトを調べていく + for (int bytePos = 0; bytePos < stride; bytePos++) { - int offset = y * stride; - // この行の各バイトを調べていく - for (int bytePos = 0; bytePos < stride; bytePos++) + if (x < w) { - if (x < w) + // 現在の位置のバイトからそれぞれのビット8つを取り出す + byte b = pixels[offset + bytePos]; + for (int i = 0; i < 8; i++) { - // 現在の位置のバイトからそれぞれのビット8つを取り出す - byte b = pixels[offset + bytePos]; - for (int i = 0; i < 8; i++) + if (x >= w) { - if (x >= w) - { - break; - } - p[step * y + x] = ((b & 0x80) == 0x80) ? (byte)255 : (byte)0; - b <<= 1; - x++; + break; } + p[step * y + x] = ((b & 0x80) == 0x80) ? (byte)255 : (byte)0; + b <<= 1; + x++; } } - // 次の行へ - x = 0; } - + // 次の行へ + x = 0; } - // 8bpp - /*else if (bpp == 8) + + } + // 8bpp + /*else if (bpp == 8) + { + int stride = w; + byte[] pixels = new byte[h * stride]; + src.CopyPixels(pixels, stride, 0); + for (int y = 0; y < h; y++) { - int stride = w; - byte[] pixels = new byte[h * stride]; - src.CopyPixels(pixels, stride, 0); - for (int y = 0; y < h; y++) + for (int x = 0; x < w; x++) { - for (int x = 0; x < w; x++) - { - p[step * y + x] = pixels[y * stride + x]; - } + p[step * y + x] = pixels[y * stride + x]; } - }*/ - // 24bpp, 32bpp, ... + } + }*/ + // 24bpp, 32bpp, ... + else + { + int stride = w * ((bpp + 7) / 8); + if (!submat && continuous) + { + long imageSize = dst.DataEnd.ToInt64() - dst.Data.ToInt64(); + if (imageSize < 0) + throw new OpenCvSharpException("The mat has invalid data pointer"); + if (imageSize > int.MaxValue) + throw new OpenCvSharpException("Too big mat data"); + src.CopyPixels(Int32Rect.Empty, dst.Data, (int)imageSize, stride); + } else { - int stride = w * ((bpp + 7) / 8); - if (!submat && continuous) + // 高さ1pxの矩形ごと(≒1行ごと)にコピー + var roi = new Int32Rect { X = 0, Y = 0, Width = w, Height = 1 }; + IntPtr dstData = dst.Data; + for (int y = 0; y < h; y++) { - long imageSize = dst.DataEnd.ToInt64() - dst.Data.ToInt64(); - if (imageSize < 0) - throw new OpenCvSharpException("The mat has invalid data pointer"); - if (imageSize > int.MaxValue) - throw new OpenCvSharpException("Too big mat data"); - src.CopyPixels(Int32Rect.Empty, dst.Data, (int)imageSize, stride); - } - else - { - // 高さ1pxの矩形ごと(≒1行ごと)にコピー - var roi = new Int32Rect { X = 0, Y = 0, Width = w, Height = 1 }; - IntPtr dstData = dst.Data; - for (int y = 0; y < h; y++) - { - roi.Y = y; - src.CopyPixels(roi, dstData, stride, stride); - dstData = new IntPtr(dstData.ToInt64() + stride); - } + roi.Y = y; + src.CopyPixels(roi, dstData, stride, stride); + dstData = new IntPtr(dstData.ToInt64() + stride); } } - } - } - /// - /// Copies pixel data from System.Windows.Media.Imaging.BitmapSource to IplImage instance - /// - /// - /// - /// - public static void CopyFrom(this Mat mat, BitmapSource wb) - { - if (wb == null) - throw new ArgumentNullException(nameof(wb)); - - ToMat(wb, mat); } + } + + /// + /// Copies pixel data from System.Windows.Media.Imaging.BitmapSource to IplImage instance + /// + /// + /// + /// + public static void CopyFrom(this Mat mat, BitmapSource wb) + { + if (wb is null) + throw new ArgumentNullException(nameof(wb)); - #endregion + ToMat(wb, mat); } + + #endregion } #endif diff --git a/src/OpenCvSharp.WpfExtensions/OpenCvSharp.WpfExtensions.csproj b/src/OpenCvSharp.WpfExtensions/OpenCvSharp.WpfExtensions.csproj index 8ed5e7c9c..a6ca2c9ba 100644 --- a/src/OpenCvSharp.WpfExtensions/OpenCvSharp.WpfExtensions.csproj +++ b/src/OpenCvSharp.WpfExtensions/OpenCvSharp.WpfExtensions.csproj @@ -3,20 +3,24 @@ - net48;netcoreapp3.1;net6.0-windows + net48;net6.0-windows true - 10 + 12 enable + enable https://github.com/shimat/opencvsharp.git git - + AllEnabledByDefault true + + + @@ -39,10 +43,6 @@ - - - - CA1303; diff --git a/src/OpenCvSharp.WpfExtensions/WriteableBitmapConverter.cs b/src/OpenCvSharp.WpfExtensions/WriteableBitmapConverter.cs index c700a6a8b..86a760148 100644 --- a/src/OpenCvSharp.WpfExtensions/WriteableBitmapConverter.cs +++ b/src/OpenCvSharp.WpfExtensions/WriteableBitmapConverter.cs @@ -1,442 +1,437 @@ #if WINDOWS && (NET48 || NETCOREAPP3_1_OR_GREATER) -using System; -using System.Collections.Generic; using System.Windows; using System.Windows.Media; using System.Windows.Media.Imaging; -namespace OpenCvSharp.WpfExtensions +namespace OpenCvSharp.WpfExtensions; + +/// +/// Static class which provides conversion between System.Windows.Media.Imaging.WriteableBitmap and Mat +/// +public static class WriteableBitmapConverter { + private static readonly Dictionary optimumChannels; + private static readonly Dictionary optimumTypes; + +#pragma warning disable CA1810 + static WriteableBitmapConverter() +#pragma warning restore CA1810 + { + optimumChannels = new Dictionary(); + optimumChannels[PixelFormats.Gray2] = + optimumChannels[PixelFormats.Gray4] = + optimumChannels[PixelFormats.Gray8] = + optimumChannels[PixelFormats.Gray16] = + optimumChannels[PixelFormats.Gray32Float] = + optimumChannels[PixelFormats.Indexed1] = + optimumChannels[PixelFormats.Indexed2] = + optimumChannels[PixelFormats.Indexed4] = + optimumChannels[PixelFormats.Indexed8] = + optimumChannels[PixelFormats.BlackWhite] = 1; + optimumChannels[PixelFormats.Bgr24] = + optimumChannels[PixelFormats.Bgr555] = + optimumChannels[PixelFormats.Bgr565] = + optimumChannels[PixelFormats.Rgb24] = + optimumChannels[PixelFormats.Rgb48] = + optimumChannels[PixelFormats.Rgb128Float] = 3; + optimumChannels[PixelFormats.Bgr32] = + optimumChannels[PixelFormats.Bgra32] = + optimumChannels[PixelFormats.Cmyk32] = + optimumChannels[PixelFormats.Pbgra32] = + optimumChannels[PixelFormats.Prgba64] = + optimumChannels[PixelFormats.Prgba128Float] = + optimumChannels[PixelFormats.Rgba64] = + optimumChannels[PixelFormats.Rgba128Float] = 4; + + optimumTypes = new Dictionary(); + optimumTypes[PixelFormats.Gray2] = + optimumTypes[PixelFormats.Gray4] = + optimumTypes[PixelFormats.Gray8] = + optimumTypes[PixelFormats.Indexed1] = + optimumTypes[PixelFormats.Indexed2] = + optimumTypes[PixelFormats.Indexed4] = + optimumTypes[PixelFormats.Indexed8] = + optimumTypes[PixelFormats.BlackWhite] = MatType.CV_8UC1; + optimumTypes[PixelFormats.Gray16] = MatType.CV_16UC1; + optimumTypes[PixelFormats.Rgb48] = MatType.CV_16UC3; + optimumTypes[PixelFormats.Rgba64] = MatType.CV_16UC4; + optimumTypes[PixelFormats.Pbgra32] = + optimumTypes[PixelFormats.Prgba64] = MatType.CV_32SC4; + optimumTypes[PixelFormats.Gray32Float] = MatType.CV_32FC1; + optimumTypes[PixelFormats.Rgb128Float] = MatType.CV_32FC3; + optimumTypes[PixelFormats.Prgba128Float] = + optimumTypes[PixelFormats.Rgba128Float] = MatType.CV_32FC4; + optimumTypes[PixelFormats.Bgr24] = + optimumTypes[PixelFormats.Rgb24] = + optimumTypes[PixelFormats.Bgr555] = + optimumTypes[PixelFormats.Bgr565] = MatType.CV_8UC3; + optimumTypes[PixelFormats.Bgr32] = + optimumTypes[PixelFormats.Bgra32] = + optimumTypes[PixelFormats.Cmyk32] = MatType.CV_8UC4; + } + /// - /// Static class which provides conversion between System.Windows.Media.Imaging.WriteableBitmap and Mat + /// 指定したPixelFormatに適合するMatのチャンネル数を返す /// - public static class WriteableBitmapConverter + /// + /// + internal static int GetOptimumChannels(PixelFormat f) { - private static readonly Dictionary optimumChannels; - private static readonly Dictionary optimumTypes; + if (optimumChannels.TryGetValue(f, out var ret)) + return ret; + throw new ArgumentException("Not supported PixelFormat"); + } -#pragma warning disable CA1810 - static WriteableBitmapConverter() -#pragma warning restore CA1810 - { - optimumChannels = new Dictionary(); - optimumChannels[PixelFormats.Gray2] = - optimumChannels[PixelFormats.Gray4] = - optimumChannels[PixelFormats.Gray8] = - optimumChannels[PixelFormats.Gray16] = - optimumChannels[PixelFormats.Gray32Float] = - optimumChannels[PixelFormats.Indexed1] = - optimumChannels[PixelFormats.Indexed2] = - optimumChannels[PixelFormats.Indexed4] = - optimumChannels[PixelFormats.Indexed8] = - optimumChannels[PixelFormats.BlackWhite] = 1; - optimumChannels[PixelFormats.Bgr24] = - optimumChannels[PixelFormats.Bgr555] = - optimumChannels[PixelFormats.Bgr565] = - optimumChannels[PixelFormats.Rgb24] = - optimumChannels[PixelFormats.Rgb48] = - optimumChannels[PixelFormats.Rgb128Float] = 3; - optimumChannels[PixelFormats.Bgr32] = - optimumChannels[PixelFormats.Bgra32] = - optimumChannels[PixelFormats.Cmyk32] = - optimumChannels[PixelFormats.Pbgra32] = - optimumChannels[PixelFormats.Prgba64] = - optimumChannels[PixelFormats.Prgba128Float] = - optimumChannels[PixelFormats.Rgba64] = - optimumChannels[PixelFormats.Rgba128Float] = 4; - - optimumTypes = new Dictionary(); - optimumTypes[PixelFormats.Gray2] = - optimumTypes[PixelFormats.Gray4] = - optimumTypes[PixelFormats.Gray8] = - optimumTypes[PixelFormats.Indexed1] = - optimumTypes[PixelFormats.Indexed2] = - optimumTypes[PixelFormats.Indexed4] = - optimumTypes[PixelFormats.Indexed8] = - optimumTypes[PixelFormats.BlackWhite] = MatType.CV_8UC1; - optimumTypes[PixelFormats.Gray16] = MatType.CV_16UC1; - optimumTypes[PixelFormats.Rgb48] = MatType.CV_16UC3; - optimumTypes[PixelFormats.Rgba64] = MatType.CV_16UC4; - optimumTypes[PixelFormats.Pbgra32] = - optimumTypes[PixelFormats.Prgba64] = MatType.CV_32SC4; - optimumTypes[PixelFormats.Gray32Float] = MatType.CV_32FC1; - optimumTypes[PixelFormats.Rgb128Float] = MatType.CV_32FC3; - optimumTypes[PixelFormats.Prgba128Float] = - optimumTypes[PixelFormats.Rgba128Float] = MatType.CV_32FC4; - optimumTypes[PixelFormats.Bgr24] = - optimumTypes[PixelFormats.Rgb24] = - optimumTypes[PixelFormats.Bgr555] = - optimumTypes[PixelFormats.Bgr565] = MatType.CV_8UC3; - optimumTypes[PixelFormats.Bgr32] = - optimumTypes[PixelFormats.Bgra32] = - optimumTypes[PixelFormats.Cmyk32] = MatType.CV_8UC4; - } + /// + /// 指定したPixelFormatに適合するMatTypeを返す + /// + /// + /// + internal static MatType GetOptimumType(PixelFormat f) + { + if (optimumTypes.TryGetValue(f, out var ret)) + return ret; + throw new ArgumentException("Not supported PixelFormat"); + } - /// - /// 指定したPixelFormatに適合するMatのチャンネル数を返す - /// - /// - /// - internal static int GetOptimumChannels(PixelFormat f) - { - if (optimumChannels.TryGetValue(f, out var ret)) - return ret; - throw new ArgumentException("Not supported PixelFormat"); - } + /// + /// 指定したMatのビット深度・チャンネル数に適合するPixelFormatを返す + /// + /// + /// + private static PixelFormat GetOptimumPixelFormats(MatType type) + { + if (type == MatType.CV_8UC1 || type == MatType.CV_8SC1) + return PixelFormats.Gray8; + if (type == MatType.CV_8UC3 || type == MatType.CV_8SC3) + return PixelFormats.Bgr24; + if (type == MatType.CV_8UC4 || type == MatType.CV_8SC4) + return PixelFormats.Bgra32; + + if (type == MatType.CV_16UC1 || type == MatType.CV_16SC1) + return PixelFormats.Gray16; + if (type == MatType.CV_16UC3 || type == MatType.CV_16SC3) + return PixelFormats.Rgb48; + if (type == MatType.CV_16UC4 || type == MatType.CV_16SC4) + return PixelFormats.Rgba64; + + if (type == MatType.CV_32SC4) + return PixelFormats.Prgba64; + + if (type == MatType.CV_32FC1) + return PixelFormats.Gray32Float; + if (type == MatType.CV_32FC3) + return PixelFormats.Rgb128Float; + if (type == MatType.CV_32FC4) + return PixelFormats.Rgba128Float; + + throw new ArgumentOutOfRangeException(nameof(type), "Not supported MatType"); + } - /// - /// 指定したPixelFormatに適合するMatTypeを返す - /// - /// - /// - internal static MatType GetOptimumType(PixelFormat f) + /// + /// BGR -> RGB + /// + /// + /// + private static Mat SwapChannelsIfNeeded(Mat src) + { + var type = src.Type(); + if (type == MatType.CV_16UC3 || type == MatType.CV_16SC3) // PixelFormats.Rgb48 { - if (optimumTypes.TryGetValue(f, out var ret)) - return ret; - throw new ArgumentException("Not supported PixelFormat"); + var dst = new Mat(); + Cv2.CvtColor(src, dst, ColorConversionCodes.BGR2RGB); + return dst; } - - /// - /// 指定したMatのビット深度・チャンネル数に適合するPixelFormatを返す - /// - /// - /// - private static PixelFormat GetOptimumPixelFormats(MatType type) + if (type == MatType.CV_16UC4 || type == MatType.CV_16SC4) // PixelFormats.Rgba64 { - if (type == MatType.CV_8UC1 || type == MatType.CV_8SC1) - return PixelFormats.Gray8; - if (type == MatType.CV_8UC3 || type == MatType.CV_8SC3) - return PixelFormats.Bgr24; - if (type == MatType.CV_8UC4 || type == MatType.CV_8SC4) - return PixelFormats.Bgra32; - - if (type == MatType.CV_16UC1 || type == MatType.CV_16SC1) - return PixelFormats.Gray16; - if (type == MatType.CV_16UC3 || type == MatType.CV_16SC3) - return PixelFormats.Rgb48; - if (type == MatType.CV_16UC4 || type == MatType.CV_16SC4) - return PixelFormats.Rgba64; - - if (type == MatType.CV_32SC4) - return PixelFormats.Prgba64; - - if (type == MatType.CV_32FC1) - return PixelFormats.Gray32Float; - if (type == MatType.CV_32FC3) - return PixelFormats.Rgb128Float; - if (type == MatType.CV_32FC4) - return PixelFormats.Rgba128Float; - - throw new ArgumentOutOfRangeException(nameof(type), "Not supported MatType"); + var dst = new Mat(); + Cv2.CvtColor(src, dst, ColorConversionCodes.BGRA2RGBA); + return dst; } + return src; + } - /// - /// BGR -> RGB - /// - /// - /// - private static Mat SwapChannelsIfNeeded(Mat src) - { - var type = src.Type(); - if (type == MatType.CV_16UC3 || type == MatType.CV_16SC3) // PixelFormats.Rgb48 - { - var dst = new Mat(); - Cv2.CvtColor(src, dst, ColorConversionCodes.BGR2RGB); - return dst; - } - if (type == MatType.CV_16UC4 || type == MatType.CV_16SC4) // PixelFormats.Rgba64 - { - var dst = new Mat(); - Cv2.CvtColor(src, dst, ColorConversionCodes.BGRA2RGBA); - return dst; - } - return src; - } + #region ToWriteableBitmap + + /// + /// Converts Mat to WriteableBitmap. + /// The arguments of this method corresponds the consructor of WriteableBitmap. + /// + /// Input Mat + /// Horizontal dots per inch + /// Vertical dots per inch + /// Pixel format of output WriteableBitmap + /// Bitmap palette + /// WriteableBitmap + public static WriteableBitmap ToWriteableBitmap(this Mat src, double dpiX, double dpiY, PixelFormat pf, + BitmapPalette? bp) + { + if (src is null) + throw new ArgumentNullException(nameof(src)); + + var wb = new WriteableBitmap(src.Width, src.Height, dpiX, dpiY, pf, bp); + ToWriteableBitmap(src, wb); + return wb; + } - #region ToWriteableBitmap - - /// - /// Converts Mat to WriteableBitmap. - /// The arguments of this method corresponds the consructor of WriteableBitmap. - /// - /// Input Mat - /// Horizontal dots per inch - /// Vertical dots per inch - /// Pixel format of output WriteableBitmap - /// Bitmap palette - /// WriteableBitmap - public static WriteableBitmap ToWriteableBitmap(this Mat src, double dpiX, double dpiY, PixelFormat pf, - BitmapPalette? bp) + /// + /// Converts Mat to WriteableBitmap (dpi=96, BitmapPalette=null) + /// + /// Input Mat + /// Pixel format of output WriteableBitmap + /// WriteableBitmap + public static WriteableBitmap ToWriteableBitmap(this Mat src, PixelFormat pf) + { + return ToWriteableBitmap(src, 96, 96, pf, null); + } + + /// + /// Converts Mat to WriteableBitmap (dpi=96, BitmapPalette=null) + /// + /// Input Mat + /// WriteableBitmap + public static WriteableBitmap ToWriteableBitmap(this Mat src) + { + if (src is null) + throw new ArgumentNullException(nameof(src)); + + PixelFormat pf = GetOptimumPixelFormats(src.Type()); + Mat swappedMat = SwapChannelsIfNeeded(src); + try { - if (src == null) - throw new ArgumentNullException(nameof(src)); - - var wb = new WriteableBitmap(src.Width, src.Height, dpiX, dpiY, pf, bp); - ToWriteableBitmap(src, wb); - return wb; + return ToWriteableBitmap(swappedMat, 96, 96, pf, null); } - - /// - /// Converts Mat to WriteableBitmap (dpi=96, BitmapPalette=null) - /// - /// Input Mat - /// Pixel format of output WriteableBitmap - /// WriteableBitmap - public static WriteableBitmap ToWriteableBitmap(this Mat src, PixelFormat pf) + finally { - return ToWriteableBitmap(src, 96, 96, pf, null); + if (src != swappedMat) + swappedMat.Dispose(); } + } - /// - /// Converts Mat to WriteableBitmap (dpi=96, BitmapPalette=null) - /// - /// Input Mat - /// WriteableBitmap - public static WriteableBitmap ToWriteableBitmap(this Mat src) + /// + /// Converts Mat to WriteableBitmap. + /// This method is more efficient because new instance of WriteableBitmap is not allocated. + /// + /// Input Mat + /// Output WriteableBitmap + public static void ToWriteableBitmap(Mat src, WriteableBitmap dst) + { + if (src is null) + throw new ArgumentNullException(nameof(src)); + if (dst is null) + throw new ArgumentNullException(nameof(dst)); + if (src.Width != dst.PixelWidth || src.Height != dst.PixelHeight) + throw new ArgumentException("size of src must be equal to size of dst"); + //if (src.Depth != BitDepth.U8) + //throw new ArgumentException("bit depth of src must be BitDepth.U8", "src"); + if (src.Dims > 2) + throw new ArgumentException("Mat dimensions must be 2"); + + int w = src.Width; + int h = src.Height; + int bpp = dst.Format.BitsPerPixel; + + int channels = GetOptimumChannels(dst.Format); + if (src.Channels() != channels) { - if (src == null) - throw new ArgumentNullException(nameof(src)); - - PixelFormat pf = GetOptimumPixelFormats(src.Type()); - Mat swappedMat = SwapChannelsIfNeeded(src); - try - { - return ToWriteableBitmap(swappedMat, 96, 96, pf, null); - } - finally - { - if (src != swappedMat) - swappedMat.Dispose(); - } + throw new ArgumentException("channels of dst != channels of PixelFormat", nameof(dst)); } - /// - /// Converts Mat to WriteableBitmap. - /// This method is more efficient because new instance of WriteableBitmap is not allocated. - /// - /// Input Mat - /// Output WriteableBitmap - public static void ToWriteableBitmap(Mat src, WriteableBitmap dst) + bool submat = src.IsSubmatrix(); + bool continuous = src.IsContinuous(); + unsafe { - if (src == null) - throw new ArgumentNullException(nameof(src)); - if (dst == null) - throw new ArgumentNullException(nameof(dst)); - if (src.Width != dst.PixelWidth || src.Height != dst.PixelHeight) - throw new ArgumentException("size of src must be equal to size of dst"); - //if (src.Depth != BitDepth.U8) - //throw new ArgumentException("bit depth of src must be BitDepth.U8", "src"); - if (src.Dims > 2) - throw new ArgumentException("Mat dimensions must be 2"); - - int w = src.Width; - int h = src.Height; - int bpp = dst.Format.BitsPerPixel; - - int channels = GetOptimumChannels(dst.Format); - if (src.Channels() != channels) - { - throw new ArgumentException("channels of dst != channels of PixelFormat", nameof(dst)); - } + byte* pSrc = (byte*)(src.Data); + int srcStep = (int)src.Step(); - bool submat = src.IsSubmatrix(); - bool continuous = src.IsContinuous(); - unsafe + if (bpp == 1) { - byte* pSrc = (byte*)(src.Data); - int srcStep = (int)src.Step(); + if (submat) + throw new NotImplementedException("submatrix not supported"); - if (bpp == 1) - { - if (submat) - throw new NotImplementedException("submatrix not supported"); - - // 手作業で移し替える - int stride = w / 8 + 1; - if (stride < 2) - stride = 2; + // 手作業で移し替える + int stride = w / 8 + 1; + if (stride < 2) + stride = 2; - byte[] pixels = new byte[h * stride]; + byte[] pixels = new byte[h * stride]; - for (int x = 0, y = 0; y < h; y++) + for (int x = 0, y = 0; y < h; y++) + { + int offset = y * stride; + for (int bytePos = 0; bytePos < stride; bytePos++) { - int offset = y * stride; - for (int bytePos = 0; bytePos < stride; bytePos++) + if (x < w) { - if (x < w) + byte b = 0; + // 現在の位置から横8ピクセル分、ビットがそれぞれ立っているか調べ、1つのbyteにまとめる + for (int i = 0; i < 8; i++) { - byte b = 0; - // 現在の位置から横8ピクセル分、ビットがそれぞれ立っているか調べ、1つのbyteにまとめる - for (int i = 0; i < 8; i++) + b <<= 1; + if (x < w && pSrc[srcStep * y + x] != 0) { - b <<= 1; - if (x < w && pSrc[srcStep * y + x] != 0) - { - b |= 1; - } - x++; + b |= 1; } - pixels[offset + bytePos] = b; + x++; } + pixels[offset + bytePos] = b; } - x = 0; } - dst.WritePixels(new Int32Rect(0, 0, w, h), pixels, stride, 0); - return; + x = 0; } + dst.WritePixels(new Int32Rect(0, 0, w, h), pixels, stride, 0); + return; + } - // 一気にコピー - if (!submat && continuous) - { - long imageSize = src.DataEnd.ToInt64() - src.Data.ToInt64(); - if (imageSize < 0) - throw new OpenCvSharpException("The mat has invalid data pointer"); - if (imageSize > int.MaxValue) - throw new OpenCvSharpException("Too big mat data"); - dst.WritePixels(new Int32Rect(0, 0, w, h), src.Data, (int)imageSize, srcStep); - return; - } + // 一気にコピー + if (!submat && continuous) + { + long imageSize = src.DataEnd.ToInt64() - src.Data.ToInt64(); + if (imageSize < 0) + throw new OpenCvSharpException("The mat has invalid data pointer"); + if (imageSize > int.MaxValue) + throw new OpenCvSharpException("Too big mat data"); + dst.WritePixels(new Int32Rect(0, 0, w, h), src.Data, (int)imageSize, srcStep); + return; + } - // 一列ごとにコピー - try - { - dst.Lock(); - dst.AddDirtyRect(new Int32Rect(0, 0, dst.PixelWidth, dst.PixelHeight)); + // 一列ごとにコピー + try + { + dst.Lock(); + dst.AddDirtyRect(new Int32Rect(0, 0, dst.PixelWidth, dst.PixelHeight)); - int dstStep = dst.BackBufferStride; - byte* pDst = (byte*)dst.BackBuffer; + int dstStep = dst.BackBufferStride; + byte* pDst = (byte*)dst.BackBuffer; - for (int y = 0; y < h; y++) - { - long offsetSrc = (y * srcStep); - long offsetDst = (y * dstStep); - long bytesInCopy = w * channels; - Buffer.MemoryCopy(pSrc + offsetSrc, pDst + offsetDst, bytesInCopy, bytesInCopy); - } - } - finally + for (int y = 0; y < h; y++) { - dst.Unlock(); + long offsetSrc = (y * srcStep); + long offsetDst = (y * dstStep); + long bytesInCopy = w * channels; + Buffer.MemoryCopy(pSrc + offsetSrc, pDst + offsetDst, bytesInCopy, bytesInCopy); } } + finally + { + dst.Unlock(); + } } + } - #endregion + #endregion - #region ToMat + #region ToMat - // https://github.com/shimat/opencvsharp_2410/blob/master/src/OpenCvSharp.Extensions/WriteableBitmapConverter_IplImage.cs#L167 + // https://github.com/shimat/opencvsharp_2410/blob/master/src/OpenCvSharp.Extensions/WriteableBitmapConverter_IplImage.cs#L167 - /// - /// Converts WriteableBitmap to IplImage - /// - /// Input WriteableBitmap - /// IplImage - public static Mat ToMat(this WriteableBitmap src) - { - if (src == null) - throw new ArgumentNullException(nameof(src)); - - int w = src.PixelWidth; - int h = src.PixelHeight; - //int bpp = src.Format.BitsPerPixel; - var channels = GetOptimumChannels(src.Format); - var depth = GetOptimumType(src.Format); - var dst = new Mat(new Size(w, h), depth, channels); - ToMat(src, dst); - return dst; - } + /// + /// Converts WriteableBitmap to IplImage + /// + /// Input WriteableBitmap + /// IplImage + public static Mat ToMat(this WriteableBitmap src) + { + if (src is null) + throw new ArgumentNullException(nameof(src)); + + var w = src.PixelWidth; + var h = src.PixelHeight; + var matType = GetOptimumType(src.Format); + var dst = new Mat(new Size(w, h), matType); + ToMat(src, dst); + return dst; + } - /// - /// Converts WriteableBitmap to Mat - /// - /// Input WriteableBitmap - /// Output Mat - public static void ToMat(this WriteableBitmap src, Mat dst) + /// + /// Converts WriteableBitmap to Mat + /// + /// Input WriteableBitmap + /// Output Mat + public static void ToMat(this WriteableBitmap src, Mat dst) + { + if (src is null) + throw new ArgumentNullException(nameof(src)); + if (dst is null) + throw new ArgumentNullException(nameof(dst)); + if (src.PixelWidth != dst.Width || src.PixelHeight != dst.Height) + throw new ArgumentException("size of src must be equal to size of dst"); + //if (dst.Depth != BitDepth.U8) + // throw new ArgumentException("bit depth of dst must be BitDepth.U8", "dst"); + + int w = src.PixelWidth; + int h = src.PixelHeight; + int bpp = src.Format.BitsPerPixel; + int channels = GetOptimumChannels(src.Format); + if (dst.Channels() != channels) + throw new ArgumentException("nChannels of dst is invalid", nameof(dst)); + + unsafe { - if (src == null) - throw new ArgumentNullException(nameof(src)); - if (dst == null) - throw new ArgumentNullException(nameof(dst)); - if (src.PixelWidth != dst.Width || src.PixelHeight != dst.Height) - throw new ArgumentException("size of src must be equal to size of dst"); - //if (dst.Depth != BitDepth.U8) - // throw new ArgumentException("bit depth of dst must be BitDepth.U8", "dst"); - - int w = src.PixelWidth; - int h = src.PixelHeight; - int bpp = src.Format.BitsPerPixel; - int channels = GetOptimumChannels(src.Format); - if (dst.Channels() != channels) - throw new ArgumentException("nChannels of dst is invalid", nameof(dst)); - - unsafe - { - byte* p = (byte*)dst.Data.ToPointer(); - int widthStep = (int)dst.Step(); + byte* p = (byte*)dst.Data.ToPointer(); + int widthStep = (int)dst.Step(); - // 1bppは手作業でコピー - if (bpp == 1) + // 1bppは手作業でコピー + if (bpp == 1) + { + // BitmapImageのデータを配列にコピー + // 要素1つに横8ピクセル分のデータが入っている。 + int stride = (w / 8) + 1; + byte[] pixels = new byte[h * stride]; + src.CopyPixels(pixels, stride, 0); + + int x = 0; + for (int y = 0; y < h; y++) { - // BitmapImageのデータを配列にコピー - // 要素1つに横8ピクセル分のデータが入っている。 - int stride = (w / 8) + 1; - byte[] pixels = new byte[h * stride]; - src.CopyPixels(pixels, stride, 0); - - int x = 0; - for (int y = 0; y < h; y++) + int offset = y * stride; + // この行の各バイトを調べていく + for (int bytePos = 0; bytePos < stride; bytePos++) { - int offset = y * stride; - // この行の各バイトを調べていく - for (int bytePos = 0; bytePos < stride; bytePos++) + if (x < w) { - if (x < w) + // 現在の位置のバイトからそれぞれのビット8つを取り出す + byte b = pixels[offset + bytePos]; + for (int i = 0; i < 8; i++) { - // 現在の位置のバイトからそれぞれのビット8つを取り出す - byte b = pixels[offset + bytePos]; - for (int i = 0; i < 8; i++) + if (x >= w) { - if (x >= w) - { - break; - } - // IplImageは8bit/pixel - p[widthStep * y + x] = ((b & 0x80) == 0x80) ? (byte)255 : (byte)0; - b <<= 1; - x++; + break; } + // IplImageは8bit/pixel + p[widthStep * y + x] = ((b & 0x80) == 0x80) ? (byte)255 : (byte)0; + b <<= 1; + x++; } } - // 次の行へ - x = 0; } - + // 次の行へ + x = 0; } - // 8bpp - else if (bpp == 8) + + } + // 8bpp + else if (bpp == 8) + { + int stride = w; + byte[] pixels = new byte[h * stride]; + src.CopyPixels(pixels, stride, 0); + for (int y = 0; y < h; y++) { - int stride = w; - byte[] pixels = new byte[h * stride]; - src.CopyPixels(pixels, stride, 0); - for (int y = 0; y < h; y++) + for (int x = 0; x < w; x++) { - for (int x = 0; x < w; x++) - { - p[widthStep * y + x] = pixels[y * stride + x]; - } + p[widthStep * y + x] = pixels[y * stride + x]; } } - // 24bpp, 32bpp, ... - else - { - int stride = w * ((bpp + 7) / 8); - src.CopyPixels(Int32Rect.Empty, dst.Data, (int)(dst.Step() * dst.Rows), stride); - } + } + // 24bpp, 32bpp, ... + else + { + int stride = w * ((bpp + 7) / 8); + src.CopyPixels(Int32Rect.Empty, dst.Data, (int)(dst.Step() * dst.Rows), stride); } } - - #endregion } + + #endregion } #endif diff --git a/src/OpenCvSharp/Cv2/Cv2.cs b/src/OpenCvSharp/Cv2/Cv2.cs index cc0e0a5b2..86b30c1e5 100644 --- a/src/OpenCvSharp/Cv2/Cv2.cs +++ b/src/OpenCvSharp/Cv2/Cv2.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; + // ReSharper disable InconsistentNaming diff --git a/src/OpenCvSharp/Cv2/Cv2_calib3d.cs b/src/OpenCvSharp/Cv2/Cv2_calib3d.cs index fc7a0b771..53eab1921 100644 --- a/src/OpenCvSharp/Cv2/Cv2_calib3d.cs +++ b/src/OpenCvSharp/Cv2/Cv2_calib3d.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; -using System.Linq; using OpenCvSharp.Internal; using OpenCvSharp.Internal.Util; using OpenCvSharp.Internal.Vectors; @@ -52,9 +49,9 @@ public static void Rodrigues(double[] vector, out double[,] matrix, out double[, if (vector is null) throw new ArgumentNullException(nameof(vector)); if (vector.Length != 3) - throw new ArgumentException("vector.Length != 3"); + throw new ArgumentException("Length != 3", nameof(vector)); - using var vectorM = new Mat(3, 1, MatType.CV_64FC1, vector); + using var vectorM = Mat.FromPixelData(3, 1, MatType.CV_64FC1, vector); using var matrixM = new Mat(); using var jacobianM = new Mat(); using var vectorInputArray = InputArray.Create(vectorM); @@ -78,7 +75,7 @@ public static void Rodrigues(double[,] matrix, out double[] vector, out double[, if (matrix.GetLength(0) != 3 || matrix.GetLength(1) != 3) throw new ArgumentException("matrix must be double[3,3]"); - using var matrixM = new Mat(3, 3, MatType.CV_64FC1, matrix); + using var matrixM = Mat.FromPixelData(3, 3, MatType.CV_64FC1, matrix); using var vectorM = new Mat(); using var jacobianM = new Mat(); using var matrixOutputArray = InputArray.Create(matrixM); @@ -275,7 +272,7 @@ public static Vec3d RQDecomp3x3(double[,] src, out double[,] mtxR, out double[,] if (src.GetLength(0) != 3 || src.GetLength(1) != 3) throw new ArgumentException("src must be double[3,3]"); - using var srcM = new Mat(3, 3, MatType.CV_64FC1, src); + using var srcM = Mat.FromPixelData(3, 3, MatType.CV_64FC1, src); using var mtxRM = new Mat(); using var mtxQM = new Mat(); using var qxM = new Mat(); @@ -378,7 +375,7 @@ public static void DecomposeProjectionMatrix( if (!((dim0 == 3 && dim1 == 4) || (dim0 == 4 && dim1 == 3))) throw new ArgumentException("projMatrix must be double[3,4] or double[4,3]"); - using var projMatrixM = new Mat(3, 4, MatType.CV_64FC1, projMatrix); + using var projMatrixM = Mat.FromPixelData(3, 4, MatType.CV_64FC1, projMatrix); using var cameraMatrixM = new Mat(); using var rotMatrixM = new Mat(); using var transVectM = new Mat(); @@ -551,10 +548,10 @@ public static void ComposeRT( if (tvec2 is null) throw new ArgumentNullException(nameof(tvec2)); - using var rvec1M = new Mat(3, 1, MatType.CV_64FC1, rvec1); - using var tvec1M = new Mat(3, 1, MatType.CV_64FC1, tvec1); - using var rvec2M = new Mat(3, 1, MatType.CV_64FC1, rvec2); - using var tvec2M = new Mat(3, 1, MatType.CV_64FC1, tvec2); + using var rvec1M = Mat.FromPixelData(3, 1, MatType.CV_64FC1, rvec1); + using var tvec1M = Mat.FromPixelData(3, 1, MatType.CV_64FC1, tvec1); + using var rvec2M = Mat.FromPixelData(3, 1, MatType.CV_64FC1, rvec2); + using var tvec2M = Mat.FromPixelData(3, 1, MatType.CV_64FC1, tvec2); using var rvec3M = new Mat(); using var tvec3M = new Mat(); using var dr3dr1M = new Mat(); @@ -715,13 +712,13 @@ public static void ProjectPoints( throw new ArgumentException("cameraMatrix must be double[3,3]"); var objectPointsArray = objectPoints as Point3f[] ?? objectPoints.ToArray(); - using var objectPointsM = new Mat(objectPointsArray.Length, 1, MatType.CV_32FC3, objectPointsArray); - using var rvecM = new Mat(3, 1, MatType.CV_64FC1, rvec); - using var tvecM = new Mat(3, 1, MatType.CV_64FC1, tvec); - using var cameraMatrixM = new Mat(3, 3, MatType.CV_64FC1, cameraMatrix); + using var objectPointsM = Mat.FromPixelData(objectPointsArray.Length, 1, MatType.CV_32FC3, objectPointsArray); + using var rvecM = Mat.FromPixelData(3, 1, MatType.CV_64FC1, rvec); + using var tvecM = Mat.FromPixelData(3, 1, MatType.CV_64FC1, tvec); + using var cameraMatrixM = Mat.FromPixelData(3, 3, MatType.CV_64FC1, cameraMatrix); using var distCoeffsM = (distCoeffs is null) ? new Mat() - : new Mat(distCoeffs.Length, 1, MatType.CV_64FC1, distCoeffs); + : Mat.FromPixelData(distCoeffs.Length, 1, MatType.CV_64FC1, distCoeffs); using var imagePointsM = new Mat(); using var jacobianM = new Mat(); NativeMethods.HandleException( @@ -1436,7 +1433,7 @@ public static bool FindCirclesGrid( /// Output vector of translation vectors estimated for each pattern view. /// Different flags that may be zero or a combination of the CalibrationFlag values /// Termination criteria for the iterative optimization algorithm. - /// + /// Root mean square (RMS) re-projection error. A value below 1.0 is generally considered acceptable for a good calibration. public static double CalibrateCamera( IEnumerable objectPoints, IEnumerable imagePoints, @@ -1508,7 +1505,7 @@ public static double CalibrateCamera( /// Output vector of translation vectors estimated for each pattern view. /// Different flags that may be zero or a combination of the CalibrationFlag values /// Termination criteria for the iterative optimization algorithm. - /// + /// Root mean square (RMS) re-projection error. A value below 1.0 is generally considered acceptable for a good calibration. public static double CalibrateCamera( IEnumerable> objectPoints, IEnumerable> imagePoints, @@ -2368,7 +2365,7 @@ public static Mat GetOptimalNewCameraMatrix( } } - using var mat = new Mat(matPtr); + using var mat = Mat.FromNativePointer(matPtr); return mat.ToRectangularArray(); } diff --git a/src/OpenCvSharp/Cv2/Cv2_core.cs b/src/OpenCvSharp/Cv2/Cv2_core.cs index dd2475046..a14ff5c7e 100644 --- a/src/OpenCvSharp/Cv2/Cv2_core.cs +++ b/src/OpenCvSharp/Cv2/Cv2_core.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Linq; -using System.Text; +using System.Diagnostics.CodeAnalysis; using OpenCvSharp.Internal; using OpenCvSharp.Internal.Vectors; @@ -12,7 +8,7 @@ namespace OpenCvSharp; -static partial class Cv2 +public static partial class Cv2 { #region core.hpp @@ -46,9 +42,9 @@ public static int BorderInterpolate(int p, int len, BorderTypes borderType) public static void CopyMakeBorder(InputArray src, OutputArray dst, int top, int bottom, int left, int right, BorderTypes borderType, Scalar? value = null) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -73,11 +69,11 @@ public static void CopyMakeBorder(InputArray src, OutputArray dst, int top, int public static void Add(InputArray src1, InputArray src2, OutputArray dst, InputArray? mask = null, int dtype = -1) { - if (src1 == null) + if (src1 is null) throw new ArgumentNullException(nameof(src1)); - if (src2 == null) + if (src2 is null) throw new ArgumentNullException(nameof(src2)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src1.ThrowIfDisposed(); src2.ThrowIfDisposed(); @@ -104,11 +100,11 @@ public static void Add(InputArray src1, InputArray src2, OutputArray dst, InputA public static void Subtract(InputArray src1, InputArray src2, OutputArray dst, InputArray? mask = null, int dtype = -1) { - if (src1 == null) + if (src1 is null) throw new ArgumentNullException(nameof(src1)); - if (src2 == null) + if (src2 is null) throw new ArgumentNullException(nameof(src2)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src1.ThrowIfDisposed(); src2.ThrowIfDisposed(); @@ -135,9 +131,9 @@ public static void Subtract(InputArray src1, InputArray src2, OutputArray dst, I public static void Subtract(InputArray src1, Scalar src2, OutputArray dst, InputArray? mask = null, int dtype = -1) { - if (src1 == null) + if (src1 is null) throw new ArgumentNullException(nameof(src1)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src1.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -162,9 +158,9 @@ public static void Subtract(InputArray src1, Scalar src2, OutputArray dst, Input public static void Subtract(Scalar src1, InputArray src2, OutputArray dst, InputArray? mask = null, int dtype = -1) { - if (src2 == null) + if (src2 is null) throw new ArgumentNullException(nameof(src2)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src2.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -188,11 +184,11 @@ public static void Subtract(Scalar src1, InputArray src2, OutputArray dst, Input /// public static void Multiply(InputArray src1, InputArray src2, OutputArray dst, double scale = 1, int dtype = -1) { - if (src1 == null) + if (src1 is null) throw new ArgumentNullException(nameof(src1)); - if (src2 == null) + if (src2 is null) throw new ArgumentNullException(nameof(src2)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src1.ThrowIfDisposed(); src2.ThrowIfDisposed(); @@ -215,13 +211,13 @@ public static void Multiply(InputArray src1, InputArray src2, OutputArray dst, d /// The destination array; will have the same size and same type as src2 /// Scale factor [By default this is 1] /// - public static void Divide(InputArray src1, InputArray src2, OutputArray dst, double scale = 1, int dtype = -1) + public static void Divide(InputArray src1, InputArray src2, OutputArray dst, double scale = 1, MatType? dtype = null) { - if (src1 == null) + if (src1 is null) throw new ArgumentNullException(nameof(src1)); - if (src2 == null) + if (src2 is null) throw new ArgumentNullException(nameof(src2)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src1.ThrowIfDisposed(); src2.ThrowIfDisposed(); @@ -229,7 +225,7 @@ public static void Divide(InputArray src1, InputArray src2, OutputArray dst, dou NativeMethods.HandleException( NativeMethods.core_divide2( - src1.CvPtr, src2.CvPtr, dst.CvPtr, scale, dtype)); + src1.CvPtr, src2.CvPtr, dst.CvPtr, scale, dtype?.Value ?? -1)); GC.KeepAlive(src1); GC.KeepAlive(src2); @@ -245,9 +241,9 @@ public static void Divide(InputArray src1, InputArray src2, OutputArray dst, dou /// public static void Divide(double scale, InputArray src2, OutputArray dst, int dtype = -1) { - if (src2 == null) + if (src2 is null) throw new ArgumentNullException(nameof(src2)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src2.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -268,11 +264,11 @@ public static void Divide(double scale, InputArray src2, OutputArray dst, int dt /// public static void ScaleAdd(InputArray src1, double alpha, InputArray src2, OutputArray dst) { - if (src1 == null) + if (src1 is null) throw new ArgumentNullException(nameof(src1)); - if (src2 == null) + if (src2 is null) throw new ArgumentNullException(nameof(src2)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src1.ThrowIfDisposed(); src2.ThrowIfDisposed(); @@ -299,11 +295,11 @@ public static void ScaleAdd(InputArray src1, double alpha, InputArray src2, Outp public static void AddWeighted(InputArray src1, double alpha, InputArray src2, double beta, double gamma, OutputArray dst, int dtype = -1) { - if (src1 == null) + if (src1 is null) throw new ArgumentNullException(nameof(src1)); - if (src2 == null) + if (src2 is null) throw new ArgumentNullException(nameof(src2)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src1.ThrowIfDisposed(); src2.ThrowIfDisposed(); @@ -327,9 +323,9 @@ public static void AddWeighted(InputArray src1, double alpha, InputArray src2, /// The optional delta added to the scaled values. [By default this is 0] public static void ConvertScaleAbs(InputArray src, OutputArray dst, double alpha = 1, double beta = 0) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -353,9 +349,9 @@ public static void ConvertScaleAbs(InputArray src, OutputArray dst, double alpha /// output array. public static void ConvertFp16(InputArray src, OutputArray dst) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -380,11 +376,11 @@ public static void ConvertFp16(InputArray src, OutputArray dst) /// and the same depth as lut public static void LUT(InputArray src, InputArray lut, OutputArray dst) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (lut == null) + if (lut is null) throw new ArgumentNullException(nameof(lut)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); lut.ThrowIfDisposed(); @@ -412,12 +408,12 @@ public static void LUT(InputArray src, InputArray lut, OutputArray dst) /// and the same depth as lut public static void LUT(InputArray src, byte[] lut, OutputArray dst) { - if (lut == null) + if (lut is null) throw new ArgumentNullException(nameof(lut)); if (lut.Length != 256) throw new ArgumentException("lut.Length != 256"); - using var lutMat = new Mat(256, 1, MatType.CV_8UC1, lut); + using var lutMat = Mat.FromPixelData(256, 1, MatType.CV_8UC1, lut); LUT(src, lutMat, dst); } @@ -428,7 +424,7 @@ public static void LUT(InputArray src, byte[] lut, OutputArray dst) /// public static Scalar Sum(InputArray src) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); src.ThrowIfDisposed(); @@ -446,7 +442,7 @@ public static Scalar Sum(InputArray src) /// number of non-zero elements in mtx public static int CountNonZero(InputArray mtx) { - if (mtx == null) + if (mtx is null) throw new ArgumentNullException(nameof(mtx)); mtx.ThrowIfDisposed(); @@ -464,9 +460,9 @@ public static int CountNonZero(InputArray mtx) /// public static void FindNonZero(InputArray src, OutputArray idx) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (idx == null) + if (idx is null) throw new ArgumentNullException(nameof(idx)); src.ThrowIfDisposed(); idx.ThrowIfNotReady(); @@ -488,7 +484,7 @@ public static void FindNonZero(InputArray src, OutputArray idx) /// public static Scalar Mean(InputArray src, InputArray? mask = null) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); src.ThrowIfDisposed(); @@ -511,11 +507,11 @@ public static Scalar Mean(InputArray src, InputArray? mask = null) public static void MeanStdDev( InputArray src, OutputArray mean, OutputArray stddev, InputArray? mask = null) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (mean == null) + if (mean is null) throw new ArgumentNullException(nameof(mean)); - if (stddev == null) + if (stddev is null) throw new ArgumentNullException(nameof(stddev)); src.ThrowIfDisposed(); mean.ThrowIfNotReady(); @@ -544,7 +540,7 @@ public static void MeanStdDev( public static void MeanStdDev( InputArray src, out Scalar mean, out Scalar stddev, InputArray? mask = null) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); src.ThrowIfDisposed(); @@ -567,7 +563,7 @@ public static void MeanStdDev( public static double Norm(InputArray src1, NormTypes normType = NormTypes.L2, InputArray? mask = null) { - if (src1 == null) + if (src1 is null) throw new ArgumentNullException(nameof(src1)); src1.ThrowIfDisposed(); @@ -590,9 +586,9 @@ public static double Norm(InputArray src1, public static double Norm(InputArray src1, InputArray src2, NormTypes normType = NormTypes.L2, InputArray? mask = null) { - if (src1 == null) + if (src1 is null) throw new ArgumentNullException(nameof(src1)); - if (src2 == null) + if (src2 is null) throw new ArgumentNullException(nameof(src2)); src1.ThrowIfDisposed(); src2.ThrowIfDisposed(); @@ -619,9 +615,9 @@ public static double Norm(InputArray src1, InputArray src2, // ReSharper disable once InconsistentNaming public static double PSNR(InputArray src1, InputArray src2, double r = 255.0) { - if (src1 == null) + if (src1 is null) throw new ArgumentNullException(nameof(src1)); - if (src2 == null) + if (src2 is null) throw new ArgumentNullException(nameof(src2)); src1.ThrowIfDisposed(); src2.ThrowIfDisposed(); @@ -654,13 +650,13 @@ public static void BatchDistance(InputArray src1, InputArray src2, int k = 0, InputArray? mask = null, int update = 0, bool crosscheck = false) { - if (src1 == null) + if (src1 is null) throw new ArgumentNullException(nameof(src1)); - if (src2 == null) + if (src2 is null) throw new ArgumentNullException(nameof(src2)); - if (dist == null) + if (dist is null) throw new ArgumentNullException(nameof(dist)); - if (nidx == null) + if (nidx is null) throw new ArgumentNullException(nameof(nidx)); src1.ThrowIfDisposed(); src2.ThrowIfDisposed(); @@ -699,9 +695,9 @@ public static void BatchDistance(InputArray src1, InputArray src2, public static void Normalize(InputArray src, InputOutputArray dst, double alpha = 1, double beta = 0, NormTypes normType = NormTypes.L2, int dtype = -1, InputArray? mask = null) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -716,6 +712,56 @@ public static void Normalize(InputArray src, InputOutputArray dst, double alpha GC.KeepAlive(mask); } + /// + /// Finds indices of max elements along provided axis + /// + /// Input single-channel array + /// Output array of type CV_32SC1 with the same dimensionality as src, + /// except for axis being reduced - it should be set to 1. + /// Axis to reduce along + /// Whether to get the index of first or last occurrence of max + public static void ReduceArgMax(InputArray src, OutputArray dst, int axis, bool lastIndex = false) + { + if (src == null) + throw new ArgumentNullException(nameof(src)); + if (dst == null) + throw new ArgumentNullException(nameof(dst)); + src.ThrowIfDisposed(); + dst.ThrowIfNotReady(); + + NativeMethods.HandleException( + NativeMethods.core_reduceArgMax(src.CvPtr, dst.CvPtr, axis, lastIndex)); + + dst.Fix(); + GC.KeepAlive(src); + GC.KeepAlive(dst); + } + + /// + /// Finds indices of min elements along provided axis + /// + /// Input single-channel array + /// Output array of type CV_32SC1 with the same dimensionality as src, + /// except for axis being reduced - it should be set to 1. + /// Axis to reduce along + /// Whether to get the index of first or last occurrence of min + public static void ReduceArgMin(InputArray src, OutputArray dst, int axis, bool lastIndex = false) + { + if (src == null) + throw new ArgumentNullException(nameof(src)); + if (dst == null) + throw new ArgumentNullException(nameof(dst)); + src.ThrowIfDisposed(); + dst.ThrowIfNotReady(); + + NativeMethods.HandleException( + NativeMethods.core_reduceArgMin(src.CvPtr, dst.CvPtr, axis, lastIndex)); + + dst.Fix(); + GC.KeepAlive(src); + GC.KeepAlive(dst); + } + /// /// finds global minimum and maximum array elements and returns their values and their locations /// @@ -724,7 +770,7 @@ public static void Normalize(InputArray src, InputOutputArray dst, double alpha /// Pointer to returned maximum value public static void MinMaxLoc(InputArray src, out double minVal, out double maxVal) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); src.ThrowIfDisposed(); @@ -757,7 +803,7 @@ public static void MinMaxLoc(InputArray src, out Point minLoc, out Point maxLoc) public static void MinMaxLoc(InputArray src, out double minVal, out double maxVal, out Point minLoc, out Point maxLoc, InputArray? mask = null) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); src.ThrowIfDisposed(); @@ -777,7 +823,7 @@ public static void MinMaxLoc(InputArray src, out double minVal, out double maxVa /// Pointer to returned maximum value public static void MinMaxIdx(InputArray src, out double minVal, out double maxVal) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); src.ThrowIfDisposed(); @@ -810,11 +856,11 @@ public static void MinMaxIdx(InputArray src, int[] minIdx, int[] maxIdx) public static void MinMaxIdx(InputArray src, out double minVal, out double maxVal, int[] minIdx, int[] maxIdx, InputArray? mask = null) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (minIdx == null) + if (minIdx is null) throw new ArgumentNullException(nameof(minIdx)); - if (maxIdx == null) + if (maxIdx is null) throw new ArgumentNullException(nameof(maxIdx)); src.ThrowIfDisposed(); @@ -838,9 +884,9 @@ public static void MinMaxIdx(InputArray src, out double minVal, out double maxVa /// the same type as the source matrix, otherwise, its type will be CV_MAKE_TYPE(CV_MAT_DEPTH(dtype), mtx.channels()) public static void Reduce(InputArray src, OutputArray dst, ReduceDimension dim, ReduceTypes rtype, int dtype) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -860,15 +906,15 @@ public static void Reduce(InputArray src, OutputArray dst, ReduceDimension dim, /// public static void Merge(Mat[] mv, Mat dst) { - if (mv == null) + if (mv is null) throw new ArgumentNullException(nameof(mv)); if (mv.Length == 0) - throw new ArgumentException("mv.Length == 0"); - if (dst == null) + throw new ArgumentException("mv is empty", nameof(mv)); + if (dst is null) throw new ArgumentNullException(nameof(dst)); foreach (var m in mv) { - if (m == null) + if (m is null) throw new ArgumentException("mv contains null element"); m.ThrowIfDisposed(); } @@ -897,7 +943,7 @@ public static void Merge(Mat[] mv, Mat dst) /// The arrays themselves will be reallocated if needed public static void Split(Mat src, out Mat[] mv) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); src.ThrowIfDisposed(); @@ -929,18 +975,18 @@ public static Mat[] Split(Mat src) /// public static void MixChannels(Mat[] src, Mat[] dst, int[] fromTo) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); - if (fromTo == null) + if (fromTo is null) throw new ArgumentNullException(nameof(fromTo)); if (src.Length == 0) - throw new ArgumentException("src.Length == 0"); + throw new ArgumentException("Length == 0", nameof(src)); if (dst.Length == 0) - throw new ArgumentException("dst.Length == 0"); + throw new ArgumentException("Length == 0", nameof(dst)); if (fromTo.Length == 0 || fromTo.Length % 2 != 0) - throw new ArgumentException("fromTo.Length == 0"); + throw new ArgumentException("Invalid length", nameof(fromTo)); var srcPtr = new IntPtr[src.Length]; var dstPtr = new IntPtr[dst.Length]; for (var i = 0; i < src.Length; i++) @@ -971,9 +1017,9 @@ public static void MixChannels(Mat[] src, Mat[] dst, int[] fromTo) /// public static void ExtractChannel(InputArray src, OutputArray dst, int coi) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -994,9 +1040,9 @@ public static void ExtractChannel(InputArray src, OutputArray dst, int coi) /// public static void InsertChannel(InputArray src, InputOutputArray dst, int coi) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -1019,9 +1065,9 @@ public static void InsertChannel(InputArray src, InputOutputArray dst, int coi) /// and negative (e.g., -1) means flipping around both axes. See also the discussion below for the formulas. public static void Flip(InputArray src, OutputArray dst, FlipMode flipCode) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -1043,9 +1089,9 @@ public static void Flip(InputArray src, OutputArray dst, FlipMode flipCode) /// an enum to specify how to rotate the array. public static void Rotate(InputArray src, OutputArray dst, RotateFlags rotateCode) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -1066,9 +1112,9 @@ public static void Rotate(InputArray src, OutputArray dst, RotateFlags rotateCod /// The destination array; will have the same type as src public static void Repeat(InputArray src, int ny, int nx, OutputArray dst) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -1090,7 +1136,7 @@ public static void Repeat(InputArray src, int ny, int nx, OutputArray dst) /// public static Mat Repeat(Mat src, int ny, int nx) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); src.ThrowIfDisposed(); @@ -1109,14 +1155,14 @@ public static Mat Repeat(Mat src, int ny, int nx) [SuppressMessage("Maintainability", "CA1508: Avoid dead conditional code")] public static void HConcat(IEnumerable src, OutputArray dst) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); var srcArray = src as Mat[] ?? src.ToArray(); if (srcArray.Length == 0) - throw new ArgumentException("src.Count == 0", nameof(src)); + throw new ArgumentException("src is empty", nameof(src)); var srcPtr = new IntPtr[srcArray.Length]; for (var i = 0; i < srcArray.Length; i++) { @@ -1140,11 +1186,11 @@ public static void HConcat(IEnumerable src, OutputArray dst) /// output array. It has the same number of rows and depth as the src1 and src2, and the sum of cols of the src1 and src2. public static void HConcat(InputArray src1, InputArray src2, OutputArray dst) { - if (src1 == null) + if (src1 is null) throw new ArgumentNullException(nameof(src1)); - if (src2 == null) + if (src2 is null) throw new ArgumentNullException(nameof(src2)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src1.ThrowIfDisposed(); src2.ThrowIfDisposed(); @@ -1167,9 +1213,9 @@ public static void HConcat(InputArray src1, InputArray src2, OutputArray dst) [SuppressMessage("Maintainability", "CA1508: Avoid dead conditional code")] public static void VConcat(IEnumerable src, OutputArray dst) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); var srcArray = src as Mat[] ?? src.ToArray(); @@ -1198,11 +1244,11 @@ public static void VConcat(IEnumerable src, OutputArray dst) /// output array. It has the same number of cols and depth as the src1 and src2, and the sum of rows of the src1 and src2. public static void VConcat(InputArray src1, InputArray src2, OutputArray dst) { - if (src1 == null) + if (src1 is null) throw new ArgumentNullException(nameof(src1)); - if (src2 == null) + if (src2 is null) throw new ArgumentNullException(nameof(src2)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src1.ThrowIfDisposed(); src2.ThrowIfDisposed(); @@ -1226,11 +1272,11 @@ public static void VConcat(InputArray src1, InputArray src2, OutputArray dst) /// optional operation mask, 8-bit single channel array, that specifies elements of the output array to be changed. public static void BitwiseAnd(InputArray src1, InputArray src2, OutputArray dst, InputArray? mask = null) { - if (src1 == null) + if (src1 is null) throw new ArgumentNullException(nameof(src1)); - if (src2 == null) + if (src2 is null) throw new ArgumentNullException(nameof(src2)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src1.ThrowIfDisposed(); src2.ThrowIfDisposed(); @@ -1255,11 +1301,11 @@ public static void BitwiseAnd(InputArray src1, InputArray src2, OutputArray dst, /// optional operation mask, 8-bit single channel array, that specifies elements of the output array to be changed. public static void BitwiseOr(InputArray src1, InputArray src2, OutputArray dst, InputArray? mask = null) { - if (src1 == null) + if (src1 is null) throw new ArgumentNullException(nameof(src1)); - if (src2 == null) + if (src2 is null) throw new ArgumentNullException(nameof(src2)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src1.ThrowIfDisposed(); src2.ThrowIfDisposed(); @@ -1284,11 +1330,11 @@ public static void BitwiseOr(InputArray src1, InputArray src2, OutputArray dst, /// optional operation mask, 8-bit single channel array, that specifies elements of the output array to be changed. public static void BitwiseXor(InputArray src1, InputArray src2, OutputArray dst, InputArray? mask = null) { - if (src1 == null) + if (src1 is null) throw new ArgumentNullException(nameof(src1)); - if (src2 == null) + if (src2 is null) throw new ArgumentNullException(nameof(src2)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src1.ThrowIfDisposed(); src2.ThrowIfDisposed(); @@ -1312,9 +1358,9 @@ public static void BitwiseXor(InputArray src1, InputArray src2, OutputArray dst, /// optional operation mask, 8-bit single channel array, that specifies elements of the output array to be changed. public static void BitwiseNot(InputArray src, OutputArray dst, InputArray? mask = null) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -1336,11 +1382,11 @@ public static void BitwiseNot(InputArray src, OutputArray dst, InputArray? mask /// output array that has the same size and type as input arrays. public static void Absdiff(InputArray src1, InputArray src2, OutputArray dst) { - if (src1 == null) + if (src1 is null) throw new ArgumentNullException(nameof(src1)); - if (src2 == null) + if (src2 is null) throw new ArgumentNullException(nameof(src2)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src1.ThrowIfDisposed(); src2.ThrowIfDisposed(); @@ -1365,9 +1411,9 @@ public static void Absdiff(InputArray src1, InputArray src2, OutputArray dst) /// elements need to be copied.The mask has to be of type CV_8U and can have 1 or multiple channels. public static void CopyTo(InputArray src, OutputArray dst, InputArray? mask = null) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -1390,13 +1436,13 @@ public static void CopyTo(InputArray src, OutputArray dst, InputArray? mask = nu /// output array of the same size as src and CV_8U type. public static void InRange(InputArray src, InputArray lowerb, InputArray upperb, OutputArray dst) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (lowerb == null) + if (lowerb is null) throw new ArgumentNullException(nameof(lowerb)); - if (upperb == null) + if (upperb is null) throw new ArgumentNullException(nameof(upperb)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); lowerb.ThrowIfDisposed(); @@ -1422,9 +1468,9 @@ public static void InRange(InputArray src, InputArray lowerb, InputArray upperb, /// output array of the same size as src and CV_8U type. public static void InRange(InputArray src, Scalar lowerb, Scalar upperb, OutputArray dst) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -1447,11 +1493,11 @@ public static void InRange(InputArray src, Scalar lowerb, Scalar upperb, OutputA // ReSharper disable once IdentifierTypo public static void Compare(InputArray src1, InputArray src2, OutputArray dst, CmpType cmpop) { - if (src1 == null) + if (src1 is null) throw new ArgumentNullException(nameof(src1)); - if (src2 == null) + if (src2 is null) throw new ArgumentNullException(nameof(src2)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src1.ThrowIfDisposed(); src2.ThrowIfDisposed(); @@ -1474,11 +1520,11 @@ public static void Compare(InputArray src1, InputArray src2, OutputArray dst, Cm /// public static void Min(InputArray src1, InputArray src2, OutputArray dst) { - if (src1 == null) + if (src1 is null) throw new ArgumentNullException(nameof(src1)); - if (src2 == null) + if (src2 is null) throw new ArgumentNullException(nameof(src2)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src1.ThrowIfDisposed(); src2.ThrowIfDisposed(); @@ -1501,11 +1547,11 @@ public static void Min(InputArray src1, InputArray src2, OutputArray dst) /// public static void Min(Mat src1, Mat src2, Mat dst) { - if (src1 == null) + if (src1 is null) throw new ArgumentNullException(nameof(src1)); - if (src2 == null) + if (src2 is null) throw new ArgumentNullException(nameof(src2)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src1.ThrowIfDisposed(); src2.ThrowIfDisposed(); @@ -1527,9 +1573,9 @@ public static void Min(Mat src1, Mat src2, Mat dst) /// public static void Min(Mat src1, double src2, Mat dst) { - if (src1 == null) + if (src1 is null) throw new ArgumentNullException(nameof(src1)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src1.ThrowIfDisposed(); dst.ThrowIfDisposed(); @@ -1549,11 +1595,11 @@ public static void Min(Mat src1, double src2, Mat dst) /// public static void Max(InputArray src1, InputArray src2, OutputArray dst) { - if (src1 == null) + if (src1 is null) throw new ArgumentNullException(nameof(src1)); - if (src2 == null) + if (src2 is null) throw new ArgumentNullException(nameof(src2)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src1.ThrowIfDisposed(); src2.ThrowIfDisposed(); @@ -1576,11 +1622,11 @@ public static void Max(InputArray src1, InputArray src2, OutputArray dst) /// public static void Max(Mat src1, Mat src2, Mat dst) { - if (src1 == null) + if (src1 is null) throw new ArgumentNullException(nameof(src1)); - if (src2 == null) + if (src2 is null) throw new ArgumentNullException(nameof(src2)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src1.ThrowIfDisposed(); src2.ThrowIfDisposed(); @@ -1602,9 +1648,9 @@ public static void Max(Mat src1, Mat src2, Mat dst) /// public static void Max(Mat src1, double src2, Mat dst) { - if (src1 == null) + if (src1 is null) throw new ArgumentNullException(nameof(src1)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src1.ThrowIfDisposed(); dst.ThrowIfDisposed(); @@ -1623,9 +1669,9 @@ public static void Max(Mat src1, double src2, Mat dst) /// The destination array; will have the same size and the same type as src public static void Sqrt(InputArray src, OutputArray dst) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -1646,9 +1692,9 @@ public static void Sqrt(InputArray src, OutputArray dst) /// The destination array; will have the same size and the same type as src public static void Pow(InputArray src, double power, OutputArray dst) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -1668,9 +1714,9 @@ public static void Pow(InputArray src, double power, OutputArray dst) /// The destination array; will have the same size and same type as src public static void Exp(InputArray src, OutputArray dst) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -1690,9 +1736,9 @@ public static void Exp(InputArray src, OutputArray dst) /// The destination array; will have the same size and same type as src public static void Log(InputArray src, OutputArray dst) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -1719,13 +1765,13 @@ public static void Log(InputArray src, OutputArray dst) public static void PolarToCart(InputArray magnitude, InputArray angle, OutputArray x, OutputArray y, bool angleInDegrees = false) { - if (magnitude == null) + if (magnitude is null) throw new ArgumentNullException(nameof(magnitude)); - if (angle == null) + if (angle is null) throw new ArgumentNullException(nameof(angle)); - if (x == null) + if (x is null) throw new ArgumentNullException(nameof(x)); - if (y == null) + if (y is null) throw new ArgumentNullException(nameof(y)); magnitude.ThrowIfDisposed(); angle.ThrowIfDisposed(); @@ -1755,13 +1801,13 @@ public static void PolarToCart(InputArray magnitude, InputArray angle, public static void CartToPolar(InputArray x, InputArray y, OutputArray magnitude, OutputArray angle, bool angleInDegrees = false) { - if (x == null) + if (x is null) throw new ArgumentNullException(nameof(x)); - if (y == null) + if (y is null) throw new ArgumentNullException(nameof(y)); - if (magnitude == null) + if (magnitude is null) throw new ArgumentNullException(nameof(magnitude)); - if (angle == null) + if (angle is null) throw new ArgumentNullException(nameof(angle)); x.ThrowIfDisposed(); y.ThrowIfDisposed(); @@ -1788,11 +1834,11 @@ public static void CartToPolar(InputArray x, InputArray y, /// when true, the function calculates the angle in degrees, otherwise, they are measured in radians. public static void Phase(InputArray x, InputArray y, OutputArray angle, bool angleInDegrees = false) { - if (x == null) + if (x is null) throw new ArgumentNullException(nameof(x)); - if (y == null) + if (y is null) throw new ArgumentNullException(nameof(y)); - if (angle == null) + if (angle is null) throw new ArgumentNullException(nameof(angle)); x.ThrowIfDisposed(); y.ThrowIfDisposed(); @@ -1815,11 +1861,11 @@ public static void Phase(InputArray x, InputArray y, OutputArray angle, bool ang /// output array of the same size and type as x. public static void Magnitude(InputArray x, InputArray y, OutputArray magnitude) { - if (x == null) + if (x is null) throw new ArgumentNullException(nameof(x)); - if (y == null) + if (y is null) throw new ArgumentNullException(nameof(y)); - if (magnitude == null) + if (magnitude is null) throw new ArgumentNullException(nameof(magnitude)); x.ThrowIfDisposed(); y.ThrowIfDisposed(); @@ -1862,7 +1908,7 @@ public static bool CheckRange(InputArray src, bool quiet = true) public static bool CheckRange(InputArray src, bool quiet, out Point pos, double minVal = double.MinValue, double maxVal = double.MaxValue) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); src.ThrowIfDisposed(); @@ -1879,7 +1925,7 @@ public static bool CheckRange(InputArray src, bool quiet, out Point pos, /// public static void PatchNaNs(InputOutputArray a, double val = 0) { - if (a == null) + if (a is null) throw new ArgumentNullException(nameof(a)); a.ThrowIfNotReady(); @@ -1903,13 +1949,13 @@ public static void PatchNaNs(InputOutputArray a, double val = 0) public static void Gemm(InputArray src1, InputArray src2, double alpha, InputArray src3, double gamma, OutputArray dst, GemmFlags flags = GemmFlags.None) { - if (src1 == null) + if (src1 is null) throw new ArgumentNullException(nameof(src1)); - if (src2 == null) + if (src2 is null) throw new ArgumentNullException(nameof(src2)); - if (src3 == null) + if (src3 is null) throw new ArgumentNullException(nameof(src3)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src1.ThrowIfDisposed(); src2.ThrowIfDisposed(); @@ -1945,9 +1991,9 @@ public static void Gemm(InputArray src1, InputArray src2, double alpha, public static void MulTransposed(InputArray src, OutputArray dst, bool aTa, InputArray? delta = null, double scale = 1, int dtype = -1) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -1968,9 +2014,9 @@ public static void MulTransposed(InputArray src, OutputArray dst, bool aTa, /// The destination array of the same type as src public static void Transpose(InputArray src, OutputArray dst) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -1992,11 +2038,11 @@ public static void Transpose(InputArray src, OutputArray dst) /// The transformation matrix public static void Transform(InputArray src, OutputArray dst, InputArray m) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -2020,11 +2066,11 @@ public static void Transform(InputArray src, OutputArray dst, InputArray m) /// 3x3 or 4x4 transformation matrix public static void PerspectiveTransform(InputArray src, OutputArray dst, InputArray m) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -2048,9 +2094,9 @@ public static void PerspectiveTransform(InputArray src, OutputArray dst, InputAr /// The destination array; it will have the same size and same type as src public static Point2f[] PerspectiveTransform(IEnumerable src, Mat m) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); using var srcMat = Mat.FromArray(src); @@ -2072,9 +2118,9 @@ public static Point2f[] PerspectiveTransform(IEnumerable src, Mat m) /// The destination array; it will have the same size and same type as src public static Point2d[] PerspectiveTransform(IEnumerable src, Mat m) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); using var srcMat = Mat.FromArray(src); @@ -2096,9 +2142,9 @@ public static Point2d[] PerspectiveTransform(IEnumerable src, Mat m) /// The destination array; it will have the same size and same type as src public static Point3f[] PerspectiveTransform(IEnumerable src, Mat m) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); using var srcMat = Mat.FromArray(src); @@ -2120,9 +2166,9 @@ public static Point3f[] PerspectiveTransform(IEnumerable src, Mat m) /// The destination array; it will have the same size and same type as src public static Point3d[] PerspectiveTransform(IEnumerable src, Mat m) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); using var srcMat = Mat.FromArray(src); @@ -2144,7 +2190,7 @@ public static Point3d[] PerspectiveTransform(IEnumerable src, Mat m) // ReSharper disable once IdentifierTypo public static void CompleteSymm(InputOutputArray mtx, bool lowerToUpper = false) { - if (mtx == null) + if (mtx is null) throw new ArgumentNullException(nameof(mtx)); mtx.ThrowIfNotReady(); @@ -2162,7 +2208,7 @@ public static void CompleteSymm(InputOutputArray mtx, bool lowerToUpper = false) /// The value to assign to the diagonal elements public static void SetIdentity(InputOutputArray mtx, Scalar? s = null) { - if (mtx == null) + if (mtx is null) throw new ArgumentNullException(nameof(mtx)); mtx.ThrowIfNotReady(); @@ -2181,7 +2227,7 @@ public static void SetIdentity(InputOutputArray mtx, Scalar? s = null) /// determinant of the specified matrix. public static double Determinant(InputArray mtx) { - if (mtx == null) + if (mtx is null) throw new ArgumentNullException(nameof(mtx)); mtx.ThrowIfDisposed(); @@ -2199,7 +2245,7 @@ public static double Determinant(InputArray mtx) /// public static Scalar Trace(InputArray mtx) { - if (mtx == null) + if (mtx is null) throw new ArgumentNullException(nameof(mtx)); mtx.ThrowIfDisposed(); @@ -2220,9 +2266,9 @@ public static Scalar Trace(InputArray mtx) public static double Invert(InputArray src, OutputArray dst, DecompTypes flags = DecompTypes.LU) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -2247,11 +2293,11 @@ public static double Invert(InputArray src, OutputArray dst, public static bool Solve(InputArray src1, InputArray src2, OutputArray dst, DecompTypes flags = DecompTypes.LU) { - if (src1 == null) + if (src1 is null) throw new ArgumentNullException(nameof(src1)); - if (src2 == null) + if (src2 is null) throw new ArgumentNullException(nameof(src2)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src1.ThrowIfDisposed(); src2.ThrowIfDisposed(); @@ -2282,11 +2328,11 @@ public static bool Solve(InputArray src1, InputArray src2, OutputArray dst, // ReSharper disable once IdentifierTypo public static SolveLPResult SolveLP(InputArray func, InputArray constr, OutputArray z) { - if (func == null) + if (func is null) throw new ArgumentNullException(nameof(func)); - if (constr == null) + if (constr is null) throw new ArgumentNullException(nameof(constr)); - if (z == null) + if (z is null) throw new ArgumentNullException(nameof(z)); func.ThrowIfDisposed(); constr.ThrowIfDisposed(); @@ -2309,9 +2355,9 @@ public static SolveLPResult SolveLP(InputArray func, InputArray constr, OutputAr /// The operation flags, a combination of the SortFlag values public static void Sort(InputArray src, OutputArray dst, SortFlags flags) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -2332,9 +2378,9 @@ public static void Sort(InputArray src, OutputArray dst, SortFlags flags) /// The operation flags, a combination of SortFlag values public static void SortIdx(InputArray src, OutputArray dst, SortFlags flags) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -2355,9 +2401,9 @@ public static void SortIdx(InputArray src, OutputArray dst, SortFlags flags) /// public static int SolveCubic(InputArray coeffs, OutputArray roots) { - if (coeffs == null) + if (coeffs is null) throw new ArgumentNullException(nameof(coeffs)); - if (roots == null) + if (roots is null) throw new ArgumentNullException(nameof(roots)); coeffs.ThrowIfDisposed(); roots.ThrowIfNotReady(); @@ -2380,9 +2426,9 @@ public static int SolveCubic(InputArray coeffs, OutputArray roots) /// public static double SolvePoly(InputArray coeffs, OutputArray roots, int maxIters = 300) { - if (coeffs == null) + if (coeffs is null) throw new ArgumentNullException(nameof(coeffs)); - if (roots == null) + if (roots is null) throw new ArgumentNullException(nameof(roots)); coeffs.ThrowIfDisposed(); roots.ThrowIfNotReady(); @@ -2409,11 +2455,11 @@ public static double SolvePoly(InputArray coeffs, OutputArray roots, int maxIter /// public static bool Eigen(InputArray src, OutputArray eigenvalues, OutputArray eigenvectors) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (eigenvalues == null) + if (eigenvalues is null) throw new ArgumentNullException(nameof(eigenvalues)); - if (eigenvectors == null) + if (eigenvectors is null) throw new ArgumentNullException(nameof(eigenvectors)); src.ThrowIfDisposed(); eigenvalues.ThrowIfNotReady(); @@ -2438,11 +2484,11 @@ public static bool Eigen(InputArray src, OutputArray eigenvalues, OutputArray ei /// output matrix of eigenvectors (type is the same type as src). The eigenvectors are stored as subsequent matrix rows, in the same order as the corresponding eigenvalues. public static void EigenNonSymmetric(InputArray src, OutputArray eigenvalues, OutputArray eigenvectors) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (eigenvalues == null) + if (eigenvalues is null) throw new ArgumentNullException(nameof(eigenvalues)); - if (eigenvectors == null) + if (eigenvectors is null) throw new ArgumentNullException(nameof(eigenvectors)); src.ThrowIfDisposed(); eigenvalues.ThrowIfNotReady(); @@ -2471,11 +2517,11 @@ public static void CalcCovarMatrix( Mat[] samples, Mat covar, Mat mean, CovarFlags flags, MatType? ctype = null) { - if (samples == null) + if (samples is null) throw new ArgumentNullException(nameof(samples)); - if (covar == null) + if (covar is null) throw new ArgumentNullException(nameof(covar)); - if (mean == null) + if (mean is null) throw new ArgumentNullException(nameof(mean)); covar.ThrowIfDisposed(); mean.ThrowIfDisposed(); @@ -2483,7 +2529,7 @@ public static void CalcCovarMatrix( var ctypeValue = ctype.GetValueOrDefault(MatType.CV_64F); NativeMethods.HandleException( - NativeMethods.core_calcCovarMatrix_Mat(samplesPtr, samples.Length, covar.CvPtr, mean.CvPtr, (int) flags, ctypeValue)); + NativeMethods.core_calcCovarMatrix_Mat(samplesPtr, samples.Length, covar.CvPtr, mean.CvPtr, (int) flags, ctypeValue.Value)); GC.KeepAlive(samples); GC.KeepAlive(covar); @@ -2502,11 +2548,11 @@ public static void CalcCovarMatrix( InputArray samples, OutputArray covar, InputOutputArray mean, CovarFlags flags, MatType? ctype = null) { - if (samples == null) + if (samples is null) throw new ArgumentNullException(nameof(samples)); - if (covar == null) + if (covar is null) throw new ArgumentNullException(nameof(covar)); - if (mean == null) + if (mean is null) throw new ArgumentNullException(nameof(mean)); samples.ThrowIfDisposed(); covar.ThrowIfNotReady(); @@ -2514,7 +2560,7 @@ public static void CalcCovarMatrix( var ctypeValue = ctype.GetValueOrDefault(MatType.CV_64F); NativeMethods.HandleException( - NativeMethods.core_calcCovarMatrix_InputArray(samples.CvPtr, covar.CvPtr, mean.CvPtr, (int) flags, ctypeValue)); + NativeMethods.core_calcCovarMatrix_InputArray(samples.CvPtr, covar.CvPtr, mean.CvPtr, (int) flags, ctypeValue.Value)); GC.KeepAlive(samples); GC.KeepAlive(covar); @@ -2535,11 +2581,11 @@ public static void PCACompute( InputArray data, InputOutputArray mean, OutputArray eigenvectors, int maxComponents = 0) { - if (data == null) + if (data is null) throw new ArgumentNullException(nameof(data)); - if (mean == null) + if (mean is null) throw new ArgumentNullException(nameof(mean)); - if (eigenvectors == null) + if (eigenvectors is null) throw new ArgumentNullException(nameof(eigenvectors)); data.ThrowIfDisposed(); mean.ThrowIfNotReady(); @@ -2566,13 +2612,13 @@ public static void PCACompute( InputArray data, InputOutputArray mean, OutputArray eigenvectors, OutputArray eigenvalues, int maxComponents = 0) { - if (data == null) + if (data is null) throw new ArgumentNullException(nameof(data)); - if (mean == null) + if (mean is null) throw new ArgumentNullException(nameof(mean)); - if (eigenvectors == null) + if (eigenvectors is null) throw new ArgumentNullException(nameof(eigenvectors)); - if (eigenvalues == null) + if (eigenvalues is null) throw new ArgumentNullException(nameof(eigenvalues)); data.ThrowIfDisposed(); mean.ThrowIfNotReady(); @@ -2600,11 +2646,11 @@ public static void PCAComputeVar( InputArray data, InputOutputArray mean, OutputArray eigenvectors, double retainedVariance) { - if (data == null) + if (data is null) throw new ArgumentNullException(nameof(data)); - if (mean == null) + if (mean is null) throw new ArgumentNullException(nameof(mean)); - if (eigenvectors == null) + if (eigenvectors is null) throw new ArgumentNullException(nameof(eigenvectors)); data.ThrowIfDisposed(); mean.ThrowIfNotReady(); @@ -2633,13 +2679,13 @@ public static void PCAComputeVar( InputArray data, InputOutputArray mean, OutputArray eigenvectors, OutputArray eigenvalues, double retainedVariance) { - if (data == null) + if (data is null) throw new ArgumentNullException(nameof(data)); - if (mean == null) + if (mean is null) throw new ArgumentNullException(nameof(mean)); - if (eigenvectors == null) + if (eigenvectors is null) throw new ArgumentNullException(nameof(eigenvectors)); - if (eigenvalues == null) + if (eigenvalues is null) throw new ArgumentNullException(nameof(eigenvalues)); data.ThrowIfDisposed(); mean.ThrowIfNotReady(); @@ -2665,13 +2711,13 @@ public static void PCAComputeVar( public static void PCAProject(InputArray data, InputArray mean, InputArray eigenvectors, OutputArray result) { - if (data == null) + if (data is null) throw new ArgumentNullException(nameof(data)); - if (mean == null) + if (mean is null) throw new ArgumentNullException(nameof(mean)); - if (eigenvectors == null) + if (eigenvectors is null) throw new ArgumentNullException(nameof(eigenvectors)); - if (result == null) + if (result is null) throw new ArgumentNullException(nameof(result)); data.ThrowIfDisposed(); mean.ThrowIfDisposed(); @@ -2698,13 +2744,13 @@ public static void PCAProject(InputArray data, InputArray mean, public static void PCABackProject(InputArray data, InputArray mean, InputArray eigenvectors, OutputArray result) { - if (data == null) + if (data is null) throw new ArgumentNullException(nameof(data)); - if (mean == null) + if (mean is null) throw new ArgumentNullException(nameof(mean)); - if (eigenvectors == null) + if (eigenvectors is null) throw new ArgumentNullException(nameof(eigenvectors)); - if (result == null) + if (result is null) throw new ArgumentNullException(nameof(result)); data.ThrowIfDisposed(); mean.ThrowIfDisposed(); @@ -2735,13 +2781,13 @@ public static void SVDecomp( InputArray src, OutputArray w, OutputArray u, OutputArray vt, SVD.Flags flags = SVD.Flags.None) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (w == null) + if (w is null) throw new ArgumentNullException(nameof(w)); - if (u == null) + if (u is null) throw new ArgumentNullException(nameof(u)); - if (vt == null) + if (vt is null) throw new ArgumentNullException(nameof(vt)); src.ThrowIfDisposed(); w.ThrowIfNotReady(); @@ -2773,15 +2819,15 @@ public static void SVBackSubst( InputArray w, InputArray u, InputArray vt, InputArray rhs, OutputArray dst) { - if (w == null) + if (w is null) throw new ArgumentNullException(nameof(w)); - if (u == null) + if (u is null) throw new ArgumentNullException(nameof(u)); - if (vt == null) + if (vt is null) throw new ArgumentNullException(nameof(vt)); - if (rhs == null) + if (rhs is null) throw new ArgumentNullException(nameof(rhs)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); w.ThrowIfDisposed(); u.ThrowIfDisposed(); @@ -2809,11 +2855,11 @@ public static void SVBackSubst( /// public static double Mahalanobis(InputArray v1, InputArray v2, InputArray icovar) { - if (v1 == null) + if (v1 is null) throw new ArgumentNullException(nameof(v1)); - if (v2 == null) + if (v2 is null) throw new ArgumentNullException(nameof(v2)); - if (icovar == null) + if (icovar is null) throw new ArgumentNullException(nameof(icovar)); v1.ThrowIfDisposed(); v2.ThrowIfDisposed(); @@ -2842,9 +2888,9 @@ public static double Mahalanobis(InputArray v1, InputArray v2, InputArray icovar /// or convolution using DFT public static void Dft(InputArray src, OutputArray dst, DftFlags flags = DftFlags.None, int nonzeroRows = 0) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -2871,9 +2917,9 @@ public static void Dft(InputArray src, OutputArray dst, DftFlags flags = DftFlag /// or convolution using DFT public static void Idft(InputArray src, OutputArray dst, DftFlags flags = DftFlags.None, int nonzeroRows = 0) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -2894,9 +2940,9 @@ public static void Idft(InputArray src, OutputArray dst, DftFlags flags = DftFla /// Transformation flags, a combination of DctFlag2 values public static void Dct(InputArray src, OutputArray dst, DctFlags flags = DctFlags.None) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -2917,9 +2963,9 @@ public static void Dct(InputArray src, OutputArray dst, DctFlags flags = DctFlag /// Transformation flags, a combination of DctFlag2 values public static void Idct(InputArray src, OutputArray dst, DctFlags flags = DctFlags.None) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -2945,11 +2991,11 @@ public static void MulSpectrums( InputArray a, InputArray b, OutputArray c, DftFlags flags, bool conjB = false) { - if (a == null) + if (a is null) throw new ArgumentNullException(nameof(a)); - if (b == null) + if (b is null) throw new ArgumentNullException(nameof(b)); - if (c == null) + if (c is null) throw new ArgumentNullException(nameof(c)); a.ThrowIfDisposed(); b.ThrowIfDisposed(); @@ -3008,11 +3054,11 @@ public static RNG SetTheRNG(ulong state) /// The exclusive upper boundary of the generated random numbers public static void Randu(InputOutputArray dst, InputArray low, InputArray high) { - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); - if (low == null) + if (low is null) throw new ArgumentNullException(nameof(low)); - if (high == null) + if (high is null) throw new ArgumentNullException(nameof(high)); dst.ThrowIfNotReady(); low.ThrowIfDisposed(); @@ -3037,7 +3083,7 @@ public static void Randu(InputOutputArray dst, InputArray low, InputArray high) // ReSharper disable once IdentifierTypo public static void Randu(InputOutputArray dst, Scalar low, Scalar high) { - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); dst.ThrowIfNotReady(); @@ -3058,11 +3104,11 @@ public static void Randu(InputOutputArray dst, Scalar low, Scalar high) // ReSharper disable once IdentifierTypo public static void Randn(InputOutputArray dst, InputArray mean, InputArray stddev) { - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); - if (mean == null) + if (mean is null) throw new ArgumentNullException(nameof(mean)); - if (stddev == null) + if (stddev is null) throw new ArgumentNullException(nameof(stddev)); dst.ThrowIfNotReady(); mean.ThrowIfDisposed(); @@ -3086,7 +3132,7 @@ public static void Randn(InputOutputArray dst, InputArray mean, InputArray stdde /// The standard deviation of the generated random numbers public static void Randn(InputOutputArray dst, Scalar mean, Scalar stddev) { - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); dst.ThrowIfNotReady(); @@ -3105,7 +3151,7 @@ public static void Randn(InputOutputArray dst, Scalar mean, Scalar stddev) // ReSharper disable once IdentifierTypo public static void RandShuffle(InputOutputArray dst, double iterFactor) { - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); dst.ThrowIfNotReady(); @@ -3126,7 +3172,7 @@ public static void RandShuffle(InputOutputArray dst, double iterFactor) // ReSharper disable once IdentifierTypo public static void RandShuffle(InputOutputArray dst, double iterFactor, ref RNG rng) { - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); dst.ThrowIfNotReady(); @@ -3161,9 +3207,9 @@ public static void RandShuffle(InputOutputArray dst, double iterFactor, ref RNG public static double Kmeans(InputArray data, int k, InputOutputArray bestLabels, TermCriteria criteria, int attempts, KMeansFlags flags, OutputArray? centers = null) { - if (data == null) + if (data is null) throw new ArgumentNullException(nameof(data)); - if (bestLabels == null) + if (bestLabels is null) throw new ArgumentNullException(nameof(bestLabels)); data.ThrowIfDisposed(); bestLabels.ThrowIfDisposed(); @@ -3213,23 +3259,6 @@ public static float CubeRoot(float val) #endregion #region utility.hpp - - /// - /// - /// - /// - /// - /// - public static string?[] Glob(string pattern, bool recursive = false) - { - if (pattern == null) - throw new ArgumentNullException(nameof(pattern)); - - using var resultVec = new VectorOfString(); - NativeMethods.HandleException( - NativeMethods.core_glob(pattern, resultVec.CvPtr, recursive ? 1 : 0)); - return resultVec.ToArray(); - } /// /// OpenCV will try to set the number of threads for the next parallel region. @@ -3319,7 +3348,7 @@ public static string GetBuildInformation() unsafe { - byte* buffer = stackalloc byte[bufferSize]; + var buffer = stackalloc byte[bufferSize]; NativeMethods.HandleException( NativeMethods.core_getVersionString(buffer, bufferSize)); var result = System.Runtime.InteropServices.Marshal.PtrToStringAnsi((IntPtr)buffer); @@ -3461,7 +3490,7 @@ public static string GetCpuFeaturesLine() public static int GetNumberOfCpus() { NativeMethods.HandleException( - NativeMethods.core_getNumberOfCPUs(out int ret)); + NativeMethods.core_getNumberOfCPUs(out var ret)); return ret; } @@ -3546,7 +3575,7 @@ public static bool SetBreakOnError(bool flag) /// public static string Format(InputArray mtx, FormatType format = FormatType.Default) { - if (mtx == null) + if (mtx is null) throw new ArgumentNullException(nameof(mtx)); using var buf = new StdString(); @@ -3558,6 +3587,35 @@ public static string Format(InputArray mtx, FormatType format = FormatType.Defau #endregion + #region logger.hpp + + /// + /// Set global logging level + /// + /// logging level + /// previous logging level + public static LogLevel SetLogLevel(LogLevel logLevel) + { + NativeMethods.HandleException( + NativeMethods.core_logger_setLogLevel(logLevel, out var previous)); + + return previous; + } + + /// + /// Get global logging level + /// + /// logging level + public static LogLevel GetLogLevel() + { + NativeMethods.HandleException( + NativeMethods.core_logger_getLogLevel(out var logLevel)); + + return logLevel; + } + + #endregion + /// /// Computes absolute value of each matrix element /// @@ -3565,7 +3623,7 @@ public static string Format(InputArray mtx, FormatType format = FormatType.Defau /// public static MatExpr Abs(Mat src) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); src.ThrowIfDisposed(); NativeMethods.HandleException( @@ -3581,7 +3639,7 @@ public static MatExpr Abs(Mat src) /// public static MatExpr Abs(MatExpr src) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); src.ThrowIfDisposed(); NativeMethods.HandleException( @@ -3613,9 +3671,9 @@ public static MatExpr Abs(MatExpr src) [SuppressMessage("Maintainability", "CA1508: Avoid dead conditional code")] public static int Partition(IEnumerable vec, out int[] labels, PartitionPredicate predicate) { - if (vec == null) + if (vec is null) throw new ArgumentNullException(nameof(vec)); - if (predicate == null) + if (predicate is null) throw new ArgumentNullException(nameof(predicate)); var vecArray = vec as T[] ?? vec.ToArray(); diff --git a/src/OpenCvSharp/Cv2/Cv2_cuda.cs b/src/OpenCvSharp/Cv2/Cv2_cuda.cs index 88acf49a0..1cd3ae899 100644 --- a/src/OpenCvSharp/Cv2/Cv2_cuda.cs +++ b/src/OpenCvSharp/Cv2/Cv2_cuda.cs @@ -83,7 +83,7 @@ public static void PrintShortCudaDeviceInfo(int device) public static void RegisterPageLocked(Mat m) { ThrowIfGpuNotAvailable(); - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); NativeMethods.cuda_registerPageLocked(m.CvPtr); GC.KeepAlive(m); @@ -96,7 +96,7 @@ public static void RegisterPageLocked(Mat m) public static void UnregisterPageLocked(Mat m) { ThrowIfGpuNotAvailable(); - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); NativeMethods.cuda_unregisterPageLocked(m.CvPtr); GC.KeepAlive(m); @@ -116,7 +116,7 @@ public static void UnregisterPageLocked(Mat m) public static void CreateContinuous(int rows, int cols, MatType type, GpuMat m) { ThrowIfGpuNotAvailable(); - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); NativeMethods.cuda_createContinuous1(rows, cols, type, m.CvPtr); GC.KeepAlive(m); @@ -171,7 +171,7 @@ public static GpuMat CreateContinuous(Size size, MatType type) public static void EnsureSizeIsEnough(int rows, int cols, MatType type, GpuMat m) { ThrowIfGpuNotAvailable(); - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); NativeMethods.cuda_ensureSizeIsEnough(rows, cols, type, m.CvPtr); GC.KeepAlive(m); diff --git a/src/OpenCvSharp/Cv2/Cv2_features2d.cs b/src/OpenCvSharp/Cv2/Cv2_features2d.cs index ee2db437f..87830d802 100644 --- a/src/OpenCvSharp/Cv2/Cv2_features2d.cs +++ b/src/OpenCvSharp/Cv2/Cv2_features2d.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; using OpenCvSharp.Internal.Util; using OpenCvSharp.Internal.Vectors; @@ -23,7 +20,7 @@ static partial class Cv2 /// keypoints detected on the image. public static KeyPoint[] FAST(InputArray image, int threshold, bool nonmaxSupression = true) { - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); image.ThrowIfDisposed(); @@ -46,7 +43,7 @@ public static KeyPoint[] FAST(InputArray image, int threshold, bool nonmaxSupres /// keypoints detected on the image. public static KeyPoint[] FAST(InputArray image, int threshold, bool nonmaxSupression, FASTType type) { - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); image.ThrowIfDisposed(); @@ -69,7 +66,7 @@ public static KeyPoint[] FAST(InputArray image, int threshold, bool nonmaxSupres /// keypoints detected on the image. public static KeyPoint[] AGAST(InputArray image, int threshold, bool nonmaxSuppression, AgastFeatureDetector.DetectorType type) { - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); image.ThrowIfDisposed(); @@ -95,11 +92,11 @@ public static void DrawKeypoints( Scalar? color = null, DrawMatchesFlags flags = DrawMatchesFlags.Default) { - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); - if (outImage == null) + if (outImage is null) throw new ArgumentNullException(nameof(outImage)); - if (keypoints == null) + if (keypoints is null) throw new ArgumentNullException(nameof(keypoints)); image.ThrowIfDisposed(); outImage.ThrowIfDisposed(); @@ -142,17 +139,17 @@ public static void DrawMatches( IEnumerable? matchesMask = null, DrawMatchesFlags flags = DrawMatchesFlags.Default) { - if (img1 == null) + if (img1 is null) throw new ArgumentNullException(nameof(img1)); - if (img2 == null) + if (img2 is null) throw new ArgumentNullException(nameof(img2)); - if (outImg == null) + if (outImg is null) throw new ArgumentNullException(nameof(outImg)); - if (keypoints1 == null) + if (keypoints1 is null) throw new ArgumentNullException(nameof(keypoints1)); - if (keypoints2 == null) + if (keypoints2 is null) throw new ArgumentNullException(nameof(keypoints2)); - if (matches1To2 == null) + if (matches1To2 is null) throw new ArgumentNullException(nameof(matches1To2)); img1.ThrowIfDisposed(); img2.ThrowIfDisposed(); @@ -208,17 +205,17 @@ public static void DrawMatchesKnn( IEnumerable>? matchesMask = null, DrawMatchesFlags flags = DrawMatchesFlags.Default) { - if (img1 == null) + if (img1 is null) throw new ArgumentNullException(nameof(img1)); - if (img2 == null) + if (img2 is null) throw new ArgumentNullException(nameof(img2)); - if (outImg == null) + if (outImg is null) throw new ArgumentNullException(nameof(outImg)); - if (keypoints1 == null) + if (keypoints1 is null) throw new ArgumentNullException(nameof(keypoints1)); - if (keypoints2 == null) + if (keypoints2 is null) throw new ArgumentNullException(nameof(keypoints2)); - if (matches1To2 == null) + if (matches1To2 is null) throw new ArgumentNullException(nameof(matches1To2)); img1.ThrowIfDisposed(); img2.ThrowIfDisposed(); @@ -233,7 +230,7 @@ public static void DrawMatchesKnn( var singlePointColor0 = singlePointColor.GetValueOrDefault(Scalar.All(-1)); using var matches1To2Ptr = new ArrayAddress2(matches1To2Array); - if (matchesMask == null) + if (matchesMask is null) { NativeMethods.HandleException( NativeMethods.features2d_drawMatchesKnn( @@ -277,15 +274,15 @@ public static void EvaluateFeatureDetector( ref KeyPoint[] keypoints1, ref KeyPoint[] keypoints2, out float repeatability, out int correspCount) { - if (img1 == null) + if (img1 is null) throw new ArgumentNullException(nameof(img1)); - if (img2 == null) + if (img2 is null) throw new ArgumentNullException(nameof(img2)); - if (H1to2 == null) + if (H1to2 is null) throw new ArgumentNullException(nameof(H1to2)); - if (keypoints1 == null) + if (keypoints1 is null) throw new ArgumentNullException(nameof(keypoints1)); - if (keypoints2 == null) + if (keypoints2 is null) throw new ArgumentNullException(nameof(keypoints2)); using var keypoints1Vec = new VectorOfKeyPoint(keypoints1); @@ -311,9 +308,9 @@ public static void EvaluateFeatureDetector( public static Point2f[] ComputeRecallPrecisionCurve( DMatch[][] matches1to2, byte[][] correctMatches1to2Mask) { - if (matches1to2 == null) + if (matches1to2 is null) throw new ArgumentNullException(nameof(matches1to2)); - if (correctMatches1to2Mask == null) + if (correctMatches1to2Mask is null) throw new ArgumentNullException(nameof(correctMatches1to2Mask)); using var dm = new ArrayAddress2(matches1to2); @@ -336,7 +333,7 @@ public static Point2f[] ComputeRecallPrecisionCurve( public static float GetRecall( IEnumerable recallPrecisionCurve, float lPrecision) { - if (recallPrecisionCurve == null) + if (recallPrecisionCurve is null) throw new ArgumentNullException(nameof(recallPrecisionCurve)); var recallPrecisionCurveArray = recallPrecisionCurve.CastOrToArray(); @@ -355,7 +352,7 @@ public static float GetRecall( public static int GetNearestPoint( IEnumerable recallPrecisionCurve, float lPrecision) { - if (recallPrecisionCurve == null) + if (recallPrecisionCurve is null) throw new ArgumentNullException(nameof(recallPrecisionCurve)); var recallPrecisionCurveArray = recallPrecisionCurve.CastOrToArray(); diff --git a/src/OpenCvSharp/Cv2/Cv2_highgui.cs b/src/OpenCvSharp/Cv2/Cv2_highgui.cs index d14b64cc3..0b8133af1 100644 --- a/src/OpenCvSharp/Cv2/Cv2_highgui.cs +++ b/src/OpenCvSharp/Cv2/Cv2_highgui.cs @@ -1,4 +1,3 @@ -using System; using OpenCvSharp.Internal; using OpenCvSharp.Internal.Vectors; @@ -93,7 +92,7 @@ public static void ImShow(string winName, Mat mat) { if (string.IsNullOrEmpty(winName)) throw new ArgumentException("null or empty string.", nameof(winName)); - if (mat == null) + if (mat is null) throw new ArgumentNullException(nameof(mat)); NativeMethods.HandleException( @@ -214,7 +213,7 @@ public static void SetMouseCallback(string windowName, MouseCallback onMouse, In { if (string.IsNullOrEmpty(windowName)) throw new ArgumentNullException(nameof(windowName)); - if (onMouse == null) + if (onMouse is null) throw new ArgumentNullException(nameof(onMouse)); NativeMethods.HandleException( @@ -258,7 +257,7 @@ public static Rect SelectROI(string windowName, InputArray img, bool showCrossha { if (string.IsNullOrEmpty(windowName)) throw new ArgumentNullException(nameof(windowName)); - if (img == null) + if (img is null) throw new ArgumentNullException(nameof(img)); img.ThrowIfDisposed(); @@ -282,7 +281,7 @@ public static Rect SelectROI(string windowName, InputArray img, bool showCrossha // ReSharper disable once InconsistentNaming public static Rect SelectROI(InputArray img, bool showCrosshair = true, bool fromCenter = false) { - if (img == null) + if (img is null) throw new ArgumentNullException(nameof(img)); img.ThrowIfDisposed(); @@ -310,7 +309,7 @@ public static Rect[] SelectROIs(string windowName, InputArray img, bool showCro { if (string.IsNullOrEmpty(windowName)) throw new ArgumentNullException(nameof(windowName)); - if (img == null) + if (img is null) throw new ArgumentNullException(nameof(img)); img.ThrowIfDisposed(); @@ -343,9 +342,9 @@ public static Rect[] SelectROIs(string windowName, InputArray img, bool showCro public static int CreateTrackbar(string trackbarName, string winName, ref int value, int count, TrackbarCallbackNative? onChange = null, IntPtr userData = default) { - if (trackbarName == null) + if (trackbarName is null) throw new ArgumentNullException(nameof(trackbarName)); - if (winName == null) + if (winName is null) throw new ArgumentNullException(nameof(winName)); NativeMethods.HandleException( @@ -372,9 +371,9 @@ public static int CreateTrackbar(string trackbarName, string winName, public static int CreateTrackbar(string trackbarName, string winName, int count, TrackbarCallbackNative? onChange = null, IntPtr userData = default) { - if (trackbarName == null) + if (trackbarName is null) throw new ArgumentNullException(nameof(trackbarName)); - if (winName == null) + if (winName is null) throw new ArgumentNullException(nameof(winName)); NativeMethods.HandleException( @@ -390,7 +389,7 @@ public static int CreateTrackbar(string trackbarName, string winName, /// trackbar position public static int GetTrackbarPos(string trackbarName, string winName) { - if (trackbarName == null) + if (trackbarName is null) throw new ArgumentNullException(nameof(trackbarName)); NativeMethods.HandleException( @@ -406,7 +405,7 @@ public static int GetTrackbarPos(string trackbarName, string winName) /// New position. public static void SetTrackbarPos(string trackbarName, string winName, int pos) { - if (trackbarName == null) + if (trackbarName is null) throw new ArgumentNullException(nameof(trackbarName)); NativeMethods.HandleException( @@ -422,7 +421,7 @@ public static void SetTrackbarPos(string trackbarName, string winName, int pos) /// New maximum position. public static void SetTrackbarMax(string trackbarName, string winName, int maxVal) { - if (trackbarName == null) + if (trackbarName is null) throw new ArgumentNullException(nameof(trackbarName)); NativeMethods.HandleException( @@ -438,7 +437,7 @@ public static void SetTrackbarMax(string trackbarName, string winName, int maxVa /// New minimum position. public static void SetTrackbarMin(string trackbarName, string winName, int minVal) { - if (trackbarName == null) + if (trackbarName is null) throw new ArgumentNullException(nameof(trackbarName)); NativeMethods.HandleException( @@ -451,7 +450,7 @@ public static void SetTrackbarMin(string trackbarName, string winName, int minVa /// public static IntPtr GetWindowHandle(string windowName) { - if (windowName == null) + if (windowName is null) throw new ArgumentNullException(nameof(windowName)); NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Cv2/Cv2_imgcodecs.cs b/src/OpenCvSharp/Cv2/Cv2_imgcodecs.cs index 16a9e2793..ee065daa7 100644 --- a/src/OpenCvSharp/Cv2/Cv2_imgcodecs.cs +++ b/src/OpenCvSharp/Cv2/Cv2_imgcodecs.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Generic; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; using OpenCvSharp.Internal.Vectors; namespace OpenCvSharp; @@ -22,7 +20,7 @@ public static Mat ImRead(string fileName, ImreadModes flags = ImreadModes.Color) NativeMethods.imgcodecs_imread(fileName, (int) flags, out var ret)); if (ret == IntPtr.Zero) throw new OpenCvSharpException("imread failed."); - return new Mat(ret); + return Mat.FromNativePointer(ret); } /// @@ -34,7 +32,7 @@ public static Mat ImRead(string fileName, ImreadModes flags = ImreadModes.Color) /// public static bool ImReadMulti(string filename, out Mat[] mats, ImreadModes flags = ImreadModes.AnyColor) { - if (filename == null) + if (filename is null) throw new ArgumentNullException(nameof(filename)); using var matsVec = new VectorOfMat(); @@ -55,10 +53,9 @@ public static bool ImWrite(string fileName, Mat img, int[]? prms = null) { if (string.IsNullOrEmpty(fileName)) throw new ArgumentNullException(nameof(fileName)); - if (img == null) + if (img is null) throw new ArgumentNullException(nameof(img)); - if (prms == null) - prms = Array.Empty(); + prms ??= []; NativeMethods.HandleException( NativeMethods.imgcodecs_imwrite(fileName, img.CvPtr, prms, prms.Length, out var ret)); @@ -100,9 +97,9 @@ public static bool ImWrite(string fileName, IEnumerable img, int[]? prms = { if (string.IsNullOrEmpty(fileName)) throw new ArgumentNullException(nameof(fileName)); - if (img == null) + if (img is null) throw new ArgumentNullException(nameof(img)); - prms ??= Array.Empty(); + prms ??= []; using var imgVec = new VectorOfMat(img); NativeMethods.HandleException( @@ -142,7 +139,7 @@ public static bool ImWrite(string fileName, IEnumerable img, params ImageEn /// public static Mat ImDecode(Mat buf, ImreadModes flags) { - if (buf == null) + if (buf is null) throw new ArgumentNullException(nameof(buf)); buf.ThrowIfDisposed(); @@ -160,7 +157,7 @@ public static Mat ImDecode(Mat buf, ImreadModes flags) /// public static Mat ImDecode(InputArray buf, ImreadModes flags) { - if (buf == null) + if (buf is null) throw new ArgumentNullException(nameof(buf)); buf.ThrowIfDisposed(); @@ -178,7 +175,7 @@ public static Mat ImDecode(InputArray buf, ImreadModes flags) /// public static Mat ImDecode(byte[] buf, ImreadModes flags) { - if (buf == null) + if (buf is null) throw new ArgumentNullException(nameof(buf)); var ret = ImDecode(new ReadOnlySpan(buf), flags); GC.KeepAlive(buf); @@ -220,8 +217,7 @@ public static bool ImEncode(string ext, InputArray img, out byte[] buf, int[]? p throw new ArgumentNullException(nameof(ext)); if (img is null) throw new ArgumentNullException(nameof(img)); - if (prms is null) - prms = Array.Empty(); + prms ??= []; img.ThrowIfDisposed(); using var bufVec = new VectorOfByte(); @@ -274,7 +270,7 @@ public static bool HaveImageReader(string fileName) /// public static bool HaveImageWriter(string fileName) { - if (fileName == null) + if (fileName is null) throw new ArgumentNullException(nameof(fileName)); NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Cv2/Cv2_imgproc.cs b/src/OpenCvSharp/Cv2/Cv2_imgproc.cs index 5e03ea156..29c745e64 100644 --- a/src/OpenCvSharp/Cv2/Cv2_imgproc.cs +++ b/src/OpenCvSharp/Cv2/Cv2_imgproc.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; -using System.Linq; using OpenCvSharp.Internal; using OpenCvSharp.Internal.Util; using OpenCvSharp.Internal.Vectors; @@ -50,9 +47,9 @@ public static void GetDerivKernels( OutputArray kx, OutputArray ky, int dx, int dy, int ksize, bool normalize = false, MatType? ktype = null) { - if (kx == null) + if (kx is null) throw new ArgumentNullException(nameof(kx)); - if (ky == null) + if (ky is null) throw new ArgumentNullException(nameof(ky)); kx.ThrowIfNotReady(); ky.ThrowIfNotReady(); @@ -85,7 +82,7 @@ public static Mat GetGaborKernel(Size ksize, double sigma, double theta, double { NativeMethods.HandleException( NativeMethods.imgproc_getGaborKernel(ksize, sigma, theta, lambd, gamma, psi, ktype, out var matPtr)); - return new Mat(matPtr); + return Mat.FromNativePointer(matPtr); } /// @@ -129,9 +126,9 @@ public static Mat GetStructuringElement(MorphShapes shape, Size ksize, Point anc /// The aperture linear size. It must be odd and more than 1, i.e. 3, 5, 7 ... public static void MedianBlur(InputArray src, OutputArray dst, int ksize) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -161,9 +158,9 @@ public static void MedianBlur(InputArray src, OutputArray dst, int ksize) public static void GaussianBlur(InputArray src, OutputArray dst, Size ksize, double sigmaX, double sigmaY = 0, BorderTypes borderType = BorderTypes.Default) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -194,9 +191,9 @@ public static void GaussianBlur(InputArray src, OutputArray dst, Size ksize, dou public static void BilateralFilter(InputArray src, OutputArray dst, int d, double sigmaColor, double sigmaSpace, BorderTypes borderType = BorderTypes.Default) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -224,9 +221,9 @@ public static void BoxFilter( Size ksize, Point? anchor = null, bool normalize = true, BorderTypes borderType = BorderTypes.Default) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -261,9 +258,9 @@ public static void SqrBoxFilter( Size ksize, Point? anchor = null, bool normalize = true, BorderTypes borderType = BorderTypes.Default) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -289,9 +286,9 @@ public static void Blur( InputArray src, OutputArray dst, Size ksize, Point? anchor = null, BorderTypes borderType = BorderTypes.Default) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -324,11 +321,11 @@ public static void Filter2D( InputArray kernel, Point? anchor = null, double delta = 0, BorderTypes borderType = BorderTypes.Default) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); - if (kernel == null) + if (kernel is null) throw new ArgumentNullException(nameof(kernel)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -360,13 +357,13 @@ public static void SepFilter2D( Point? anchor = null, double delta = 0, BorderTypes borderType = BorderTypes.Default) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); - if (kernelX == null) + if (kernelX is null) throw new ArgumentNullException(nameof(kernelX)); - if (kernelY == null) + if (kernelY is null) throw new ArgumentNullException(nameof(kernelY)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -402,9 +399,9 @@ public static void Sobel( int ksize = 3, double scale = 1, double delta = 0, BorderTypes borderType = BorderTypes.Default) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -429,11 +426,11 @@ public static void Sobel( public static void SpatialGradient( InputArray src, OutputArray dx, OutputArray dy, int ksize = 3, BorderTypes borderType = BorderTypes.Default) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dx == null) + if (dx is null) throw new ArgumentNullException(nameof(dx)); - if (dy == null) + if (dy is null) throw new ArgumentNullException(nameof(dy)); src.ThrowIfDisposed(); dx.ThrowIfNotReady(); @@ -462,9 +459,9 @@ public static void Scharr( InputArray src, OutputArray dst, MatType ddepth, int xorder, int yorder, double scale = 1, double delta = 0, BorderTypes borderType = BorderTypes.Default) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -493,9 +490,9 @@ public static void Laplacian( int ksize = 1, double scale = 1, double delta = 0, BorderTypes borderType = BorderTypes.Default) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -520,9 +517,9 @@ public static void Laplacian( public static void Canny(InputArray src, OutputArray edges, double threshold1, double threshold2, int apertureSize = 3, bool L2gradient = false) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (edges == null) + if (edges is null) throw new ArgumentNullException(nameof(edges)); src.ThrowIfDisposed(); edges.ThrowIfNotReady(); @@ -549,11 +546,11 @@ public static void Canny( double threshold1, double threshold2, bool L2gradient = false) { - if (dx == null) + if (dx is null) throw new ArgumentNullException(nameof(dx)); - if (dy == null) + if (dy is null) throw new ArgumentNullException(nameof(dy)); - if (edges == null) + if (edges is null) throw new ArgumentNullException(nameof(edges)); dx.ThrowIfDisposed(); dy.ThrowIfDisposed(); @@ -583,9 +580,9 @@ public static void CornerMinEigenVal( int ksize = 3, BorderTypes borderType = BorderTypes.Default) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -616,9 +613,9 @@ public static void CornerHarris( double k, BorderTypes borderType = BorderTypes.Default) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -643,9 +640,9 @@ public static void CornerEigenValsAndVecs( InputArray src, OutputArray dst, int blockSize, int ksize, BorderTypes borderType = BorderTypes.Default) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -668,9 +665,9 @@ public static void CornerEigenValsAndVecs( public static void PreCornerDetect( InputArray src, OutputArray dst, int ksize, BorderTypes borderType = BorderTypes.Default) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -699,9 +696,9 @@ public static void PreCornerDetect( public static Point2f[] CornerSubPix(InputArray image, IEnumerable inputCorners, Size winSize, Size zeroZone, TermCriteria criteria) { - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); - if (inputCorners == null) + if (inputCorners is null) throw new ArgumentNullException(nameof(inputCorners)); image.ThrowIfDisposed(); @@ -739,7 +736,7 @@ public static Point2f[] GoodFeaturesToTrack(InputArray src, int maxCorners, double qualityLevel, double minDistance, InputArray mask, int blockSize, bool useHarrisDetector, double k) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); src.ThrowIfDisposed(); @@ -747,7 +744,7 @@ public static Point2f[] GoodFeaturesToTrack(InputArray src, var maskPtr = ToPtr(mask); NativeMethods.HandleException( NativeMethods.imgproc_goodFeaturesToTrack(src.CvPtr, vector.CvPtr, maxCorners, qualityLevel, - minDistance, maskPtr, blockSize, useHarrisDetector ? 0 : 1, k)); + minDistance, maskPtr, blockSize, useHarrisDetector ? 1 : 0, k)); GC.KeepAlive(src); GC.KeepAlive(mask); return vector.ToArray(); @@ -768,7 +765,7 @@ public static LineSegmentPolar[] HoughLines( InputArray image, double rho, double theta, int threshold, double srn = 0, double stn = 0) { - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); using var vec = new VectorOfVec2f(); @@ -792,7 +789,7 @@ public static LineSegmentPoint[] HoughLinesP( InputArray image, double rho, double theta, int threshold, double minLineLength = 0, double maxLineGap = 0) { - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); image.ThrowIfDisposed(); using var vec = new VectorOfVec4i(); @@ -821,9 +818,9 @@ public static void HoughLinesPointSet( double minRho, double maxRho, double rhoStep, double minTheta, double maxTheta, double thetaStep) { - if (point == null) + if (point is null) throw new ArgumentNullException(nameof(point)); - if (lines == null) + if (lines is null) throw new ArgumentNullException(nameof(lines)); point.ThrowIfDisposed(); lines.ThrowIfNotReady(); @@ -852,7 +849,7 @@ public static CircleSegment[] HoughCircles( InputArray image, HoughModes method, double dp, double minDist, double param1 = 100, double param2 = 100, int minRadius = 0, int maxRadius = 0) { - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); image.ThrowIfDisposed(); using var vec = new VectorOfVec3f(); @@ -887,9 +884,9 @@ public static void Dilate( Point? anchor = null, int iterations = 1, BorderTypes borderType = BorderTypes.Constant, Scalar? borderValue = null) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -921,9 +918,9 @@ public static void Erode( Point? anchor = null, int iterations = 1, BorderTypes borderType = BorderTypes.Constant, Scalar? borderValue = null) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -956,9 +953,9 @@ public static void MorphologyEx( Point? anchor = null, int iterations = 1, BorderTypes borderType = BorderTypes.Constant, Scalar? borderValue = null) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -994,9 +991,9 @@ public static void MorphologyEx( public static void Resize(InputArray src, OutputArray dst, Size dsize, double fx = 0, double fy = 0, InterpolationFlags interpolation = InterpolationFlags.Linear) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -1027,11 +1024,11 @@ public static void WarpAffine( InterpolationFlags flags = InterpolationFlags.Linear, BorderTypes borderMode = BorderTypes.Constant, Scalar? borderValue = null) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); src.ThrowIfDisposed(); dst.ThrowIfDisposed(); @@ -1064,11 +1061,11 @@ public static void WarpPerspective( BorderTypes borderMode = BorderTypes.Constant, Scalar? borderValue = null) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); src.ThrowIfDisposed(); dst.ThrowIfDisposed(); @@ -1102,11 +1099,11 @@ public static void WarpPerspective( BorderTypes borderMode = BorderTypes.Constant, Scalar? borderValue = null) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); src.ThrowIfDisposed(); dst.ThrowIfDisposed(); @@ -1140,13 +1137,13 @@ public static void Remap( InterpolationFlags interpolation = InterpolationFlags.Linear, BorderTypes borderMode = BorderTypes.Constant, Scalar? borderValue = null) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); - if (map1 == null) + if (map1 is null) throw new ArgumentNullException(nameof(map1)); - if (map2 == null) + if (map2 is null) throw new ArgumentNullException(nameof(map2)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -1176,13 +1173,13 @@ public static void Remap( /// Flag indicating whether the fixed-point maps are used for the nearest-neighbor or for a more complex interpolation. public static void ConvertMaps(InputArray map1, InputArray map2, OutputArray dstmap1, OutputArray dstmap2, MatType dstmap1Type, bool nnInterpolation = false) { - if (map1 == null) + if (map1 is null) throw new ArgumentNullException(nameof(map1)); - if (map2 == null) + if (map2 is null) throw new ArgumentNullException(nameof(map2)); - if (dstmap1 == null) + if (dstmap1 is null) throw new ArgumentNullException(nameof(dstmap1)); - if (dstmap2 == null) + if (dstmap2 is null) throw new ArgumentNullException(nameof(dstmap2)); map1.ThrowIfDisposed(); map2.ThrowIfDisposed(); @@ -1222,9 +1219,9 @@ public static Mat GetRotationMatrix2D(Point2f center, double angle, double scale /// Output reverse affine transformation. public static void InvertAffineTransform(InputArray m, OutputArray im) { - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); - if (im == null) + if (im is null) throw new ArgumentNullException(nameof(im)); m.ThrowIfDisposed(); im.ThrowIfNotReady(); @@ -1244,9 +1241,9 @@ public static void InvertAffineTransform(InputArray m, OutputArray im) /// public static Mat GetPerspectiveTransform(IEnumerable src, IEnumerable dst) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); var srcArray = src.ToArray(); @@ -1265,9 +1262,9 @@ public static Mat GetPerspectiveTransform(IEnumerable src, IEnumerable< /// public static Mat GetPerspectiveTransform(InputArray src, InputArray dst) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); @@ -1289,9 +1286,9 @@ public static Mat GetPerspectiveTransform(InputArray src, InputArray dst) /// public static Mat GetAffineTransform(IEnumerable src, IEnumerable dst) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); var srcArray = src.ToArray(); @@ -1310,9 +1307,9 @@ public static Mat GetAffineTransform(IEnumerable src, IEnumerable public static Mat GetAffineTransform(InputArray src, InputArray dst) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); @@ -1338,9 +1335,9 @@ public static Mat GetAffineTransform(InputArray src, InputArray dst) public static void GetRectSubPix(InputArray image, Size patchSize, Point2f center, OutputArray patch, int patchType = -1) { - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); - if (patch == null) + if (patch is null) throw new ArgumentNullException(nameof(patch)); image.ThrowIfDisposed(); patch.ThrowIfNotReady(); @@ -1365,9 +1362,9 @@ public static void LogPolar( InputArray src, OutputArray dst, Point2f center, double m, InterpolationFlags flags) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -1392,9 +1389,9 @@ public static void LinearPolar( InputArray src, OutputArray dst, Point2f center, double maxRadius, InterpolationFlags flags) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -1426,9 +1423,9 @@ public static void WarpPolar( InputArray src, OutputArray dst, Size dsize, Point2f center, double maxRadius, InterpolationFlags interpolationFlags, WarpPolarMode warpPolarMode) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -1449,18 +1446,18 @@ public static void WarpPolar( /// /// /// - public static void Integral(InputArray src, OutputArray sum, int sdepth = -1) + public static void Integral(InputArray src, OutputArray sum, MatType? sdepth = null) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (sum == null) + if (sum is null) throw new ArgumentNullException(nameof(sum)); src.ThrowIfDisposed(); sum.ThrowIfNotReady(); NativeMethods.HandleException( - NativeMethods.imgproc_integral1(src.CvPtr, sum.CvPtr, sdepth)); + NativeMethods.imgproc_integral1(src.CvPtr, sum.CvPtr, sdepth?.Value ?? -1)); GC.KeepAlive(src); GC.KeepAlive(sum); @@ -1475,20 +1472,20 @@ public static void Integral(InputArray src, OutputArray sum, int sdepth = -1) /// /// /// - public static void Integral(InputArray src, OutputArray sum, OutputArray sqsum, int sdepth = -1) + public static void Integral(InputArray src, OutputArray sum, OutputArray sqsum, MatType? sdepth = null) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (sum == null) + if (sum is null) throw new ArgumentNullException(nameof(sum)); - if (sqsum == null) + if (sqsum is null) throw new ArgumentNullException(nameof(sqsum)); src.ThrowIfDisposed(); sum.ThrowIfNotReady(); sqsum.ThrowIfNotReady(); NativeMethods.HandleException( - NativeMethods.imgproc_integral2(src.CvPtr, sum.CvPtr, sqsum.CvPtr, sdepth)); + NativeMethods.imgproc_integral2(src.CvPtr, sum.CvPtr, sqsum.CvPtr, sdepth?.Value ?? -1)); GC.KeepAlive(src); GC.KeepAlive(sum); @@ -1507,15 +1504,17 @@ public static void Integral(InputArray src, OutputArray sum, OutputArray sqsum, /// integral for the image rotated by 45 degrees; it is (W+1)×(H+1) array with the same data type as sum. /// desired depth of the integral and the tilted integral images, CV_32S, CV_32F, or CV_64F. /// desired depth of the integral image of squared pixel values, CV_32F or CV_64F. - public static void Integral(InputArray src, OutputArray sum, OutputArray sqsum, OutputArray tilted, int sdepth = -1, int sqdepth = -1) + public static void Integral( + InputArray src, OutputArray sum, OutputArray sqsum, OutputArray tilted, + MatType? sdepth = null, MatType? sqdepth = null) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (sum == null) + if (sum is null) throw new ArgumentNullException(nameof(sum)); - if (sqsum == null) + if (sqsum is null) throw new ArgumentNullException(nameof(sqsum)); - if (tilted == null) + if (tilted is null) throw new ArgumentNullException(nameof(tilted)); src.ThrowIfDisposed(); sum.ThrowIfNotReady(); @@ -1523,7 +1522,7 @@ public static void Integral(InputArray src, OutputArray sum, OutputArray sqsum, tilted.ThrowIfNotReady(); NativeMethods.HandleException( - NativeMethods.imgproc_integral3(src.CvPtr, sum.CvPtr, sqsum.CvPtr, tilted.CvPtr, sdepth, sqdepth)); + NativeMethods.imgproc_integral3(src.CvPtr, sum.CvPtr, sqsum.CvPtr, tilted.CvPtr, sdepth?.Value ?? -1, sqdepth?.Value ?? -1)); GC.KeepAlive(src); GC.KeepAlive(sum); @@ -1542,9 +1541,9 @@ public static void Integral(InputArray src, OutputArray sum, OutputArray sqsum, /// Optional operation mask. public static void Accumulate(InputArray src, InputOutputArray dst, InputArray mask) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -1566,9 +1565,9 @@ public static void Accumulate(InputArray src, InputOutputArray dst, InputArray m /// Optional operation mask. public static void AccumulateSquare(InputArray src, InputOutputArray dst, InputArray mask) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -1591,11 +1590,11 @@ public static void AccumulateSquare(InputArray src, InputOutputArray dst, InputA /// Optional operation mask. public static void AccumulateProduct(InputArray src1, InputArray src2, InputOutputArray dst, InputArray mask) { - if (src1 == null) + if (src1 is null) throw new ArgumentNullException(nameof(src1)); - if (src2 == null) + if (src2 is null) throw new ArgumentNullException(nameof(src2)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src1.ThrowIfDisposed(); src2.ThrowIfDisposed(); @@ -1620,9 +1619,9 @@ public static void AccumulateProduct(InputArray src1, InputArray src2, InputOutp /// Optional operation mask. public static void AccumulateWeighted(InputArray src, InputOutputArray dst, double alpha, InputArray mask) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -1653,11 +1652,11 @@ public static void AccumulateWeighted(InputArray src, InputOutputArray dst, doub public static Point2d PhaseCorrelate(InputArray src1, InputArray src2, InputArray window, out double response) { - if (src1 == null) + if (src1 is null) throw new ArgumentNullException(nameof(src1)); - if (src2 == null) + if (src2 is null) throw new ArgumentNullException(nameof(src2)); - if (window == null) + if (window is null) throw new ArgumentNullException(nameof(window)); src1.ThrowIfDisposed(); src2.ThrowIfDisposed(); @@ -1680,7 +1679,7 @@ public static Point2d PhaseCorrelate(InputArray src1, InputArray src2, /// Created array type public static void CreateHanningWindow(InputOutputArray dst, Size winSize, MatType type) { - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); dst.ThrowIfNotReady(); @@ -1702,9 +1701,9 @@ public static void CreateHanningWindow(InputOutputArray dst, Size winSize, MatTy /// the computed threshold value when type == OTSU public static double Threshold(InputArray src, OutputArray dst, double thresh, double maxval, ThresholdTypes type) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -1732,9 +1731,9 @@ public static double Threshold(InputArray src, OutputArray dst, double thresh, d public static void AdaptiveThreshold(InputArray src, OutputArray dst, double maxValue, AdaptiveThresholdTypes adaptiveMethod, ThresholdTypes thresholdType, int blockSize, double c) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -1757,9 +1756,9 @@ public static void AdaptiveThreshold(InputArray src, OutputArray dst, public static void PyrDown(InputArray src, OutputArray dst, Size? dstSize = null, BorderTypes borderType = BorderTypes.Default) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -1773,6 +1772,29 @@ public static void PyrDown(InputArray src, OutputArray dst, dst.Fix(); } + /// + /// + /// + /// + /// + /// + /// + public static void BuildPyramid(InputArray src, VectorOfMat dst,int maxlevel, + BorderTypes borderType = BorderTypes.Default) + { + if (src is null) + throw new ArgumentNullException(nameof(src)); + if (dst is null) + throw new ArgumentNullException(nameof(dst)); + src.ThrowIfDisposed(); + dst.ThrowIfDisposed(); + NativeMethods.HandleException( + NativeMethods.imgproc_buildPyramid(src.CvPtr, dst.CvPtr, maxlevel,(int)borderType)); + + GC.KeepAlive(src); + GC.KeepAlive(dst); + } + /// /// Upsamples an image and then blurs it. /// @@ -1783,9 +1805,9 @@ public static void PyrDown(InputArray src, OutputArray dst, public static void PyrUp(InputArray src, OutputArray dst, Size? dstSize = null, BorderTypes borderType = BorderTypes.Default) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -1816,7 +1838,7 @@ public static void CalcHist(Mat[] images, OutputArray hist, int dims, int[] histSize, Rangef[] ranges, bool uniform = true, bool accumulate = false) { - if (ranges == null) + if (ranges is null) throw new ArgumentNullException(nameof(ranges)); var rangesFloat = ranges.Select(r => new [] {r.Start, r.End}).ToArray(); CalcHist(images, channels, mask, hist, dims, @@ -1840,15 +1862,15 @@ public static void CalcHist(Mat[] images, OutputArray hist, int dims, int[] histSize, float[][] ranges, bool uniform = true, bool accumulate = false) { - if (images == null) + if (images is null) throw new ArgumentNullException(nameof(images)); - if (channels == null) + if (channels is null) throw new ArgumentNullException(nameof(channels)); - if (hist == null) + if (hist is null) throw new ArgumentNullException(nameof(hist)); - if (histSize == null) + if (histSize is null) throw new ArgumentNullException(nameof(histSize)); - if (ranges == null) + if (ranges is null) throw new ArgumentNullException(nameof(ranges)); hist.ThrowIfNotReady(); @@ -1879,15 +1901,15 @@ public static void CalcBackProject(Mat[] images, int[] channels, InputArray hist, OutputArray backProject, Rangef[] ranges, bool uniform = true) { - if (images == null) + if (images is null) throw new ArgumentNullException(nameof(images)); - if (channels == null) + if (channels is null) throw new ArgumentNullException(nameof(channels)); - if (hist == null) + if (hist is null) throw new ArgumentNullException(nameof(hist)); - if (backProject == null) + if (backProject is null) throw new ArgumentNullException(nameof(backProject)); - if (ranges == null) + if (ranges is null) throw new ArgumentNullException(nameof(ranges)); hist.ThrowIfDisposed(); backProject.ThrowIfNotReady(); @@ -1915,9 +1937,9 @@ public static void CalcBackProject(Mat[] images, /// public static double CompareHist(InputArray h1, InputArray h2, HistCompMethods method) { - if (h1 == null) + if (h1 is null) throw new ArgumentNullException(nameof(h1)); - if (h2 == null) + if (h2 is null) throw new ArgumentNullException(nameof(h2)); h1.ThrowIfDisposed(); h2.ThrowIfDisposed(); @@ -1937,9 +1959,9 @@ public static double CompareHist(InputArray h1, InputArray h2, HistCompMethods m /// The destination image; will have the same size and the same type as src public static void EqualizeHist(InputArray src, OutputArray dst) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -2051,9 +2073,9 @@ public static float EMD(InputArray signature1, InputArray signature2, public static float EMD(InputArray signature1, InputArray signature2, DistanceTypes distType, InputArray? cost, out float lowerBound, OutputArray? flow = null) { - if (signature1 == null) + if (signature1 is null) throw new ArgumentNullException(nameof(signature1)); - if (signature2 == null) + if (signature2 is null) throw new ArgumentNullException(nameof(signature2)); signature1.ThrowIfDisposed(); signature2.ThrowIfDisposed(); @@ -2079,9 +2101,9 @@ public static float EMD(InputArray signature1, InputArray signature2, /// It should have the same size as image. public static void Watershed(InputArray image, InputOutputArray markers) { - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); - if (markers == null) + if (markers is null) throw new ArgumentNullException(nameof(markers)); image.ThrowIfDisposed(); markers.ThrowIfNotReady(); @@ -2106,9 +2128,9 @@ public static void Watershed(InputArray image, InputOutputArray markers) public static void PyrMeanShiftFiltering(InputArray src, OutputArray dst, double sp, double sr, int maxLevel = 1, TermCriteria? termcrit = null) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -2141,13 +2163,13 @@ public static void GrabCut(InputArray img, InputOutputArray mask, Rect rect, InputOutputArray bgdModel, InputOutputArray fgdModel, int iterCount, GrabCutModes mode) { - if (img == null) + if (img is null) throw new ArgumentNullException(nameof(img)); - if (mask == null) + if (mask is null) throw new ArgumentNullException(nameof(mask)); - if (bgdModel == null) + if (bgdModel is null) throw new ArgumentNullException(nameof(bgdModel)); - if (fgdModel == null) + if (fgdModel is null) throw new ArgumentNullException(nameof(fgdModel)); img.ThrowIfDisposed(); mask.ThrowIfNotReady(); @@ -2188,11 +2210,11 @@ public static void DistanceTransformWithLabels(InputArray src, DistanceTransformMasks maskSize, DistanceTransformLabelTypes labelType = DistanceTransformLabelTypes.CComp) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); - if (labels == null) + if (labels is null) throw new ArgumentNullException(nameof(labels)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -2227,9 +2249,9 @@ public static void DistanceTransform(InputArray src, DistanceTransformMasks maskSize, int dstType = MatType.CV_32S) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -2282,7 +2304,7 @@ public static int FloodFill(InputOutputArray image, Scalar? loDiff = null, Scalar? upDiff = null, FloodFillFlags flags = FloodFillFlags.Link4) { - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); image.ThrowIfNotReady(); var loDiff0 = loDiff.GetValueOrDefault(new Scalar()); @@ -2354,9 +2376,9 @@ public static int FloodFill(InputOutputArray image, InputOutputArray mask, Scalar? loDiff = null, Scalar? upDiff = null, FloodFillFlags flags = FloodFillFlags.Link4) { - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); - if (mask == null) + if (mask is null) throw new ArgumentNullException(nameof(mask)); image.ThrowIfNotReady(); mask.ThrowIfNotReady(); @@ -2392,15 +2414,15 @@ public static int FloodFill(InputOutputArray image, InputOutputArray mask, public static void BlendLinear(InputArray src1, InputArray src2, InputArray weights1, InputArray weights2, OutputArray dst) { - if (src1 == null) + if (src1 is null) throw new ArgumentNullException(nameof(src1)); - if (src2 == null) + if (src2 is null) throw new ArgumentNullException(nameof(src2)); - if (weights1 == null) + if (weights1 is null) throw new ArgumentNullException(nameof(weights1)); - if (weights2 == null) + if (weights2 is null) throw new ArgumentNullException(nameof(weights2)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src1.ThrowIfDisposed(); src2.ThrowIfDisposed(); @@ -2427,9 +2449,9 @@ public static void BlendLinear(InputArray src1, InputArray src2, InputArray weig /// The number of channels in the destination image; if the parameter is 0, the number of the channels will be derived automatically from src and the code public static void CvtColor(InputArray src, OutputArray dst, ColorConversionCodes code, int dstCn = 0) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -2460,11 +2482,11 @@ public static void CvtColor(InputArray src, OutputArray dst, ColorConversionCode /// - #COLOR_YUV2RGBA_NV21 public static void CvtColorTwoPlane(InputArray src1, InputArray src2, OutputArray dst, ColorConversionCodes code) { - if (src1 == null) + if (src1 is null) throw new ArgumentNullException(nameof(src1)); - if (src2 == null) + if (src2 is null) throw new ArgumentNullException(nameof(src2)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src1.ThrowIfDisposed(); src2.ThrowIfDisposed(); @@ -2509,9 +2531,9 @@ public static void CvtColorTwoPlane(InputArray src1, InputArray src2, OutputArra /// public static void Demosaicing(InputArray src, OutputArray dst, ColorConversionCodes code, int dstCn = 0) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -2601,11 +2623,11 @@ public static void MatchTemplate( TemplateMatchModes method, InputArray? mask = null) { - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); - if (templ == null) + if (templ is null) throw new ArgumentNullException(nameof(templ)); - if (result == null) + if (result is null) throw new ArgumentNullException(nameof(result)); image.ThrowIfDisposed(); templ.ThrowIfDisposed(); @@ -2643,9 +2665,9 @@ public static void MatchTemplate( public static int ConnectedComponentsWithAlgorithm( InputArray image, OutputArray labels, PixelConnectivity connectivity, MatType ltype, ConnectedComponentsAlgorithmsTypes ccltype) { - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); - if (labels == null) + if (labels is null) throw new ArgumentNullException(nameof(labels)); image.ThrowIfDisposed(); labels.ThrowIfNotReady(); @@ -2692,9 +2714,9 @@ public static int ConnectedComponents(InputArray image, OutputArray labels, public static int ConnectedComponents(InputArray image, OutputArray labels, PixelConnectivity connectivity, MatType ltype) { - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); - if (labels == null) + if (labels is null) throw new ArgumentNullException(nameof(labels)); image.ThrowIfDisposed(); labels.ThrowIfNotReady(); @@ -2759,13 +2781,13 @@ public static int ConnectedComponentsWithStatsWithAlgorithm( MatType ltype, ConnectedComponentsAlgorithmsTypes ccltype) { - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); - if (labels == null) + if (labels is null) throw new ArgumentNullException(nameof(labels)); - if (stats == null) + if (stats is null) throw new ArgumentNullException(nameof(stats)); - if (centroids == null) + if (centroids is null) throw new ArgumentNullException(nameof(centroids)); image.ThrowIfDisposed(); labels.ThrowIfNotReady(); @@ -2833,13 +2855,13 @@ public static int ConnectedComponentsWithStats( PixelConnectivity connectivity, MatType ltype) { - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); - if (labels == null) + if (labels is null) throw new ArgumentNullException(nameof(labels)); - if (stats == null) + if (stats is null) throw new ArgumentNullException(nameof(stats)); - if (centroids == null) + if (centroids is null) throw new ArgumentNullException(nameof(centroids)); image.ThrowIfDisposed(); labels.ThrowIfNotReady(); @@ -2921,7 +2943,7 @@ public static ConnectedComponents ConnectedComponentsEx( public static void FindContours(InputArray image, out Point[][] contours, out HierarchyIndex[] hierarchy, RetrievalModes mode, ContourApproximationModes method, Point? offset = null) { - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); image.ThrowIfDisposed(); @@ -2958,9 +2980,9 @@ public static void FindContours(InputArray image, out Point[][] contours, public static void FindContours(InputArray image, out Mat[] contours, OutputArray hierarchy, RetrievalModes mode, ContourApproximationModes method, Point? offset = null) { - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); - if (hierarchy == null) + if (hierarchy is null) throw new ArgumentNullException(nameof(hierarchy)); image.ThrowIfDisposed(); hierarchy.ThrowIfNotReady(); @@ -2991,7 +3013,7 @@ public static void FindContours(InputArray image, out Mat[] contours, public static Point[][] FindContoursAsArray(InputArray image, RetrievalModes mode, ContourApproximationModes method, Point? offset = null) { - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); image.ThrowIfDisposed(); @@ -3018,7 +3040,7 @@ public static Point[][] FindContoursAsArray(InputArray image, public static Mat[] FindContoursAsMat(InputArray image, RetrievalModes mode, ContourApproximationModes method, Point? offset = null) { - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); image.ThrowIfDisposed(); @@ -3046,7 +3068,7 @@ public static void ApproxPolyDP(InputArray curve, OutputArray approxCurve, doubl { if (curve is null) throw new ArgumentNullException(nameof(curve)); - if (approxCurve == null) + if (approxCurve is null) throw new ArgumentNullException(nameof(approxCurve)); curve.ThrowIfDisposed(); approxCurve.ThrowIfNotReady(); @@ -3113,7 +3135,7 @@ public static Point2f[] ApproxPolyDP(IEnumerable curve, double epsilon, /// public static double ArcLength(InputArray curve, bool closed) { - if (curve == null) + if (curve is null) throw new ArgumentNullException(nameof(curve)); curve.ThrowIfDisposed(); @@ -3131,7 +3153,7 @@ public static double ArcLength(InputArray curve, bool closed) /// public static double ArcLength(IEnumerable curve, bool closed) { - if (curve == null) + if (curve is null) throw new ArgumentNullException(nameof(curve)); var curveArray = curve.ToArray(); @@ -3148,7 +3170,7 @@ public static double ArcLength(IEnumerable curve, bool closed) /// public static double ArcLength(IEnumerable curve, bool closed) { - if (curve == null) + if (curve is null) throw new ArgumentNullException(nameof(curve)); var curveArray = curve.ToArray(); @@ -3164,7 +3186,7 @@ public static double ArcLength(IEnumerable curve, bool closed) /// Minimal up-right bounding rectangle for the specified point set. public static Rect BoundingRect(InputArray curve) { - if (curve == null) + if (curve is null) throw new ArgumentNullException(nameof(curve)); curve.ThrowIfDisposed(); @@ -3181,7 +3203,7 @@ public static Rect BoundingRect(InputArray curve) /// Minimal up-right bounding rectangle for the specified point set. public static Rect BoundingRect(IEnumerable curve) { - if (curve == null) + if (curve is null) throw new ArgumentNullException(nameof(curve)); var curveArray = curve.ToArray(); @@ -3197,7 +3219,7 @@ public static Rect BoundingRect(IEnumerable curve) /// Minimal up-right bounding rectangle for the specified point set. public static Rect BoundingRect(IEnumerable curve) { - if (curve == null) + if (curve is null) throw new ArgumentNullException(nameof(curve)); var curveArray = curve.ToArray(); @@ -3214,7 +3236,7 @@ public static Rect BoundingRect(IEnumerable curve) /// public static double ContourArea(InputArray contour, bool oriented = false) { - if (contour == null) + if (contour is null) throw new ArgumentNullException(nameof(contour)); contour.ThrowIfDisposed(); @@ -3232,7 +3254,7 @@ public static double ContourArea(InputArray contour, bool oriented = false) /// public static double ContourArea(IEnumerable contour, bool oriented = false) { - if (contour == null) + if (contour is null) throw new ArgumentNullException(nameof(contour)); var contourArray = contour.ToArray(); @@ -3249,7 +3271,7 @@ public static double ContourArea(IEnumerable contour, bool oriented = fal /// public static double ContourArea(IEnumerable contour, bool oriented = false) { - if (contour == null) + if (contour is null) throw new ArgumentNullException(nameof(contour)); var contourArray = contour.ToArray(); @@ -3265,7 +3287,7 @@ public static double ContourArea(IEnumerable contour, bool oriented = f /// public static RotatedRect MinAreaRect(InputArray points) { - if (points == null) + if (points is null) throw new ArgumentNullException(nameof(points)); points.ThrowIfDisposed(); @@ -3282,7 +3304,7 @@ public static RotatedRect MinAreaRect(InputArray points) /// public static RotatedRect MinAreaRect(IEnumerable points) { - if (points == null) + if (points is null) throw new ArgumentNullException(nameof(points)); var pointsArray = points.ToArray(); @@ -3298,7 +3320,7 @@ public static RotatedRect MinAreaRect(IEnumerable points) /// public static RotatedRect MinAreaRect(IEnumerable points) { - if (points == null) + if (points is null) throw new ArgumentNullException(nameof(points)); var pointsArray = points.ToArray(); @@ -3319,7 +3341,7 @@ public static RotatedRect MinAreaRect(IEnumerable points) /// public static void BoxPoints(RotatedRect box, OutputArray points) { - if (points == null) + if (points is null) throw new ArgumentNullException(nameof(points)); points.ThrowIfNotReady(); @@ -3353,7 +3375,7 @@ public static Point2f[] BoxPoints(RotatedRect box) /// The output radius of the circle public static void MinEnclosingCircle(InputArray points, out Point2f center, out float radius) { - if (points == null) + if (points is null) throw new ArgumentNullException(nameof(points)); points.ThrowIfDisposed(); NativeMethods.HandleException( @@ -3369,7 +3391,7 @@ public static void MinEnclosingCircle(InputArray points, out Point2f center, out /// The output radius of the circle public static void MinEnclosingCircle(IEnumerable points, out Point2f center, out float radius) { - if (points == null) + if (points is null) throw new ArgumentNullException(nameof(points)); var pointsArray = points.ToArray(); NativeMethods.HandleException( @@ -3384,7 +3406,7 @@ public static void MinEnclosingCircle(IEnumerable points, out Point2f cen /// The output radius of the circle public static void MinEnclosingCircle(IEnumerable points, out Point2f center, out float radius) { - if (points == null) + if (points is null) throw new ArgumentNullException(nameof(points)); var pointsArray = points.ToArray(); NativeMethods.HandleException( @@ -3399,9 +3421,9 @@ public static void MinEnclosingCircle(IEnumerable points, out Point2f c /// Triangle area public static double MinEnclosingTriangle(InputArray points, OutputArray triangle) { - if (points == null) + if (points is null) throw new ArgumentNullException(nameof(points)); - if (triangle == null) + if (triangle is null) throw new ArgumentNullException(nameof(triangle)); points.ThrowIfDisposed(); triangle.ThrowIfNotReady(); @@ -3468,9 +3490,9 @@ public static double MinEnclosingTriangle(IEnumerable points, out Point /// public static double MatchShapes(InputArray contour1, InputArray contour2, ShapeMatchModes method, double parameter = 0) { - if (contour1 == null) + if (contour1 is null) throw new ArgumentNullException(nameof(contour1)); - if (contour2 == null) + if (contour2 is null) throw new ArgumentNullException(nameof(contour2)); NativeMethods.HandleException( @@ -3492,9 +3514,9 @@ public static double MatchShapes(InputArray contour1, InputArray contour2, Shape public static double MatchShapes(IEnumerable contour1, IEnumerable contour2, ShapeMatchModes method, double parameter = 0) { - if (contour1 == null) + if (contour1 is null) throw new ArgumentNullException(nameof(contour1)); - if (contour2 == null) + if (contour2 is null) throw new ArgumentNullException(nameof(contour2)); var contour1Array = contour1.ToArray(); var contour2Array = contour2.ToArray(); @@ -3522,9 +3544,9 @@ public static double MatchShapes(IEnumerable contour1, IEnumerable /// public static void ConvexHull(InputArray points, OutputArray hull, bool clockwise = false, bool returnPoints = true) { - if (points == null) + if (points is null) throw new ArgumentNullException(nameof(points)); - if (hull == null) + if (hull is null) throw new ArgumentNullException(nameof(hull)); points.ThrowIfDisposed(); hull.ThrowIfNotReady(); @@ -3549,7 +3571,7 @@ public static void ConvexHull(InputArray points, OutputArray hull, bool clockwis /// the hull (must have the same type as the input points). public static Point[] ConvexHull(IEnumerable points, bool clockwise = false) { - if (points == null) + if (points is null) throw new ArgumentNullException(nameof(points)); var pointsArray = points.ToArray(); @@ -3573,7 +3595,7 @@ public static Point[] ConvexHull(IEnumerable points, bool clockwise = fal /// the hull (must have the same type as the input points). public static Point2f[] ConvexHull(IEnumerable points, bool clockwise = false) { - if (points == null) + if (points is null) throw new ArgumentNullException(nameof(points)); var pointsArray = points.ToArray(); @@ -3596,7 +3618,7 @@ public static Point2f[] ConvexHull(IEnumerable points, bool clockwise = /// hull points in the original array (since the set of convex hull points is a subset of the original point set). public static int[] ConvexHullIndices(IEnumerable points, bool clockwise = false) { - if (points == null) + if (points is null) throw new ArgumentNullException(nameof(points)); var pointsArray = points.ToArray(); @@ -3619,7 +3641,7 @@ public static int[] ConvexHullIndices(IEnumerable points, bool clockwise /// hull points in the original array (since the set of convex hull points is a subset of the original point set). public static int[] ConvexHullIndices(IEnumerable points, bool clockwise = false) { - if (points == null) + if (points is null) throw new ArgumentNullException(nameof(points)); var pointsArray = points.ToArray(); @@ -3647,11 +3669,11 @@ public static int[] ConvexHullIndices(IEnumerable points, bool clockwis /// public static void ConvexityDefects(InputArray contour, InputArray convexHull, OutputArray convexityDefects) { - if (contour == null) + if (contour is null) throw new ArgumentNullException(nameof(contour)); - if (convexHull == null) + if (convexHull is null) throw new ArgumentNullException(nameof(convexHull)); - if (convexityDefects == null) + if (convexityDefects is null) throw new ArgumentNullException(nameof(convexityDefects)); contour.ThrowIfDisposed(); convexHull.ThrowIfDisposed(); @@ -3681,9 +3703,9 @@ public static void ConvexityDefects(InputArray contour, InputArray convexHull, O /// That is, to get the floating-point value of the depth will be fixpt_depth/256.0. public static Vec4i[] ConvexityDefects(IEnumerable contour, IEnumerable convexHull) { - if (contour == null) + if (contour is null) throw new ArgumentNullException(nameof(contour)); - if (convexHull == null) + if (convexHull is null) throw new ArgumentNullException(nameof(convexHull)); var contourArray = contour.ToArray(); @@ -3712,9 +3734,9 @@ public static Vec4i[] ConvexityDefects(IEnumerable contour, IEnumerable public static Vec4i[] ConvexityDefects(IEnumerable contour, IEnumerable convexHull) { - if (contour == null) + if (contour is null) throw new ArgumentNullException(nameof(contour)); - if (convexHull == null) + if (convexHull is null) throw new ArgumentNullException(nameof(convexHull)); var contourArray = contour.ToArray(); @@ -3735,7 +3757,7 @@ public static Vec4i[] ConvexityDefects(IEnumerable contour, IEnumerable /// public static bool IsContourConvex(InputArray contour) { - if (contour == null) + if (contour is null) throw new ArgumentNullException(nameof(contour)); contour.ThrowIfDisposed(); @@ -3754,7 +3776,7 @@ public static bool IsContourConvex(InputArray contour) /// public static bool IsContourConvex(IEnumerable contour) { - if (contour == null) + if (contour is null) throw new ArgumentNullException(nameof(contour)); var contourArray = contour.ToArray(); @@ -3771,7 +3793,7 @@ public static bool IsContourConvex(IEnumerable contour) /// public static bool IsContourConvex(IEnumerable contour) { - if (contour == null) + if (contour is null) throw new ArgumentNullException(nameof(contour)); var contourArray = contour.ToArray(); @@ -3790,11 +3812,11 @@ public static bool IsContourConvex(IEnumerable contour) /// public static float IntersectConvexConvex(InputArray p1, InputArray p2, OutputArray p12, bool handleNested = true) { - if (p1 == null) + if (p1 is null) throw new ArgumentNullException(nameof(p1)); - if (p2 == null) + if (p2 is null) throw new ArgumentNullException(nameof(p2)); - if (p12 == null) + if (p12 is null) throw new ArgumentNullException(nameof(p12)); p1.ThrowIfDisposed(); p2.ThrowIfDisposed(); @@ -3822,9 +3844,9 @@ public static float IntersectConvexConvex(InputArray p1, InputArray p2, OutputAr public static float IntersectConvexConvex(IEnumerable p1, IEnumerable p2, out Point[] p12, bool handleNested = true) { - if (p1 == null) + if (p1 is null) throw new ArgumentNullException(nameof(p1)); - if (p2 == null) + if (p2 is null) throw new ArgumentNullException(nameof(p2)); var p1Array = p1.ToArray(); var p2Array = p2.ToArray(); @@ -3850,9 +3872,9 @@ public static float IntersectConvexConvex(IEnumerable p1, IEnumerable p1, IEnumerable p2, out Point2f[] p12, bool handleNested = true) { - if (p1 == null) + if (p1 is null) throw new ArgumentNullException(nameof(p1)); - if (p2 == null) + if (p2 is null) throw new ArgumentNullException(nameof(p2)); var p1Array = p1.ToArray(); var p2Array = p2.ToArray(); @@ -3875,7 +3897,7 @@ public static float IntersectConvexConvex(IEnumerable p1, IEnumerable

public static RotatedRect FitEllipse(InputArray points) { - if (points == null) + if (points is null) throw new ArgumentNullException(nameof(points)); points.ThrowIfDisposed(); @@ -3893,7 +3915,7 @@ public static RotatedRect FitEllipse(InputArray points) /// public static RotatedRect FitEllipse(IEnumerable points) { - if (points == null) + if (points is null) throw new ArgumentNullException(nameof(points)); var pointsArray = points.ToArray(); @@ -3909,7 +3931,7 @@ public static RotatedRect FitEllipse(IEnumerable points) /// public static RotatedRect FitEllipse(IEnumerable points) { - if (points == null) + if (points is null) throw new ArgumentNullException(nameof(points)); var pointsArray = points.ToArray(); @@ -3929,7 +3951,7 @@ public static RotatedRect FitEllipse(IEnumerable points) /// public static RotatedRect FitEllipseAMS(InputArray points) { - if (points == null) + if (points is null) throw new ArgumentNullException(nameof(points)); points.ThrowIfDisposed(); @@ -3951,7 +3973,7 @@ public static RotatedRect FitEllipseAMS(InputArray points) /// public static RotatedRect FitEllipseAMS(IEnumerable points) { - if (points == null) + if (points is null) throw new ArgumentNullException(nameof(points)); var pointsArray = points.ToArray(); @@ -3971,7 +3993,7 @@ public static RotatedRect FitEllipseAMS(IEnumerable points) /// public static RotatedRect FitEllipseAMS(IEnumerable points) { - if (points == null) + if (points is null) throw new ArgumentNullException(nameof(points)); var pointsArray = points.ToArray(); @@ -3991,7 +4013,7 @@ public static RotatedRect FitEllipseAMS(IEnumerable points) /// public static RotatedRect FitEllipseDirect(InputArray points) { - if (points == null) + if (points is null) throw new ArgumentNullException(nameof(points)); points.ThrowIfDisposed(); @@ -4013,7 +4035,7 @@ public static RotatedRect FitEllipseDirect(InputArray points) /// public static RotatedRect FitEllipseDirect(IEnumerable points) { - if (points == null) + if (points is null) throw new ArgumentNullException(nameof(points)); var pointsArray = points.ToArray(); @@ -4033,7 +4055,7 @@ public static RotatedRect FitEllipseDirect(IEnumerable points) /// public static RotatedRect FitEllipseDirect(IEnumerable points) { - if (points == null) + if (points is null) throw new ArgumentNullException(nameof(points)); var pointsArray = points.ToArray(); @@ -4063,9 +4085,9 @@ public static RotatedRect FitEllipseDirect(IEnumerable points) public static void FitLine(InputArray points, OutputArray line, DistanceTypes distType, double param, double reps, double aeps) { - if (points == null) + if (points is null) throw new ArgumentNullException(nameof(points)); - if (line == null) + if (line is null) throw new ArgumentNullException(nameof(line)); points.ThrowIfDisposed(); line.ThrowIfNotReady(); @@ -4094,7 +4116,7 @@ public static void FitLine(InputArray points, OutputArray line, DistanceTypes di public static Line2D FitLine(IEnumerable points, DistanceTypes distType, double param, double reps, double aeps) { - if (points == null) + if (points is null) throw new ArgumentNullException(nameof(points)); var pointsArray = points.ToArray(); var line = new float[4]; @@ -4119,7 +4141,7 @@ public static Line2D FitLine(IEnumerable points, DistanceTypes distType, public static Line2D FitLine(IEnumerable points, DistanceTypes distType, double param, double reps, double aeps) { - if (points == null) + if (points is null) throw new ArgumentNullException(nameof(points)); var pointsArray = points.ToArray(); var line = new float[4]; @@ -4144,7 +4166,7 @@ public static Line2D FitLine(IEnumerable points, DistanceTypes distType public static Line3D FitLine(IEnumerable points, DistanceTypes distType, double param, double reps, double aeps) { - if (points == null) + if (points is null) throw new ArgumentNullException(nameof(points)); var pointsArray = points.ToArray(); var line = new float[6]; @@ -4169,7 +4191,7 @@ public static Line3D FitLine(IEnumerable points, DistanceTypes distType public static Line3D FitLine(IEnumerable points, DistanceTypes distType, double param, double reps, double aeps) { - if (points == null) + if (points is null) throw new ArgumentNullException(nameof(points)); var pointsArray = points.ToArray(); var line = new float[6]; @@ -4188,7 +4210,7 @@ public static Line3D FitLine(IEnumerable points, DistanceTypes distType /// public static double PointPolygonTest(InputArray contour, Point2f pt, bool measureDist) { - if (contour == null) + if (contour is null) throw new ArgumentNullException(nameof(contour)); contour.ThrowIfDisposed(); NativeMethods.HandleException( @@ -4207,7 +4229,7 @@ public static double PointPolygonTest(InputArray contour, Point2f pt, bool measu /// public static double PointPolygonTest(IEnumerable contour, Point2f pt, bool measureDist) { - if (contour == null) + if (contour is null) throw new ArgumentNullException(nameof(contour)); var contourArray = contour.ToArray(); NativeMethods.HandleException( @@ -4228,7 +4250,7 @@ public static double PointPolygonTest(IEnumerable contour, Point2f pt, bo /// Positive (inside), negative (outside), or zero (on an edge) value. public static double PointPolygonTest(IEnumerable contour, Point2f pt, bool measureDist) { - if (contour == null) + if (contour is null) throw new ArgumentNullException(nameof(contour)); var contourArray = contour.ToArray(); NativeMethods.HandleException( @@ -4254,7 +4276,7 @@ public static double PointPolygonTest(IEnumerable contour, Point2f pt, public static RectanglesIntersectTypes RotatedRectangleIntersection( RotatedRect rect1, RotatedRect rect2, OutputArray intersectingRegion) { - if (intersectingRegion == null) + if (intersectingRegion is null) throw new ArgumentNullException(nameof(intersectingRegion)); intersectingRegion.ThrowIfNotReady(); @@ -4301,9 +4323,9 @@ public static RectanglesIntersectTypes RotatedRectangleIntersection( /// colormap The colormap to apply public static void ApplyColorMap(InputArray src, OutputArray dst, ColormapTypes colormap) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -4324,11 +4346,11 @@ public static void ApplyColorMap(InputArray src, OutputArray dst, ColormapTypes /// The colormap to apply of type CV_8UC1 or CV_8UC3 and size 256 public static void ApplyColorMap(InputArray src, OutputArray dst, InputArray userColor) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); - if (userColor == null) + if (userColor is null) throw new ArgumentNullException(nameof(userColor)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -4376,7 +4398,7 @@ public static void Line( InputOutputArray img, Point pt1, Point pt2, Scalar color, int thickness = 1, LineTypes lineType = LineTypes.Link8, int shift = 0) { - if (img == null) + if (img is null) throw new ArgumentNullException(nameof(img)); img.ThrowIfNotReady(); @@ -4409,7 +4431,7 @@ public static void ArrowedLine( int shift = 0, double tipLength = 0.1) { - if (img == null) + if (img is null) throw new ArgumentNullException(nameof(img)); img.ThrowIfNotReady(); @@ -4435,7 +4457,7 @@ public static void Rectangle( InputOutputArray img, Point pt1, Point pt2, Scalar color, int thickness = 1, LineTypes lineType = LineTypes.Link8, int shift = 0) { - if (img == null) + if (img is null) throw new ArgumentNullException(nameof(img)); NativeMethods.HandleException( @@ -4460,7 +4482,7 @@ public static void Rectangle( InputOutputArray img, Rect rect, Scalar color, int thickness = 1, LineTypes lineType = LineTypes.Link8, int shift = 0) { - if (img == null) + if (img is null) throw new ArgumentNullException(nameof(img)); NativeMethods.HandleException( @@ -4483,7 +4505,7 @@ public static void Rectangle( public static void Rectangle( Mat img, Rect rect, Scalar color, int thickness = 1, LineTypes lineType = LineTypes.Link8, int shift = 0) { - if (img == null) + if (img is null) throw new ArgumentNullException(nameof(img)); NativeMethods.HandleException( @@ -4506,7 +4528,7 @@ public static void Rectangle( Mat img, Point pt1, Point pt2, Scalar color, int thickness = 1, LineTypes lineType = LineTypes.Link8, int shift = 0) { - if (img == null) + if (img is null) throw new ArgumentNullException(nameof(img)); NativeMethods.HandleException( @@ -4544,7 +4566,7 @@ public static void Circle(InputOutputArray img, int centerX, int centerY, int ra public static void Circle(InputOutputArray img, Point center, int radius, Scalar color, int thickness = 1, LineTypes lineType = LineTypes.Link8, int shift = 0) { - if (img == null) + if (img is null) throw new ArgumentNullException(nameof(img)); img.ThrowIfDisposed(); @@ -4571,7 +4593,7 @@ public static void Ellipse( InputOutputArray img, Point center, Size axes, double angle, double startAngle, double endAngle, Scalar color, int thickness = 1, LineTypes lineType = LineTypes.Link8, int shift = 0) { - if (img == null) + if (img is null) throw new ArgumentNullException(nameof(img)); img.ThrowIfNotReady(); @@ -4594,7 +4616,7 @@ public static void Ellipse( public static void Ellipse(InputOutputArray img, RotatedRect box, Scalar color, int thickness = 1, LineTypes lineType = LineTypes.Link8) { - if (img == null) + if (img is null) throw new ArgumentNullException(nameof(img)); img.ThrowIfDisposed(); @@ -4621,7 +4643,7 @@ public static void DrawMarker( InputOutputArray img, Point position, Scalar color, MarkerTypes markerType = MarkerTypes.Cross, int markerSize = 20, int thickness = 1, LineTypes lineType = LineTypes.Link8) { - if (img == null) + if (img is null) throw new ArgumentNullException(nameof(img)); img.ThrowIfDisposed(); @@ -4644,7 +4666,7 @@ public static void DrawMarker( public static void FillConvexPoly(Mat img, IEnumerable pts, Scalar color, LineTypes lineType = LineTypes.Link8, int shift = 0) { - if (img == null) + if (img is null) throw new ArgumentNullException(nameof(img)); img.ThrowIfDisposed(); @@ -4666,9 +4688,9 @@ public static void FillConvexPoly(Mat img, IEnumerable pts, Scalar color, public static void FillConvexPoly(InputOutputArray img, InputArray pts, Scalar color, LineTypes lineType = LineTypes.Link8, int shift = 0) { - if (img == null) + if (img is null) throw new ArgumentNullException(nameof(img)); - if (pts == null) + if (pts is null) throw new ArgumentNullException(nameof(pts)); img.ThrowIfDisposed(); pts.ThrowIfDisposed(); @@ -4693,9 +4715,9 @@ public static void FillPoly( Mat img, IEnumerable> pts, Scalar color, LineTypes lineType = LineTypes.Link8, int shift = 0, Point? offset = null) { - if (img == null) + if (img is null) throw new ArgumentNullException(nameof(img)); - if (pts == null) + if (pts is null) throw new ArgumentNullException(nameof(pts)); img.ThrowIfDisposed(); @@ -4734,9 +4756,9 @@ public static void FillPoly( InputOutputArray img, InputArray pts, Scalar color, LineTypes lineType = LineTypes.Link8, int shift = 0, Point? offset = null) { - if (img == null) + if (img is null) throw new ArgumentNullException(nameof(img)); - if (pts == null) + if (pts is null) throw new ArgumentNullException(nameof(pts)); img.ThrowIfDisposed(); pts.ThrowIfDisposed(); @@ -4769,9 +4791,9 @@ public static void Polylines( LineTypes lineType = LineTypes.Link8, int shift = 0) { - if (img == null) + if (img is null) throw new ArgumentNullException(nameof(img)); - if (pts == null) + if (pts is null) throw new ArgumentNullException(nameof(pts)); img.ThrowIfDisposed(); @@ -4808,9 +4830,9 @@ public static void Polylines( InputOutputArray img, InputArray pts, bool isClosed, Scalar color, int thickness = 1, LineTypes lineType = LineTypes.Link8, int shift = 0) { - if (img == null) + if (img is null) throw new ArgumentNullException(nameof(img)); - if (pts == null) + if (pts is null) throw new ArgumentNullException(nameof(pts)); img.ThrowIfDisposed(); pts.ThrowIfDisposed(); @@ -4850,9 +4872,9 @@ public static void DrawContours( int maxLevel = int.MaxValue, Point? offset = null) { - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); - if (contours == null) + if (contours is null) throw new ArgumentNullException(nameof(contours)); image.ThrowIfNotReady(); @@ -4861,7 +4883,7 @@ public static void DrawContours( var contourSize2 = contoursArray.Select(pts => pts.Length).ToArray(); using (var contoursPtr = new ArrayAddress2(contoursArray)) { - if (hierarchy == null) + if (hierarchy is null) { NativeMethods.HandleException( NativeMethods.imgproc_drawContours_vector( @@ -4908,9 +4930,9 @@ public static void DrawContours( int maxLevel = int.MaxValue, Point? offset = null) { - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); - if (contours == null) + if (contours is null) throw new ArgumentNullException(nameof(contours)); image.ThrowIfNotReady(); @@ -5014,7 +5036,7 @@ public static void PutText(InputOutputArray img, string text, Point org, HersheyFonts fontFace, double fontScale, Scalar color, int thickness = 1, LineTypes lineType = LineTypes.Link8, bool bottomLeftOrigin = false) { - if (img == null) + if (img is null) throw new ArgumentNullException(nameof(img)); if (string.IsNullOrEmpty(text)) throw new ArgumentNullException(text); diff --git a/src/OpenCvSharp/Cv2/Cv2_objdetect.cs b/src/OpenCvSharp/Cv2/Cv2_objdetect.cs index dcec158cb..eed20bc6a 100644 --- a/src/OpenCvSharp/Cv2/Cv2_objdetect.cs +++ b/src/OpenCvSharp/Cv2/Cv2_objdetect.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Generic; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; using OpenCvSharp.Internal.Vectors; namespace OpenCvSharp; @@ -15,7 +13,7 @@ static partial class Cv2 /// public static void GroupRectangles(IList rectList, int groupThreshold, double eps = 0.2) { - if (rectList == null) + if (rectList is null) throw new ArgumentNullException(nameof(rectList)); using var rectListVec = new VectorOfRect(rectList); @@ -35,7 +33,7 @@ public static void GroupRectangles(IList rectList, int groupThreshold, dou /// Relative difference between sides of the rectangles to merge them into a group. public static void GroupRectangles(IList rectList, out int[] weights, int groupThreshold, double eps = 0.2) { - if (rectList == null) + if (rectList is null) throw new ArgumentNullException(nameof(rectList)); using var rectListVec = new VectorOfRect(rectList); @@ -58,7 +56,7 @@ public static void GroupRectangles(IList rectList, out int[] weights, int /// public static void GroupRectangles(IList rectList, int groupThreshold, double eps, out int[] weights, out double[] levelWeights) { - if (rectList == null) + if (rectList is null) throw new ArgumentNullException(nameof(rectList)); using var rectListVec = new VectorOfRect(rectList); @@ -84,7 +82,7 @@ public static void GroupRectangles(IList rectList, int groupThreshold, dou /// public static void GroupRectangles(IList rectList, out int[] rejectLevels, out double[] levelWeights, int groupThreshold, double eps = 0.2) { - if (rectList == null) + if (rectList is null) throw new ArgumentNullException(nameof(rectList)); using var rectListVec = new VectorOfRect(rectList); @@ -111,7 +109,7 @@ public static void GroupRectangles(IList rectList, out int[] rejectLevels, public static void GroupRectanglesMeanshift(IList rectList, out double[] foundWeights, out double[] foundScales, double detectThreshold = 0.0, Size? winDetSize = null) { - if (rectList == null) + if (rectList is null) throw new ArgumentNullException(nameof(rectList)); var winDetSize0 = winDetSize.GetValueOrDefault(new Size(64, 128)); diff --git a/src/OpenCvSharp/Cv2/Cv2_photo.cs b/src/OpenCvSharp/Cv2/Cv2_photo.cs index b643f4866..23a08faee 100644 --- a/src/OpenCvSharp/Cv2/Cv2_photo.cs +++ b/src/OpenCvSharp/Cv2/Cv2_photo.cs @@ -1,6 +1,3 @@ -using System; -using System.Collections.Generic; -using System.Linq; using OpenCvSharp.Internal; namespace OpenCvSharp; diff --git a/src/OpenCvSharp/Cv2/Cv2_video.cs b/src/OpenCvSharp/Cv2/Cv2_video.cs index 75c81ea6f..48f63195e 100644 --- a/src/OpenCvSharp/Cv2/Cv2_video.cs +++ b/src/OpenCvSharp/Cv2/Cv2_video.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; using OpenCvSharp.Internal.Vectors; namespace OpenCvSharp; @@ -17,7 +16,7 @@ static partial class Cv2 public static RotatedRect CamShift( InputArray probImage, ref Rect window, TermCriteria criteria) { - if (probImage == null) + if (probImage is null) throw new ArgumentNullException(nameof(probImage)); probImage.ThrowIfDisposed(); @@ -38,7 +37,7 @@ public static RotatedRect CamShift( public static int MeanShift( InputArray probImage, ref Rect window, TermCriteria criteria) { - if (probImage == null) + if (probImage is null) throw new ArgumentNullException(nameof(probImage)); probImage.ThrowIfDisposed(); @@ -74,9 +73,9 @@ public static int BuildOpticalFlowPyramid( BorderTypes derivBorder = BorderTypes.Constant, bool tryReuseInputImage = true) { - if (img == null) + if (img is null) throw new ArgumentNullException(nameof(img)); - if (pyramid == null) + if (pyramid is null) throw new ArgumentNullException(nameof(pyramid)); img.ThrowIfDisposed(); pyramid.ThrowIfNotReady(); @@ -115,7 +114,7 @@ public static int BuildOpticalFlowPyramid( BorderTypes derivBorder = BorderTypes.Constant, bool tryReuseInputImage = true) { - if (img == null) + if (img is null) throw new ArgumentNullException(nameof(img)); img.ThrowIfDisposed(); @@ -153,17 +152,17 @@ public static void CalcOpticalFlowPyrLK( OpticalFlowFlags flags = OpticalFlowFlags.None, double minEigThreshold = 1e-4) { - if (prevImg == null) + if (prevImg is null) throw new ArgumentNullException(nameof(prevImg)); - if (nextImg == null) + if (nextImg is null) throw new ArgumentNullException(nameof(nextImg)); - if (prevPts == null) + if (prevPts is null) throw new ArgumentNullException(nameof(prevPts)); - if (nextPts == null) + if (nextPts is null) throw new ArgumentNullException(nameof(nextPts)); - if (status == null) + if (status is null) throw new ArgumentNullException(nameof(status)); - if (err == null) + if (err is null) throw new ArgumentNullException(nameof(err)); prevImg.ThrowIfDisposed(); nextImg.ThrowIfDisposed(); @@ -215,13 +214,13 @@ public static void CalcOpticalFlowPyrLK( OpticalFlowFlags flags = OpticalFlowFlags.None, double minEigThreshold = 1e-4) { - if (prevImg == null) + if (prevImg is null) throw new ArgumentNullException(nameof(prevImg)); - if (nextImg == null) + if (nextImg is null) throw new ArgumentNullException(nameof(nextImg)); - if (prevPts == null) + if (prevPts is null) throw new ArgumentNullException(nameof(prevPts)); - if (nextPts == null) + if (nextPts is null) throw new ArgumentNullException(nameof(nextPts)); prevImg.ThrowIfDisposed(); nextImg.ThrowIfDisposed(); @@ -269,11 +268,11 @@ public static void CalcOpticalFlowFarneback(InputArray prev, InputArray next, InputOutputArray flow, double pyrScale, int levels, int winsize, int iterations, int polyN, double polySigma, OpticalFlowFlags flags) { - if (prev == null) + if (prev is null) throw new ArgumentNullException(nameof(prev)); - if (next == null) + if (next is null) throw new ArgumentNullException(nameof(next)); - if (flow == null) + if (flow is null) throw new ArgumentNullException(nameof(flow)); prev.ThrowIfDisposed(); next.ThrowIfDisposed(); @@ -297,9 +296,9 @@ public static void CalcOpticalFlowFarneback(InputArray prev, InputArray next, /// public static double ComputeECC(InputArray templateImage, InputArray inputImage, InputArray? inputMask = null) { - if (templateImage == null) + if (templateImage is null) throw new ArgumentNullException(nameof(templateImage)); - if (inputImage == null) + if (inputImage is null) throw new ArgumentNullException(nameof(inputImage)); templateImage.ThrowIfDisposed(); inputImage.ThrowIfDisposed(); @@ -339,11 +338,11 @@ public static double FindTransformECC( InputArray? inputMask = null, int gaussFiltSize = 5) { - if (templateImage == null) + if (templateImage is null) throw new ArgumentNullException(nameof(templateImage)); - if (inputImage == null) + if (inputImage is null) throw new ArgumentNullException(nameof(inputImage)); - if (warpMatrix == null) + if (warpMatrix is null) throw new ArgumentNullException(nameof(warpMatrix)); templateImage.ThrowIfDisposed(); inputImage.ThrowIfDisposed(); @@ -385,11 +384,11 @@ public static double FindTransformECC( TermCriteria? criteria = null, InputArray? inputMask = null) { - if (templateImage == null) + if (templateImage is null) throw new ArgumentNullException(nameof(templateImage)); - if (inputImage == null) + if (inputImage is null) throw new ArgumentNullException(nameof(inputImage)); - if (warpMatrix == null) + if (warpMatrix is null) throw new ArgumentNullException(nameof(warpMatrix)); templateImage.ThrowIfDisposed(); inputImage.ThrowIfDisposed(); diff --git a/src/OpenCvSharp/Fundamentals/CvObject.cs b/src/OpenCvSharp/Fundamentals/CvObject.cs index 040077b0b..128d70720 100644 --- a/src/OpenCvSharp/Fundamentals/CvObject.cs +++ b/src/OpenCvSharp/Fundamentals/CvObject.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.CodeAnalysis; namespace OpenCvSharp; @@ -33,8 +32,5 @@ protected CvObject(IntPtr ptr) ///

/// Native pointer of OpenCV structure /// - public IntPtr CvPtr - { - get { return ptr; } - } + public IntPtr CvPtr => ptr; } diff --git a/src/OpenCvSharp/Fundamentals/DisposableCvObject.cs b/src/OpenCvSharp/Fundamentals/DisposableCvObject.cs index 18da8af82..e96eb1dfe 100644 --- a/src/OpenCvSharp/Fundamentals/DisposableCvObject.cs +++ b/src/OpenCvSharp/Fundamentals/DisposableCvObject.cs @@ -1,6 +1,4 @@ -using System; - -#pragma warning disable CA1051 // Do not declare visible instance fields +#pragma warning disable CA1051 // Do not declare visible instance fields #pragma warning disable CA2216 namespace OpenCvSharp; diff --git a/src/OpenCvSharp/Fundamentals/DisposableObject.cs b/src/OpenCvSharp/Fundamentals/DisposableObject.cs index 63d3f81ef..387c3f4c6 100644 --- a/src/OpenCvSharp/Fundamentals/DisposableObject.cs +++ b/src/OpenCvSharp/Fundamentals/DisposableObject.cs @@ -1,6 +1,4 @@ -using System; -using System.Runtime.InteropServices; -using System.Threading; +using System.Runtime.InteropServices; #pragma warning disable CA1805 // Do not initialize unnecessarily. @@ -139,7 +137,7 @@ protected virtual void DisposeUnmanaged() // ReSharper disable once InconsistentNaming protected internal GCHandle AllocGCHandle(object obj) { - if (obj == null) + if (obj is null) throw new ArgumentNullException(nameof(obj)); if (DataHandle.IsAllocated) diff --git a/src/OpenCvSharp/Fundamentals/ICvPtrHolder.cs b/src/OpenCvSharp/Fundamentals/ICvPtrHolder.cs index 6a22abc12..1167f3dc5 100644 --- a/src/OpenCvSharp/Fundamentals/ICvPtrHolder.cs +++ b/src/OpenCvSharp/Fundamentals/ICvPtrHolder.cs @@ -1,6 +1,4 @@ -using System; - -namespace OpenCvSharp; +namespace OpenCvSharp; /// /// Represents a OpenCV-based class which has a native pointer. diff --git a/src/OpenCvSharp/Fundamentals/MatMemoryManager.cs b/src/OpenCvSharp/Fundamentals/MatMemoryManager.cs new file mode 100644 index 000000000..ab25e1967 --- /dev/null +++ b/src/OpenCvSharp/Fundamentals/MatMemoryManager.cs @@ -0,0 +1,62 @@ +using System.Buffers; + +namespace OpenCvSharp; + +/// +/// A MemoryManager over an OpenCvSharpMat +/// +/// The pointer is assumed to be fully unmanaged, or externally pinned - no attempt will be made to pin this data +public sealed unsafe class MatMemoryManager : MemoryManager + where T : unmanaged +{ + private readonly Mat wrapped; + + /// + /// Create a new UnmanagedMemoryManager instance at the given pointer and size + /// + /// It is assumed that the span provided is already unmanaged or externally pinned + public MatMemoryManager(Mat mat, bool isDataOwner = true) + { + if (mat is null) + throw new ArgumentNullException(nameof(mat)); + if (!mat.IsContinuous()) + throw new ArgumentException("mat is not continuous", nameof(mat)); + + wrapped = isDataOwner ? mat : new Mat(mat); + } + + /// + public override Span GetSpan() => new((void*)wrapped.Data, (int)wrapped.Total()); + + /// + /// Provides access to a pointer that represents the data (note: no actual pin occurs) + /// + public override MemoryHandle Pin(int elementIndex = 0) + { + if (elementIndex < 0 || elementIndex >= wrapped.Total()) + throw new ArgumentOutOfRangeException(nameof(elementIndex)); + + var dims = wrapped.Dims; + var idxs = new int[dims]; + var remainIdx = elementIndex; + for (var dim = dims - 1; dim >= 0; dim--) + { + remainIdx = Math.DivRem(remainIdx, wrapped.Size(dim), out idxs[dim]); + } + + return new MemoryHandle((void*)wrapped.Ptr(idxs)); + } + + /// + /// Has no effect + /// + public override void Unpin() + { + } + + /// + /// Releases all resources associated with this object + /// + protected override void Dispose(bool disposing) + => wrapped.Dispose(); +} diff --git a/src/OpenCvSharp/Fundamentals/OpenCVException.cs b/src/OpenCvSharp/Fundamentals/OpenCVException.cs index 54e377b6f..0df09a81c 100644 --- a/src/OpenCvSharp/Fundamentals/OpenCVException.cs +++ b/src/OpenCvSharp/Fundamentals/OpenCVException.cs @@ -1,5 +1,4 @@ -using System; -using System.Runtime.Serialization; +using System.Runtime.Serialization; namespace OpenCvSharp; diff --git a/src/OpenCvSharp/Fundamentals/OpenCvSharpException.cs b/src/OpenCvSharp/Fundamentals/OpenCvSharpException.cs index e3f285f16..44e6c33dc 100644 --- a/src/OpenCvSharp/Fundamentals/OpenCvSharpException.cs +++ b/src/OpenCvSharp/Fundamentals/OpenCvSharpException.cs @@ -1,5 +1,4 @@ -using System; -using System.Runtime.Serialization; +using System.Runtime.Serialization; namespace OpenCvSharp; diff --git a/src/OpenCvSharp/Fundamentals/Ptr.cs b/src/OpenCvSharp/Fundamentals/Ptr.cs index a4481688f..9d508145c 100644 --- a/src/OpenCvSharp/Fundamentals/Ptr.cs +++ b/src/OpenCvSharp/Fundamentals/Ptr.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.CodeAnalysis; namespace OpenCvSharp; diff --git a/src/OpenCvSharp/Fundamentals/ResourcesTracker.cs b/src/OpenCvSharp/Fundamentals/ResourcesTracker.cs index b3b5bf1ef..8150d0ff2 100644 --- a/src/OpenCvSharp/Fundamentals/ResourcesTracker.cs +++ b/src/OpenCvSharp/Fundamentals/ResourcesTracker.cs @@ -1,6 +1,3 @@ -using System; -using System.Collections.Generic; - namespace OpenCvSharp; /// @@ -20,7 +17,7 @@ public sealed class ResourcesTracker : IDisposable public TCvObject T(TCvObject obj) where TCvObject : DisposableObject { - if (obj == null) + if (obj is null) throw new ArgumentNullException(nameof(obj)); lock (asyncLock) @@ -39,7 +36,7 @@ public TCvObject T(TCvObject obj) public TCvObject[] T(TCvObject[] objects) where TCvObject : DisposableObject { - if (objects == null) + if (objects is null) throw new ArgumentNullException(nameof(objects)); foreach (var obj in objects) diff --git a/src/OpenCvSharp/Internal/PInvoke/ExceptionHandler.cs b/src/OpenCvSharp/Internal/PInvoke/ExceptionHandler.cs index fec662b84..3e18b947a 100644 --- a/src/OpenCvSharp/Internal/PInvoke/ExceptionHandler.cs +++ b/src/OpenCvSharp/Internal/PInvoke/ExceptionHandler.cs @@ -1,81 +1,79 @@ #if DOTNETCORE -using System; -using System.Threading; -namespace OpenCvSharp.Internal +namespace OpenCvSharp.Internal; + +/// +/// This static class defines one instance which than can be used by multiple threads to gather exception information from OpenCV +/// Implemented as a singleton +/// +public static class ExceptionHandler { + // ThreadLocal variables to save the exception for the current thread + private static readonly ThreadLocal exceptionHappened = new(false); + private static readonly ThreadLocal localStatus = new(); + private static readonly ThreadLocal localFuncName = new(); + private static readonly ThreadLocal localErrMsg = new(); + private static readonly ThreadLocal localFileName = new(); + private static readonly ThreadLocal localLine = new(); + /// - /// This static class defines one instance which than can be used by multiple threads to gather exception information from OpenCV - /// Implemented as a singleton + /// Callback function invoked by OpenCV when exception occurs + /// Stores the information locally for every thread /// - public static class ExceptionHandler - { - // ThreadLocal variables to save the exception for the current thread - private static readonly ThreadLocal exceptionHappened = new ThreadLocal(false); - private static readonly ThreadLocal localStatus = new ThreadLocal(); - private static readonly ThreadLocal localFuncName = new ThreadLocal(); - private static readonly ThreadLocal localErrMsg = new ThreadLocal(); - private static readonly ThreadLocal localFileName = new ThreadLocal(); - private static readonly ThreadLocal localLine = new ThreadLocal(); - - /// - /// Callback function invoked by OpenCV when exception occurs - /// Stores the information locally for every thread - /// - public static readonly CvErrorCallback ErrorHandlerCallback = - delegate (ErrorCode status, string funcName, string errMsg, string fileName, int line, IntPtr userData) - { - try - { - return 0; - } - finally - { - exceptionHappened.Value = true; - localStatus.Value = status; - localErrMsg.Value = errMsg; - localFileName.Value = fileName; - localLine.Value = line; - localFuncName.Value = funcName; - } - }; - - /// - /// Registers the callback function to OpenCV, so exception caught before the p/invoke boundary - /// - public static void RegisterExceptionCallback() + public static readonly CvErrorCallback ErrorHandlerCallback = + delegate (ErrorCode status, string funcName, string errMsg, string fileName, int line, IntPtr userData) { - IntPtr zero = IntPtr.Zero; - IntPtr ret = NativeMethods.redirectError(ErrorHandlerCallback, zero, ref zero); - } - - /// - /// Throws appropriate exception if one happened - /// - public static void ThrowPossibleException() - { - if (CheckForException()) + try { - throw new OpenCVException( - localStatus.Value, - localFuncName.Value ?? "", - localErrMsg.Value ?? "", - localFileName.Value ?? "", - localLine.Value); + return 0; } - } + finally + { + exceptionHappened.Value = true; + localStatus.Value = status; + localErrMsg.Value = errMsg; + localFileName.Value = fileName; + localLine.Value = line; + localFuncName.Value = funcName; + } + }; - /// - /// Returns a boolean which indicates if an exception occured for the current thread - /// Reading this value changes its state, so an exception is handled only once - /// - private static bool CheckForException() + /// + /// Registers the callback function to OpenCV, so exception caught before the p/invoke boundary + /// + public static void RegisterExceptionCallback() + { + IntPtr zero = IntPtr.Zero; + IntPtr ret = NativeMethods.redirectError(ErrorHandlerCallback, zero, ref zero); + } + + /// + /// Throws appropriate exception if one happened + /// + public static void ThrowPossibleException() + { + if (CheckForException()) { - var value = exceptionHappened.Value; - // reset exception value - exceptionHappened.Value = false; - return value; + throw new OpenCVException( + localStatus.Value, + localFuncName.Value ?? "", + localErrMsg.Value ?? "", + localFileName.Value ?? "", + localLine.Value); } } + + /// + /// Returns a boolean which indicates if an exception occured for the current thread + /// Reading this value changes its state, so an exception is handled only once + /// + private static bool CheckForException() + { + var value = exceptionHappened.Value; + // reset exception value + exceptionHappened.Value = false; + return value; + } } -#endif \ No newline at end of file + +#endif diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods.cs index 2146ddaef..dea202b3c 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; using System.Diagnostics; -using System.Linq; using System.Runtime.InteropServices; using OpenCvSharp.Internal.Util; @@ -96,7 +93,7 @@ public static void LoadLibraries(IEnumerable? additionalPaths = null) return; } - var ap = (additionalPaths == null) ? Array.Empty() : additionalPaths.ToArray(); + var ap = (additionalPaths is null) ? [] : additionalPaths.ToArray(); /* if (Environment.Is64BitProcess) @@ -203,7 +200,7 @@ public static bool IsUnix() /// public static bool IsMono() { - return (Type.GetType("Mono.Runtime") != null); + return (Type.GetType("Mono.Runtime") is not null); } /// diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_aruco.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_aruco.cs index 70a3c0fd9..37f2c8d15 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_aruco.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_aruco.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; using OpenCvSharp.Aruco; @@ -11,13 +10,9 @@ namespace OpenCvSharp.Internal; static partial class NativeMethods { - [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern ExceptionStatus aruco_DetectorParameters_create(out DetectorParameters.NativeStruct returnValue); - - [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus aruco_detectMarkers( - IntPtr image, IntPtr dictionary, IntPtr corners, IntPtr ids, ref DetectorParameters.NativeStruct detectParameters, IntPtr outrejectedImgPoints); + IntPtr image, IntPtr dictionary, IntPtr corners, IntPtr ids, ref DetectorParameters detectParameters, IntPtr outrejectedImgPoints); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus aruco_drawDetectedMarkers( @@ -28,10 +23,7 @@ public static extern ExceptionStatus aruco_drawDetectedMarkers( [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus aruco_drawDetectedMarkers( IntPtr image, [MarshalAs(UnmanagedType.LPArray)] IntPtr[] corners, int cornerSize1, int[] contoursSize2, IntPtr ids, int idxLength, Scalar borderColor); - - [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern ExceptionStatus aruco_drawMarker(IntPtr dictionary, int id, int sidePixels, IntPtr mat, int borderBits); - + [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus aruco_estimatePoseSingleMarkers( [MarshalAs(UnmanagedType.LPArray)] IntPtr[] corners, int cornersLength1, @@ -41,6 +33,9 @@ public static extern ExceptionStatus aruco_estimatePoseSingleMarkers( [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus aruco_getPredefinedDictionary(int name, out IntPtr returnValue); + [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern ExceptionStatus aruco_readDictionary(string dictionaryFile, out IntPtr returnValue); + [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus aruco_detectCharucoDiamond( IntPtr image, [MarshalAs(UnmanagedType.LPArray)] IntPtr[] markerCorners, int markerCornersSize1, int[] markerCornersSize2, @@ -56,11 +51,8 @@ public static extern ExceptionStatus aruco_drawDetectedDiamonds( #region Dictionary [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern ExceptionStatus aruco_Ptr_Dictionary_delete(IntPtr ptr); - - [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern ExceptionStatus aruco_Ptr_Dictionary_get(IntPtr ptr, out IntPtr returnValue); - + public static extern ExceptionStatus aruco_Dictionary_delete(IntPtr ptr); + [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus aruco_Dictionary_setMarkerSize(IntPtr obj, int value); @@ -76,5 +68,41 @@ public static extern ExceptionStatus aruco_drawDetectedDiamonds( [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus aruco_Dictionary_getMaxCorrectionBits(IntPtr obj, out int returnValue); + [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern ExceptionStatus aruco_Dictionary_identify( + IntPtr obj, + IntPtr onlyBits, + out int idx, + out int rotation, + double maxCorrectionRate, + out int returnValue); + + [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern ExceptionStatus aruco_Dictionary_getDistanceToId( + IntPtr obj, + IntPtr bits, + int id, + int allRotations, + out int returnValue); + + [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern ExceptionStatus aruco_Dictionary_generateImageMarker( + IntPtr obj, + int id, + int sidePixels, + IntPtr img, + int borderBits); + + [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern ExceptionStatus aruco_Dictionary_getByteListFromBits( + IntPtr bits, + IntPtr returnValue); + + [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern ExceptionStatus aruco_Dictionary_getBitsFromByteList( + IntPtr byteList, + int markerSize, + IntPtr returnValue); + #endregion } diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_bgsegm.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_bgsegm.cs index 87f9099a5..293ac15ce 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_bgsegm.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_bgsegm.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_dnn_superres.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_dnn_superres.cs index b999a7586..f22b51497 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_dnn_superres.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_dnn_superres.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_flann.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_flann.cs index 71181ecce..bcce11dba 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_flann.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_flann.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; using OpenCvSharp.Flann; diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_highgui.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_highgui.cs index 2679d8813..b3f00c3a5 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_highgui.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_highgui.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_img_hash.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_img_hash.cs index 7485d1f25..b3ccbf99d 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_img_hash.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_img_hash.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_imgcodecs.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_imgcodecs.cs index 913cee1f0..eb1cbd94f 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_imgcodecs.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_imgcodecs.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_line_descriptor.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_line_descriptor.cs index 027745e28..1d9dda0af 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_line_descriptor.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_line_descriptor.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_optflow.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_optflow.cs index d2c8da18b..f6b50644c 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_optflow.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_optflow.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_quality.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_quality.cs index 17d150d48..f7687d45e 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_quality.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_quality.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_stdstring.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_stdstring.cs index 71e38c929..6a2dc7539 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_stdstring.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_stdstring.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_stdvector.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_stdvector.cs index 195c2e9ae..85560120e 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_stdvector.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_stdvector.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; using OpenCvSharp.Detail; diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_videoio.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_videoio.cs index e26f703e6..ab7cd1834 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_videoio.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_videoio.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_wechat_qrcode.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_wechat_qrcode.cs index aecc604eb..ec3b52440 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_wechat_qrcode.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_wechat_qrcode.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 #pragma warning disable CA1401 // P/Invokes should not be visible diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_xfeatures2d.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_xfeatures2d.cs index 240c9c3c8..6ab21a909 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_xfeatures2d.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_xfeatures2d.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_xphoto.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_xphoto.cs index 63223b2c9..c216015e2 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_xphoto.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/NativeMethods_xphoto.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/calib3d/NativeMethods_calib3d.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/calib3d/NativeMethods_calib3d.cs index 671c733d3..8fc13cf28 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/calib3d/NativeMethods_calib3d.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/calib3d/NativeMethods_calib3d.cs @@ -1,6 +1,4 @@ - -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 @@ -463,13 +461,13 @@ public static extern ExceptionStatus calib3d_undistort( public static extern ExceptionStatus calib3d_initUndistortRectifyMap( IntPtr cameraMatrix, IntPtr distCoeffs, IntPtr R, IntPtr newCameraMatrix, - Size size, int m1type, IntPtr map1, IntPtr map2); + Size size, MatType m1type, IntPtr map1, IntPtr map2); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus calib3d_initWideAngleProjMap( IntPtr cameraMatrix, IntPtr distCoeffs, Size imageSize, int destImageWidth, - int m1type, IntPtr map1, IntPtr map2, + MatType m1type, IntPtr map1, IntPtr map2, int projType, double alpha, out float returnValue); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/calib3d/NativeMethods_calib3d_StereoMatcher.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/calib3d/NativeMethods_calib3d_StereoMatcher.cs index a673d3991..a643bae05 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/calib3d/NativeMethods_calib3d_StereoMatcher.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/calib3d/NativeMethods_calib3d_StereoMatcher.cs @@ -1,6 +1,4 @@ - -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/calib3d/NativeMethods_calib3d_fisheye.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/calib3d/NativeMethods_calib3d_fisheye.cs index 27184627c..e0e0d776b 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/calib3d/NativeMethods_calib3d_fisheye.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/calib3d/NativeMethods_calib3d_fisheye.cs @@ -1,6 +1,4 @@ - -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/core/NativeMethods_core.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/core/NativeMethods_core.cs index efb9e471e..6e2ba9a91 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/core/NativeMethods_core.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/core/NativeMethods_core.cs @@ -1,7 +1,5 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; -using System.Text; #pragma warning disable 1591 #pragma warning disable CA1401 // P/Invokes should not be visible @@ -12,6 +10,9 @@ namespace OpenCvSharp.Internal; static partial class NativeMethods { + [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern RotatedRect core_RotatedRect_byThreeVertexPoints(Point2f p1, Point2f p2, Point2f p3); + #region utility.hpp [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] @@ -19,10 +20,7 @@ static partial class NativeMethods [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern IntPtr redirectError(CvErrorCallback errCallback, IntPtr userdata, ref IntPtr prevUserdata); - - [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, BestFitMapping = false, ThrowOnUnmappableChar = true, ExactSpelling = true)] - public static extern ExceptionStatus core_glob([MarshalAs(UnmanagedType.LPStr)] string pattern, IntPtr result, int recursive); - + [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus core_setNumThreads(int nthreads); @@ -36,7 +34,7 @@ static partial class NativeMethods public static extern ExceptionStatus core_getBuildInformation(IntPtr buf); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, BestFitMapping = false, ThrowOnUnmappableChar = true, ExactSpelling = true)] - public static unsafe extern ExceptionStatus core_getVersionString(byte* buf, int maxLength); + public static extern unsafe ExceptionStatus core_getVersionString(byte* buf, int maxLength); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus core_getVersionMajor(out int returnValue); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] @@ -84,6 +82,16 @@ static partial class NativeMethods #endregion + #region logger.hpp + + [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern ExceptionStatus core_logger_setLogLevel(LogLevel logLevel, out LogLevel returnValue); + + [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern ExceptionStatus core_logger_getLogLevel(out LogLevel returnValue); + + #endregion + [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus core_borderInterpolate( int p, int len, int borderType, out int returnValue); @@ -168,6 +176,12 @@ public static extern ExceptionStatus core_batchDistance(IntPtr src1, IntPtr src2 public static extern ExceptionStatus core_normalize(IntPtr src, IntPtr dst, double alpha, double beta, int normType, int dtype, IntPtr mask); + [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern ExceptionStatus core_reduceArgMax(IntPtr src, IntPtr dst, int axis, [MarshalAs(UnmanagedType.U1)] bool lastIndex); + + [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern ExceptionStatus core_reduceArgMin(IntPtr src, IntPtr dst, int axis, [MarshalAs(UnmanagedType.U1)] bool lastIndex); + [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus core_minMaxLoc1(IntPtr src, out double minVal, out double maxVal); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/core/NativeMethods_core_Algorithm.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/core/NativeMethods_core_Algorithm.cs index 7358604c2..89858bc43 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/core/NativeMethods_core_Algorithm.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/core/NativeMethods_core_Algorithm.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/core/NativeMethods_core_Classes.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/core/NativeMethods_core_Classes.cs index 2aeaad02d..52292902c 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/core/NativeMethods_core_Classes.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/core/NativeMethods_core_Classes.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/core/NativeMethods_core_FileNode.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/core/NativeMethods_core_FileNode.cs index 16e04b65e..ecc15c5d4 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/core/NativeMethods_core_FileNode.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/core/NativeMethods_core_FileNode.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/core/NativeMethods_core_FileNodeIterator.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/core/NativeMethods_core_FileNodeIterator.cs index ec4fe2095..bc28f2aaf 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/core/NativeMethods_core_FileNodeIterator.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/core/NativeMethods_core_FileNodeIterator.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/core/NativeMethods_core_FileStorage.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/core/NativeMethods_core_FileStorage.cs index d12a3c183..9b1c7dab8 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/core/NativeMethods_core_FileStorage.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/core/NativeMethods_core_FileStorage.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/core/NativeMethods_core_InputArray.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/core/NativeMethods_core_InputArray.cs index a611fa930..bada01e69 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/core/NativeMethods_core_InputArray.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/core/NativeMethods_core_InputArray.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/core/NativeMethods_core_Mat.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/core/NativeMethods_core_Mat.cs index d57014f20..722e27487 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/core/NativeMethods_core_Mat.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/core/NativeMethods_core_Mat.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 @@ -18,9 +17,9 @@ static partial class NativeMethods [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus core_Mat_new1(out IntPtr returnValue); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern ExceptionStatus core_Mat_new2(int rows, int cols, int type, out IntPtr returnValue); + public static extern ExceptionStatus core_Mat_new2(int rows, int cols, MatType type, out IntPtr returnValue); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern ExceptionStatus core_Mat_new3(int rows, int cols, int type, Scalar scalar, out IntPtr returnValue); + public static extern ExceptionStatus core_Mat_new3(int rows, int cols, MatType type, Scalar scalar, out IntPtr returnValue); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus core_Mat_new4(IntPtr mat, Range rowRange, Range colRange, out IntPtr returnValue); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] @@ -30,17 +29,17 @@ static partial class NativeMethods [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus core_Mat_new7(IntPtr mat, Rect roi, out IntPtr returnValue); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern ExceptionStatus core_Mat_new8(int rows, int cols, int type, IntPtr data, IntPtr step, out IntPtr returnValue); + public static extern ExceptionStatus core_Mat_new8(int rows, int cols, MatType type, IntPtr data, IntPtr step, out IntPtr returnValue); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern ExceptionStatus core_Mat_new9(int ndims, [MarshalAs(UnmanagedType.LPArray)] int[] sizes, - int type, IntPtr data, [MarshalAs(UnmanagedType.LPArray)] IntPtr[] steps, out IntPtr returnValue); + public static extern ExceptionStatus core_Mat_new9(int ndims, [MarshalAs(UnmanagedType.LPArray)] int[] sizes, + MatType type, IntPtr data, [MarshalAs(UnmanagedType.LPArray)] IntPtr[] steps, out IntPtr returnValue); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus core_Mat_new9(int ndims, [MarshalAs(UnmanagedType.LPArray)] int[] sizes, - int type, IntPtr data, IntPtr steps, out IntPtr returnValue); + MatType type, IntPtr data, IntPtr steps, out IntPtr returnValue); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern ExceptionStatus core_Mat_new10(int ndims, [MarshalAs(UnmanagedType.LPArray)] int[] sizes, int type, out IntPtr returnValue); + public static extern ExceptionStatus core_Mat_new10(int ndims, [MarshalAs(UnmanagedType.LPArray)] int[] sizes, MatType type, out IntPtr returnValue); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern ExceptionStatus core_Mat_new11(int ndims, [MarshalAs(UnmanagedType.LPArray)] int[] sizes, int type, Scalar s, out IntPtr returnValue); + public static extern ExceptionStatus core_Mat_new11(int ndims, [MarshalAs(UnmanagedType.LPArray)] int[] sizes, MatType type, Scalar s, out IntPtr returnValue); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus core_Mat_new12(IntPtr mat, out IntPtr returnValue); @@ -81,7 +80,7 @@ public static extern ExceptionStatus core_Mat_new9(int ndims, [MarshalAs(Unmanag public static extern ExceptionStatus core_Mat_copyTo_toMat2(IntPtr self, IntPtr m, IntPtr mask); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern ExceptionStatus core_Mat_convertTo(IntPtr self, IntPtr m, int rtype, double alpha, double beta); + public static extern ExceptionStatus core_Mat_convertTo(IntPtr self, IntPtr m, MatType rtype, double alpha, double beta); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus core_Mat_assignTo(IntPtr self, IntPtr m, int type); @@ -115,27 +114,27 @@ public static extern ExceptionStatus core_Mat_reshape2( [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus core_Mat_zeros1( - int rows, int cols, int type, out IntPtr returnValue); + int rows, int cols, MatType type, out IntPtr returnValue); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus core_Mat_zeros2( - int ndims, [MarshalAs(UnmanagedType.LPArray), In] int[] sz, int type, out IntPtr returnValue); + int ndims, [MarshalAs(UnmanagedType.LPArray), In] int[] sz, MatType type, out IntPtr returnValue); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus core_Mat_ones1( - int rows, int cols, int type, out IntPtr returnValue); + int rows, int cols, MatType type, out IntPtr returnValue); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus core_Mat_ones2( - int ndims, [MarshalAs(UnmanagedType.LPArray), In] int[] sz, int type, out IntPtr returnValue); + int ndims, [MarshalAs(UnmanagedType.LPArray), In] int[] sz, MatType type, out IntPtr returnValue); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern ExceptionStatus core_Mat_eye(int rows, int cols, int type, out IntPtr returnValue); + public static extern ExceptionStatus core_Mat_eye(int rows, int cols, MatType type, out IntPtr returnValue); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus core_Mat_create1( - IntPtr self, int rows, int cols, int type); + IntPtr self, int rows, int cols, MatType type); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus core_Mat_create2( - IntPtr self, int ndims, [MarshalAs(UnmanagedType.LPArray)] int[] sizes, int type); + IntPtr self, int ndims, [MarshalAs(UnmanagedType.LPArray)] int[] sizes, MatType type); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus core_Mat_reserve(IntPtr self, IntPtr sz); diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/core/NativeMethods_core_MatExpr.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/core/NativeMethods_core_MatExpr.cs index aead3f32d..bef8b37a3 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/core/NativeMethods_core_MatExpr.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/core/NativeMethods_core_MatExpr.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/core/NativeMethods_core_OutputArray.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/core/NativeMethods_core_OutputArray.cs index 6fdd930c2..91e38411c 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/core/NativeMethods_core_OutputArray.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/core/NativeMethods_core_OutputArray.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/core/NativeMethods_core_SparseMat.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/core/NativeMethods_core_SparseMat.cs index 642c8e91d..5417900c8 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/core/NativeMethods_core_SparseMat.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/core/NativeMethods_core_SparseMat.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 @@ -14,7 +13,7 @@ static partial class NativeMethods [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus core_SparseMat_new1(out IntPtr returnValue); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern ExceptionStatus core_SparseMat_new2(int dims, int[] sizes, int type, out IntPtr returnValue); + public static extern ExceptionStatus core_SparseMat_new2(int dims, int[] sizes, MatType type, out IntPtr returnValue); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus core_SparseMat_new3(IntPtr m, out IntPtr returnValue); @@ -36,16 +35,16 @@ static partial class NativeMethods [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus core_SparseMat_convertTo_SparseMat( - IntPtr obj, IntPtr m, int rtype, double alpha); + IntPtr obj, IntPtr m, MatType rtype, double alpha); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus core_SparseMat_convertTo_Mat( - IntPtr obj, IntPtr m, int rtype, double alpha, double beta); + IntPtr obj, IntPtr m, MatType rtype, double alpha, double beta); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern ExceptionStatus core_SparseMat_assignTo(IntPtr obj, IntPtr m, int type); + public static extern ExceptionStatus core_SparseMat_assignTo(IntPtr obj, IntPtr m, MatType type); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern ExceptionStatus core_SparseMat_create(IntPtr obj, int dims, int[] sizes, int type); + public static extern ExceptionStatus core_SparseMat_create(IntPtr obj, int dims, int[] sizes, MatType type); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus core_SparseMat_clear(IntPtr obj); diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/core/NativeMethods_core_UMat.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/core/NativeMethods_core_UMat.cs index d6dbf8d3f..513db9ea5 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/core/NativeMethods_core_UMat.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/core/NativeMethods_core_UMat.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 @@ -16,17 +15,17 @@ static partial class NativeMethods public static extern ExceptionStatus core_UMat_new1(int usageFlags, out IntPtr returnValue); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern ExceptionStatus core_UMat_new2(int rows, int cols, int type, int usageFlags, out IntPtr returnValue); + public static extern ExceptionStatus core_UMat_new2(int rows, int cols, MatType type, int usageFlags, out IntPtr returnValue); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern ExceptionStatus core_UMat_new3(int rows, int cols, int type, Scalar scalar, int usageFlags, out IntPtr returnValue); + public static extern ExceptionStatus core_UMat_new3(int rows, int cols, MatType type, Scalar scalar, int usageFlags, out IntPtr returnValue); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern ExceptionStatus core_UMat_new4(int ndims, [MarshalAs(UnmanagedType.LPArray)] int[] sizes, int type, out IntPtr returnValue); + public static extern ExceptionStatus core_UMat_new4(int ndims, [MarshalAs(UnmanagedType.LPArray)] int[] sizes, MatType type, out IntPtr returnValue); // Not exported [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern ExceptionStatus core_UMat_new5(int ndims, [MarshalAs(UnmanagedType.LPArray)] int[] sizes, int type, Scalar s, out IntPtr returnValue); + public static extern ExceptionStatus core_UMat_new5(int ndims, [MarshalAs(UnmanagedType.LPArray)] int[] sizes, MatType type, Scalar s, out IntPtr returnValue); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus core_UMat_new6(IntPtr umat, out IntPtr returnValue); @@ -79,7 +78,7 @@ static partial class NativeMethods public static extern ExceptionStatus core_UMat_copyTo_toUMat2(IntPtr self, IntPtr m, IntPtr mask); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern ExceptionStatus core_UMat_convertTo(IntPtr self, IntPtr m, int rtype, double alpha, double beta); + public static extern ExceptionStatus core_UMat_convertTo(IntPtr self, IntPtr m, MatType rtype, double alpha, double beta); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus core_UMat_assignTo(IntPtr self, IntPtr m, int type); @@ -110,27 +109,27 @@ public static extern ExceptionStatus core_UMat_reshape2( [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus core_UMat_zeros1( - int rows, int cols, int type, out IntPtr returnValue); + int rows, int cols, MatType type, out IntPtr returnValue); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus core_UMat_zeros2( - int ndims, [MarshalAs(UnmanagedType.LPArray), In] int[] sz, int type, out IntPtr returnValue); + int ndims, [MarshalAs(UnmanagedType.LPArray), In] int[] sz, MatType type, out IntPtr returnValue); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus core_UMat_ones1( - int rows, int cols, int type, out IntPtr returnValue); + int rows, int cols, MatType type, out IntPtr returnValue); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus core_UMat_ones2( - int ndims, [MarshalAs(UnmanagedType.LPArray), In] int[] sz, int type, out IntPtr returnValue); + int ndims, [MarshalAs(UnmanagedType.LPArray), In] int[] sz, MatType type, out IntPtr returnValue); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern ExceptionStatus core_UMat_eye(int rows, int cols, int type, out IntPtr returnValue); + public static extern ExceptionStatus core_UMat_eye(int rows, int cols, MatType type, out IntPtr returnValue); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus core_UMat_create1( - IntPtr self, int rows, int cols, int type); + IntPtr self, int rows, int cols, MatType type); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus core_UMat_create2( - IntPtr self, int ndims, [MarshalAs(UnmanagedType.LPArray)] int[] sizes, int type); + IntPtr self, int ndims, [MarshalAs(UnmanagedType.LPArray)] int[] sizes, MatType type); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus core_UMat_locateROI(IntPtr self, out Size wholeSize, out Point ofs); diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/dnn/NativeMethods_dnn.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/dnn/NativeMethods_dnn.cs index a8ab3407a..df10cd8c0 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/dnn/NativeMethods_dnn.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/dnn/NativeMethods_dnn.cs @@ -1,5 +1,4 @@ - using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/dnn/NativeMethods_dnn_Net.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/dnn/NativeMethods_dnn_Net.cs index 1a3af7435..accbc9483 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/dnn/NativeMethods_dnn_Net.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/dnn/NativeMethods_dnn_Net.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/face/NativeMethods_face_FaceRecognizer.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/face/NativeMethods_face_FaceRecognizer.cs index 3c4283d95..f6e180d55 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/face/NativeMethods_face_FaceRecognizer.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/face/NativeMethods_face_FaceRecognizer.cs @@ -1,6 +1,4 @@ - -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/face/NativeMethods_face_Facemark.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/face/NativeMethods_face_Facemark.cs index 950f28c41..762e31a11 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/face/NativeMethods_face_Facemark.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/face/NativeMethods_face_Facemark.cs @@ -1,6 +1,4 @@ - -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/features2d/NativeMethods_features2d.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/features2d/NativeMethods_features2d.cs index 1aa662a8a..910e3ff6d 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/features2d/NativeMethods_features2d.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/features2d/NativeMethods_features2d.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/features2d/NativeMethods_features2d_BOW.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/features2d/NativeMethods_features2d_BOW.cs index a5b92148d..5514ab5a8 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/features2d/NativeMethods_features2d_BOW.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/features2d/NativeMethods_features2d_BOW.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/features2d/NativeMethods_features2d_DescriptorMatcher.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/features2d/NativeMethods_features2d_DescriptorMatcher.cs index a28bd65d3..f2b5e806d 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/features2d/NativeMethods_features2d_DescriptorMatcher.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/features2d/NativeMethods_features2d_DescriptorMatcher.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/features2d/NativeMethods_features2d_Feature2D.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/features2d/NativeMethods_features2d_Feature2D.cs index a998d99d0..da3a97e98 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/features2d/NativeMethods_features2d_Feature2D.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/features2d/NativeMethods_features2d_Feature2D.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/imgproc/NativeMethods_imgproc.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/imgproc/NativeMethods_imgproc.cs index e74fea3a4..f525529a1 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/imgproc/NativeMethods_imgproc.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/imgproc/NativeMethods_imgproc.cs @@ -1,5 +1,4 @@ -using System; -using System.Runtime.InteropServices; +using System.Runtime.InteropServices; using System.Diagnostics.Contracts; // ReSharper disable IdentifierTypo @@ -15,11 +14,11 @@ static partial class NativeMethods { [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus imgproc_getGaussianKernel( - int ksize, double sigma, int ktype, out IntPtr returnValue); + int ksize, double sigma, MatType ktype, out IntPtr returnValue); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus imgproc_getDerivKernels( - IntPtr kx, IntPtr ky, int dx, int dy, int ksize, int normalize, int ktype); + IntPtr kx, IntPtr ky, int dx, int dy, int ksize, int normalize, MatType ktype); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus imgproc_getGaborKernel(Size ksize, double sigma, double theta, double lambd, @@ -40,26 +39,26 @@ public static extern ExceptionStatus imgproc_bilateralFilter(IntPtr src, IntPtr double sigmaSpace, BorderTypes borderType); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern ExceptionStatus imgproc_boxFilter(IntPtr src, IntPtr dst, int ddepth, Size ksize, Point anchor, + public static extern ExceptionStatus imgproc_boxFilter(IntPtr src, IntPtr dst, MatType ddepth, Size ksize, Point anchor, int normalize, BorderTypes borderType); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern ExceptionStatus imgproc_sqrBoxFilter(IntPtr src, IntPtr dst, int ddepth, Size ksize, Point anchor, + public static extern ExceptionStatus imgproc_sqrBoxFilter(IntPtr src, IntPtr dst, MatType ddepth, Size ksize, Point anchor, int normalize, BorderTypes borderType); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus imgproc_blur(IntPtr src, IntPtr dst, Size ksize, Point anchor, int borderType); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern ExceptionStatus imgproc_filter2D(IntPtr src, IntPtr dst, int ddepth, IntPtr kernel, Point anchor, + public static extern ExceptionStatus imgproc_filter2D(IntPtr src, IntPtr dst, MatType ddepth, IntPtr kernel, Point anchor, double delta, int borderType); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern ExceptionStatus imgproc_sepFilter2D(IntPtr src, IntPtr dst, int ddepth, IntPtr kernelX, + public static extern ExceptionStatus imgproc_sepFilter2D(IntPtr src, IntPtr dst, MatType ddepth, IntPtr kernelX, IntPtr kernelY, Point anchor, double delta, int borderType); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern ExceptionStatus imgproc_Sobel(IntPtr src, IntPtr dst, int ddepth, + public static extern ExceptionStatus imgproc_Sobel(IntPtr src, IntPtr dst, MatType ddepth, int dx, int dy, int ksize, double scale, double delta, int borderType); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] @@ -67,11 +66,11 @@ public static extern ExceptionStatus imgproc_spatialGradient( IntPtr src, IntPtr dx, IntPtr dy, int ksize, int borderType); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern ExceptionStatus imgproc_Scharr(IntPtr src, IntPtr dst, int ddepth, + public static extern ExceptionStatus imgproc_Scharr(IntPtr src, IntPtr dst, MatType ddepth, int dx, int dy, double scale, double delta, int borderType); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern ExceptionStatus imgproc_Laplacian(IntPtr src, IntPtr dst, int ddepth, + public static extern ExceptionStatus imgproc_Laplacian(IntPtr src, IntPtr dst, MatType ddepth, int ksize, double scale, double delta, int borderType); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] @@ -159,7 +158,7 @@ public static extern ExceptionStatus imgproc_remap(IntPtr src, IntPtr dst, IntPt [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus imgproc_convertMaps(IntPtr map1, IntPtr map2, IntPtr dstmap1, IntPtr dstmap2, - int dstmap1Type, int nninterpolation); + MatType dstmap1Type, int nninterpolation); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus imgproc_getRotationMatrix2D(Point2f center, double angle, double scale, out IntPtr returnValue); @@ -221,7 +220,7 @@ public static extern ExceptionStatus imgproc_phaseCorrelate(IntPtr src1, IntPtr out double response, out Point2d returnValue); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] - public static extern ExceptionStatus imgproc_createHanningWindow(IntPtr dst, Size winSize, int type); + public static extern ExceptionStatus imgproc_createHanningWindow(IntPtr dst, Size winSize, MatType type); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus imgproc_threshold(IntPtr src, IntPtr dst, double thresh, double maxval, int type, out double returnValue); @@ -233,6 +232,9 @@ public static extern ExceptionStatus imgproc_adaptiveThreshold(IntPtr src, IntPt [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus imgproc_pyrDown(IntPtr src, IntPtr dst, Size dstsize, int borderType); + [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern ExceptionStatus imgproc_buildPyramid(IntPtr src, IntPtr dst, int maxlevel, int borderType); + [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus imgproc_pyrUp(IntPtr src, IntPtr dst, Size dstsize, int borderType); @@ -310,19 +312,19 @@ public static extern ExceptionStatus imgproc_matchTemplate( [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus imgproc_connectedComponentsWithAlgorithm( - IntPtr image, IntPtr labels, int connectivity, int ltype, int ccltype, out int returnValue); + IntPtr image, IntPtr labels, int connectivity, MatType ltype, int ccltype, out int returnValue); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus imgproc_connectedComponents( - IntPtr image, IntPtr labels, int connectivity, int ltype, out int returnValue); + IntPtr image, IntPtr labels, int connectivity, MatType ltype, out int returnValue); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus imgproc_connectedComponentsWithStatsWithAlgorithm( - IntPtr image, IntPtr labels, IntPtr stats, IntPtr centroids, int connectivity, int ltype, int ccltype, out int returnValue); + IntPtr image, IntPtr labels, IntPtr stats, IntPtr centroids, int connectivity, MatType ltype, int ccltype, out int returnValue); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus imgproc_connectedComponentsWithStats( - IntPtr image, IntPtr labels, IntPtr stats, IntPtr centroids, int connectivity, int ltype, out int returnValue); + IntPtr image, IntPtr labels, IntPtr stats, IntPtr centroids, int connectivity, MatType ltype, out int returnValue); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus imgproc_findContours1_vector(IntPtr image, IntPtr contours, diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/imgproc/NativeMethods_imgproc_CLAHE.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/imgproc/NativeMethods_imgproc_CLAHE.cs index 128d95b14..418a3a7b7 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/imgproc/NativeMethods_imgproc_CLAHE.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/imgproc/NativeMethods_imgproc_CLAHE.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/imgproc/NativeMethods_imgproc_GeneralizedHough.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/imgproc/NativeMethods_imgproc_GeneralizedHough.cs index c61c0e9c6..9accb40db 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/imgproc/NativeMethods_imgproc_GeneralizedHough.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/imgproc/NativeMethods_imgproc_GeneralizedHough.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/imgproc/NativeMethods_imgproc_LineIterator.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/imgproc/NativeMethods_imgproc_LineIterator.cs index bd52c2533..ed8f7a114 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/imgproc/NativeMethods_imgproc_LineIterator.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/imgproc/NativeMethods_imgproc_LineIterator.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/imgproc/NativeMethods_imgproc_LineSegmentDetector.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/imgproc/NativeMethods_imgproc_LineSegmentDetector.cs new file mode 100644 index 000000000..e9fa7684e --- /dev/null +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/imgproc/NativeMethods_imgproc_LineSegmentDetector.cs @@ -0,0 +1,38 @@ +using System.Diagnostics.Contracts; +using System.Runtime.InteropServices; + +#pragma warning disable 1591 +#pragma warning disable CA1401 // P/Invokes should not be visible +#pragma warning disable CA1720 // Identifiers should not contain type names +#pragma warning disable IDE1006 // Naming style + +namespace OpenCvSharp.Internal; + +static partial class NativeMethods +{ + [DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void imgproc_LineSegmentDetector_detect_OutputArray(IntPtr obj, IntPtr image, IntPtr lines, + IntPtr width, IntPtr prec, IntPtr nfa); + + [DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void imgproc_LineSegmentDetector_detect_vector(IntPtr obj, IntPtr image, IntPtr lines, + IntPtr width, IntPtr prec, IntPtr nfa); + + [DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void imgproc_LineSegmentDetector_drawSegments(IntPtr obj, IntPtr image, IntPtr lines); + + [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern int imgproc_LineSegmentDetector_compareSegments(IntPtr obj, Size size, + IntPtr lines1, IntPtr lines2, IntPtr image); + + [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern IntPtr imgproc_createLineSegmentDetector( + int refine, double scale, double sigma_scale, double quant, double ang_th, + double log_eps, double density_th, int n_bins); + + [DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern void imgproc_Ptr_LineSegmentDetector_delete(IntPtr obj); + + [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] + public static extern IntPtr imgproc_Ptr_LineSegmentDetector_get(IntPtr obj); +} diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/imgproc/NativeMethods_imgproc_Segmentation.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/imgproc/NativeMethods_imgproc_Segmentation.cs index 550221729..5ee0f59b1 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/imgproc/NativeMethods_imgproc_Segmentation.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/imgproc/NativeMethods_imgproc_Segmentation.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/imgproc/NativeMethods_imgproc_Subdiv2D.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/imgproc/NativeMethods_imgproc_Subdiv2D.cs index b08c132a4..b0fef73d3 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/imgproc/NativeMethods_imgproc_Subdiv2D.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/imgproc/NativeMethods_imgproc_Subdiv2D.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ml/NativeMethods_ml_ANN_MLP.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ml/NativeMethods_ml_ANN_MLP.cs index 092c91dde..8bae21312 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ml/NativeMethods_ml_ANN_MLP.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ml/NativeMethods_ml_ANN_MLP.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ml/NativeMethods_ml_Boost.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ml/NativeMethods_ml_Boost.cs index dd4160df0..ed123f3dd 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ml/NativeMethods_ml_Boost.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ml/NativeMethods_ml_Boost.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ml/NativeMethods_ml_DTrees.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ml/NativeMethods_ml_DTrees.cs index 752d7ea3f..4ea7ba492 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ml/NativeMethods_ml_DTrees.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ml/NativeMethods_ml_DTrees.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ml/NativeMethods_ml_EM.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ml/NativeMethods_ml_EM.cs index ac3ca84c4..5e3e5645e 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ml/NativeMethods_ml_EM.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ml/NativeMethods_ml_EM.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ml/NativeMethods_ml_KNearest.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ml/NativeMethods_ml_KNearest.cs index 4e6a5d662..857536388 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ml/NativeMethods_ml_KNearest.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ml/NativeMethods_ml_KNearest.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ml/NativeMethods_ml_LogisticRegression.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ml/NativeMethods_ml_LogisticRegression.cs index 7777cdec0..552b063b4 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ml/NativeMethods_ml_LogisticRegression.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ml/NativeMethods_ml_LogisticRegression.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ml/NativeMethods_ml_NormalBayesClassifier.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ml/NativeMethods_ml_NormalBayesClassifier.cs index 721610d5d..ed9723df5 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ml/NativeMethods_ml_NormalBayesClassifier.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ml/NativeMethods_ml_NormalBayesClassifier.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ml/NativeMethods_ml_RTrees.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ml/NativeMethods_ml_RTrees.cs index 90930ae98..a989a5ed9 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ml/NativeMethods_ml_RTrees.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ml/NativeMethods_ml_RTrees.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ml/NativeMethods_ml_SVM.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ml/NativeMethods_ml_SVM.cs index 285c30b95..8693e4600 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ml/NativeMethods_ml_SVM.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ml/NativeMethods_ml_SVM.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; using OpenCvSharp.ML; diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ml/NativeMethods_ml_StatModel.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ml/NativeMethods_ml_StatModel.cs index 8a971bfa9..f762b6f7b 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ml/NativeMethods_ml_StatModel.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ml/NativeMethods_ml_StatModel.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/objdetect/NativeMethods_objdetect.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/objdetect/NativeMethods_objdetect.cs index c73fb90b4..d6168155e 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/objdetect/NativeMethods_objdetect.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/objdetect/NativeMethods_objdetect.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/objdetect/NativeMethods_objdetect_CascadeClassfier.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/objdetect/NativeMethods_objdetect_CascadeClassfier.cs index 4069dd46a..43a6775fe 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/objdetect/NativeMethods_objdetect_CascadeClassfier.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/objdetect/NativeMethods_objdetect_CascadeClassfier.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/objdetect/NativeMethods_objdetect_HOGDescriptor.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/objdetect/NativeMethods_objdetect_HOGDescriptor.cs index e62486da7..245cf6382 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/objdetect/NativeMethods_objdetect_HOGDescriptor.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/objdetect/NativeMethods_objdetect_HOGDescriptor.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/objdetect/NativeMethods_objdetect_QRCodeDetector.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/objdetect/NativeMethods_objdetect_QRCodeDetector.cs index cdcdbd27b..58aef2c8f 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/objdetect/NativeMethods_objdetect_QRCodeDetector.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/objdetect/NativeMethods_objdetect_QRCodeDetector.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/photo/NativeMethods_photo.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/photo/NativeMethods_photo.cs index 268afe837..16c414053 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/photo/NativeMethods_photo.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/photo/NativeMethods_photo.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/photo/NativeMethods_photo_HDR.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/photo/NativeMethods_photo_HDR.cs index 935370aca..3f66ae425 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/photo/NativeMethods_photo_HDR.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/photo/NativeMethods_photo_HDR.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/photo/NativeMethods_photo_Tonemap.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/photo/NativeMethods_photo_Tonemap.cs index 1ae6bbc1b..6205f4594 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/photo/NativeMethods_photo_Tonemap.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/photo/NativeMethods_photo_Tonemap.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/shape/NativeMethods_shape_ShapeDistanceExtractor.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/shape/NativeMethods_shape_ShapeDistanceExtractor.cs index 4de1c1028..e84a32e2f 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/shape/NativeMethods_shape_ShapeDistanceExtractor.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/shape/NativeMethods_shape_ShapeDistanceExtractor.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/stitching/NativeMethods_stitching.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/stitching/NativeMethods_stitching.cs index cc4510cc3..2b10cc510 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/stitching/NativeMethods_stitching.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/stitching/NativeMethods_stitching.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/stitching/NativeMethods_stitching_Matchers.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/stitching/NativeMethods_stitching_Matchers.cs index c123d33e0..8c1989c1e 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/stitching/NativeMethods_stitching_Matchers.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/stitching/NativeMethods_stitching_Matchers.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; using OpenCvSharp.Detail; diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/superres/NativeMethods_superres_DenseOpticalFlowExt.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/superres/NativeMethods_superres_DenseOpticalFlowExt.cs index 76f02f9a5..9935095dd 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/superres/NativeMethods_superres_DenseOpticalFlowExt.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/superres/NativeMethods_superres_DenseOpticalFlowExt.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/superres/NativeMethods_superres_FrameSource.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/superres/NativeMethods_superres_FrameSource.cs index 91b637543..4c34fd57e 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/superres/NativeMethods_superres_FrameSource.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/superres/NativeMethods_superres_FrameSource.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/superres/NativeMethods_superres_SuperResolution.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/superres/NativeMethods_superres_SuperResolution.cs index f06a30741..97c305ecd 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/superres/NativeMethods_superres_SuperResolution.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/superres/NativeMethods_superres_SuperResolution.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/text/NativeMethods_text.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/text/NativeMethods_text.cs index 126f71cec..a74805afa 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/text/NativeMethods_text.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/text/NativeMethods_text.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/text/NativeMethods_text_TextDetector.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/text/NativeMethods_text_TextDetector.cs index c12bc9c2f..c6d23ddc7 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/text/NativeMethods_text_TextDetector.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/text/NativeMethods_text_TextDetector.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/traking/NativeMethods_tracking.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/traking/NativeMethods_tracking.cs index 1d325860d..cf2beccf2 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/traking/NativeMethods_tracking.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/traking/NativeMethods_tracking.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; using OpenCvSharp.Tracking; diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/video/NativeMethods_video_BackgroundSubtractor.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/video/NativeMethods_video_BackgroundSubtractor.cs index 505cc800e..a31252938 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/video/NativeMethods_video_BackgroundSubtractor.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/video/NativeMethods_video_BackgroundSubtractor.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/video/NativeMethods_video_tracking.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/video/NativeMethods_video_tracking.cs index a2ba96edc..2568a9a29 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/video/NativeMethods_video_tracking.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/video/NativeMethods_video_tracking.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ximgproc/NativeMethods_ximgproc.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ximgproc/NativeMethods_ximgproc.cs index bfa1ddddb..ced95a36f 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ximgproc/NativeMethods_ximgproc.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ximgproc/NativeMethods_ximgproc.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; // ReSharper disable InconsistentNaming @@ -73,7 +72,7 @@ public static extern ExceptionStatus ximgproc_covarianceEstimation( [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus ximgproc_FastHoughTransform( - IntPtr src, IntPtr dst, int dstMatDepth, int angleRange, int op, int makeSkew); + IntPtr src, IntPtr dst, MatType dstMatDepth, int angleRange, int op, int makeSkew); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus ximgproc_HoughPoint2Line( diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ximgproc/NativeMethods_ximgproc_EdgeBoxes.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ximgproc/NativeMethods_ximgproc_EdgeBoxes.cs index 0d29ed500..287c6890d 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ximgproc/NativeMethods_ximgproc_EdgeBoxes.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ximgproc/NativeMethods_ximgproc_EdgeBoxes.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; // ReSharper disable InconsistentNaming diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ximgproc/NativeMethods_ximgproc_EdgeFilter.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ximgproc/NativeMethods_ximgproc_EdgeFilter.cs index 56d3153cd..ad1087422 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ximgproc/NativeMethods_ximgproc_EdgeFilter.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ximgproc/NativeMethods_ximgproc_EdgeFilter.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; // ReSharper disable InconsistentNaming diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ximgproc/NativeMethods_ximgproc_FastLineDetector.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ximgproc/NativeMethods_ximgproc_FastLineDetector.cs index eb4e5c85c..2a21f279f 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ximgproc/NativeMethods_ximgproc_FastLineDetector.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ximgproc/NativeMethods_ximgproc_FastLineDetector.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; // ReSharper disable InconsistentNaming diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ximgproc/NativeMethods_ximgproc_RidgeDetectionFilter.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ximgproc/NativeMethods_ximgproc_RidgeDetectionFilter.cs index 207f8ea87..e69ecf9b6 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ximgproc/NativeMethods_ximgproc_RidgeDetectionFilter.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ximgproc/NativeMethods_ximgproc_RidgeDetectionFilter.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; // ReSharper disable InconsistentNaming @@ -14,7 +13,7 @@ static partial class NativeMethods { [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] public static extern ExceptionStatus ximgproc_RidgeDetectionFilter_create( - int ddepth, int dx, int dy, int ksize, int out_dtype, double scale, double delta, int borderType, + MatType ddepth, int dx, int dy, int ksize, MatType outDtype, double scale, double delta, int borderType, out IntPtr returnValue); [Pure, DllImport(DllExtern, CallingConvention = CallingConvention.Cdecl, ExactSpelling = true)] diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ximgproc/NativeMethods_ximgproc_Segmentation.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ximgproc/NativeMethods_ximgproc_Segmentation.cs index 69b093a17..44963c9a9 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ximgproc/NativeMethods_ximgproc_Segmentation.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ximgproc/NativeMethods_ximgproc_Segmentation.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; // ReSharper disable InconsistentNaming diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ximgproc/NativeMethods_ximgproc_StructuredEdgeDetection.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ximgproc/NativeMethods_ximgproc_StructuredEdgeDetection.cs index 3a7bf0aec..2fef17c42 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ximgproc/NativeMethods_ximgproc_StructuredEdgeDetection.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ximgproc/NativeMethods_ximgproc_StructuredEdgeDetection.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; // ReSharper disable InconsistentNaming diff --git a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ximgproc/NativeMethods_ximgproc_Superpixel.cs b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ximgproc/NativeMethods_ximgproc_Superpixel.cs index 59b26df1c..17f6bb7e1 100644 --- a/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ximgproc/NativeMethods_ximgproc_Superpixel.cs +++ b/src/OpenCvSharp/Internal/PInvoke/NativeMethods/ximgproc/NativeMethods_ximgproc_Superpixel.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; // ReSharper disable InconsistentNaming diff --git a/src/OpenCvSharp/Internal/PInvoke/StdString.cs b/src/OpenCvSharp/Internal/PInvoke/StdString.cs index 92900b24c..6c04955dc 100644 --- a/src/OpenCvSharp/Internal/PInvoke/StdString.cs +++ b/src/OpenCvSharp/Internal/PInvoke/StdString.cs @@ -1,5 +1,4 @@ -using System; -using System.Text; +using System.Text; namespace OpenCvSharp.Internal; @@ -23,7 +22,7 @@ public StdString() /// public StdString(string str) { - if (str == null) + if (str is null) throw new ArgumentNullException(nameof(str)); var utf8Bytes = Encoding.UTF8.GetBytes(str); diff --git a/src/OpenCvSharp/Internal/PInvoke/Win32API.cs b/src/OpenCvSharp/Internal/PInvoke/Win32API.cs index dc7b680db..385bcd488 100644 --- a/src/OpenCvSharp/Internal/PInvoke/Win32API.cs +++ b/src/OpenCvSharp/Internal/PInvoke/Win32API.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.Contracts; +using System.Diagnostics.Contracts; using System.Runtime.InteropServices; #pragma warning disable 1591 diff --git a/src/OpenCvSharp/Internal/PInvoke/WindowsLibraryLoader.cs b/src/OpenCvSharp/Internal/PInvoke/WindowsLibraryLoader.cs index 0762118cd..e9b0034f5 100644 --- a/src/OpenCvSharp/Internal/PInvoke/WindowsLibraryLoader.cs +++ b/src/OpenCvSharp/Internal/PInvoke/WindowsLibraryLoader.cs @@ -1,9 +1,5 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics; +using System.Diagnostics; using System.Globalization; -using System.IO; -using System.Linq; using System.Reflection; using System.Runtime.InteropServices; using System.Text; @@ -27,7 +23,7 @@ public sealed class WindowsLibraryLoader private const string DllFileExtension = ".dll"; private const string DllDirectory = "dll"; - private readonly List loadedAssemblies = new(); + private readonly List loadedAssemblies = []; /// /// Map processor @@ -67,7 +63,7 @@ public sealed class WindowsLibraryLoader /// private WindowsLibraryLoader() { - AdditionalPaths = new List(); + AdditionalPaths = []; } /// @@ -118,7 +114,7 @@ public void LoadLibrary(string dllName, IEnumerable? additionalPaths = n if (!IsCurrentPlatformSupported()) return; - var additionalPathsArray = additionalPaths?.ToArray() ?? Array.Empty(); + var additionalPathsArray = additionalPaths?.ToArray() ?? []; // In .NET Core, process only when additional paths are specified. if (IsDotNetCore() && additionalPathsArray.Length == 0) @@ -177,7 +173,7 @@ public void LoadLibrary(string dllName, IEnumerable? additionalPaths = n // ASP.NET hack, requires an active context #if DOTNET_FRAMEWORK - if (System.Web.HttpContext.Current != null) + if (System.Web.HttpContext.Current is not null) { var server = System.Web.HttpContext.Current.Server; baseDirectory = Path.GetFullPath(server.MapPath("bin")); @@ -191,7 +187,7 @@ public void LoadLibrary(string dllName, IEnumerable? additionalPaths = n if (processArch.HasWarnings) { // include process detection warnings - errorMessage.AppendLine().Append($"Warnings: ").AppendLine().Append("{processArch.WarningText()}"); + errorMessage.AppendLine().Append("Warnings: ").AppendLine().Append("{processArch.WarningText()}"); } throw new OpenCvSharpException(errorMessage.ToString()); @@ -206,7 +202,7 @@ public void LoadLibrary(string dllName, IEnumerable? additionalPaths = n } /// - /// Get's the current process architecture while keeping track of any assumptions or possible errors. + /// Gets the current process architecture while keeping track of any assumptions or possible errors. /// /// private ProcessArchitectureInfo GetProcessArchitecture() @@ -218,7 +214,7 @@ private ProcessArchitectureInfo GetProcessArchitecture() if (!string.IsNullOrEmpty(processArchitecture)) { // Sanity check - processInfo.Architecture = processArchitecture!; + processInfo.Architecture = processArchitecture; } else { @@ -364,7 +360,7 @@ private class ProcessArchitectureInfo public ProcessArchitectureInfo() { Architecture = ""; - Warnings = new List(); + Warnings = []; } public bool HasWarnings => Warnings.Count > 0; diff --git a/src/OpenCvSharp/Internal/Util/ArrayAddress.cs b/src/OpenCvSharp/Internal/Util/ArrayAddress.cs index a1626ceb7..ec01296ac 100644 --- a/src/OpenCvSharp/Internal/Util/ArrayAddress.cs +++ b/src/OpenCvSharp/Internal/Util/ArrayAddress.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.InteropServices; +using System.Runtime.InteropServices; #pragma warning disable 1591 // ReSharper disable InconsistentNaming diff --git a/src/OpenCvSharp/Internal/Util/ArrayAddress2.cs b/src/OpenCvSharp/Internal/Util/ArrayAddress2.cs index e9c841162..abd09bb88 100644 --- a/src/OpenCvSharp/Internal/Util/ArrayAddress2.cs +++ b/src/OpenCvSharp/Internal/Util/ArrayAddress2.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.InteropServices; +using System.Runtime.InteropServices; namespace OpenCvSharp.Internal.Util; @@ -30,7 +27,7 @@ public ArrayAddress2(T[][] array) for (var i = 0; i < array.Length; i++) { var elem = array[i]; - if (elem == null/* || elem.Length == 0*/) + if (elem is null/* || elem.Length == 0*/) throw new ArgumentException($"array[{i}] is not valid array object."); // メモリ確保 diff --git a/src/OpenCvSharp/Internal/Util/EnumerableExtensions.cs b/src/OpenCvSharp/Internal/Util/EnumerableExtensions.cs index fd28f26eb..3c4861fbc 100644 --- a/src/OpenCvSharp/Internal/Util/EnumerableExtensions.cs +++ b/src/OpenCvSharp/Internal/Util/EnumerableExtensions.cs @@ -1,7 +1,4 @@ -using System.Collections.Generic; -using System.Linq; - -namespace OpenCvSharp.Internal.Util; +namespace OpenCvSharp.Internal.Util; #pragma warning disable 1591 internal static class EnumerableExtensions diff --git a/src/OpenCvSharp/Internal/Util/PInvokeHelper.cs b/src/OpenCvSharp/Internal/Util/PInvokeHelper.cs index 942ca725a..1811cf2ec 100644 --- a/src/OpenCvSharp/Internal/Util/PInvokeHelper.cs +++ b/src/OpenCvSharp/Internal/Util/PInvokeHelper.cs @@ -1,6 +1,4 @@ -using System; - -namespace OpenCvSharp.Internal.Util; +namespace OpenCvSharp.Internal.Util; /// /// @@ -42,7 +40,7 @@ public static void DllImportError(Exception ex) /// public static OpenCvSharpException CreateException(Exception ex) { - if (ex == null) + if (ex is null) throw new ArgumentNullException(nameof(ex)); /*StringBuilder message = new StringBuilder(); diff --git a/src/OpenCvSharp/Internal/Util/Platform.cs b/src/OpenCvSharp/Internal/Util/Platform.cs index 85d9a17c3..15429a6ea 100644 --- a/src/OpenCvSharp/Internal/Util/Platform.cs +++ b/src/OpenCvSharp/Internal/Util/Platform.cs @@ -1,5 +1,4 @@ -using System; -using System.Runtime.InteropServices; +using System.Runtime.InteropServices; #pragma warning disable 1591 @@ -42,6 +41,6 @@ static Platform() RuntimeInformation.IsOSPlatform(OSPlatform.OSX) ? OS.Unix : OS.Windows; - Runtime = (Type.GetType("Mono.Runtime") == null) ? Runtime.Mono : Runtime.DotNet; + Runtime = (Type.GetType("Mono.Runtime") is null) ? Runtime.Mono : Runtime.DotNet; } } diff --git a/src/OpenCvSharp/Internal/Util/ReadOnlyArray2D.cs b/src/OpenCvSharp/Internal/Util/ReadOnlyArray2D.cs index e60ed6d72..a64aedf8a 100644 --- a/src/OpenCvSharp/Internal/Util/ReadOnlyArray2D.cs +++ b/src/OpenCvSharp/Internal/Util/ReadOnlyArray2D.cs @@ -1,6 +1,4 @@ -using System; - -namespace OpenCvSharp.Internal.Util; +namespace OpenCvSharp.Internal.Util; /// /// Readonly rectangular array (T[,]) diff --git a/src/OpenCvSharp/Internal/Util/SaturateCast.cs b/src/OpenCvSharp/Internal/Util/SaturateCast.cs index 90e78a756..51d5e302b 100644 --- a/src/OpenCvSharp/Internal/Util/SaturateCast.cs +++ b/src/OpenCvSharp/Internal/Util/SaturateCast.cs @@ -1,6 +1,4 @@ -using System; - -namespace OpenCvSharp.Internal.Util; +namespace OpenCvSharp.Internal.Util; #pragma warning disable 1591 public static class SaturateCast diff --git a/src/OpenCvSharp/Internal/Util/ScopedGCHandle.cs b/src/OpenCvSharp/Internal/Util/ScopedGCHandle.cs index d9fdb2cf8..7c7fb94d0 100644 --- a/src/OpenCvSharp/Internal/Util/ScopedGCHandle.cs +++ b/src/OpenCvSharp/Internal/Util/ScopedGCHandle.cs @@ -1,5 +1,4 @@ -using System; -using System.Runtime.InteropServices; +using System.Runtime.InteropServices; #pragma warning disable 1591 @@ -20,7 +19,7 @@ public sealed class ScopedGCHandle : IDisposable /// public ScopedGCHandle(object value) { - if (value == null) + if (value is null) throw new ArgumentNullException(nameof(value)); handle = GCHandle.Alloc(value); disposed = false; @@ -33,7 +32,7 @@ public ScopedGCHandle(object value) /// public ScopedGCHandle(object value, GCHandleType type) { - if (value == null) + if (value is null) throw new ArgumentNullException(nameof(value)); handle = GCHandle.Alloc(value, type); disposed = false; @@ -69,7 +68,7 @@ public static ScopedGCHandle FromIntPtr(IntPtr value) public static IntPtr ToIntPtr(ScopedGCHandle value) { - if (value == null) + if (value is null) throw new ArgumentNullException(nameof(value)); return GCHandle.ToIntPtr(value.Handle); diff --git a/src/OpenCvSharp/Internal/Vectors/IStdVector.cs b/src/OpenCvSharp/Internal/Vectors/IStdVector.cs index 30222a0aa..d5bee8317 100644 --- a/src/OpenCvSharp/Internal/Vectors/IStdVector.cs +++ b/src/OpenCvSharp/Internal/Vectors/IStdVector.cs @@ -1,6 +1,4 @@ -using System; - -namespace OpenCvSharp.Internal.Vectors; +namespace OpenCvSharp.Internal.Vectors; /// /// Represents std::vector diff --git a/src/OpenCvSharp/Internal/Vectors/VectorOfByte.cs b/src/OpenCvSharp/Internal/Vectors/VectorOfByte.cs index 86219b7b2..c449aae4a 100644 --- a/src/OpenCvSharp/Internal/Vectors/VectorOfByte.cs +++ b/src/OpenCvSharp/Internal/Vectors/VectorOfByte.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.InteropServices; +using System.Runtime.InteropServices; namespace OpenCvSharp.Internal.Vectors; @@ -34,7 +31,7 @@ public VectorOfByte(nuint size) /// public VectorOfByte(IEnumerable data) { - if (data == null) + if (data is null) throw new ArgumentNullException(nameof(data)); var array = data.ToArray(); ptr = NativeMethods.vector_uchar_new3(array, (nuint)array.Length); @@ -84,7 +81,7 @@ public byte[] ToArray() var size = Size; if (size == 0) { - return Array.Empty(); + return []; } var dst = new byte[size]; Marshal.Copy(ElemPtr, dst, 0, dst.Length); diff --git a/src/OpenCvSharp/Internal/Vectors/VectorOfDMatch.cs b/src/OpenCvSharp/Internal/Vectors/VectorOfDMatch.cs index 3d1c7a990..ab58f00a9 100644 --- a/src/OpenCvSharp/Internal/Vectors/VectorOfDMatch.cs +++ b/src/OpenCvSharp/Internal/Vectors/VectorOfDMatch.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.InteropServices; +using System.Runtime.InteropServices; using OpenCvSharp.Internal.Util; namespace OpenCvSharp.Internal.Vectors; @@ -35,7 +32,7 @@ public VectorOfDMatch(nuint size) /// public VectorOfDMatch(IEnumerable data) { - if (data == null) + if (data is null) throw new ArgumentNullException(nameof(data)); var array = data.ToArray(); ptr = NativeMethods.vector_DMatch_new3(array, (nuint)array.Length); @@ -85,7 +82,7 @@ public DMatch[] ToArray() var size = Size; if (size == 0) { - return Array.Empty(); + return []; } var dst = new DMatch[size]; using (var dstPtr = new ArrayAddress1(dst)) diff --git a/src/OpenCvSharp/Internal/Vectors/VectorOfDTreesNode.cs b/src/OpenCvSharp/Internal/Vectors/VectorOfDTreesNode.cs index d7f1e04a9..8310963a0 100644 --- a/src/OpenCvSharp/Internal/Vectors/VectorOfDTreesNode.cs +++ b/src/OpenCvSharp/Internal/Vectors/VectorOfDTreesNode.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.InteropServices; +using System.Runtime.InteropServices; using OpenCvSharp.Internal.Util; using OpenCvSharp.ML; @@ -63,7 +60,7 @@ public DTrees.Node[] ToArray() var size = Size; if (size == 0) { - return Array.Empty(); + return []; } var dst = new DTrees.Node[size]; using (var dstPtr = new ArrayAddress1(dst)) diff --git a/src/OpenCvSharp/Internal/Vectors/VectorOfDTreesSplit.cs b/src/OpenCvSharp/Internal/Vectors/VectorOfDTreesSplit.cs index 01ab6e9f1..234709bf5 100644 --- a/src/OpenCvSharp/Internal/Vectors/VectorOfDTreesSplit.cs +++ b/src/OpenCvSharp/Internal/Vectors/VectorOfDTreesSplit.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.InteropServices; +using System.Runtime.InteropServices; using OpenCvSharp.Internal.Util; using OpenCvSharp.ML; @@ -63,7 +60,7 @@ public DTrees.Split[] ToArray() var size = Size; if (size == 0) { - return Array.Empty(); + return []; } var dst = new DTrees.Split[size]; using (var dstPtr = new ArrayAddress1(dst)) diff --git a/src/OpenCvSharp/Internal/Vectors/VectorOfDouble.cs b/src/OpenCvSharp/Internal/Vectors/VectorOfDouble.cs index 0d5e23cb4..a547b5f5f 100644 --- a/src/OpenCvSharp/Internal/Vectors/VectorOfDouble.cs +++ b/src/OpenCvSharp/Internal/Vectors/VectorOfDouble.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.InteropServices; +using System.Runtime.InteropServices; namespace OpenCvSharp.Internal.Vectors; @@ -34,7 +31,7 @@ public VectorOfDouble(nuint size) /// public VectorOfDouble(IEnumerable data) { - if (data == null) + if (data is null) throw new ArgumentNullException(nameof(data)); var array = data.ToArray(); ptr = NativeMethods.vector_double_new3(array, (nuint)array.Length); @@ -84,7 +81,7 @@ public double[] ToArray() var size = Size; if (size == 0) { - return Array.Empty(); + return []; } var dst = new double[size]; Marshal.Copy(ElemPtr, dst, 0, dst.Length); diff --git a/src/OpenCvSharp/Internal/Vectors/VectorOfFloat.cs b/src/OpenCvSharp/Internal/Vectors/VectorOfFloat.cs index 6cd81f525..f5dd2c56e 100644 --- a/src/OpenCvSharp/Internal/Vectors/VectorOfFloat.cs +++ b/src/OpenCvSharp/Internal/Vectors/VectorOfFloat.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.InteropServices; +using System.Runtime.InteropServices; namespace OpenCvSharp.Internal.Vectors; @@ -34,7 +31,7 @@ public VectorOfFloat(nuint size) /// public VectorOfFloat(IEnumerable data) { - if (data == null) + if (data is null) throw new ArgumentNullException(nameof(data)); var array = data.ToArray(); ptr = NativeMethods.vector_float_new3(array, (nuint)array.Length); @@ -84,7 +81,7 @@ public float[] ToArray() var size = Size; if (size == 0) { - return Array.Empty(); + return []; } var dst = new float[size]; Marshal.Copy(ElemPtr, dst, 0, dst.Length); diff --git a/src/OpenCvSharp/Internal/Vectors/VectorOfImageFeatures.cs b/src/OpenCvSharp/Internal/Vectors/VectorOfImageFeatures.cs index 2cf00d0eb..8b47f1fc0 100644 --- a/src/OpenCvSharp/Internal/Vectors/VectorOfImageFeatures.cs +++ b/src/OpenCvSharp/Internal/Vectors/VectorOfImageFeatures.cs @@ -1,6 +1,4 @@ -using System; -using System.Linq; -using OpenCvSharp.Detail; +using OpenCvSharp.Detail; namespace OpenCvSharp.Internal.Vectors; @@ -46,7 +44,7 @@ public ImageFeatures[] ToArray() { var size = Size; if (size == 0) - return Array.Empty(); + return []; VectorOfKeyPoint[]? keypointsVecs = null; Mat[]? descriptors = null; @@ -55,7 +53,7 @@ public ImageFeatures[] ToArray() var nativeResult = new WImageFeatures[size]; keypointsVecs = new VectorOfKeyPoint[size]; descriptors = new Mat[size]; - for (int i = 0; i < size; i++) + for (var i = 0; i < size; i++) { keypointsVecs[i] = new VectorOfKeyPoint(); descriptors[i] = new Mat(); diff --git a/src/OpenCvSharp/Internal/Vectors/VectorOfInt32.cs b/src/OpenCvSharp/Internal/Vectors/VectorOfInt32.cs index 4d18dd724..55e642879 100644 --- a/src/OpenCvSharp/Internal/Vectors/VectorOfInt32.cs +++ b/src/OpenCvSharp/Internal/Vectors/VectorOfInt32.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.InteropServices; +using System.Runtime.InteropServices; namespace OpenCvSharp.Internal.Vectors; @@ -34,7 +31,7 @@ public VectorOfInt32(nuint size) /// public VectorOfInt32(IEnumerable data) { - if (data == null) + if (data is null) throw new ArgumentNullException(nameof(data)); var array = data.ToArray(); ptr = NativeMethods.vector_int32_new3(array, (nuint)array.Length); @@ -84,7 +81,7 @@ public int[] ToArray() var size = Size; if (size == 0) { - return Array.Empty(); + return []; } var dst = new int[size]; Marshal.Copy(ElemPtr, dst, 0, dst.Length); diff --git a/src/OpenCvSharp/Internal/Vectors/VectorOfKeyLine.cs b/src/OpenCvSharp/Internal/Vectors/VectorOfKeyLine.cs index 486a980b7..005e4b5d3 100644 --- a/src/OpenCvSharp/Internal/Vectors/VectorOfKeyLine.cs +++ b/src/OpenCvSharp/Internal/Vectors/VectorOfKeyLine.cs @@ -1,8 +1,4 @@ -using System; -using System.Runtime.InteropServices; -using OpenCvSharp.LineDescriptor; - -#if false +#if false namespace OpenCvSharp.Internal.Vectors { diff --git a/src/OpenCvSharp/Internal/Vectors/VectorOfKeyPoint.cs b/src/OpenCvSharp/Internal/Vectors/VectorOfKeyPoint.cs index 763127328..84ba9027b 100644 --- a/src/OpenCvSharp/Internal/Vectors/VectorOfKeyPoint.cs +++ b/src/OpenCvSharp/Internal/Vectors/VectorOfKeyPoint.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.InteropServices; +using System.Runtime.InteropServices; using OpenCvSharp.Internal.Util; namespace OpenCvSharp.Internal.Vectors; @@ -35,7 +32,7 @@ public VectorOfKeyPoint(nuint size) /// public VectorOfKeyPoint(IEnumerable data) { - if (data == null) + if (data is null) throw new ArgumentNullException(nameof(data)); var array = data.ToArray(); ptr = NativeMethods.vector_KeyPoint_new3(array, (nuint)array.Length); @@ -85,7 +82,7 @@ public KeyPoint[] ToArray() var size = Size; if (size == 0) { - return Array.Empty(); + return []; } var dst = new KeyPoint[size]; using (var dstPtr = new ArrayAddress1(dst)) diff --git a/src/OpenCvSharp/Internal/Vectors/VectorOfMat.cs b/src/OpenCvSharp/Internal/Vectors/VectorOfMat.cs index 77288b956..d2056e8b8 100644 --- a/src/OpenCvSharp/Internal/Vectors/VectorOfMat.cs +++ b/src/OpenCvSharp/Internal/Vectors/VectorOfMat.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; - -namespace OpenCvSharp.Internal.Vectors; +namespace OpenCvSharp.Internal.Vectors; /// /// @@ -33,7 +29,7 @@ public VectorOfMat(int size) /// public VectorOfMat(IEnumerable mats) { - if (mats == null) + if (mats is null) throw new ArgumentNullException(nameof(mats)); var matsArray = mats.ToArray(); @@ -104,7 +100,7 @@ public T[] ToArray() { var size = Size; if (size == 0) - return Array.Empty(); + return []; var dst = new T[size]; var dstPtr = new IntPtr[size]; diff --git a/src/OpenCvSharp/Internal/Vectors/VectorOfPoint.cs b/src/OpenCvSharp/Internal/Vectors/VectorOfPoint.cs index 6c6799273..218ff18d8 100644 --- a/src/OpenCvSharp/Internal/Vectors/VectorOfPoint.cs +++ b/src/OpenCvSharp/Internal/Vectors/VectorOfPoint.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.InteropServices; +using System.Runtime.InteropServices; using OpenCvSharp.Internal.Util; namespace OpenCvSharp.Internal.Vectors; @@ -35,7 +32,7 @@ public VectorOfPoint(nuint size) /// public VectorOfPoint(IEnumerable data) { - if (data == null) + if (data is null) throw new ArgumentNullException(nameof(data)); var array = data.ToArray(); ptr = NativeMethods.vector_Point2i_new3(array, (nuint)array.Length); @@ -85,7 +82,7 @@ public Point[] ToArray() var size = Size; if (size == 0) { - return Array.Empty(); + return []; } var dst = new Point[size]; using (var dstPtr = new ArrayAddress1(dst)) diff --git a/src/OpenCvSharp/Internal/Vectors/VectorOfPoint2d.cs b/src/OpenCvSharp/Internal/Vectors/VectorOfPoint2d.cs index 233fd6c00..ab135d527 100644 --- a/src/OpenCvSharp/Internal/Vectors/VectorOfPoint2d.cs +++ b/src/OpenCvSharp/Internal/Vectors/VectorOfPoint2d.cs @@ -1,5 +1,4 @@ -using System; -using System.Runtime.InteropServices; +using System.Runtime.InteropServices; using OpenCvSharp.Internal.Util; namespace OpenCvSharp.Internal.Vectors; @@ -61,7 +60,7 @@ public Point2d[] ToArray() var size = Size; if (size == 0) { - return Array.Empty(); + return []; } var dst = new Point2d[size]; using (var dstPtr = new ArrayAddress1(dst)) diff --git a/src/OpenCvSharp/Internal/Vectors/VectorOfPoint2f.cs b/src/OpenCvSharp/Internal/Vectors/VectorOfPoint2f.cs index f047891d8..8d53cb07d 100644 --- a/src/OpenCvSharp/Internal/Vectors/VectorOfPoint2f.cs +++ b/src/OpenCvSharp/Internal/Vectors/VectorOfPoint2f.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.InteropServices; +using System.Runtime.InteropServices; using OpenCvSharp.Internal.Util; namespace OpenCvSharp.Internal.Vectors; @@ -36,7 +33,7 @@ public VectorOfPoint2f(nuint size) /// public VectorOfPoint2f(IEnumerable data) { - if (data == null) + if (data is null) throw new ArgumentNullException(nameof(data)); var array = data.ToArray(); ptr = NativeMethods.vector_Point2f_new3(array, (nuint)array.Length); @@ -86,7 +83,7 @@ public Point2f[] ToArray() var size = Size; if (size == 0) { - return Array.Empty(); + return []; } var dst = new Point2f[size]; using (var dstPtr = new ArrayAddress1(dst)) diff --git a/src/OpenCvSharp/Internal/Vectors/VectorOfPoint3f.cs b/src/OpenCvSharp/Internal/Vectors/VectorOfPoint3f.cs index 82aa68613..8c187dcf6 100644 --- a/src/OpenCvSharp/Internal/Vectors/VectorOfPoint3f.cs +++ b/src/OpenCvSharp/Internal/Vectors/VectorOfPoint3f.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.InteropServices; +using System.Runtime.InteropServices; using OpenCvSharp.Internal.Util; namespace OpenCvSharp.Internal.Vectors; @@ -36,7 +33,7 @@ public VectorOfPoint3f(nuint size) /// public VectorOfPoint3f(IEnumerable data) { - if (data == null) + if (data is null) throw new ArgumentNullException(nameof(data)); var array = data.ToArray(); ptr = NativeMethods.vector_Point3f_new3(array, (nuint)array.Length); @@ -86,7 +83,7 @@ public Point3f[] ToArray() var size = Size; if (size == 0) { - return Array.Empty(); + return []; } var dst = new Point3f[size]; using (var dstPtr = new ArrayAddress1(dst)) diff --git a/src/OpenCvSharp/Internal/Vectors/VectorOfRect.cs b/src/OpenCvSharp/Internal/Vectors/VectorOfRect.cs index 75a51d469..d5daec889 100644 --- a/src/OpenCvSharp/Internal/Vectors/VectorOfRect.cs +++ b/src/OpenCvSharp/Internal/Vectors/VectorOfRect.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.InteropServices; +using System.Runtime.InteropServices; using OpenCvSharp.Internal.Util; namespace OpenCvSharp.Internal.Vectors; @@ -35,7 +32,7 @@ public VectorOfRect(nuint size) /// public VectorOfRect(IEnumerable data) { - if (data == null) + if (data is null) throw new ArgumentNullException(nameof(data)); var array = data.ToArray(); ptr = NativeMethods.vector_Rect_new3(array, (nuint)array.Length); @@ -85,7 +82,7 @@ public Rect[] ToArray() var size = Size; if (size == 0) { - return Array.Empty(); + return []; } var dst = new Rect[size]; using (var dstPtr = new ArrayAddress1(dst)) diff --git a/src/OpenCvSharp/Internal/Vectors/VectorOfRect2d.cs b/src/OpenCvSharp/Internal/Vectors/VectorOfRect2d.cs index d31883668..89c1e40b2 100644 --- a/src/OpenCvSharp/Internal/Vectors/VectorOfRect2d.cs +++ b/src/OpenCvSharp/Internal/Vectors/VectorOfRect2d.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.InteropServices; +using System.Runtime.InteropServices; using OpenCvSharp.Internal.Util; // ReSharper disable UnusedMember.Global @@ -37,7 +34,7 @@ public VectorOfRect2d(nuint size) /// public VectorOfRect2d(IEnumerable data) { - if (data == null) + if (data is null) throw new ArgumentNullException(nameof(data)); var array = data.ToArray(); ptr = NativeMethods.vector_Rect2d_new3(array, (nuint)array.Length); @@ -87,7 +84,7 @@ public Rect2d[] ToArray() var size = Size; if (size == 0) { - return Array.Empty(); + return []; } var dst = new Rect2d[size]; using (var dstPtr = new ArrayAddress1(dst)) diff --git a/src/OpenCvSharp/Internal/Vectors/VectorOfRotatedRect.cs b/src/OpenCvSharp/Internal/Vectors/VectorOfRotatedRect.cs index b4c7a6ae1..5b01fbde3 100644 --- a/src/OpenCvSharp/Internal/Vectors/VectorOfRotatedRect.cs +++ b/src/OpenCvSharp/Internal/Vectors/VectorOfRotatedRect.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.InteropServices; +using System.Runtime.InteropServices; using OpenCvSharp.Internal.Util; // ReSharper disable UnusedMember.Global @@ -37,7 +34,7 @@ public VectorOfRotatedRect(nuint size) /// public VectorOfRotatedRect(IEnumerable data) { - if (data == null) + if (data is null) throw new ArgumentNullException(nameof(data)); var array = data.ToArray(); ptr = NativeMethods.vector_RotatedRect_new3(array, (nuint)array.Length); @@ -86,7 +83,7 @@ public RotatedRect[] ToArray() { var size = Size; if (size == 0) - return Array.Empty(); + return []; var dst = new RotatedRect[size]; using (var dstPtr = new ArrayAddress1(dst)) diff --git a/src/OpenCvSharp/Internal/Vectors/VectorOfString.cs b/src/OpenCvSharp/Internal/Vectors/VectorOfString.cs index d3935ba60..0653da4bd 100644 --- a/src/OpenCvSharp/Internal/Vectors/VectorOfString.cs +++ b/src/OpenCvSharp/Internal/Vectors/VectorOfString.cs @@ -1,5 +1,4 @@ -using System; -using System.Text; +using System.Text; namespace OpenCvSharp.Internal.Vectors; @@ -56,7 +55,7 @@ public string[] ToArray() { var size = Size; if (size == 0) - return Array.Empty(); + return []; var ret = new string[size]; var cStringPointers = new IntPtr[size]; diff --git a/src/OpenCvSharp/Internal/Vectors/VectorOfVec2f.cs b/src/OpenCvSharp/Internal/Vectors/VectorOfVec2f.cs index f72d56dd3..c3338106c 100644 --- a/src/OpenCvSharp/Internal/Vectors/VectorOfVec2f.cs +++ b/src/OpenCvSharp/Internal/Vectors/VectorOfVec2f.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.InteropServices; +using System.Runtime.InteropServices; using OpenCvSharp.Internal.Util; namespace OpenCvSharp.Internal.Vectors; @@ -77,7 +74,7 @@ public T[] ToArray() where T : unmanaged var arySize = Size; if (arySize == 0) { - return Array.Empty(); + return []; } else { diff --git a/src/OpenCvSharp/Internal/Vectors/VectorOfVec3f.cs b/src/OpenCvSharp/Internal/Vectors/VectorOfVec3f.cs index ddc52a91a..51edf4490 100644 --- a/src/OpenCvSharp/Internal/Vectors/VectorOfVec3f.cs +++ b/src/OpenCvSharp/Internal/Vectors/VectorOfVec3f.cs @@ -1,5 +1,4 @@ -using System; -using System.Runtime.InteropServices; +using System.Runtime.InteropServices; using OpenCvSharp.Internal.Util; namespace OpenCvSharp.Internal.Vectors; @@ -75,7 +74,7 @@ public T[] ToArray() where T : unmanaged var arySize = Size; if (arySize == 0) { - return Array.Empty(); + return []; } var dst = new T[arySize]; using (var dstPtr = new ArrayAddress1(dst)) diff --git a/src/OpenCvSharp/Internal/Vectors/VectorOfVec4f.cs b/src/OpenCvSharp/Internal/Vectors/VectorOfVec4f.cs index a152a83d5..ecbddd655 100644 --- a/src/OpenCvSharp/Internal/Vectors/VectorOfVec4f.cs +++ b/src/OpenCvSharp/Internal/Vectors/VectorOfVec4f.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.InteropServices; +using System.Runtime.InteropServices; using OpenCvSharp.Internal.Util; namespace OpenCvSharp.Internal.Vectors; @@ -25,7 +22,7 @@ public VectorOfVec4f() /// public VectorOfVec4f(IEnumerable data) { - if (data == null) + if (data is null) throw new ArgumentNullException(nameof(data)); var array = data.ToArray(); ptr = NativeMethods.vector_Vec4f_new3(array, (nuint)array.Length); @@ -89,7 +86,7 @@ public T[] ToArray() where T : unmanaged var arySize = Size; if (arySize == 0) { - return Array.Empty(); + return []; } var dst = new T[arySize]; using (var dstPtr = new ArrayAddress1(dst)) diff --git a/src/OpenCvSharp/Internal/Vectors/VectorOfVec4i.cs b/src/OpenCvSharp/Internal/Vectors/VectorOfVec4i.cs index b381d669b..e8e8da4e8 100644 --- a/src/OpenCvSharp/Internal/Vectors/VectorOfVec4i.cs +++ b/src/OpenCvSharp/Internal/Vectors/VectorOfVec4i.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.InteropServices; +using System.Runtime.InteropServices; using OpenCvSharp.Internal.Util; namespace OpenCvSharp.Internal.Vectors; @@ -25,7 +22,7 @@ public VectorOfVec4i() /// public VectorOfVec4i(IEnumerable data) { - if (data == null) + if (data is null) throw new ArgumentNullException(nameof(data)); var array = data.ToArray(); ptr = NativeMethods.vector_Vec4i_new3(array, (nuint)array.Length); @@ -89,7 +86,7 @@ public T[] ToArray() where T : unmanaged var arySize = Size; if (arySize == 0) { - return Array.Empty(); + return []; } var dst = new T[arySize]; using (var dstPtr = new ArrayAddress1(dst)) diff --git a/src/OpenCvSharp/Internal/Vectors/VectorOfVec6f.cs b/src/OpenCvSharp/Internal/Vectors/VectorOfVec6f.cs index d159f4fdd..397164ef3 100644 --- a/src/OpenCvSharp/Internal/Vectors/VectorOfVec6f.cs +++ b/src/OpenCvSharp/Internal/Vectors/VectorOfVec6f.cs @@ -1,5 +1,4 @@ -using System; -using System.Runtime.InteropServices; +using System.Runtime.InteropServices; using OpenCvSharp.Internal.Util; namespace OpenCvSharp.Internal.Vectors; @@ -75,7 +74,7 @@ public T[] ToArray() where T : unmanaged var arySize = Size; if (arySize == 0) { - return Array.Empty(); + return []; } var dst = new T[arySize]; using (var dstPtr = new ArrayAddress1(dst)) diff --git a/src/OpenCvSharp/Internal/Vectors/VectorOfVectorByte.cs b/src/OpenCvSharp/Internal/Vectors/VectorOfVectorByte.cs index dab269493..3ec9f2299 100644 --- a/src/OpenCvSharp/Internal/Vectors/VectorOfVectorByte.cs +++ b/src/OpenCvSharp/Internal/Vectors/VectorOfVectorByte.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using OpenCvSharp.Internal.Util; +using OpenCvSharp.Internal.Util; namespace OpenCvSharp.Internal.Vectors; @@ -61,7 +58,7 @@ public byte[][] ToArray() { var size1 = GetSize1(); if (size1 == 0) - return Array.Empty(); + return []; var size2 = GetSize2(); var ret = new byte[size1][]; diff --git a/src/OpenCvSharp/Internal/Vectors/VectorOfVectorDMatch.cs b/src/OpenCvSharp/Internal/Vectors/VectorOfVectorDMatch.cs index 5c56d6bbc..83cec9d7b 100644 --- a/src/OpenCvSharp/Internal/Vectors/VectorOfVectorDMatch.cs +++ b/src/OpenCvSharp/Internal/Vectors/VectorOfVectorDMatch.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using OpenCvSharp.Internal.Util; +using OpenCvSharp.Internal.Util; namespace OpenCvSharp.Internal.Vectors; @@ -61,7 +58,7 @@ public DMatch[][] ToArray() { var size1 = GetSize1(); if (size1 == 0) - return Array.Empty(); + return []; var size2 = GetSize2(); var ret = new DMatch[size1][]; diff --git a/src/OpenCvSharp/Internal/Vectors/VectorOfVectorDouble.cs b/src/OpenCvSharp/Internal/Vectors/VectorOfVectorDouble.cs index 8e4bba6fa..7213b74c4 100644 --- a/src/OpenCvSharp/Internal/Vectors/VectorOfVectorDouble.cs +++ b/src/OpenCvSharp/Internal/Vectors/VectorOfVectorDouble.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using OpenCvSharp.Internal.Util; +using OpenCvSharp.Internal.Util; namespace OpenCvSharp.Internal.Vectors; @@ -61,7 +58,7 @@ public double[][] ToArray() { var size1 = GetSize1(); if (size1 == 0) - return Array.Empty(); + return []; var size2 = GetSize2(); var ret = new double[size1][]; diff --git a/src/OpenCvSharp/Internal/Vectors/VectorOfVectorInt32.cs b/src/OpenCvSharp/Internal/Vectors/VectorOfVectorInt32.cs index 5f24e550e..6ab52dde2 100644 --- a/src/OpenCvSharp/Internal/Vectors/VectorOfVectorInt32.cs +++ b/src/OpenCvSharp/Internal/Vectors/VectorOfVectorInt32.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using OpenCvSharp.Internal.Util; +using OpenCvSharp.Internal.Util; namespace OpenCvSharp.Internal.Vectors; @@ -61,7 +58,7 @@ public int[][] ToArray() { var size1 = GetSize1(); if (size1 == 0) - return Array.Empty(); + return []; var size2 = GetSize2(); var ret = new int[size1][]; diff --git a/src/OpenCvSharp/Internal/Vectors/VectorOfVectorKeyLine.cs b/src/OpenCvSharp/Internal/Vectors/VectorOfVectorKeyLine.cs index 297c35f59..3bdc14359 100644 --- a/src/OpenCvSharp/Internal/Vectors/VectorOfVectorKeyLine.cs +++ b/src/OpenCvSharp/Internal/Vectors/VectorOfVectorKeyLine.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using OpenCvSharp.LineDescriptor; - -#if false +#if false namespace OpenCvSharp.Internal.Vectors { diff --git a/src/OpenCvSharp/Internal/Vectors/VectorOfVectorKeyPoint.cs b/src/OpenCvSharp/Internal/Vectors/VectorOfVectorKeyPoint.cs index b2e37b9a3..bd068803f 100644 --- a/src/OpenCvSharp/Internal/Vectors/VectorOfVectorKeyPoint.cs +++ b/src/OpenCvSharp/Internal/Vectors/VectorOfVectorKeyPoint.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using OpenCvSharp.Internal.Util; +using OpenCvSharp.Internal.Util; namespace OpenCvSharp.Internal.Vectors; @@ -23,7 +20,7 @@ public VectorOfVectorKeyPoint() /// public VectorOfVectorKeyPoint(KeyPoint[][] values) { - if (values == null) + if (values is null) throw new ArgumentNullException(nameof(values)); using var aa = new ArrayAddress2(values); @@ -75,7 +72,7 @@ public KeyPoint[][] ToArray() { var size1 = GetSize1(); if (size1 == 0) - return Array.Empty(); + return []; var size2 = GetSize2(); var ret = new KeyPoint[size1][]; diff --git a/src/OpenCvSharp/Internal/Vectors/VectorOfVectorPoint.cs b/src/OpenCvSharp/Internal/Vectors/VectorOfVectorPoint.cs index 471d91000..3c0ed219e 100644 --- a/src/OpenCvSharp/Internal/Vectors/VectorOfVectorPoint.cs +++ b/src/OpenCvSharp/Internal/Vectors/VectorOfVectorPoint.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using OpenCvSharp.Internal.Util; +using OpenCvSharp.Internal.Util; namespace OpenCvSharp.Internal.Vectors; @@ -72,7 +69,7 @@ public Point[][] ToArray() { var size1 = GetSize1(); if (size1 == 0) - return Array.Empty(); + return []; var size2 = GetSize2(); var ret = new Point[size1][]; diff --git a/src/OpenCvSharp/Internal/Vectors/VectorOfVectorPoint2f.cs b/src/OpenCvSharp/Internal/Vectors/VectorOfVectorPoint2f.cs index ce91e3815..c018417cf 100644 --- a/src/OpenCvSharp/Internal/Vectors/VectorOfVectorPoint2f.cs +++ b/src/OpenCvSharp/Internal/Vectors/VectorOfVectorPoint2f.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using OpenCvSharp.Internal.Util; +using OpenCvSharp.Internal.Util; namespace OpenCvSharp.Internal.Vectors; @@ -62,7 +59,7 @@ public Point2f[][] ToArray() { var size1 = GetSize1(); if (size1 == 0) - return Array.Empty(); + return []; var size2 = GetSize2(); var ret = new Point2f[size1][]; diff --git a/src/OpenCvSharp/Modules/aruco/CvAruco.cs b/src/OpenCvSharp/Modules/aruco/CvAruco.cs index faae9b03b..7cfa6460b 100644 --- a/src/OpenCvSharp/Modules/aruco/CvAruco.cs +++ b/src/OpenCvSharp/Modules/aruco/CvAruco.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; using OpenCvSharp.Internal.Util; using OpenCvSharp.Internal.Vectors; @@ -33,14 +30,11 @@ public static void DetectMarkers( DetectorParameters parameters, out Point2f[][] rejectedImgPoints) { - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); - if (dictionary == null) + if (dictionary is null) throw new ArgumentNullException(nameof(dictionary)); - if (parameters == null) - throw new ArgumentNullException(nameof(parameters)); - if (dictionary.ObjectPtr == null) - throw new ArgumentException($"{nameof(dictionary)} is disposed", nameof(dictionary)); + dictionary.ThrowIfDisposed(); using var cornersVec = new VectorOfVectorPoint2f(); using var idsVec = new VectorOfInt32(); @@ -48,7 +42,7 @@ public static void DetectMarkers( NativeMethods.HandleException( NativeMethods.aruco_detectMarkers( - image.CvPtr, dictionary.ObjectPtr.CvPtr, cornersVec.CvPtr, idsVec.CvPtr, ref parameters.Native, + image.CvPtr, dictionary.CvPtr, cornersVec.CvPtr, idsVec.CvPtr, ref parameters, rejectedImgPointsVec.CvPtr)); corners = cornersVec.ToArray(); @@ -86,15 +80,15 @@ public static void EstimatePoseSingleMarkers( OutputArray tvec, OutputArray? objPoints = null) { - if (corners == null) + if (corners is null) throw new ArgumentNullException(nameof(corners)); - if (cameraMatrix == null) + if (cameraMatrix is null) throw new ArgumentNullException(nameof(cameraMatrix)); - if (distortionCoefficients == null) + if (distortionCoefficients is null) throw new ArgumentNullException(nameof(distortionCoefficients)); - if (rvec == null) + if (rvec is null) throw new ArgumentNullException(nameof(rvec)); - if (tvec == null) + if (tvec is null) throw new ArgumentNullException(nameof(tvec)); cameraMatrix.ThrowIfDisposed(); @@ -141,13 +135,13 @@ public static void DrawDetectedMarkers(InputArray image, Point2f[][] corners, IE /// are calculated based on this one to improve visualization. public static void DrawDetectedMarkers(InputArray image, Point2f[][] corners, IEnumerable? ids, Scalar borderColor) { - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); - if (corners == null) + if (corners is null) throw new ArgumentNullException(nameof(corners)); using var cornersAddress = new ArrayAddress2(corners); - if (ids == null) + if (ids is null) { NativeMethods.HandleException( NativeMethods.aruco_drawDetectedMarkers( @@ -164,42 +158,39 @@ public static void DrawDetectedMarkers(InputArray image, Point2f[][] corners, IE } GC.KeepAlive(image); } - + /// - /// Draw a canonical marker image + /// Returns one of the predefined dictionaries defined in PREDEFINED_DICTIONARY_NAME /// - /// dictionary of markers indicating the type of markers - /// identifier of the marker that will be returned. It has to be a valid id in the specified dictionary. - /// size of the image in pixels - /// output image with the marker - /// width of the marker border. - public static void DrawMarker(Dictionary dictionary, int id, int sidePixels, OutputArray mat, int borderBits = 1) + /// + /// + public static Dictionary GetPredefinedDictionary(PredefinedDictionaryName name) { - if (dictionary == null) - throw new ArgumentNullException(nameof(dictionary)); - if (dictionary.ObjectPtr == null) - throw new ArgumentException($"{nameof(dictionary)} is disposed", nameof(dictionary)); - if (mat == null) - throw new ArgumentNullException(nameof(mat)); - dictionary.ThrowIfDisposed(); - mat.ThrowIfNotReady(); - NativeMethods.HandleException( - NativeMethods.aruco_drawMarker(dictionary.ObjectPtr.CvPtr, id, sidePixels, mat.CvPtr, borderBits)); - mat.Fix(); - GC.KeepAlive(dictionary); - GC.KeepAlive(mat); + NativeMethods.aruco_getPredefinedDictionary((int) name, out IntPtr p)); + return new Dictionary(p); } /// - /// Returns one of the predefined dictionaries defined in PREDEFINED_DICTIONARY_NAME + /// Reads a new dictionary from FileNode. /// - /// - /// - public static Dictionary GetPredefinedDictionary(PredefinedDictionaryName name) + /// + /// Dictionary format is YAML see sample below + /// + /// nmarkers: 35 + /// markersize: 6 + /// maxCorrectionBits: 5 + /// marker_0: "101011111011111001001001101100000000" + /// ... + /// marker_34: "011111010000111011111110110101100101" + /// + /// + /// The path of the dictionary file + /// Instance of a Dictionary + public static Dictionary ReadDictionary(string dictionaryFile) { NativeMethods.HandleException( - NativeMethods.aruco_getPredefinedDictionary((int) name, out IntPtr p)); + NativeMethods.aruco_readDictionary(dictionaryFile, out IntPtr p)); return new Dictionary(p); } @@ -218,16 +209,16 @@ public static void DetectCharucoDiamond(InputArray image, Point2f[][] markerCorn float squareMarkerLengthRate, out Point2f[][] diamondCorners, out Vec4i[] diamondIds, InputArray? cameraMatrix = null, InputArray? distCoeffs = null) { - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); - if (markerCorners == null) + if (markerCorners is null) throw new ArgumentNullException(nameof(markerCorners)); - if (markerIds == null) + if (markerIds is null) throw new ArgumentNullException(nameof(markerIds)); - if (cameraMatrix == null && distCoeffs != null) + if (cameraMatrix is null && distCoeffs is not null) throw new ArgumentNullException(nameof(cameraMatrix)); - if (cameraMatrix != null && distCoeffs == null) + if (cameraMatrix is not null && distCoeffs is null) throw new ArgumentNullException(nameof(distCoeffs)); image.ThrowIfDisposed(); @@ -252,9 +243,9 @@ public static void DetectCharucoDiamond(InputArray image, Point2f[][] markerCorn diamondIds = diamondIdsVec.ToArray(); GC.KeepAlive(image); - if (cameraMatrix != null) + if (cameraMatrix is not null) GC.KeepAlive(cameraMatrix); - if (distCoeffs != null) + if (distCoeffs is not null) GC.KeepAlive(distCoeffs); } @@ -279,14 +270,14 @@ public static void DrawDetectedDiamonds(InputArray image, Point2f[][] diamondCor public static void DrawDetectedDiamonds(InputArray image, Point2f[][] diamondCorners, IEnumerable? diamondIds, Scalar borderColor) { - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); - if (diamondCorners == null) + if (diamondCorners is null) throw new ArgumentNullException(nameof(diamondCorners)); using var cornersAddress = new ArrayAddress2(diamondCorners); - if (diamondIds == null) + if (diamondIds is null) { NativeMethods.HandleException( NativeMethods.aruco_drawDetectedDiamonds(image.CvPtr, diff --git a/src/OpenCvSharp/Modules/aruco/DetectorParameters.cs b/src/OpenCvSharp/Modules/aruco/DetectorParameters.cs index b7e49429d..c99ac57c1 100644 --- a/src/OpenCvSharp/Modules/aruco/DetectorParameters.cs +++ b/src/OpenCvSharp/Modules/aruco/DetectorParameters.cs @@ -1,343 +1,200 @@ -using System; -using System.Diagnostics.CodeAnalysis; -using System.Runtime.InteropServices; -using OpenCvSharp.Internal; +using System.Runtime.InteropServices; + +// ReSharper disable UnusedMember.Global namespace OpenCvSharp.Aruco; +#pragma warning disable CA1815 + /// /// Parameters for the detectMarker process /// -public class DetectorParameters +[StructLayout(LayoutKind.Sequential)] +public struct DetectorParameters { - internal NativeStruct Native; - - private DetectorParameters(NativeStruct native) - { - Native = native; - } - - /// - /// - /// - public static DetectorParameters Create() - { - NativeMethods.HandleException( - NativeMethods.aruco_DetectorParameters_create(out var native)); - return new DetectorParameters(native); - } - /// /// minimum window size for adaptive thresholding before finding contours (default 3). /// - public int AdaptiveThreshWinSizeMin - { - get => Native.adaptiveThreshWinSizeMin; - set => Native.adaptiveThreshWinSizeMin = value; - } + public int AdaptiveThreshWinSizeMin = 3; /// /// adaptiveThreshWinSizeMax: maximum window size for adaptive thresholding before finding contours(default 23). /// - public int AdaptiveThreshWinSizeMax - { - get => Native.adaptiveThreshWinSizeMax; - set => Native.adaptiveThreshWinSizeMax = value; - } + public int AdaptiveThreshWinSizeMax = 23; /// /// increments from adaptiveThreshWinSizeMin to adaptiveThreshWinSizeMax during the thresholding(default 10). /// - public int AdaptiveThreshWinSizeStep - { - get => Native.adaptiveThreshWinSizeStep; - set => Native.adaptiveThreshWinSizeStep = value; - } + public int AdaptiveThreshWinSizeStep = 10; /// /// constant for adaptive thresholding before finding contours (default 7) /// - public double AdaptiveThreshConstant - { - get => Native.adaptiveThreshConstant; - set => Native.adaptiveThreshConstant = value; - } + public double AdaptiveThreshConstant = 7; /// /// determine minimum perimeter for marker contour to be detected. /// This is defined as a rate respect to the maximum dimension of the input image(default 0.03). /// - public double MinMarkerPerimeterRate - { - get => Native.minMarkerPerimeterRate; - set => Native.minMarkerPerimeterRate = value; - } + public double MinMarkerPerimeterRate = 0.03; /// /// determine maximum perimeter for marker contour to be detected. /// This is defined as a rate respect to the maximum dimension of the input image(default 4.0). /// - public double MaxMarkerPerimeterRate - { - get => Native.maxMarkerPerimeterRate; - set => Native.maxMarkerPerimeterRate = value; - } + public double MaxMarkerPerimeterRate = 4; /// /// minimum accuracy during the polygonal approximation process to determine which contours are squares. /// - public double PolygonalApproxAccuracyRate - { - get => Native.polygonalApproxAccuracyRate; - set => Native.polygonalApproxAccuracyRate = value; - } + public double PolygonalApproxAccuracyRate = 0.03; /// /// minimum distance between corners for detected markers relative to its perimeter(default 0.05) /// - public double MinCornerDistanceRate - { - get => Native.minCornerDistanceRate; - set => Native.minCornerDistanceRate = value; - } + public double MinCornerDistanceRate = 0.05; /// /// minimum distance of any corner to the image border for detected markers (in pixels) (default 3) /// - public int MinDistanceToBorder - { - get => Native.minDistanceToBorder; - set => Native.minDistanceToBorder = value; - } + public int MinDistanceToBorder = 3; /// /// minimum mean distance between two marker corners to be considered similar, /// so that the smaller one is removed.The rate is relative to the smaller perimeter of the two markers(default 0.05). /// - public double MinMarkerDistanceRate - { - get => Native.minMarkerDistanceRate; - set => Native.minMarkerDistanceRate = value; - } + public double MinMarkerDistanceRate = 0.05; /// /// corner refinement method. /// (CORNER_REFINE_NONE, no refinement. CORNER_REFINE_SUBPIX, do subpixel refinement. CORNER_REFINE_CONTOUR use contour-Points) /// - public CornerRefineMethod CornerRefinementMethod - { - get => (CornerRefineMethod)Native.cornerRefinementMethod; - set => Native.cornerRefinementMethod = (int)value; - } + [MarshalAs(UnmanagedType.I4)] + public CornerRefineMethod CornerRefinementMethod = CornerRefineMethod.None; /// /// window size for the corner refinement process (in pixels) (default 5). /// - public int CornerRefinementWinSize - { - get => Native.cornerRefinementWinSize; - set => Native.cornerRefinementWinSize = value; - } + public int CornerRefinementWinSize = 5; /// /// maximum number of iterations for stop criteria of the corner refinement process(default 30). /// - public int CornerRefinementMaxIterations - { - get => Native.cornerRefinementMaxIterations; - set => Native.cornerRefinementMaxIterations = value; - } + public int CornerRefinementMaxIterations = 30; /// /// minimum error for the stop criteria of the corner refinement process(default: 0.1) /// - public double CornerRefinementMinAccuracy - { - get => Native.cornerRefinementMinAccuracy; - set => Native.cornerRefinementMinAccuracy = value; - } + public double CornerRefinementMinAccuracy = 0.1; /// /// number of bits of the marker border, i.e. marker border width (default 1). /// - public int MarkerBorderBits - { - get => Native.markerBorderBits; - set => Native.markerBorderBits = value; - } + public int MarkerBorderBits = 1; /// /// number of bits (per dimension) for each cell of the marker when removing the perspective(default 8). /// - public int PerspectiveRemovePixelPerCell - { - get => Native.perspectiveRemovePixelPerCell; - set => Native.perspectiveRemovePixelPerCell = value; - } + public int PerspectiveRemovePixelPerCell = 4; /// /// width of the margin of pixels on each cell not considered for the determination /// of the cell bit.Represents the rate respect to the total size of the cell, /// i.e. perspectiveRemovePixelPerCell (default 0.13) /// - public double PerspectiveRemoveIgnoredMarginPerCell - { - get => Native.perspectiveRemoveIgnoredMarginPerCell; - set => Native.perspectiveRemoveIgnoredMarginPerCell = value; - } + public double PerspectiveRemoveIgnoredMarginPerCell = 0.13; /// /// maximum number of accepted erroneous bits in the border /// (i.e. number of allowed white bits in the border). Represented as a rate respect to the total /// number of bits per marker(default 0.35). /// - public double MaxErroneousBitsInBorderRate - { - get => Native.maxErroneousBitsInBorderRate; - set => Native.maxErroneousBitsInBorderRate = value; - } + public double MaxErroneousBitsInBorderRate = 0.35; /// /// minimun standard deviation in pixels values during the decodification step to /// apply Otsu thresholding(otherwise, all the bits are set to 0 or 1 depending on mean higher than 128 or not) (default 5.0) /// - public double MinOtsuStdDev - { - get => Native.minOtsuStdDev; - set => Native.minOtsuStdDev = value; - } + public double MinOtsuStdDev = 5.0; /// /// errorCorrectionRate error correction rate respect to the maximun error correction capability for each dictionary. (default 0.6). /// - public double ErrorCorrectionRate - { - get => Native.errorCorrectionRate; - set => Native.errorCorrectionRate = value; - } + public double ErrorCorrectionRate = 0.6; /// /// Detection of quads can be done on a lower-resolution image, improving speed at a cost of pose accuracy and a slight decrease in detection rate. /// Decoding the binary payload is still done at full resolution. /// - public float AprilTagQuadDecimate - { - get => Native.aprilTagQuadDecimate; - set => Native.aprilTagQuadDecimate = value; - } + public float AprilTagQuadDecimate = 0; /// /// What Gaussian blur should be applied to the segmented image (used for quad detection?) Parameter is the standard deviation in pixels. /// Very noisy images benefit from non-zero values (e.g. 0.8). /// - public float AprilTagQuadSigma - { - get => Native.aprilTagQuadSigma; - set => Native.aprilTagQuadSigma = value; - } + public float AprilTagQuadSigma = 0; /// /// reject quads containing too few pixels. /// - public int AprilTagMinClusterPixels - { - get => Native.aprilTagMinClusterPixels; - set => Native.aprilTagMinClusterPixels = value; - } + public int AprilTagMinClusterPixels = 5; /// /// how many corner candidates to consider when segmenting a group of pixels into a quad. /// - public int AprilTagMaxNmaxima - { - get => Native.aprilTagMaxNmaxima; - set => Native.aprilTagMaxNmaxima = value; - } + public int AprilTagMaxNmaxima = 10; /// /// Reject quads where pairs of edges have angles that are close to straight or close to 180 degrees. Zero means that no quads are rejected. (In radians). /// - public float AprilTagCriticalRad - { - get => Native.aprilTagCriticalRad; - set => Native.aprilTagCriticalRad = value; - } + public float AprilTagCriticalRad = (float)(10 * Cv2.PI / 180); /// /// When fitting lines to the contours, what is the maximum mean squared error allowed? /// This is useful in rejecting contours that are far from being quad shaped; rejecting these quads "early" saves expensive decoding processing. /// - public float AprilTagMaxLineFitMse - { - get => Native.aprilTagMaxLineFitMse; - set => Native.aprilTagMaxLineFitMse = value; - } + public float AprilTagMaxLineFitMse = 10; /// - /// should the thresholded image be deglitched? Only useful for very noisy images + /// When we build our model of black & white pixels, we add an extra check that the white model must be (overall) brighter than the black model. + /// How much brighter? (in pixel values, [0,255]). /// - public bool AprilTagDeglitch - { - get => Convert.ToBoolean(Native.aprilTagDeglitch); - set => Native.aprilTagDeglitch = Convert.ToInt32(value); - } + public int AprilTagMinWhiteBlackDiff = 5; /// - /// When we build our model of black & white pixels, we add an extra check that the white model must be (overall) brighter than the black model. - /// How much brighter? (in pixel values, [0,255]). + /// should the thresholded image be deglitched? Only useful for very noisy images /// - public int AprilTagMinWhiteBlackDiff - { - get => Native.aprilTagMinWhiteBlackDiff; - set => Native.aprilTagMinWhiteBlackDiff = value; - } + public int AprilTagDeglitch = 0; /// /// to check if there is a white marker. In order to generate a "white" marker just invert a normal marker by using a tilde, ~markerImage. (default false) /// - public bool DetectInvertedMarker - { - get => Convert.ToBoolean(Native.detectInvertedMarker); - set => Native.detectInvertedMarker = Convert.ToInt32(value); - } + [MarshalAs(UnmanagedType.U1)] + public bool DetectInvertedMarker = false; + + /// + /// enable the new and faster Aruco detection strategy. + /// Proposed in the paper: + /// * Romero-Ramirez et al: Speeded up detection of squared fiducial markers (2018) + /// * https://www.researchgate.net/publication/325787310_Speeded_Up_Detection_of_Squared_Fiducial_Markers + /// + [MarshalAs(UnmanagedType.U1)] + public bool UseAruco3Detection = false; + + /// + /// minimum side length of a marker in the canonical image. Latter is the binarized image in which contours are searched. + /// + public int MinSideLengthCanonicalImg = 32; + + /// + /// range [0,1], eq (2) from paper. The parameter tau_i has a direct influence on the processing speed. + /// + public float MinMarkerLengthRatioOriginalImg = 0.0f; -#pragma warning disable CA1034 -#pragma warning disable CA1051 -#pragma warning disable 1591 - [StructLayout(LayoutKind.Sequential)] - [SuppressMessage("Microsoft.Design", "CA1815: Override equals and operator equals on value types")] - public struct NativeStruct + /// + /// Constructor + /// + public DetectorParameters() { - public int adaptiveThreshWinSizeMin; - public int adaptiveThreshWinSizeMax; - public int adaptiveThreshWinSizeStep; - public double adaptiveThreshConstant; - public double minMarkerPerimeterRate; - public double maxMarkerPerimeterRate; - public double polygonalApproxAccuracyRate; - public double minCornerDistanceRate; - public int minDistanceToBorder; - public double minMarkerDistanceRate; - public int cornerRefinementMethod; - public int cornerRefinementWinSize; - public int cornerRefinementMaxIterations; - public double cornerRefinementMinAccuracy; - public int markerBorderBits; - public int perspectiveRemovePixelPerCell; - public double perspectiveRemoveIgnoredMarginPerCell; - public double maxErroneousBitsInBorderRate; - public double minOtsuStdDev; - public double errorCorrectionRate; - public float aprilTagQuadDecimate; - public float aprilTagQuadSigma; - public int aprilTagMinClusterPixels; - public int aprilTagMaxNmaxima; - public float aprilTagCriticalRad; - public float aprilTagMaxLineFitMse; - public int aprilTagDeglitch; - public int aprilTagMinWhiteBlackDiff; - public int detectInvertedMarker; } -#pragma warning restore CA1051 -#pragma warning restore 1591 } diff --git a/src/OpenCvSharp/Modules/aruco/Dictionary.cs b/src/OpenCvSharp/Modules/aruco/Dictionary.cs index cbdbe219e..fa3c0a1b3 100644 --- a/src/OpenCvSharp/Modules/aruco/Dictionary.cs +++ b/src/OpenCvSharp/Modules/aruco/Dictionary.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp.Aruco; @@ -8,36 +7,25 @@ namespace OpenCvSharp.Aruco; /// public class Dictionary : DisposableCvObject { - /// - /// cv::Ptr<T> - /// - internal Ptr? ObjectPtr { get; private set; } - - #region Init & Disposal - /// /// /// - internal Dictionary(IntPtr p) + internal Dictionary(IntPtr ptr) { - ObjectPtr = new Ptr(p); - ptr = ObjectPtr.Get(); + this.ptr = ptr; } /// - /// Releases managed resources + /// Releases unmanaged resources /// - protected override void DisposeManaged() + protected override void DisposeUnmanaged() { - ObjectPtr?.Dispose(); - ObjectPtr = null; - base.DisposeManaged(); + if (ptr != IntPtr.Zero && IsEnabledDispose) + NativeMethods.HandleException( + NativeMethods.aruco_Dictionary_delete(ptr)); + base.DisposeUnmanaged(); } - - #endregion - - #region Properties - + /// /// Marker code information /// @@ -96,29 +84,104 @@ public int MaxCorrectionBits GC.KeepAlive(this); } } - - #endregion - - internal class Ptr : OpenCvSharp.Ptr + + /// + /// Given a matrix of bits. Returns whether if marker is identified or not. + /// It returns by reference the correct id (if any) and the correct rotation + /// + /// + /// + /// + /// + /// + public bool Identify(Mat onlyBits, out int idx, out int rotation, double maxCorrectionRate) { - public Ptr(IntPtr ptr) : base(ptr) - { - } + if (onlyBits is null) + throw new ArgumentNullException(nameof(onlyBits)); + onlyBits.ThrowIfDisposed(); + ThrowIfDisposed(); - public override IntPtr Get() - { - NativeMethods.HandleException( - NativeMethods.aruco_Ptr_Dictionary_get(ptr, out var ret)); - GC.KeepAlive(this); - return ret; - } + NativeMethods.HandleException( + NativeMethods.aruco_Dictionary_identify(ptr, onlyBits.CvPtr, out idx, out rotation, maxCorrectionRate, out var ret)); + + GC.KeepAlive(this); + return ret != 0; + } + + /// + /// Returns the distance of the input bits to the specific id. + /// If allRotations is true, the four possible bits rotation are considered + /// + /// + /// + /// + /// + public int GetDistanceToId(InputArray bits, int id, bool allRotations = true) + { + if (bits is null) + throw new ArgumentNullException(nameof(bits)); + bits.ThrowIfDisposed(); + ThrowIfDisposed(); - protected override void DisposeUnmanaged() - { - NativeMethods.HandleException( - NativeMethods.aruco_Ptr_Dictionary_delete(ptr)); - base.DisposeUnmanaged(); - } + NativeMethods.HandleException( + NativeMethods.aruco_Dictionary_getDistanceToId(ptr, bits.CvPtr, id, allRotations ? 1 : 0, out var ret)); + + GC.KeepAlive(this); + return ret; } + + /// + /// Generate a canonical marker image + /// + /// + /// + /// + /// + public void GenerateImageMarker(int id, int sidePixels, OutputArray img, int borderBits = 1) + { + if (img is null) + throw new ArgumentNullException(nameof(img)); + img.ThrowIfNotReady(); + ThrowIfDisposed(); + + NativeMethods.HandleException( + NativeMethods.aruco_Dictionary_generateImageMarker(ptr, id, sidePixels, img.CvPtr, borderBits)); + + GC.KeepAlive(this); + } + + /// + /// Transform matrix of bits to list of bytes in the 4 rotations + /// + /// + /// + public static Mat GetByteListFromBits(Mat bits) + { + if (bits is null) + throw new ArgumentNullException(nameof(bits)); + bits.ThrowIfDisposed(); + var ret = new Mat(); + NativeMethods.HandleException( + NativeMethods.aruco_Dictionary_getByteListFromBits(bits.CvPtr, ret.CvPtr)); + return ret; + } + + /// + /// Transform list of bytes to matrix of bits + /// + /// + /// + /// + public static Mat GetBitsFromByteList(Mat byteList, int markerSize) + { + if (byteList is null) + throw new ArgumentNullException(nameof(byteList)); + byteList.ThrowIfDisposed(); + + var ret = new Mat(); + NativeMethods.HandleException( + NativeMethods.aruco_Dictionary_getBitsFromByteList(byteList.CvPtr, markerSize, ret.CvPtr)); + return ret; + } } diff --git a/src/OpenCvSharp/Modules/bgsegm/BackgroundSubtractorGMG.cs b/src/OpenCvSharp/Modules/bgsegm/BackgroundSubtractorGMG.cs index a29885fd5..023e5115c 100644 --- a/src/OpenCvSharp/Modules/bgsegm/BackgroundSubtractorGMG.cs +++ b/src/OpenCvSharp/Modules/bgsegm/BackgroundSubtractorGMG.cs @@ -1,4 +1,3 @@ -using System; using OpenCvSharp.Internal; namespace OpenCvSharp; @@ -270,12 +269,8 @@ public double MaxVal #endregion - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/bgsegm/BackgroundSubtractorMOG.cs b/src/OpenCvSharp/Modules/bgsegm/BackgroundSubtractorMOG.cs index 3c0514d3c..33c609c81 100644 --- a/src/OpenCvSharp/Modules/bgsegm/BackgroundSubtractorMOG.cs +++ b/src/OpenCvSharp/Modules/bgsegm/BackgroundSubtractorMOG.cs @@ -1,4 +1,3 @@ -using System; using OpenCvSharp.Internal; namespace OpenCvSharp; @@ -135,12 +134,8 @@ public double NoiseSigma } } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/calib3d/Enum/CalibrationFlags.cs b/src/OpenCvSharp/Modules/calib3d/Enum/CalibrationFlags.cs index 15a84d357..af4ce88f1 100644 --- a/src/OpenCvSharp/Modules/calib3d/Enum/CalibrationFlags.cs +++ b/src/OpenCvSharp/Modules/calib3d/Enum/CalibrationFlags.cs @@ -1,6 +1,4 @@ -using System; - -namespace OpenCvSharp; +namespace OpenCvSharp; /// /// Different flags for cvCalibrateCamera2 and cvStereoCalibrate diff --git a/src/OpenCvSharp/Modules/calib3d/Enum/ChessboardFlags.cs b/src/OpenCvSharp/Modules/calib3d/Enum/ChessboardFlags.cs index be71085aa..d41e59948 100644 --- a/src/OpenCvSharp/Modules/calib3d/Enum/ChessboardFlags.cs +++ b/src/OpenCvSharp/Modules/calib3d/Enum/ChessboardFlags.cs @@ -1,4 +1,4 @@ -using System; + // ReSharper disable UnusedMember.Global diff --git a/src/OpenCvSharp/Modules/calib3d/Enum/EssentialMatMethod.cs b/src/OpenCvSharp/Modules/calib3d/Enum/EssentialMatMethod.cs index 45c88b317..c0325cb9e 100644 --- a/src/OpenCvSharp/Modules/calib3d/Enum/EssentialMatMethod.cs +++ b/src/OpenCvSharp/Modules/calib3d/Enum/EssentialMatMethod.cs @@ -1,6 +1,4 @@ -using System; - -namespace OpenCvSharp; +namespace OpenCvSharp; /// /// Method for computing the essential matrix diff --git a/src/OpenCvSharp/Modules/calib3d/Enum/FindCirclesGridFlags.cs b/src/OpenCvSharp/Modules/calib3d/Enum/FindCirclesGridFlags.cs index 19fd313ec..c70b2c80f 100644 --- a/src/OpenCvSharp/Modules/calib3d/Enum/FindCirclesGridFlags.cs +++ b/src/OpenCvSharp/Modules/calib3d/Enum/FindCirclesGridFlags.cs @@ -1,6 +1,4 @@ -using System; - -namespace OpenCvSharp; +namespace OpenCvSharp; /// /// Method for solving a PnP problem: diff --git a/src/OpenCvSharp/Modules/calib3d/Enum/FishEyeCalibrationFlags.cs b/src/OpenCvSharp/Modules/calib3d/Enum/FishEyeCalibrationFlags.cs index a9952d504..998ece377 100644 --- a/src/OpenCvSharp/Modules/calib3d/Enum/FishEyeCalibrationFlags.cs +++ b/src/OpenCvSharp/Modules/calib3d/Enum/FishEyeCalibrationFlags.cs @@ -1,4 +1,4 @@ -using System; + // ReSharper disable UnusedMember.Global diff --git a/src/OpenCvSharp/Modules/calib3d/Enum/FundamentalMatMethods.cs b/src/OpenCvSharp/Modules/calib3d/Enum/FundamentalMatMethods.cs index fcbd376a7..f3bc9173c 100644 --- a/src/OpenCvSharp/Modules/calib3d/Enum/FundamentalMatMethods.cs +++ b/src/OpenCvSharp/Modules/calib3d/Enum/FundamentalMatMethods.cs @@ -1,6 +1,4 @@ -using System; - -namespace OpenCvSharp; +namespace OpenCvSharp; /// /// Method for computing the fundamental matrix diff --git a/src/OpenCvSharp/Modules/calib3d/Enum/HomographyMethods.cs b/src/OpenCvSharp/Modules/calib3d/Enum/HomographyMethods.cs index bf9f02dba..15276810b 100644 --- a/src/OpenCvSharp/Modules/calib3d/Enum/HomographyMethods.cs +++ b/src/OpenCvSharp/Modules/calib3d/Enum/HomographyMethods.cs @@ -1,6 +1,4 @@ -using System; - -namespace OpenCvSharp; +namespace OpenCvSharp; /// /// The method used to computed homography matrix diff --git a/src/OpenCvSharp/Modules/calib3d/Enum/StereoRectificationFlags.cs b/src/OpenCvSharp/Modules/calib3d/Enum/StereoRectificationFlags.cs index bfad589a8..e9e745274 100644 --- a/src/OpenCvSharp/Modules/calib3d/Enum/StereoRectificationFlags.cs +++ b/src/OpenCvSharp/Modules/calib3d/Enum/StereoRectificationFlags.cs @@ -1,6 +1,4 @@ -using System; - -namespace OpenCvSharp; +namespace OpenCvSharp; /// /// The operation flags for cvStereoRectify diff --git a/src/OpenCvSharp/Modules/calib3d/StereoBM.cs b/src/OpenCvSharp/Modules/calib3d/StereoBM.cs index 660892a16..1b4cff75f 100644 --- a/src/OpenCvSharp/Modules/calib3d/StereoBM.cs +++ b/src/OpenCvSharp/Modules/calib3d/StereoBM.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp; @@ -227,12 +226,8 @@ public Rect ROI2 #endregion - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/calib3d/StereoMatcher.cs b/src/OpenCvSharp/Modules/calib3d/StereoMatcher.cs index aaf6bcad8..8d2c2585b 100644 --- a/src/OpenCvSharp/Modules/calib3d/StereoMatcher.cs +++ b/src/OpenCvSharp/Modules/calib3d/StereoMatcher.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp; // ReSharper disable InconsistentNaming @@ -28,11 +27,11 @@ protected StereoMatcher(IntPtr ptr) /// whereas other algorithms output 32 - bit floating - point disparity map. public virtual void Compute(InputArray left, InputArray right, OutputArray disparity) { - if (left == null) + if (left is null) throw new ArgumentNullException(nameof(left)); - if (right == null) + if (right is null) throw new ArgumentNullException(nameof(right)); - if (disparity == null) + if (disparity is null) throw new ArgumentNullException(nameof(disparity)); left.ThrowIfDisposed(); right.ThrowIfDisposed(); diff --git a/src/OpenCvSharp/Modules/calib3d/StereoSGBM.cs b/src/OpenCvSharp/Modules/calib3d/StereoSGBM.cs index 8c92adf1f..a6fdbb00d 100644 --- a/src/OpenCvSharp/Modules/calib3d/StereoSGBM.cs +++ b/src/OpenCvSharp/Modules/calib3d/StereoSGBM.cs @@ -1,10 +1,10 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; -namespace OpenCvSharp; // ReSharper disable InconsistentNaming #pragma warning disable 1591 +namespace OpenCvSharp; + /// /// /// @@ -198,12 +198,8 @@ public StereoSGBMMode Mode #endregion - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/calib3d/UsacParams.cs b/src/OpenCvSharp/Modules/calib3d/UsacParams.cs index f7b1e95ef..e1c35de57 100644 --- a/src/OpenCvSharp/Modules/calib3d/UsacParams.cs +++ b/src/OpenCvSharp/Modules/calib3d/UsacParams.cs @@ -1,10 +1,9 @@ -using System; -using System.Runtime.InteropServices; +using System.Runtime.InteropServices; namespace OpenCvSharp; #pragma warning disable CS1591 -public class UsacParams +public record UsacParams { #pragma warning disable CA1805 public double Confidence { get; set; } = 0.99; @@ -19,7 +18,7 @@ public class UsacParams public ScoreMethod Score { get; set; } = ScoreMethod.MSAC; public double Threshold { get; set; } = 1.5; - public WUsacParams ToNativeStruct() => new WUsacParams + public WUsacParams ToNativeStruct() => new() { Confidence = Confidence, IsParallel = IsParallel ? 1 : 0, @@ -52,7 +51,11 @@ public struct WUsacParams public double Threshold; } -public enum SamplingMethod : int +// ReSharper disable InconsistentNaming +// ReSharper disable UnusedMember.Global +// ReSharper disable IdentifierTypo + +public enum SamplingMethod { UNIFORM, PROGRESSIVE_NAPSAC, @@ -60,7 +63,7 @@ public enum SamplingMethod : int PROSAC } -public enum LocalOptimMethod : int +public enum LocalOptimMethod { NULL, INNER_LO, @@ -69,7 +72,7 @@ public enum LocalOptimMethod : int SIGMA } -public enum ScoreMethod : int +public enum ScoreMethod { RANSAC, MSAC, @@ -77,7 +80,7 @@ public enum ScoreMethod : int LMEDS } -public enum NeighborSearchMethod : int +public enum NeighborSearchMethod { FLANN_KNN, GRID, diff --git a/src/OpenCvSharp/Modules/core/Algorithm.cs b/src/OpenCvSharp/Modules/core/Algorithm.cs index d0afac312..51014f380 100644 --- a/src/OpenCvSharp/Modules/core/Algorithm.cs +++ b/src/OpenCvSharp/Modules/core/Algorithm.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp; @@ -16,7 +15,7 @@ public virtual void Write(FileStorage fs) { if (ptr == IntPtr.Zero) throw new ObjectDisposedException(GetType().Name); - if (fs == null) + if (fs is null) throw new ArgumentNullException(nameof(fs)); NativeMethods.HandleException( @@ -33,7 +32,7 @@ public virtual void Read(FileNode fn) { if (ptr == IntPtr.Zero) throw new ObjectDisposedException(GetType().Name); - if (fn == null) + if (fn is null) throw new ArgumentNullException(nameof(fn)); NativeMethods.HandleException( @@ -70,7 +69,7 @@ public virtual void Save(string fileName) { if (ptr == IntPtr.Zero) throw new ObjectDisposedException(GetType().Name); - if (fileName == null) + if (fileName is null) throw new ArgumentNullException(nameof(fileName)); NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/core/Delegate/CvErrorCallback.cs b/src/OpenCvSharp/Modules/core/Delegate/CvErrorCallback.cs index 5d34d0652..2c04c3b8d 100644 --- a/src/OpenCvSharp/Modules/core/Delegate/CvErrorCallback.cs +++ b/src/OpenCvSharp/Modules/core/Delegate/CvErrorCallback.cs @@ -1,5 +1,4 @@ -using System; -using System.Runtime.InteropServices; +using System.Runtime.InteropServices; namespace OpenCvSharp; diff --git a/src/OpenCvSharp/Modules/core/Enum/AccessFlag.cs b/src/OpenCvSharp/Modules/core/Enum/AccessFlag.cs index 935af7ac8..a3ff62ebf 100644 --- a/src/OpenCvSharp/Modules/core/Enum/AccessFlag.cs +++ b/src/OpenCvSharp/Modules/core/Enum/AccessFlag.cs @@ -1,4 +1,4 @@ -using System; + // ReSharper disable InconsistentNaming diff --git a/src/OpenCvSharp/Modules/core/Enum/CovarFlags.cs b/src/OpenCvSharp/Modules/core/Enum/CovarFlags.cs index 4d38db903..70556ee0f 100644 --- a/src/OpenCvSharp/Modules/core/Enum/CovarFlags.cs +++ b/src/OpenCvSharp/Modules/core/Enum/CovarFlags.cs @@ -1,6 +1,4 @@ -using System; - -#pragma warning disable CA1008 // Enums should have zero value +#pragma warning disable CA1008 // Enums should have zero value namespace OpenCvSharp; diff --git a/src/OpenCvSharp/Modules/core/Enum/CriteriaTypes.cs b/src/OpenCvSharp/Modules/core/Enum/CriteriaTypes.cs index 2cde946c0..dfd03a3c2 100644 --- a/src/OpenCvSharp/Modules/core/Enum/CriteriaTypes.cs +++ b/src/OpenCvSharp/Modules/core/Enum/CriteriaTypes.cs @@ -1,6 +1,4 @@ -using System; - -namespace OpenCvSharp; +namespace OpenCvSharp; /// /// Type of termination criteria diff --git a/src/OpenCvSharp/Modules/core/Enum/DctFlags.cs b/src/OpenCvSharp/Modules/core/Enum/DctFlags.cs index 39f491818..35118cdca 100644 --- a/src/OpenCvSharp/Modules/core/Enum/DctFlags.cs +++ b/src/OpenCvSharp/Modules/core/Enum/DctFlags.cs @@ -1,6 +1,4 @@ -using System; - -namespace OpenCvSharp; +namespace OpenCvSharp; /// /// Transformation flags for cv::dct diff --git a/src/OpenCvSharp/Modules/core/Enum/DftFlags.cs b/src/OpenCvSharp/Modules/core/Enum/DftFlags.cs index 680c97ec6..b7412304e 100644 --- a/src/OpenCvSharp/Modules/core/Enum/DftFlags.cs +++ b/src/OpenCvSharp/Modules/core/Enum/DftFlags.cs @@ -1,6 +1,4 @@ -using System; - -namespace OpenCvSharp; +namespace OpenCvSharp; /// /// Transformation flags for cvDFT diff --git a/src/OpenCvSharp/Modules/core/Enum/GemmFlags.cs b/src/OpenCvSharp/Modules/core/Enum/GemmFlags.cs index 0ea00eae6..5fe660f60 100644 --- a/src/OpenCvSharp/Modules/core/Enum/GemmFlags.cs +++ b/src/OpenCvSharp/Modules/core/Enum/GemmFlags.cs @@ -1,11 +1,10 @@ -using System; - -namespace OpenCvSharp; +namespace OpenCvSharp; // ReSharper disable InconsistentNaming /// /// The operation flags for cv::GEMM /// +[Flags] public enum GemmFlags { /// diff --git a/src/OpenCvSharp/Modules/core/Enum/HersheyFonts.cs b/src/OpenCvSharp/Modules/core/Enum/HersheyFonts.cs index 24054d917..f78a93795 100644 --- a/src/OpenCvSharp/Modules/core/Enum/HersheyFonts.cs +++ b/src/OpenCvSharp/Modules/core/Enum/HersheyFonts.cs @@ -1,6 +1,4 @@ -using System; - -#pragma warning disable CA1008 // Enums should have zero value +#pragma warning disable CA1008 // Enums should have zero value namespace OpenCvSharp; diff --git a/src/OpenCvSharp/Modules/core/Enum/InOutArrayKind.cs b/src/OpenCvSharp/Modules/core/Enum/InOutArrayKind.cs index 441c7719c..35bf2bb62 100644 --- a/src/OpenCvSharp/Modules/core/Enum/InOutArrayKind.cs +++ b/src/OpenCvSharp/Modules/core/Enum/InOutArrayKind.cs @@ -1,6 +1,4 @@ -using System; - -#pragma warning disable 1591 +#pragma warning disable 1591 #pragma warning disable CA2217 // Do not mark enums with FlagsAttribute namespace OpenCvSharp; diff --git a/src/OpenCvSharp/Modules/core/Enum/KMeansFlags.cs b/src/OpenCvSharp/Modules/core/Enum/KMeansFlags.cs index 9f2b76e58..845bf30a3 100644 --- a/src/OpenCvSharp/Modules/core/Enum/KMeansFlags.cs +++ b/src/OpenCvSharp/Modules/core/Enum/KMeansFlags.cs @@ -1,6 +1,4 @@ -using System; - -#pragma warning disable CA1008 // Enums should have zero value +#pragma warning disable CA1008 // Enums should have zero value namespace OpenCvSharp; diff --git a/src/OpenCvSharp/Modules/core/Enum/LogLevel.cs b/src/OpenCvSharp/Modules/core/Enum/LogLevel.cs new file mode 100644 index 000000000..01f45d9c4 --- /dev/null +++ b/src/OpenCvSharp/Modules/core/Enum/LogLevel.cs @@ -0,0 +1,42 @@ +namespace OpenCvSharp; + +/// +/// cv::utils::logging::LogLevel +/// +public enum LogLevel +{ + /// + /// for using in setLogVevel() call + /// + SILENT = 0, + + /// + /// Fatal (critical) error (unrecoverable internal error) + /// + FATAL = 1, + + /// + /// Error message. + /// + ERROR = 2, + + /// + /// Warning message. + /// + WARNING = 3, + + /// + /// Info message. + /// + INFO = 4, + + /// + /// Debug message. Disabled in the "Release" build. + /// + DEBUG = 5, + + /// + /// Verbose (trace) messages. Requires verbosity level. Disabled in the "Release" build. + /// + VERBOSE = 6 +} diff --git a/src/OpenCvSharp/Modules/core/Enum/NormTypes.cs b/src/OpenCvSharp/Modules/core/Enum/NormTypes.cs index 07218fda3..a11ceb605 100644 --- a/src/OpenCvSharp/Modules/core/Enum/NormTypes.cs +++ b/src/OpenCvSharp/Modules/core/Enum/NormTypes.cs @@ -1,6 +1,4 @@ -using System; - -namespace OpenCvSharp; +namespace OpenCvSharp; // ReSharper disable InconsistentNaming /// diff --git a/src/OpenCvSharp/Modules/core/Enum/SortFlags.cs b/src/OpenCvSharp/Modules/core/Enum/SortFlags.cs index 7346432cf..c48e20a33 100644 --- a/src/OpenCvSharp/Modules/core/Enum/SortFlags.cs +++ b/src/OpenCvSharp/Modules/core/Enum/SortFlags.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.CodeAnalysis; namespace OpenCvSharp; diff --git a/src/OpenCvSharp/Modules/core/Enum/UMatUsageFlags.cs b/src/OpenCvSharp/Modules/core/Enum/UMatUsageFlags.cs index cf2c5ca0e..db4efd067 100644 --- a/src/OpenCvSharp/Modules/core/Enum/UMatUsageFlags.cs +++ b/src/OpenCvSharp/Modules/core/Enum/UMatUsageFlags.cs @@ -1,6 +1,4 @@ -using System; - -namespace OpenCvSharp; +namespace OpenCvSharp; /// /// cv::UMatUsageFlags diff --git a/src/OpenCvSharp/Modules/core/FileNode.cs b/src/OpenCvSharp/Modules/core/FileNode.cs index 31a0108e1..161c4dbb3 100644 --- a/src/OpenCvSharp/Modules/core/FileNode.cs +++ b/src/OpenCvSharp/Modules/core/FileNode.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections; -using System.Collections.Generic; +using System.Collections; using System.Diagnostics.CodeAnalysis; using OpenCvSharp.Internal; using OpenCvSharp.Internal.Vectors; @@ -57,7 +55,7 @@ protected override void DisposeUnmanaged() /// public static explicit operator int(FileNode node) { - if (node == null) + if (node is null) throw new ArgumentNullException(nameof(node)); return node.ToInt32(); } @@ -84,7 +82,7 @@ public int ToInt32() /// public static explicit operator float(FileNode node) { - if (node == null) + if (node is null) throw new ArgumentNullException(nameof(node)); return node.ToSingle(); } @@ -111,7 +109,7 @@ public float ToSingle() /// public static explicit operator double(FileNode node) { - if (node == null) + if (node is null) throw new ArgumentNullException(nameof(node)); return node.ToDouble(); } @@ -138,7 +136,7 @@ public double ToDouble() /// public static explicit operator string(FileNode node) { - if (node == null) + if (node is null) throw new ArgumentNullException(nameof(node)); return node.ToString(); } @@ -166,7 +164,7 @@ public override string ToString() /// public static explicit operator Mat(FileNode node) { - if (node == null) + if (node is null) throw new ArgumentNullException(nameof(node)); return node.ToMat(); } @@ -199,7 +197,7 @@ public FileNode? this[string nodeName] get { ThrowIfDisposed(); - if (nodeName == null) + if (nodeName is null) throw new ArgumentNullException(nameof(nodeName)); NativeMethods.HandleException( @@ -465,7 +463,7 @@ IEnumerator IEnumerable.GetEnumerator() public void ReadRaw(string fmt, IntPtr vec, long len) { ThrowIfDisposed(); - if (fmt == null) + if (fmt is null) throw new ArgumentNullException(nameof(fmt)); NativeMethods.HandleException( NativeMethods.core_FileNode_readRaw(ptr, fmt, vec, new IntPtr(len))); diff --git a/src/OpenCvSharp/Modules/core/FileNodeIterator.cs b/src/OpenCvSharp/Modules/core/FileNodeIterator.cs index 54d5e40c5..6e865efa2 100644 --- a/src/OpenCvSharp/Modules/core/FileNodeIterator.cs +++ b/src/OpenCvSharp/Modules/core/FileNodeIterator.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections; -using System.Collections.Generic; +using System.Collections; using OpenCvSharp.Internal; // ReSharper disable UnusedMember.Global @@ -51,7 +49,7 @@ protected override void DisposeUnmanaged() /// public FileNodeIterator ReadRaw(string fmt, IntPtr vec, long maxCount = int.MaxValue) { - if (fmt == null) + if (fmt is null) throw new ArgumentNullException(nameof(fmt)); NativeMethods.HandleException( NativeMethods.core_FileNodeIterator_readRaw(ptr, fmt, vec, new IntPtr(maxCount))); @@ -75,14 +73,11 @@ public FileNode Current } object IEnumerator.Current => Current; - + /// /// IEnumerable<T>.Reset /// - public void Reset() - { - throw new NotImplementedException(); - } + public void Reset() => throw new NotImplementedException(); /// /// iterator++ @@ -121,9 +116,9 @@ public bool MoveNext(int ofs) /// public FileNodeIterator ReadRaw(string fmt, byte[] vec, long maxCount = int.MaxValue) { - if (fmt == null) + if (fmt is null) throw new ArgumentNullException(nameof(fmt)); - if (vec == null) + if (vec is null) throw new ArgumentNullException(nameof(vec)); unsafe { @@ -165,7 +160,7 @@ public bool Equals(FileNodeIterator? other) public long Minus(FileNodeIterator it) { - if (it == null) + if (it is null) throw new ArgumentNullException(nameof(it)); ThrowIfDisposed(); it.ThrowIfDisposed(); @@ -181,7 +176,7 @@ public long Minus(FileNodeIterator it) public bool LessThan(FileNodeIterator it) { - if (it == null) + if (it is null) throw new ArgumentNullException(nameof(it)); ThrowIfDisposed(); it.ThrowIfDisposed(); diff --git a/src/OpenCvSharp/Modules/core/FileStorage.cs b/src/OpenCvSharp/Modules/core/FileStorage.cs index b06ea83d7..d6e4e5830 100644 --- a/src/OpenCvSharp/Modules/core/FileStorage.cs +++ b/src/OpenCvSharp/Modules/core/FileStorage.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.CodeAnalysis; using OpenCvSharp.Internal; using OpenCvSharp.Internal.Vectors; @@ -40,7 +38,7 @@ public FileStorage() /// currently and you should use 8-bit encoding instead of it. public FileStorage(string source, Modes flags, string? encoding = null) { - if (source == null) + if (source is null) throw new ArgumentNullException(nameof(source)); NativeMethods.HandleException( NativeMethods.core_FileStorage_new2(source, (int)flags, encoding, out ptr)); @@ -70,7 +68,7 @@ public FileNode? this[string nodeName] get { ThrowIfDisposed(); - if (nodeName == null) + if (nodeName is null) throw new ArgumentNullException(nameof(nodeName)); NativeMethods.HandleException( @@ -134,7 +132,7 @@ public States State public virtual bool Open(string fileName, Modes flags, string? encoding = null) { ThrowIfDisposed(); - if (fileName == null) + if (fileName is null) throw new ArgumentNullException(nameof(fileName)); NativeMethods.HandleException( NativeMethods.core_FileStorage_open(ptr, fileName, (int)flags, encoding, out var ret)); @@ -229,7 +227,7 @@ public string ReleaseAndGetString() /// Number of the uchar elements to write. public void WriteRaw(string fmt, IntPtr vec, int len) { - if (fmt == null) + if (fmt is null) throw new ArgumentNullException(nameof(fmt)); if (vec == IntPtr.Zero) throw new ArgumentException("vec == IntPtr.Zero", nameof(vec)); @@ -250,7 +248,7 @@ public void WriteRaw(string fmt, IntPtr vec, int len) /// Else if the comment is multi-line, or if it does not fit at the end of the current line, the comment starts a new line. public void WriteComment(string comment, bool append = false) { - if (comment == null) + if (comment is null) throw new ArgumentNullException(nameof(comment)); ThrowIfDisposed(); @@ -292,7 +290,7 @@ public void EndWriteStruct() /// public static string GetDefaultObjectName(string fileName) { - if (fileName == null) + if (fileName is null) throw new ArgumentNullException(nameof(fileName)); using var buf = new StdString(); @@ -311,7 +309,7 @@ public static string GetDefaultObjectName(string fileName) public void Write(string name, int value) { ThrowIfDisposed(); - if (name == null) + if (name is null) throw new ArgumentNullException(nameof(name)); NativeMethods.HandleException( @@ -327,7 +325,7 @@ public void Write(string name, int value) public void Write(string name, float value) { ThrowIfDisposed(); - if (name == null) + if (name is null) throw new ArgumentNullException(nameof(name)); NativeMethods.HandleException( @@ -343,7 +341,7 @@ public void Write(string name, float value) public void Write(string name, double value) { ThrowIfDisposed(); - if (name == null) + if (name is null) throw new ArgumentNullException(nameof(name)); NativeMethods.HandleException( @@ -359,9 +357,9 @@ public void Write(string name, double value) public void Write(string name, string value) { ThrowIfDisposed(); - if (name == null) + if (name is null) throw new ArgumentNullException(nameof(name)); - if (value == null) + if (value is null) throw new ArgumentNullException(nameof(value)); NativeMethods.HandleException( @@ -377,9 +375,9 @@ public void Write(string name, string value) public void Write(string name, Mat value) { ThrowIfDisposed(); - if (name == null) + if (name is null) throw new ArgumentNullException(nameof(name)); - if (value == null) + if (value is null) throw new ArgumentNullException(nameof(value)); NativeMethods.HandleException( @@ -396,9 +394,9 @@ public void Write(string name, Mat value) public void Write(string name, SparseMat value) { ThrowIfDisposed(); - if (name == null) + if (name is null) throw new ArgumentNullException(nameof(name)); - if (value == null) + if (value is null) throw new ArgumentNullException(nameof(value)); NativeMethods.HandleException( @@ -415,9 +413,9 @@ public void Write(string name, SparseMat value) public void Write(string name, IEnumerable value) { ThrowIfDisposed(); - if (name == null) + if (name is null) throw new ArgumentNullException(nameof(name)); - if (value == null) + if (value is null) throw new ArgumentNullException(nameof(value)); using var valueVector = new VectorOfKeyPoint(value); @@ -434,9 +432,9 @@ public void Write(string name, IEnumerable value) public void Write(string name, IEnumerable value) { ThrowIfDisposed(); - if (name == null) + if (name is null) throw new ArgumentNullException(nameof(name)); - if (value == null) + if (value is null) throw new ArgumentNullException(nameof(value)); using var valueVector = new VectorOfDMatch(value); @@ -488,7 +486,7 @@ public void WriteScalar(double value) public void WriteScalar(string value) { ThrowIfDisposed(); - if (value == null) + if (value is null) throw new ArgumentNullException(nameof(value)); NativeMethods.HandleException( NativeMethods.core_FileStorage_writeScalar_String(ptr, value)); @@ -505,7 +503,7 @@ public void WriteScalar(string value) /// public FileStorage Add(string val) { - if (val == null) + if (val is null) throw new ArgumentNullException(nameof(val)); ThrowIfDisposed(); NativeMethods.HandleException( @@ -559,7 +557,7 @@ public FileStorage Add(double val) /// public FileStorage Add(Mat val) { - if (val == null) + if (val is null) throw new ArgumentNullException(nameof(val)); ThrowIfDisposed(); val.ThrowIfDisposed(); @@ -575,7 +573,7 @@ public FileStorage Add(Mat val) /// public FileStorage Add(SparseMat val) { - if (val == null) + if (val is null) throw new ArgumentNullException(nameof(val)); ThrowIfDisposed(); val.ThrowIfDisposed(); @@ -630,7 +628,7 @@ public FileStorage Add(DMatch val) /// public FileStorage Add(IEnumerable val) { - if (val == null) + if (val is null) throw new ArgumentNullException(nameof(val)); ThrowIfDisposed(); using (var valVec = new VectorOfKeyPoint(val)) @@ -648,7 +646,7 @@ public FileStorage Add(IEnumerable val) /// public FileStorage Add(IEnumerable val) { - if (val == null) + if (val is null) throw new ArgumentNullException(nameof(val)); ThrowIfDisposed(); using (var valVec = new VectorOfDMatch(val)) diff --git a/src/OpenCvSharp/Modules/core/InputArray.cs b/src/OpenCvSharp/Modules/core/InputArray.cs index 846cb85d4..763bcc518 100644 --- a/src/OpenCvSharp/Modules/core/InputArray.cs +++ b/src/OpenCvSharp/Modules/core/InputArray.cs @@ -1,5 +1,3 @@ -using System; -using System.Collections.Generic; using System.Reflection; using System.Runtime.InteropServices; using OpenCvSharp.Internal; @@ -55,7 +53,7 @@ internal InputArray(IntPtr ptr) internal InputArray(Mat? mat) { // ReSharper disable once ConvertIfStatementToConditionalTernaryExpression - if (mat == null) + if (mat is null) ptr = IntPtr.Zero; else NativeMethods.HandleException( @@ -73,7 +71,7 @@ internal InputArray(Mat? mat) internal InputArray(UMat? mat) { // ReSharper disable once ConvertIfStatementToConditionalTernaryExpression - if (mat == null) + if (mat is null) ptr = IntPtr.Zero; else NativeMethods.HandleException( @@ -91,7 +89,7 @@ internal InputArray(UMat? mat) internal InputArray(MatExpr? expr) { // ReSharper disable once ConvertIfStatementToConditionalTernaryExpression - if (expr == null) + if (expr is null) ptr = IntPtr.Zero; else NativeMethods.HandleException( @@ -130,7 +128,7 @@ internal InputArray(double val) /// internal InputArray(byte[] vec) { - if (vec == null) + if (vec is null) throw new ArgumentNullException(nameof(vec)); if (vec.Length == 0) throw new ArgumentException("Empty array.", nameof(vec)); @@ -149,7 +147,7 @@ internal InputArray(byte[] vec) /// internal InputArray(short[] vec) { - if (vec == null) + if (vec is null) throw new ArgumentNullException(nameof(vec)); if (vec.Length == 0) throw new ArgumentException("Empty array.", nameof(vec)); @@ -168,7 +166,7 @@ internal InputArray(short[] vec) /// internal InputArray(ushort[] vec) { - if (vec == null) + if (vec is null) throw new ArgumentNullException(nameof(vec)); if (vec.Length == 0) throw new ArgumentException("Empty array.", nameof(vec)); @@ -187,7 +185,7 @@ internal InputArray(ushort[] vec) /// internal InputArray(int[] vec) { - if (vec == null) + if (vec is null) throw new ArgumentNullException(nameof(vec)); if (vec.Length == 0) throw new ArgumentException("Empty array.", nameof(vec)); @@ -206,7 +204,7 @@ internal InputArray(int[] vec) /// internal InputArray(float[] vec) { - if (vec == null) + if (vec is null) throw new ArgumentNullException(nameof(vec)); if (vec.Length == 0) throw new ArgumentException("Empty array.", nameof(vec)); @@ -225,7 +223,7 @@ internal InputArray(float[] vec) /// internal InputArray(double[] vec) { - if (vec == null) + if (vec is null) throw new ArgumentNullException(nameof(vec)); if (vec.Length == 0) throw new ArgumentException("Empty array.", nameof(vec)); @@ -244,7 +242,7 @@ internal InputArray(double[] vec) /// internal InputArray(IEnumerable mat) { - if (mat == null) + if (mat is null) throw new ArgumentNullException(nameof(mat)); using (var matVector = new VectorOfMat(mat)) @@ -302,50 +300,35 @@ protected override void DisposeUnmanaged() /// /// /// - public static InputArray Create(Mat mat) - { - return new(mat); - } + public static InputArray Create(Mat mat) => new(mat); /// /// Creates a proxy class of the specified Mat /// /// /// - public static InputArray Create(UMat mat) - { - return new(mat); - } + public static InputArray Create(UMat mat) => new(mat); /// /// Creates a proxy class of the specified MatExpr /// /// /// - public static InputArray Create(MatExpr expr) - { - return new(expr); - } + public static InputArray Create(MatExpr expr) => new(expr); /// /// Creates a proxy class of the specified Scalar /// /// /// - public static InputArray Create(Scalar val) - { - return new(val); - } + public static InputArray Create(Scalar val) => new(val); /// /// Creates a proxy class of the specified double /// /// /// - public static InputArray Create(double val) - { - return new(val); - } + public static InputArray Create(double val) => new(val); #if ENABLED_CUDA /// @@ -364,10 +347,7 @@ public static InputArray Create(GpuMat mat) /// /// /// - public static InputArray Create(IEnumerable matVector) - { - return new(matVector); - } + public static InputArray Create(IEnumerable matVector) => new(matVector); /// /// Creates a proxy class of the specified list @@ -377,7 +357,7 @@ public static InputArray Create(IEnumerable matVector) public static InputArray Create(IEnumerable enumerable) where T : struct { - if (enumerable == null) + if (enumerable is null) throw new ArgumentNullException(nameof(enumerable)); var list = new List(enumerable); return Create(list.ToArray()); @@ -392,7 +372,7 @@ public static InputArray Create(IEnumerable enumerable) public static InputArray Create(IEnumerable enumerable, MatType type) where T : struct { - if (enumerable == null) + if (enumerable is null) throw new ArgumentNullException(nameof(enumerable)); var list = new List(enumerable); return Create(list.ToArray(), type); @@ -419,13 +399,13 @@ public static InputArray Create(T[] array) public static InputArray Create(T[] array, MatType type) where T : struct { - if (array == null) + if (array is null) throw new ArgumentNullException(nameof(array)); if (array.Length == 0) throw new ArgumentException("array.Length == 0"); var rows = array.Length; - var mat = new Mat(rows, 1, type, array); + var mat = Mat.FromPixelData(rows, 1, type, array); return new InputArray(mat); } @@ -450,7 +430,7 @@ public static InputArray Create(T[,] array) public static InputArray Create(T[,] array, MatType type) where T : struct { - if (array == null) + if (array is null) throw new ArgumentNullException(nameof(array)); var rows = array.GetLength(0); var cols = array.GetLength(1); @@ -458,7 +438,7 @@ public static InputArray Create(T[,] array, MatType type) throw new ArgumentException("array.GetLength(0) == 0"); if (cols == 0) throw new ArgumentException("array.GetLength(1) == 0"); - var mat = new Mat(rows, cols, type, array); + var mat = Mat.FromPixelData(rows, cols, type, array); return new InputArray(mat); } @@ -469,7 +449,7 @@ public static InputArray Create(T[,] array, MatType type) /// public static InputArray Create(IVec vec) { - if (vec == null) + if (vec is null) throw new ArgumentNullException(nameof(vec)); return vec switch @@ -495,10 +475,10 @@ public static InputArray Create(IVec vec) Vec3f v => new InputArray(new[] { v.Item0, v.Item1, v.Item2 }), Vec4f v => new InputArray(new[] { v.Item0, v.Item1, v.Item2, v.Item3 }), Vec6f v => new InputArray(new[] { v.Item0, v.Item1, v.Item2, v.Item3, v.Item4, v.Item5 }), - Vec2d v => new InputArray(new[] { v.Item0, v.Item1}), - Vec3d v => new InputArray(new[] { v.Item0, v.Item1, v.Item2}), - Vec4d v => new InputArray(new[] { v.Item0, v.Item1, v.Item2, v.Item3}), - Vec6d v => new InputArray(new[] { v.Item0, v.Item1, v.Item2, v.Item3, v.Item4, v.Item5}), + Vec2d v => new InputArray([v.Item0, v.Item1]), + Vec3d v => new InputArray([v.Item0, v.Item1, v.Item2]), + Vec4d v => new InputArray([v.Item0, v.Item1, v.Item2, v.Item3]), + Vec6d v => new InputArray([v.Item0, v.Item1, v.Item2, v.Item3, v.Item4, v.Item5]), #pragma warning restore CA2000 _ => throw new ArgumentException($"Not supported type: '{vec.GetType().Name}'", nameof(vec)) }; @@ -511,11 +491,7 @@ public static InputArray Create(IVec vec) /// private static MatType EstimateType(Type t) { -#if NET40 - if (!t.IsValueType) -#else if (!t.GetTypeInfo().IsValueType) -#endif throw new ArgumentException("Reference type is not supported."); // Primitive types @@ -569,7 +545,7 @@ private static MatType EstimateType(Type t) if (t == typeof(Point3f)) return MatType.CV_32FC3; if (t == typeof(Point3d)) - return MatType.CV_32FC3; + return MatType.CV_64FC3; if (t == typeof(Range)) return MatType.CV_32SC2; if (t == typeof(Rangef)) @@ -639,30 +615,15 @@ private static MatType EstimateType(Type t) #pragma warning disable 1591 #pragma warning disable CA2225 - public static implicit operator InputArray(Mat mat) - { - return Create(mat); - } - - public static implicit operator InputArray(UMat mat) - { - return Create(mat); - } - - public static implicit operator InputArray(MatExpr expr) - { - return Create(expr); - } - - public static implicit operator InputArray(Scalar val) - { - return Create(val); - } - - public static implicit operator InputArray(double val) - { - return Create(val); - } + public static implicit operator InputArray(Mat mat) => Create(mat); + + public static implicit operator InputArray(UMat mat) => Create(mat); + + public static implicit operator InputArray(MatExpr expr) => Create(expr); + + public static implicit operator InputArray(Scalar val) => Create(val); + + public static implicit operator InputArray(double val) => Create(val); #if ENABLED_CUDA public static implicit operator InputArray(GpuMat mat) @@ -671,40 +632,34 @@ public static implicit operator InputArray(GpuMat mat) } #endif - public static explicit operator InputArray(List mats) - { - return Create(mats); - } - - public static explicit operator InputArray(Mat[] mats) - { - return Create(mats); - } - - public static implicit operator InputArray(Vec2b vec) { return Create(vec); } - public static implicit operator InputArray(Vec3b vec) { return Create(vec); } - public static implicit operator InputArray(Vec4b vec) { return Create(vec); } - public static implicit operator InputArray(Vec6b vec) { return Create(vec); } - public static implicit operator InputArray(Vec2s vec) { return Create(vec); } - public static implicit operator InputArray(Vec3s vec) { return Create(vec); } - public static implicit operator InputArray(Vec4s vec) { return Create(vec); } - public static implicit operator InputArray(Vec6s vec) { return Create(vec); } - public static implicit operator InputArray(Vec2w vec) { return Create(vec); } - public static implicit operator InputArray(Vec3w vec) { return Create(vec); } - public static implicit operator InputArray(Vec4w vec) { return Create(vec); } - public static implicit operator InputArray(Vec6w vec) { return Create(vec); } - public static implicit operator InputArray(Vec2i vec) { return Create(vec); } - public static implicit operator InputArray(Vec3i vec) { return Create(vec); } - public static implicit operator InputArray(Vec4i vec) { return Create(vec); } - public static implicit operator InputArray(Vec6i vec) { return Create(vec); } - public static implicit operator InputArray(Vec2f vec) { return Create(vec); } - public static implicit operator InputArray(Vec3f vec) { return Create(vec); } - public static implicit operator InputArray(Vec4f vec) { return Create(vec); } - public static implicit operator InputArray(Vec6f vec) { return Create(vec); } - public static implicit operator InputArray(Vec2d vec) { return Create(vec); } - public static implicit operator InputArray(Vec3d vec) { return Create(vec); } - public static implicit operator InputArray(Vec4d vec) { return Create(vec); } - public static implicit operator InputArray(Vec6d vec) { return Create(vec); } + public static explicit operator InputArray(List mats) => Create(mats); + + public static explicit operator InputArray(Mat[] mats) => Create(mats); + + public static implicit operator InputArray(Vec2b vec) => Create(vec); + public static implicit operator InputArray(Vec3b vec) => Create(vec); + public static implicit operator InputArray(Vec4b vec) => Create(vec); + public static implicit operator InputArray(Vec6b vec) => Create(vec); + public static implicit operator InputArray(Vec2s vec) => Create(vec); + public static implicit operator InputArray(Vec3s vec) => Create(vec); + public static implicit operator InputArray(Vec4s vec) => Create(vec); + public static implicit operator InputArray(Vec6s vec) => Create(vec); + public static implicit operator InputArray(Vec2w vec) => Create(vec); + public static implicit operator InputArray(Vec3w vec) => Create(vec); + public static implicit operator InputArray(Vec4w vec) => Create(vec); + public static implicit operator InputArray(Vec6w vec) => Create(vec); + public static implicit operator InputArray(Vec2i vec) => Create(vec); + public static implicit operator InputArray(Vec3i vec) => Create(vec); + public static implicit operator InputArray(Vec4i vec) => Create(vec); + public static implicit operator InputArray(Vec6i vec) => Create(vec); + public static implicit operator InputArray(Vec2f vec) => Create(vec); + public static implicit operator InputArray(Vec3f vec) => Create(vec); + public static implicit operator InputArray(Vec4f vec) => Create(vec); + public static implicit operator InputArray(Vec6f vec) => Create(vec); + public static implicit operator InputArray(Vec2d vec) => Create(vec); + public static implicit operator InputArray(Vec3d vec) => Create(vec); + public static implicit operator InputArray(Vec4d vec) => Create(vec); + public static implicit operator InputArray(Vec6d vec) => Create(vec); #pragma warning restore CA2225 #pragma warning restore 1591 @@ -884,7 +839,7 @@ public int SizeND(int[] sz, int i = -1) /// public bool SameSize(InputArray arr) { - if (arr == null) + if (arr is null) throw new ArgumentNullException(nameof(arr)); arr.ThrowIfDisposed(); ThrowIfDisposed(); @@ -999,7 +954,7 @@ public bool Empty() /// public void CopyTo(OutputArray arr) { - if (arr == null) + if (arr is null) throw new ArgumentNullException(nameof(arr)); arr.ThrowIfNotReady(); ThrowIfDisposed(); @@ -1018,9 +973,9 @@ public void CopyTo(OutputArray arr) /// public void CopyTo(OutputArray arr, InputArray mask) { - if (arr == null) + if (arr is null) throw new ArgumentNullException(nameof(arr)); - if (mask == null) + if (mask is null) throw new ArgumentNullException(nameof(mask)); arr.ThrowIfNotReady(); mask.ThrowIfDisposed(); diff --git a/src/OpenCvSharp/Modules/core/LDA.cs b/src/OpenCvSharp/Modules/core/LDA.cs index 58e4f9ca7..ae389d8af 100644 --- a/src/OpenCvSharp/Modules/core/LDA.cs +++ b/src/OpenCvSharp/Modules/core/LDA.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; // ReSharper disable UnusedMember.Global @@ -33,9 +32,9 @@ public LDA(int numComponents = 0) /// public LDA(InputArray src, InputArray labels, int numComponents = 0) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (labels == null) + if (labels is null) throw new ArgumentNullException(nameof(labels)); src.ThrowIfDisposed(); labels.ThrowIfDisposed(); @@ -86,7 +85,7 @@ public Mat Eigenvalues() public void Save(string fileName) { ThrowIfDisposed(); - if (fileName == null) + if (fileName is null) throw new ArgumentNullException(nameof(fileName)); NativeMethods.HandleException( NativeMethods.core_LDA_save_String(ptr, fileName)); @@ -100,7 +99,7 @@ public void Save(string fileName) public void Load(string fileName) { ThrowIfDisposed(); - if (fileName == null) + if (fileName is null) throw new ArgumentNullException(nameof(fileName)); NativeMethods.HandleException( NativeMethods.core_LDA_load_String(ptr, fileName)); @@ -114,7 +113,7 @@ public void Load(string fileName) public void Save(FileStorage fs) { ThrowIfDisposed(); - if (fs == null) + if (fs is null) throw new ArgumentNullException(nameof(fs)); fs.ThrowIfDisposed(); @@ -132,7 +131,7 @@ public void Save(FileStorage fs) public void Load(FileStorage node) { ThrowIfDisposed(); - if (node == null) + if (node is null) throw new ArgumentNullException(nameof(node)); node.ThrowIfDisposed(); @@ -151,9 +150,9 @@ public void Load(FileStorage node) public void Compute(InputArray src, InputArray labels) { ThrowIfDisposed(); - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (labels == null) + if (labels is null) throw new ArgumentNullException(nameof(labels)); src.ThrowIfDisposed(); labels.ThrowIfDisposed(); @@ -175,7 +174,7 @@ public void Compute(InputArray src, InputArray labels) public Mat Project(InputArray src) { ThrowIfDisposed(); - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); src.ThrowIfDisposed(); @@ -197,7 +196,7 @@ public Mat Project(InputArray src) public Mat Reconstruct(InputArray src) { ThrowIfDisposed(); - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); src.ThrowIfDisposed(); @@ -219,11 +218,11 @@ public Mat Reconstruct(InputArray src) /// public static Mat SubspaceProject(InputArray w, InputArray mean, InputArray src) { - if (w == null) + if (w is null) throw new ArgumentNullException(nameof(w)); - if (mean == null) + if (mean is null) throw new ArgumentNullException(nameof(mean)); - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); w.ThrowIfDisposed(); mean.ThrowIfDisposed(); @@ -248,11 +247,11 @@ public static Mat SubspaceProject(InputArray w, InputArray mean, InputArray src) /// public static Mat SubspaceReconstruct(InputArray w, InputArray mean, InputArray src) { - if (w == null) + if (w is null) throw new ArgumentNullException(nameof(w)); - if (mean == null) + if (mean is null) throw new ArgumentNullException(nameof(mean)); - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); w.ThrowIfDisposed(); mean.ThrowIfDisposed(); diff --git a/src/OpenCvSharp/Modules/core/Mat/Mat.cs b/src/OpenCvSharp/Modules/core/Mat/Mat.cs index 698c56dbf..c64ca2051 100644 --- a/src/OpenCvSharp/Modules/core/Mat/Mat.cs +++ b/src/OpenCvSharp/Modules/core/Mat/Mat.cs @@ -1,9 +1,5 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.CodeAnalysis; using System.Diagnostics.Contracts; -using System.IO; -using System.Linq; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using OpenCvSharp.Internal; @@ -84,13 +80,20 @@ public partial class Mat : DisposableCvObject /// Creates from native cv::Mat* pointer /// /// - public Mat(IntPtr ptr) + internal Mat(IntPtr ptr) { if (ptr == IntPtr.Zero) throw new OpenCvSharpException("Native object address is NULL"); this.ptr = ptr; } + /// + /// Creates from native cv::Mat* pointer + /// + /// + public static Mat FromNativePointer(IntPtr ptr) + => new (ptr); + /// /// Creates empty Mat /// @@ -106,12 +109,13 @@ public Mat() /// protected Mat(Mat m) { - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); m.ThrowIfDisposed(); NativeMethods.HandleException( NativeMethods.core_Mat_new12(m.ptr, out ptr)); + pinLifetime = m.pinLifetime?.Ref(); if (ptr == IntPtr.Zero) throw new OpenCvSharpException("imread failed."); } @@ -199,7 +203,7 @@ public Mat(Size size, MatType type, Scalar s) /// Range of the m columns to take. Use Range.All to take all the columns. public Mat(Mat m, Range rowRange, Range? colRange = null) { - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); m.ThrowIfDisposed(); @@ -245,7 +249,7 @@ public Mat(Mat m, params Range[] ranges) /// Region of interest. public Mat(Mat m, Rect roi) { - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); m.ThrowIfDisposed(); @@ -267,6 +271,7 @@ public Mat(Mat m, Rect roi) /// The external data is not automatically de-allocated, so you should take care of it. /// Number of bytes each matrix row occupies. The value should include the padding bytes at the end of each row, if any. /// If the parameter is missing (set to AUTO_STEP ), no padding is assumed and the actual step is calculated as cols*elemSize() . + [Obsolete("Use Mat.FromPixelData instead. This constructor has been deprecated because the introduction of 'nint' made overload resolution confusing.", true)] public Mat(int rows, int cols, MatType type, IntPtr data, long step = 0) { NativeMethods.HandleException( @@ -286,14 +291,50 @@ public Mat(int rows, int cols, MatType type, IntPtr data, long step = 0) /// The external data is not automatically de-allocated, so you should take care of it. /// Number of bytes each matrix row occupies. The value should include the padding bytes at the end of each row, if any. /// If the parameter is missing (set to AUTO_STEP ), no padding is assumed and the actual step is calculated as cols*elemSize() . - public Mat(int rows, int cols, MatType type, Array data, long step = 0) + public static Mat FromPixelData(int rows, int cols, MatType type, IntPtr data, long step = 0) + { + NativeMethods.HandleException( + NativeMethods.core_Mat_new8(rows, cols, type, data, new IntPtr(step), out var ptr)); + return new Mat(ptr); + } + + /// + /// constructor for matrix headers pointing to user-allocated data + /// + /// Number of rows in a 2D array. + /// Number of columns in a 2D array. + /// Array type. Use MatType.CV_8UC1, ..., CV_64FC4 to create 1-4 channel matrices, + /// or MatType. CV_8UC(n), ..., CV_64FC(n) to create multi-channel matrices. + /// Pointer to the user data. Matrix constructors that take data and step parameters do not allocate matrix data. + /// Instead, they just initialize the matrix header that points to the specified data, which means that no data is copied. + /// This operation is very efficient and can be used to process external data using OpenCV functions. + /// The external data is not automatically de-allocated, so you should take care of it. + /// Number of bytes each matrix row occupies. The value should include the padding bytes at the end of each row, if any. + /// If the parameter is missing (set to AUTO_STEP ), no padding is assumed and the actual step is calculated as cols*elemSize() . + protected Mat(int rows, int cols, MatType type, Array data, long step = 0) { - var handle = AllocGCHandle(data); + pinLifetime = new ArrayPinningLifetime(data); NativeMethods.HandleException( NativeMethods.core_Mat_new8(rows, cols, type, - handle.AddrOfPinnedObject(), new IntPtr(step), out ptr)); + pinLifetime.DataPtr, new IntPtr(step), out ptr)); } + /// + /// constructor for matrix headers pointing to user-allocated data + /// + /// Number of rows in a 2D array. + /// Number of columns in a 2D array. + /// Array type. Use MatType.CV_8UC1, ..., CV_64FC4 to create 1-4 channel matrices, + /// or MatType. CV_8UC(n), ..., CV_64FC(n) to create multi-channel matrices. + /// Pointer to the user data. Matrix constructors that take data and step parameters do not allocate matrix data. + /// Instead, they just initialize the matrix header that points to the specified data, which means that no data is copied. + /// This operation is very efficient and can be used to process external data using OpenCV functions. + /// The external data is not automatically de-allocated, so you should take care of it. + /// Number of bytes each matrix row occupies. The value should include the padding bytes at the end of each row, if any. + /// If the parameter is missing (set to AUTO_STEP ), no padding is assumed and the actual step is calculated as cols*elemSize() . + public static Mat FromPixelData(int rows, int cols, MatType type, Array data, long step = 0) + => new (rows, cols, type, data, step); + /// /// constructor for matrix headers pointing to user-allocated data /// @@ -306,16 +347,18 @@ public Mat(int rows, int cols, MatType type, Array data, long step = 0) /// The external data is not automatically de-allocated, so you should take care of it. /// Array of ndims-1 steps in case of a multi-dimensional array (the last step is always set to the element size). /// If not specified, the matrix is assumed to be continuous. - public Mat(IEnumerable sizes, MatType type, IntPtr data, IEnumerable? steps = null) + public static Mat FromPixelData(IEnumerable sizes, MatType type, IntPtr data, IEnumerable? steps = null) { - if (sizes == null) + if (sizes is null) throw new ArgumentNullException(nameof(sizes)); if (data == IntPtr.Zero) throw new ArgumentNullException(nameof(data)); #pragma warning disable CA1508 var sizesArray = sizes as int[] ?? sizes.ToArray(); #pragma warning restore CA1508 - if (steps == null) + + IntPtr ptr; + if (steps is null) { NativeMethods.HandleException( NativeMethods.core_Mat_new9(sizesArray.Length, sizesArray, type, data, IntPtr.Zero, out ptr)); @@ -326,6 +369,7 @@ public Mat(IEnumerable sizes, MatType type, IntPtr data, IEnumerable? NativeMethods.HandleException( NativeMethods.core_Mat_new9(sizesArray.Length, sizesArray, type, data, stepsArray, out ptr)); } + return new Mat(ptr); } /// @@ -340,32 +384,47 @@ public Mat(IEnumerable sizes, MatType type, IntPtr data, IEnumerable? /// The external data is not automatically de-allocated, so you should take care of it. /// Array of ndims-1 steps in case of a multi-dimensional array (the last step is always set to the element size). /// If not specified, the matrix is assumed to be continuous. - public Mat(IEnumerable sizes, MatType type, Array data, IEnumerable? steps = null) + protected Mat(IEnumerable sizes, MatType type, Array data, IEnumerable? steps = null) { - if (sizes == null) + if (sizes is null) throw new ArgumentNullException(nameof(sizes)); - if (data == null) + if (data is null) throw new ArgumentNullException(nameof(data)); - var handle = AllocGCHandle(data); + pinLifetime = new ArrayPinningLifetime(data); #pragma warning disable CA1508 var sizesArray = sizes as int[] ?? sizes.ToArray(); #pragma warning restore CA1508 - if (steps == null) + if (steps is null) { NativeMethods.HandleException( NativeMethods.core_Mat_new9(sizesArray.Length, sizesArray, - type, handle.AddrOfPinnedObject(), IntPtr.Zero, out ptr)); + type, pinLifetime.DataPtr, IntPtr.Zero, out ptr)); } else { var stepsArray = steps.Select(s => new IntPtr(s)).ToArray(); NativeMethods.HandleException( NativeMethods.core_Mat_new9(sizesArray.Length, sizesArray, - type, handle.AddrOfPinnedObject(), stepsArray, out ptr)); + type, pinLifetime.DataPtr, stepsArray, out ptr)); } } + /// + /// constructor for matrix headers pointing to user-allocated data + /// + /// Array of integers specifying an n-dimensional array shape. + /// Array type. Use MatType.CV_8UC1, ..., CV_64FC4 to create 1-4 channel matrices, + /// or MatType. CV_8UC(n), ..., CV_64FC(n) to create multi-channel matrices. + /// Pointer to the user data. Matrix constructors that take data and step parameters do not allocate matrix data. + /// Instead, they just initialize the matrix header that points to the specified data, which means that no data is copied. + /// This operation is very efficient and can be used to process external data using OpenCV functions. + /// The external data is not automatically de-allocated, so you should take care of it. + /// Array of ndims-1 steps in case of a multi-dimensional array (the last step is always set to the element size). + /// If not specified, the matrix is assumed to be continuous. + public static Mat FromPixelData(IEnumerable sizes, MatType type, Array data, IEnumerable? steps = null) + => new (sizes, type, data, steps); + /// /// constructs n-dimensional matrix /// @@ -374,7 +433,7 @@ public Mat(IEnumerable sizes, MatType type, Array data, IEnumerable? /// or MatType. CV_8UC(n), ..., CV_64FC(n) to create multi-channel matrices. public Mat(IEnumerable sizes, MatType type) { - if (sizes == null) + if (sizes is null) throw new ArgumentNullException(nameof(sizes)); #pragma warning disable CA1508 @@ -394,7 +453,7 @@ public Mat(IEnumerable sizes, MatType type) /// To set all the matrix elements to the particular value after the construction, use SetTo(Scalar s) method . public Mat(IEnumerable sizes, MatType type, Scalar s) { - if (sizes == null) + if (sizes is null) throw new ArgumentNullException(nameof(sizes)); #pragma warning disable CA1508 var sizesArray = sizes as int[] ?? sizes.ToArray(); @@ -406,10 +465,7 @@ public Mat(IEnumerable sizes, MatType type, Scalar s) /// /// Releases the resources /// - public void Release() - { - Dispose(); - } + public void Release() => Dispose(); /// /// @@ -433,7 +489,7 @@ protected override void DisposeUnmanaged() /// public static Mat FromStream(Stream stream, ImreadModes mode) { - if (stream == null) + if (stream is null) throw new ArgumentNullException(nameof(stream)); if (stream.Length > int.MaxValue) throw new ArgumentException("Not supported stream (too long)"); @@ -452,7 +508,7 @@ public static Mat FromStream(Stream stream, ImreadModes mode) /// public static Mat ImDecode(byte[] imageBytes, ImreadModes mode = ImreadModes.Color) { - if (imageBytes == null) + if (imageBytes is null) throw new ArgumentNullException(nameof(imageBytes)); return Cv2.ImDecode(imageBytes, mode); } @@ -463,10 +519,8 @@ public static Mat ImDecode(byte[] imageBytes, ImreadModes mode = ImreadModes.Col /// The input slice of bytes. /// The same flags as in imread /// - public static Mat ImDecode(ReadOnlySpan span, ImreadModes mode = ImreadModes.Color) - { - return Cv2.ImDecode(span, mode); - } + public static Mat ImDecode(ReadOnlySpan span, ImreadModes mode = ImreadModes.Color) + => Cv2.ImDecode(span, mode); /// /// Creates the Mat instance from image data (using cv::decode) @@ -474,10 +528,8 @@ public static Mat ImDecode(ReadOnlySpan span, ImreadModes mode = ImreadMod /// /// /// - public static Mat FromImageData(byte[] imageBytes, ImreadModes mode = ImreadModes.Color) - { - return ImDecode(imageBytes, mode); - } + public static Mat FromImageData(byte[] imageBytes, ImreadModes mode = ImreadModes.Color) + => ImDecode(imageBytes, mode); /// /// Reads image from the specified buffer in memory. @@ -485,10 +537,8 @@ public static Mat FromImageData(byte[] imageBytes, ImreadModes mode = ImreadMode /// The input slice of bytes. /// The same flags as in imread /// - public static Mat FromImageData(ReadOnlySpan span, ImreadModes mode = ImreadModes.Color) - { - return Cv2.ImDecode(span, mode); - } + public static Mat FromImageData(ReadOnlySpan span, ImreadModes mode = ImreadModes.Color) + => Cv2.ImDecode(span, mode); #endregion @@ -534,10 +584,8 @@ public static MatExpr Zeros(int rows, int cols, MatType type) /// Alternative to the matrix size specification Size(cols, rows) . /// Created matrix type. /// - public static MatExpr Zeros(Size size, MatType type) - { - return Zeros(size.Height, size.Width, type); - } + public static MatExpr Zeros(Size size, MatType type) + => Zeros(size.Height, size.Width, type); /// /// Returns a zero array of the specified size and type. @@ -577,10 +625,8 @@ public static MatExpr Ones(int rows, int cols, MatType type) /// Alternative to the matrix size specification Size(cols, rows) . /// Created matrix type. /// - public static MatExpr Ones(Size size, MatType type) - { - return Ones(size.Height, size.Width, type); - } + public static MatExpr Ones(Size size, MatType type) + => Ones(size.Height, size.Width, type); /// /// Returns an array of all 1’s of the specified size and type. @@ -605,10 +651,8 @@ public static MatExpr Ones(MatType type, params int[] sizes) /// Alternative to the matrix size specification Size(cols, rows) . /// Created matrix type. /// - public static MatExpr Eye(Size size, MatType type) - { - return Eye(size.Height, size.Width, type); - } + public static MatExpr Eye(Size size, MatType type) + => Eye(size.Height, size.Width, type); /// /// Returns an identity matrix of the specified size and type. @@ -653,7 +697,7 @@ public static Mat FromArray(params TElem[] arr) public static Mat FromArray(TElem[,] arr) where TElem : unmanaged { - if (arr == null) + if (arr is null) throw new ArgumentNullException(nameof(arr)); if (arr.Length == 0) throw new ArgumentException("arr.Length == 0"); @@ -671,10 +715,8 @@ public static Mat FromArray(TElem[,] arr) /// /// Source array data to be copied to this public static Mat FromArray(IEnumerable enumerable) - where TElem : unmanaged - { - return FromArray(enumerable.ToArray()); - } + where TElem : unmanaged => + FromArray(enumerable.ToArray()); #endregion @@ -703,9 +745,9 @@ public static Mat FromArray(IEnumerable enumerable) public static MatExpr operator +(Mat a, Mat b) { - if (a == null) + if (a is null) throw new ArgumentNullException(nameof(a)); - if (b == null) + if (b is null) throw new ArgumentNullException(nameof(b)); a.ThrowIfDisposed(); b.ThrowIfDisposed(); @@ -719,7 +761,7 @@ public static Mat FromArray(IEnumerable enumerable) public static MatExpr operator +(Mat a, Scalar s) { - if (a == null) + if (a is null) throw new ArgumentNullException(nameof(a)); a.ThrowIfDisposed(); @@ -731,7 +773,7 @@ public static Mat FromArray(IEnumerable enumerable) public static MatExpr operator +(Scalar s, Mat a) { - if (a == null) + if (a is null) throw new ArgumentNullException(nameof(a)); a.ThrowIfDisposed(); NativeMethods.HandleException( @@ -745,9 +787,9 @@ public static Mat FromArray(IEnumerable enumerable) public static MatExpr operator -(Mat a, Mat b) { - if (a == null) + if (a is null) throw new ArgumentNullException(nameof(a)); - if (b == null) + if (b is null) throw new ArgumentNullException(nameof(b)); a.ThrowIfDisposed(); b.ThrowIfDisposed(); @@ -760,7 +802,7 @@ public static Mat FromArray(IEnumerable enumerable) public static MatExpr operator -(Mat a, Scalar s) { - if (a == null) + if (a is null) throw new ArgumentNullException(nameof(a)); a.ThrowIfDisposed(); NativeMethods.HandleException( @@ -771,7 +813,7 @@ public static Mat FromArray(IEnumerable enumerable) public static MatExpr operator -(Scalar s, Mat a) { - if (a == null) + if (a is null) throw new ArgumentNullException(nameof(a)); a.ThrowIfDisposed(); NativeMethods.HandleException( @@ -785,9 +827,9 @@ public static Mat FromArray(IEnumerable enumerable) public static MatExpr operator *(Mat a, Mat b) { - if (a == null) + if (a is null) throw new ArgumentNullException(nameof(a)); - if (b == null) + if (b is null) throw new ArgumentNullException(nameof(b)); a.ThrowIfDisposed(); b.ThrowIfDisposed(); @@ -800,7 +842,7 @@ public static Mat FromArray(IEnumerable enumerable) public static MatExpr operator *(Mat a, double s) { - if (a == null) + if (a is null) throw new ArgumentNullException(nameof(a)); a.ThrowIfDisposed(); NativeMethods.HandleException( @@ -811,7 +853,7 @@ public static Mat FromArray(IEnumerable enumerable) public static MatExpr operator *(double s, Mat a) { - if (a == null) + if (a is null) throw new ArgumentNullException(nameof(a)); a.ThrowIfDisposed(); NativeMethods.HandleException( @@ -825,9 +867,9 @@ public static Mat FromArray(IEnumerable enumerable) public static MatExpr operator /(Mat a, Mat b) { - if (a == null) + if (a is null) throw new ArgumentNullException(nameof(a)); - if (b == null) + if (b is null) throw new ArgumentNullException(nameof(b)); a.ThrowIfDisposed(); b.ThrowIfDisposed(); @@ -840,7 +882,7 @@ public static Mat FromArray(IEnumerable enumerable) public static MatExpr operator /(Mat a, double s) { - if (a == null) + if (a is null) throw new ArgumentNullException(nameof(a)); a.ThrowIfDisposed(); NativeMethods.HandleException( @@ -851,7 +893,7 @@ public static Mat FromArray(IEnumerable enumerable) public static MatExpr operator /(double s, Mat a) { - if (a == null) + if (a is null) throw new ArgumentNullException(nameof(a)); a.ThrowIfDisposed(); NativeMethods.HandleException( @@ -865,9 +907,9 @@ public static Mat FromArray(IEnumerable enumerable) public static MatExpr operator &(Mat a, Mat b) { - if (a == null) + if (a is null) throw new ArgumentNullException(nameof(a)); - if (b == null) + if (b is null) throw new ArgumentNullException(nameof(b)); a.ThrowIfDisposed(); b.ThrowIfDisposed(); @@ -880,7 +922,7 @@ public static Mat FromArray(IEnumerable enumerable) public static MatExpr operator &(Mat a, double s) { - if (a == null) + if (a is null) throw new ArgumentNullException(nameof(a)); a.ThrowIfDisposed(); NativeMethods.HandleException( @@ -891,7 +933,7 @@ public static Mat FromArray(IEnumerable enumerable) public static MatExpr operator &(double s, Mat a) { - if (a == null) + if (a is null) throw new ArgumentNullException(nameof(a)); a.ThrowIfDisposed(); NativeMethods.HandleException( @@ -905,9 +947,9 @@ public static Mat FromArray(IEnumerable enumerable) public static MatExpr operator |(Mat a, Mat b) { - if (a == null) + if (a is null) throw new ArgumentNullException(nameof(a)); - if (b == null) + if (b is null) throw new ArgumentNullException(nameof(b)); a.ThrowIfDisposed(); b.ThrowIfDisposed(); @@ -920,7 +962,7 @@ public static Mat FromArray(IEnumerable enumerable) public static MatExpr operator |(Mat a, double s) { - if (a == null) + if (a is null) throw new ArgumentNullException(nameof(a)); a.ThrowIfDisposed(); NativeMethods.HandleException( @@ -931,7 +973,7 @@ public static Mat FromArray(IEnumerable enumerable) public static MatExpr operator |(double s, Mat a) { - if (a == null) + if (a is null) throw new ArgumentNullException(nameof(a)); a.ThrowIfDisposed(); NativeMethods.HandleException( @@ -945,9 +987,9 @@ public static Mat FromArray(IEnumerable enumerable) public static MatExpr operator ^(Mat a, Mat b) { - if (a == null) + if (a is null) throw new ArgumentNullException(nameof(a)); - if (b == null) + if (b is null) throw new ArgumentNullException(nameof(b)); a.ThrowIfDisposed(); b.ThrowIfDisposed(); @@ -960,7 +1002,7 @@ public static Mat FromArray(IEnumerable enumerable) public static MatExpr operator ^(Mat a, double s) { - if (a == null) + if (a is null) throw new ArgumentNullException(nameof(a)); a.ThrowIfDisposed(); NativeMethods.HandleException( @@ -971,7 +1013,7 @@ public static Mat FromArray(IEnumerable enumerable) public static MatExpr operator ^(double s, Mat a) { - if (a == null) + if (a is null) throw new ArgumentNullException(nameof(a)); a.ThrowIfDisposed(); NativeMethods.HandleException( @@ -985,7 +1027,7 @@ public static Mat FromArray(IEnumerable enumerable) public static MatExpr operator ~(Mat m) { - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); m.ThrowIfDisposed(); NativeMethods.HandleException( @@ -1008,7 +1050,7 @@ public static Mat FromArray(IEnumerable enumerable) /// public MatExpr LessThan(Mat m) { - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); NativeMethods.HandleException( @@ -1038,7 +1080,7 @@ public MatExpr LessThan(double d) /// public MatExpr LessThanOrEqual(Mat m) { - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); NativeMethods.HandleException( @@ -1068,7 +1110,7 @@ public MatExpr LessThanOrEqual(double d) /// public MatExpr Equals(Mat m) { - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); NativeMethods.HandleException( @@ -1098,7 +1140,7 @@ public MatExpr Equals(double d) /// public MatExpr NotEquals(Mat m) { - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); NativeMethods.HandleException( @@ -1128,7 +1170,7 @@ public MatExpr NotEquals(double d) /// public MatExpr GreaterThan(Mat m) { - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); NativeMethods.HandleException( @@ -1158,7 +1200,7 @@ public MatExpr GreaterThan(double d) /// public MatExpr GreaterThanOrEqual(Mat m) { - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); NativeMethods.HandleException( @@ -1200,7 +1242,7 @@ public MatExpr GreaterThanOrEqual(double d) get => SubMat(rowStart, rowEnd, colStart, colEnd); set { - if (value == null) + if (value is null) throw new ArgumentNullException(nameof(value)); value.ThrowIfDisposed(); //if (Type() != value.Type()) @@ -1229,7 +1271,7 @@ public MatExpr GreaterThanOrEqual(double d) get => SubMat(rowRange, colRange); set { - if (value == null) + if (value is null) throw new ArgumentNullException(nameof(value)); value.ThrowIfDisposed(); //if (Type() != value.Type()) @@ -1253,12 +1295,12 @@ public MatExpr GreaterThanOrEqual(double d) /// Start and end column of the extracted submatrix. /// The upper boundary is not included. To select all the columns, use Range.All(). /// - public Mat this[OpenCvSharp.Range rowRange, OpenCvSharp.Range colRange] + public Mat this[Range rowRange, Range colRange] { get => SubMat(rowRange, colRange); set { - if (value == null) + if (value is null) throw new ArgumentNullException(nameof(value)); value.ThrowIfDisposed(); //if (Type() != value.Type()) @@ -1284,7 +1326,7 @@ public Mat this[Rect roi] get => SubMat(roi); set { - if (value == null) + if (value is null) throw new ArgumentNullException(nameof(value)); value.ThrowIfDisposed(); //if (Type() != value.Type()) @@ -1310,7 +1352,7 @@ public Mat this[params Range[] ranges] get => SubMat(ranges); set { - if (value == null) + if (value is null) throw new ArgumentNullException(nameof(value)); value.ThrowIfDisposed(); //if (Type() != value.Type()) @@ -1380,10 +1422,8 @@ public Mat ColRange(int startCol, int endCol) /// /// /// - public Mat ColRange(OpenCvSharp.Range range) - { - return ColRange(range.Start, range.End); - } + public Mat ColRange(Range range) + => ColRange(range.Start, range.End); #if NETCOREAPP3_1_OR_GREATER || NETSTANDARD2_1 /// @@ -1431,10 +1471,8 @@ public Mat RowRange(int startRow, int endRow) /// /// /// - public Mat RowRange(OpenCvSharp.Range range) - { - return RowRange(range.Start, range.End); - } + public Mat RowRange(Range range) + => RowRange(range.Start, range.End); #if NETCOREAPP3_1_OR_GREATER || NETSTANDARD2_1 /// @@ -1501,12 +1539,12 @@ public Mat Clone(Rect roi) public void CopyTo(OutputArray m, InputArray? mask = null) { ThrowIfDisposed(); - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); m.ThrowIfNotReady(); mask?.ThrowIfDisposed(); - if (mask == null) + if (mask is null) { NativeMethods.HandleException( NativeMethods.core_Mat_copyTo1(ptr, m.CvPtr)); @@ -1531,12 +1569,12 @@ public void CopyTo(OutputArray m, InputArray? mask = null) public void CopyTo(Mat m, InputArray? mask = null) { ThrowIfDisposed(); - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); m.ThrowIfDisposed(); mask?.ThrowIfDisposed(); - if (mask == null) + if (mask is null) { NativeMethods.HandleException( NativeMethods.core_Mat_copyTo_toMat1(ptr, m.CvPtr)); @@ -1564,7 +1602,7 @@ public void CopyTo(Mat m, InputArray? mask = null) public void ConvertTo(OutputArray m, MatType rtype, double alpha = 1, double beta = 0) { ThrowIfDisposed(); - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); m.ThrowIfNotReady(); @@ -1583,11 +1621,11 @@ public void ConvertTo(OutputArray m, MatType rtype, double alpha = 1, double bet public void AssignTo(Mat m, MatType? type = null) { ThrowIfDisposed(); - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); NativeMethods.HandleException( - NativeMethods.core_Mat_assignTo(ptr, m.CvPtr, type ?? -1)); + NativeMethods.core_Mat_assignTo(ptr, m.CvPtr, type?.Value ?? -1)); GC.KeepAlive(this); GC.KeepAlive(m); @@ -1621,7 +1659,7 @@ public Mat SetTo(Scalar value, Mat? mask = null) public Mat SetTo(InputArray value, Mat? mask = null) { ThrowIfDisposed(); - if (value == null) + if (value is null) throw new ArgumentNullException(nameof(value)); value.ThrowIfDisposed(); @@ -1715,7 +1753,7 @@ public MatExpr Inv(DecompTypes method = DecompTypes.LU) public MatExpr Mul(InputArray m, double scale = 1) { ThrowIfDisposed(); - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); m.ThrowIfDisposed(); @@ -1736,7 +1774,7 @@ public MatExpr Mul(InputArray m, double scale = 1) public Mat Cross(InputArray m) { ThrowIfDisposed(); - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); m.ThrowIfDisposed(); @@ -1757,7 +1795,7 @@ public Mat Cross(InputArray m) public double Dot(InputArray m) { ThrowIfDisposed(); - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); m.ThrowIfDisposed(); @@ -1788,10 +1826,8 @@ public void Create(int rows, int cols, MatType type) /// /// Alternative new matrix size specification: Size(cols, rows) /// New matrix type. - public void Create(Size size, MatType type) - { - Create(size.Height, size.Width, type); - } + public void Create(Size size, MatType type) + => Create(size.Height, size.Width, type); /// /// Allocates new array data if needed. @@ -2359,7 +2395,7 @@ public void PushBack(Rect2f value) public void PushBack(Mat m) { ThrowIfDisposed(); - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); m.ThrowIfDisposed(); NativeMethods.HandleException( @@ -2423,6 +2459,9 @@ public Mat SubMat(int rowStart, int rowEnd, int colStart, int colEnd) NativeMethods.core_Mat_subMat1(ptr, rowStart, rowEnd, colStart, colEnd, out var ret)); GC.KeepAlive(this); var retVal = new Mat(ret); + + // If this is a managed array, keep the array pinned as long as the Mat is alive + retVal.pinLifetime = pinLifetime?.Ref(); return retVal; } @@ -2434,10 +2473,8 @@ public Mat SubMat(int rowStart, int rowEnd, int colStart, int colEnd) /// Start and end column of the extracted submatrix. The upper boundary is not included. /// To select all the columns, use Range::all(). /// - public Mat SubMat(OpenCvSharp.Range rowRange, OpenCvSharp.Range colRange) - { - return SubMat(rowRange.Start, rowRange.End, colRange.Start, colRange.End); - } + public Mat SubMat(Range rowRange, Range colRange) + => SubMat(rowRange.Start, rowRange.End, colRange.Start, colRange.End); #if NETCOREAPP3_1_OR_GREATER || NETSTANDARD2_1 /// @@ -2461,10 +2498,8 @@ public Mat SubMat(System.Range rowRange, System.Range colRange) /// /// Extracted submatrix specified as a rectangle. /// - public Mat SubMat(Rect roi) - { - return SubMat(roi.Y, roi.Y + roi.Height, roi.X, roi.X + roi.Width); - } + public Mat SubMat(Rect roi) + => SubMat(roi.Y, roi.Y + roi.Height, roi.X, roi.X + roi.Width); /// /// Extracts a rectangular submatrix. @@ -2989,10 +3024,8 @@ public Indexer GetGenericIndexer() where T : struct /// /// /// - public UnsafeIndexer GetUnsafeGenericIndexer() where T : unmanaged - { - return new UnsafeIndexer(this); - } + public UnsafeIndexer GetUnsafeGenericIndexer() where T : unmanaged + => new(this); #pragma warning disable CA1034 /// @@ -3419,50 +3452,50 @@ public void Set(int[] idx, T value) where T : struct private static readonly IReadOnlyDictionary acceptableTypesMap = new Dictionary { - {typeof(byte), new[]{MatType.CV_8SC1, MatType.CV_8UC1}}, - {typeof(sbyte), new[]{MatType.CV_8SC1, MatType.CV_8UC1}}, - {typeof(short), new[]{MatType.CV_16SC1, MatType.CV_16UC1}}, - {typeof(ushort), new[]{MatType.CV_16SC1, MatType.CV_16UC1}}, - {typeof(int), new[]{MatType.CV_32SC1}}, - {typeof(float), new[]{MatType.CV_32FC1}}, - {typeof(double), new[]{MatType.CV_64FC1}}, - {typeof(Point), new[]{MatType.CV_32SC2}}, - {typeof(Point2f), new[]{MatType.CV_32FC2}}, - {typeof(Point2d), new[]{MatType.CV_64FC2}}, - {typeof(Point3i), new[]{MatType.CV_32SC3}}, - {typeof(Point3f), new[]{MatType.CV_32FC3}}, - {typeof(Point3d), new[]{MatType.CV_64FC3}}, - {typeof(Size), new[]{MatType.CV_32SC2}}, - {typeof(Size2f), new[]{MatType.CV_32FC2}}, - {typeof(Size2d), new[]{MatType.CV_64FC2}}, - {typeof(Rect), new[]{MatType.CV_32SC4}}, - {typeof(Rect2f), new[]{MatType.CV_32FC4}}, - {typeof(Rect2d), new[]{MatType.CV_64FC4}}, + {typeof(byte), [MatType.CV_8SC1, MatType.CV_8UC1] }, + {typeof(sbyte), [MatType.CV_8SC1, MatType.CV_8UC1] }, + {typeof(short), [MatType.CV_16SC1, MatType.CV_16UC1] }, + {typeof(ushort), [MatType.CV_16SC1, MatType.CV_16UC1] }, + {typeof(int), [MatType.CV_32SC1] }, + {typeof(float), [MatType.CV_32FC1] }, + {typeof(double), [MatType.CV_64FC1] }, + {typeof(Point), [MatType.CV_32SC2] }, + {typeof(Point2f), [MatType.CV_32FC2] }, + {typeof(Point2d), [MatType.CV_64FC2] }, + {typeof(Point3i), [MatType.CV_32SC3] }, + {typeof(Point3f), [MatType.CV_32FC3] }, + {typeof(Point3d), [MatType.CV_64FC3] }, + {typeof(Size), [MatType.CV_32SC2] }, + {typeof(Size2f), [MatType.CV_32FC2] }, + {typeof(Size2d), [MatType.CV_64FC2] }, + {typeof(Rect), [MatType.CV_32SC4] }, + {typeof(Rect2f), [MatType.CV_32FC4] }, + {typeof(Rect2d), [MatType.CV_64FC4] }, //{typeof(DMatch), new[]{MatType.CV_32FC4}}, - {typeof(Vec2b), new[]{MatType.CV_8UC2}}, - {typeof(Vec2s), new[]{MatType.CV_16SC2}}, - {typeof(Vec2w), new[]{MatType.CV_16UC2}}, - {typeof(Vec2i), new[]{MatType.CV_32SC2}}, - {typeof(Vec2f), new[]{MatType.CV_32FC2}}, - {typeof(Vec2d), new[]{MatType.CV_64FC2}}, - {typeof(Vec3b), new[]{MatType.CV_8UC3}}, - {typeof(Vec3s), new[]{MatType.CV_16SC3}}, - {typeof(Vec3w), new[]{MatType.CV_16UC3}}, - {typeof(Vec3i), new[]{MatType.CV_32SC3}}, - {typeof(Vec3f), new[]{MatType.CV_32FC3}}, - {typeof(Vec3d), new[]{MatType.CV_64FC3}}, - {typeof(Vec4b), new[]{MatType.CV_8UC4}}, - {typeof(Vec4s), new[]{MatType.CV_16SC4}}, - {typeof(Vec4w), new[]{MatType.CV_16UC4}}, - {typeof(Vec4i), new[]{MatType.CV_32SC4}}, - {typeof(Vec4f), new[]{MatType.CV_32FC4}}, - {typeof(Vec4d), new[]{MatType.CV_64FC4}}, - {typeof(Vec6b), new[]{MatType.CV_8UC(6)}}, - {typeof(Vec6s), new[]{MatType.CV_16SC(6)}}, - {typeof(Vec6w), new[]{MatType.CV_16UC(6)}}, - {typeof(Vec6i), new[]{MatType.CV_32SC(6)}}, - {typeof(Vec6f), new[]{MatType.CV_32FC(6)}}, - {typeof(Vec6d), new[]{MatType.CV_64FC(6)}}, + {typeof(Vec2b), [MatType.CV_8UC2] }, + {typeof(Vec2s), [MatType.CV_16SC2] }, + {typeof(Vec2w), [MatType.CV_16UC2] }, + {typeof(Vec2i), [MatType.CV_32SC2] }, + {typeof(Vec2f), [MatType.CV_32FC2] }, + {typeof(Vec2d), [MatType.CV_64FC2] }, + {typeof(Vec3b), [MatType.CV_8UC3] }, + {typeof(Vec3s), [MatType.CV_16SC3] }, + {typeof(Vec3w), [MatType.CV_16UC3] }, + {typeof(Vec3i), [MatType.CV_32SC3] }, + {typeof(Vec3f), [MatType.CV_32FC3] }, + {typeof(Vec3d), [MatType.CV_64FC3] }, + {typeof(Vec4b), [MatType.CV_8UC4] }, + {typeof(Vec4s), [MatType.CV_16SC4] }, + {typeof(Vec4w), [MatType.CV_16UC4] }, + {typeof(Vec4i), [MatType.CV_32SC4] }, + {typeof(Vec4f), [MatType.CV_32FC4] }, + {typeof(Vec4d), [MatType.CV_64FC4] }, + {typeof(Vec6b), [MatType.CV_8UC(6)] }, + {typeof(Vec6s), [MatType.CV_16SC(6)] }, + {typeof(Vec6w), [MatType.CV_16UC(6)] }, + {typeof(Vec6i), [MatType.CV_32SC(6)] }, + {typeof(Vec6f), [MatType.CV_32FC(6)] }, + {typeof(Vec6d), [MatType.CV_64FC(6)] }, }; private void CheckArgumentsForConvert(Array data) @@ -3470,7 +3503,7 @@ private void CheckArgumentsForConvert(Array data) { ThrowIfDisposed(); - if (data == null) + if (data is null) throw new ArgumentNullException(nameof(data)); if (!dataDimensionMap.TryGetValue(typeof(T), out var dataDimension)) @@ -3483,7 +3516,7 @@ private void CheckArgumentsForConvert(Array data) throw new OpenCvSharpException( $"Provided data element number ({data.Length}) should be multiple of the Mat channels count ({t.Channels})"); - if (acceptableTypes != null && acceptableTypes.Length > 0) + if (acceptableTypes.Length > 0) { var isValidDepth = acceptableTypes.Any(type => type == t); if (!isValidDepth) @@ -3572,7 +3605,7 @@ public bool GetRectangularArray(out T[,] data) /// /// Primitive or Vec array to be copied /// Length of copied bytes - public bool SetArray(T[] data) + public bool SetArray(params T[] data) where T : unmanaged { CheckArgumentsForConvert(data); @@ -3621,10 +3654,8 @@ public bool SetRectangularArray(T[,] data) /// Encodes an image into a memory buffer. /// Format-specific parameters. /// - public byte[] ToBytes(string ext = ".png", int[]? prms = null) - { - return ImEncode(ext, prms); - } + public byte[] ToBytes(string ext = ".png", int[]? prms = null) + => ImEncode(ext, prms); /// /// Encodes an image into a memory buffer. @@ -3632,10 +3663,8 @@ public byte[] ToBytes(string ext = ".png", int[]? prms = null) /// Encodes an image into a memory buffer. /// Format-specific parameters. /// - public byte[] ToBytes(string ext = ".png", params ImageEncodingParam[] prms) - { - return ImEncode(ext, prms); - } + public byte[] ToBytes(string ext = ".png", params ImageEncodingParam[] prms) + => ImEncode(ext, prms); /// /// Converts Mat to System.IO.MemoryStream @@ -3645,7 +3674,8 @@ public byte[] ToBytes(string ext = ".png", params ImageEncodingParam[] prms) /// public MemoryStream ToMemoryStream(string ext = ".png", params ImageEncodingParam[] prms) { - return new MemoryStream(ToBytes(ext, prms)); + var bytes = ToBytes(ext, prms); + return new MemoryStream(bytes, 0, bytes.Length, writable: false, publiclyVisible: true); } /// @@ -3657,7 +3687,7 @@ public MemoryStream ToMemoryStream(string ext = ".png", params ImageEncodingPara /// public void WriteToStream(Stream stream, string ext = ".png", params ImageEncodingParam[] prms) { - if (stream == null) + if (stream is null) throw new ArgumentNullException(nameof(stream)); var imageBytes = ToBytes(ext, prms); stream.Write(imageBytes, 0, imageBytes.Length); @@ -3709,7 +3739,7 @@ public TMat Cast() public void ForEachAsByte(MatForeachFunctionByte operation) { ThrowIfDisposed(); - if (operation == null) + if (operation is null) throw new ArgumentNullException(nameof(operation)); NativeMethods.HandleException( @@ -3725,7 +3755,7 @@ public void ForEachAsByte(MatForeachFunctionByte operation) public void ForEachAsVec2b(MatForeachFunctionVec2b operation) { ThrowIfDisposed(); - if (operation == null) + if (operation is null) throw new ArgumentNullException(nameof(operation)); NativeMethods.HandleException( @@ -3741,7 +3771,7 @@ public void ForEachAsVec2b(MatForeachFunctionVec2b operation) public void ForEachAsVec3b(MatForeachFunctionVec3b operation) { ThrowIfDisposed(); - if (operation == null) + if (operation is null) throw new ArgumentNullException(nameof(operation)); NativeMethods.HandleException( @@ -3757,7 +3787,7 @@ public void ForEachAsVec3b(MatForeachFunctionVec3b operation) public void ForEachAsVec4b(MatForeachFunctionVec4b operation) { ThrowIfDisposed(); - if (operation == null) + if (operation is null) throw new ArgumentNullException(nameof(operation)); NativeMethods.HandleException( @@ -3773,7 +3803,7 @@ public void ForEachAsVec4b(MatForeachFunctionVec4b operation) public void ForEachAsVec6b(MatForeachFunctionVec6b operation) { ThrowIfDisposed(); - if (operation == null) + if (operation is null) throw new ArgumentNullException(nameof(operation)); NativeMethods.HandleException( @@ -3789,7 +3819,7 @@ public void ForEachAsVec6b(MatForeachFunctionVec6b operation) public void ForEachAsInt16(MatForeachFunctionInt16 operation) { ThrowIfDisposed(); - if (operation == null) + if (operation is null) throw new ArgumentNullException(nameof(operation)); NativeMethods.HandleException( @@ -3805,7 +3835,7 @@ public void ForEachAsInt16(MatForeachFunctionInt16 operation) public void ForEachAsVec2s(MatForeachFunctionVec2s operation) { ThrowIfDisposed(); - if (operation == null) + if (operation is null) throw new ArgumentNullException(nameof(operation)); NativeMethods.HandleException( @@ -3821,7 +3851,7 @@ public void ForEachAsVec2s(MatForeachFunctionVec2s operation) public void ForEachAsVec3s(MatForeachFunctionVec3s operation) { ThrowIfDisposed(); - if (operation == null) + if (operation is null) throw new ArgumentNullException(nameof(operation)); NativeMethods.HandleException( @@ -3837,7 +3867,7 @@ public void ForEachAsVec3s(MatForeachFunctionVec3s operation) public void ForEachAsVec4s(MatForeachFunctionVec4s operation) { ThrowIfDisposed(); - if (operation == null) + if (operation is null) throw new ArgumentNullException(nameof(operation)); NativeMethods.HandleException( @@ -3853,7 +3883,7 @@ public void ForEachAsVec4s(MatForeachFunctionVec4s operation) public void ForEachAsVec6s(MatForeachFunctionVec6s operation) { ThrowIfDisposed(); - if (operation == null) + if (operation is null) throw new ArgumentNullException(nameof(operation)); NativeMethods.HandleException( @@ -3869,7 +3899,7 @@ public void ForEachAsVec6s(MatForeachFunctionVec6s operation) public void ForEachAsInt32(MatForeachFunctionInt32 operation) { ThrowIfDisposed(); - if (operation == null) + if (operation is null) throw new ArgumentNullException(nameof(operation)); NativeMethods.HandleException( @@ -3885,7 +3915,7 @@ public void ForEachAsInt32(MatForeachFunctionInt32 operation) public void ForEachAsVec2i(MatForeachFunctionVec2i operation) { ThrowIfDisposed(); - if (operation == null) + if (operation is null) throw new ArgumentNullException(nameof(operation)); NativeMethods.HandleException( @@ -3901,7 +3931,7 @@ public void ForEachAsVec2i(MatForeachFunctionVec2i operation) public void ForEachAsVec3i(MatForeachFunctionVec3i operation) { ThrowIfDisposed(); - if (operation == null) + if (operation is null) throw new ArgumentNullException(nameof(operation)); NativeMethods.HandleException( @@ -3917,7 +3947,7 @@ public void ForEachAsVec3i(MatForeachFunctionVec3i operation) public void ForEachAsVec4i(MatForeachFunctionVec4i operation) { ThrowIfDisposed(); - if (operation == null) + if (operation is null) throw new ArgumentNullException(nameof(operation)); NativeMethods.HandleException( @@ -3933,7 +3963,7 @@ public void ForEachAsVec4i(MatForeachFunctionVec4i operation) public void ForEachAsVec6i(MatForeachFunctionVec6i operation) { ThrowIfDisposed(); - if (operation == null) + if (operation is null) throw new ArgumentNullException(nameof(operation)); NativeMethods.HandleException( @@ -3949,7 +3979,7 @@ public void ForEachAsVec6i(MatForeachFunctionVec6i operation) public void ForEachAsFloat(MatForeachFunctionFloat operation) { ThrowIfDisposed(); - if (operation == null) + if (operation is null) throw new ArgumentNullException(nameof(operation)); NativeMethods.HandleException( @@ -3965,7 +3995,7 @@ public void ForEachAsFloat(MatForeachFunctionFloat operation) public void ForEachAsVec2f(MatForeachFunctionVec2f operation) { ThrowIfDisposed(); - if (operation == null) + if (operation is null) throw new ArgumentNullException(nameof(operation)); NativeMethods.HandleException( @@ -3981,7 +4011,7 @@ public void ForEachAsVec2f(MatForeachFunctionVec2f operation) public void ForEachAsVec3f(MatForeachFunctionVec3f operation) { ThrowIfDisposed(); - if (operation == null) + if (operation is null) throw new ArgumentNullException(nameof(operation)); NativeMethods.HandleException( @@ -3997,7 +4027,7 @@ public void ForEachAsVec3f(MatForeachFunctionVec3f operation) public void ForEachAsVec4f(MatForeachFunctionVec4f operation) { ThrowIfDisposed(); - if (operation == null) + if (operation is null) throw new ArgumentNullException(nameof(operation)); NativeMethods.HandleException( @@ -4013,7 +4043,7 @@ public void ForEachAsVec4f(MatForeachFunctionVec4f operation) public void ForEachAsVec6f(MatForeachFunctionVec6f operation) { ThrowIfDisposed(); - if (operation == null) + if (operation is null) throw new ArgumentNullException(nameof(operation)); NativeMethods.HandleException( @@ -4030,7 +4060,7 @@ public void ForEachAsVec6f(MatForeachFunctionVec6f operation) public void ForEachAsDouble(MatForeachFunctionDouble operation) { ThrowIfDisposed(); - if (operation == null) + if (operation is null) throw new ArgumentNullException(nameof(operation)); NativeMethods.HandleException( @@ -4046,7 +4076,7 @@ public void ForEachAsDouble(MatForeachFunctionDouble operation) public void ForEachAsVec2d(MatForeachFunctionVec2d operation) { ThrowIfDisposed(); - if (operation == null) + if (operation is null) throw new ArgumentNullException(nameof(operation)); NativeMethods.HandleException( @@ -4062,7 +4092,7 @@ public void ForEachAsVec2d(MatForeachFunctionVec2d operation) public void ForEachAsVec3d(MatForeachFunctionVec3d operation) { ThrowIfDisposed(); - if (operation == null) + if (operation is null) throw new ArgumentNullException(nameof(operation)); NativeMethods.HandleException( @@ -4078,7 +4108,7 @@ public void ForEachAsVec3d(MatForeachFunctionVec3d operation) public void ForEachAsVec4d(MatForeachFunctionVec4d operation) { ThrowIfDisposed(); - if (operation == null) + if (operation is null) throw new ArgumentNullException(nameof(operation)); NativeMethods.HandleException( @@ -4094,7 +4124,7 @@ public void ForEachAsVec4d(MatForeachFunctionVec4d operation) public void ForEachAsVec6d(MatForeachFunctionVec6d operation) { ThrowIfDisposed(); - if (operation == null) + if (operation is null) throw new ArgumentNullException(nameof(operation)); NativeMethods.HandleException( @@ -4107,5 +4137,13 @@ public void ForEachAsVec6d(MatForeachFunctionVec6d operation) #endregion + /// + /// Creates a new span over the Mat. + /// + /// + /// + public unsafe Span AsSpan() where T : unmanaged + => IsContinuous() ? new Span(DataPointer, (int)Total() * ElemSize() / sizeof(T)) : []; + #endregion } diff --git a/src/OpenCvSharp/Modules/core/Mat/MatIndexer.cs b/src/OpenCvSharp/Modules/core/Mat/MatIndexer.cs index 1cd35b94e..ac47bf58e 100644 --- a/src/OpenCvSharp/Modules/core/Mat/MatIndexer.cs +++ b/src/OpenCvSharp/Modules/core/Mat/MatIndexer.cs @@ -1,5 +1,4 @@ -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.CodeAnalysis; namespace OpenCvSharp; diff --git a/src/OpenCvSharp/Modules/core/Mat/MatOfT.cs b/src/OpenCvSharp/Modules/core/Mat/MatOfT.cs index 459140a39..3f2e5716e 100644 --- a/src/OpenCvSharp/Modules/core/Mat/MatOfT.cs +++ b/src/OpenCvSharp/Modules/core/Mat/MatOfT.cs @@ -1,6 +1,5 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.CodeAnalysis; +using OpenCvSharp.Internal; namespace OpenCvSharp; @@ -33,11 +32,20 @@ public Mat() /// Creates from native cv::Mat* pointer /// /// - public Mat(IntPtr ptr) + internal Mat(IntPtr ptr) : base(ptr) { } + /// + /// Creates from native cv::Mat* pointer + /// + /// +#pragma warning disable CA1000 // Do not declare static members on generic types + public new static Mat FromNativePointer(IntPtr ptr) +#pragma warning restore CA1000 + => new(ptr); + /// /// Initializes by Mat object /// @@ -146,9 +154,13 @@ public Mat(Mat m, Rect roi) /// The external data is not automatically de-allocated, so you should take care of it. /// Number of bytes each matrix row occupies. The value should include the padding bytes at the end of each row, if any. /// If the parameter is missing (set to AUTO_STEP ), no padding is assumed and the actual step is calculated as cols*elemSize() . - protected Mat(int rows, int cols, IntPtr data, long step = 0) - : base(rows, cols, GetMatType(), data, step) +#pragma warning disable CA1000 + public static Mat FromPixelData(int rows, int cols, IntPtr data, long step = 0) +#pragma warning restore CA1000 { + NativeMethods.HandleException( + NativeMethods.core_Mat_new8(rows, cols, GetMatType(), data, new IntPtr(step), out var ptr)); + return new Mat(ptr); } /// @@ -162,7 +174,23 @@ protected Mat(int rows, int cols, IntPtr data, long step = 0) /// The external data is not automatically de-allocated, so you should take care of it. /// Number of bytes each matrix row occupies. The value should include the padding bytes at the end of each row, if any. /// If the parameter is missing (set to AUTO_STEP ), no padding is assumed and the actual step is calculated as cols*elemSize() . - public Mat(int rows, int cols, Array data, long step = 0) +#pragma warning disable CA1000 + public static Mat FromPixelData(int rows, int cols, Array data, long step = 0) +#pragma warning restore CA1000 + => new (rows, cols, data, step); + + /// + /// constructor for matrix headers pointing to user-allocated data + /// + /// Number of rows in a 2D array. + /// Number of columns in a 2D array. + /// Pointer to the user data. Matrix constructors that take data and step parameters do not allocate matrix data. + /// Instead, they just initialize the matrix header that points to the specified data, which means that no data is copied. + /// This operation is very efficient and can be used to process external data using OpenCV functions. + /// The external data is not automatically de-allocated, so you should take care of it. + /// Number of bytes each matrix row occupies. The value should include the padding bytes at the end of each row, if any. + /// If the parameter is missing (set to AUTO_STEP ), no padding is assumed and the actual step is calculated as cols*elemSize() . + protected Mat(int rows, int cols, Array data, long step = 0) : base(rows, cols, GetMatType(), data, step) { } @@ -177,9 +205,32 @@ public Mat(int rows, int cols, Array data, long step = 0) /// The external data is not automatically de-allocated, so you should take care of it. /// Array of ndims-1 steps in case of a multi-dimensional array (the last step is always set to the element size). /// If not specified, the matrix is assumed to be continuous. - public Mat(IEnumerable sizes, IntPtr data, IEnumerable? steps = null) - : base(sizes, GetMatType(), data, steps) - { +#pragma warning disable CA1000 + public static Mat FromPixelData(IEnumerable sizes, IntPtr data, IEnumerable? steps = null) +#pragma warning restore CA1000 + { + if (sizes is null) + throw new ArgumentNullException(nameof(sizes)); + if (data == IntPtr.Zero) + throw new ArgumentNullException(nameof(data)); +#pragma warning disable CA1508 + var sizesArray = sizes as int[] ?? sizes.ToArray(); +#pragma warning restore CA1508 + var type = GetMatType(); + + IntPtr ptr; + if (steps is null) + { + NativeMethods.HandleException( + NativeMethods.core_Mat_new9(sizesArray.Length, sizesArray, type, data, IntPtr.Zero, out ptr)); + } + else + { + var stepsArray = steps.Select(s => new IntPtr(s)).ToArray(); + NativeMethods.HandleException( + NativeMethods.core_Mat_new9(sizesArray.Length, sizesArray, type, data, stepsArray, out ptr)); + } + return new Mat(ptr); } /// @@ -350,7 +401,7 @@ public IEnumerator GetEnumerator() public TElem[] ToArray() { if (Rows == 0 || Cols == 0) - return Array.Empty(); + return []; if (!GetArray(out TElem[] array)) throw new OpenCvSharpException("Failed to copy pixel data into managed array"); @@ -383,7 +434,7 @@ public TElem[] ToArray() /// protected Mat Wrap(Mat mat) { - if (mat == null) + if (mat is null) throw new ArgumentNullException(nameof(mat)); var ret = new Mat(); diff --git a/src/OpenCvSharp/Modules/core/Mat/MatPinning.cs b/src/OpenCvSharp/Modules/core/Mat/MatPinning.cs new file mode 100644 index 000000000..e43ce07fd --- /dev/null +++ b/src/OpenCvSharp/Modules/core/Mat/MatPinning.cs @@ -0,0 +1,70 @@ +using System.Runtime.InteropServices; + +namespace OpenCvSharp; + +public partial class Mat +{ + private ArrayPinningLifetime? pinLifetime; + + /// + protected override void DisposeManaged() + { + pinLifetime?.Dispose(); + base.DisposeManaged(); + } + + /// + /// Pins an array and unpins it when all references are released. + /// + private class ArrayPinningLifetime : IDisposable + { + private GCHandle handle; + private int refCount; + + /// + /// Creates an instance of the class. + /// + /// The array to be pinned. + public ArrayPinningLifetime(Array array) + { + handle = GCHandle.Alloc(array, GCHandleType.Pinned); + } + + /// + /// Gets the data pointer of the pinned . + /// + /// Thrown when the handle has been deallocated. + public IntPtr DataPtr => handle.IsAllocated ? handle.AddrOfPinnedObject() : throw new ObjectDisposedException(nameof(ArrayPinningLifetime)); + + /// Increments the reference count of the pinned array. + /// Returns a reference to this instance. + public ArrayPinningLifetime Ref() + { + Interlocked.Increment(ref refCount); + return this; + } + + /// + /// Decrements the reference count of the pinned array. If the reference count reaches zero, the array will be + /// unpinned. + /// + public void Dispose() + { + if (Interlocked.Decrement(ref refCount) != 0 || !handle.IsAllocated) + { + return; + } + + handle.Free(); + GC.SuppressFinalize(this); + } + + ~ArrayPinningLifetime() + { + if (handle.IsAllocated) + { + handle.Free(); + } + } + } +} diff --git a/src/OpenCvSharp/Modules/core/Mat/Mat_CvMethods.cs b/src/OpenCvSharp/Modules/core/Mat/Mat_CvMethods.cs index cb760e8ca..642a26ee4 100644 --- a/src/OpenCvSharp/Modules/core/Mat/Mat_CvMethods.cs +++ b/src/OpenCvSharp/Modules/core/Mat/Mat_CvMethods.cs @@ -1,4 +1,4 @@ -using System.Collections.Generic; +using OpenCvSharp.Internal.Vectors; namespace OpenCvSharp; @@ -1549,6 +1549,19 @@ public Mat PyrUp(Size? dstSize = null, BorderTypes borderType = BorderTypes.Defa return dst; } + /// + /// Upsamples an image and then blurs it. + /// + /// + /// + /// + public IEnumerable BuildPyramid(int maxlevel, BorderTypes borderType = BorderTypes.Default) + { + using var dst = new VectorOfMat(); + Cv2.BuildPyramid(this, dst, maxlevel, borderType); + return dst.ToArray(); + } + /// /// corrects lens distortion for the given camera matrix and distortion coefficients /// diff --git a/src/OpenCvSharp/Modules/core/Mat/UMat.cs b/src/OpenCvSharp/Modules/core/Mat/UMat.cs index 77aeea7ec..cd665d943 100644 --- a/src/OpenCvSharp/Modules/core/Mat/UMat.cs +++ b/src/OpenCvSharp/Modules/core/Mat/UMat.cs @@ -1,8 +1,5 @@ using OpenCvSharp.Internal; -using System; -using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; -using System.Linq; namespace OpenCvSharp; @@ -80,13 +77,20 @@ public class UMat : DisposableCvObject /// Creates from native cv::Mat* pointer /// /// - public UMat(IntPtr ptr) + internal UMat(IntPtr ptr) { if (ptr == IntPtr.Zero) throw new OpenCvSharpException("Native object address is NULL"); this.ptr = ptr; } + /// + /// Creates from native cv::UMat* pointer + /// + /// + public static UMat FromNativePointer(IntPtr ptr) + => new(ptr); + /// /// Creates empty Mat /// @@ -102,7 +106,7 @@ public UMat(UMatUsageFlags usageFlags = UMatUsageFlags.None) /// protected UMat(UMat m) { - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); m.ThrowIfDisposed(); @@ -186,7 +190,7 @@ public UMat(Size size, MatType type, Scalar s, UMatUsageFlags usageFlags = UMatU /// usage flags for allocator public UMat(UMat m, Range rowRange, Range colRange, UMatUsageFlags usageFlags = UMatUsageFlags.None) { - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); m.ThrowIfDisposed(); @@ -205,7 +209,7 @@ public UMat(UMat m, Range rowRange, Range colRange, UMatUsageFlags usageFlags = /// Array of selected ranges of m along each dimensionality. public UMat(UMat m, params Range[] ranges) { - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); if (ranges is null) throw new ArgumentNullException(nameof(ranges)); @@ -229,7 +233,7 @@ public UMat(UMat m, params Range[] ranges) /// Region of interest. public UMat(UMat m, Rect roi) { - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); m.ThrowIfDisposed(); @@ -246,7 +250,7 @@ public UMat(UMat m, Rect roi) /// or MatType. CV_8UC(n), ..., CV_64FC(n) to create multi-channel matrices. public UMat(IEnumerable sizes, MatType type) { - if (sizes == null) + if (sizes is null) throw new ArgumentNullException(nameof(sizes)); var sizesArray = sizes.ToArray(); @@ -264,7 +268,7 @@ public UMat(IEnumerable sizes, MatType type) /// To set all the matrix elements to the particular value after the construction, use SetTo(Scalar s) method . public UMat(IEnumerable sizes, MatType type, Scalar s) { - if (sizes == null) + if (sizes is null) throw new ArgumentNullException(nameof(sizes)); var sizesArray = sizes.ToArray(); NativeMethods.HandleException( @@ -350,7 +354,7 @@ public static UMat Zeros(MatType type, params int[] sizes) throw new ArgumentNullException(nameof(sizes)); NativeMethods.HandleException( - NativeMethods.core_UMat_zeros2(sizes.Length, sizes, type, out var ret)); + NativeMethods.core_UMat_zeros2(sizes.Length, sizes, type.Value, out var ret)); var retVal = new UMat(ret); return retVal; } @@ -443,7 +447,7 @@ public static UMat Eye(int rows, int cols, MatType type) get => SubMat(rowStart, rowEnd, colStart, colEnd); set { - if (value == null) + if (value is null) throw new ArgumentNullException(nameof(value)); value.ThrowIfDisposed(); //if (Type() != value.Type()) @@ -472,7 +476,7 @@ public static UMat Eye(int rows, int cols, MatType type) get => SubMat(rowRange, colRange); set { - if (value == null) + if (value is null) throw new ArgumentNullException(nameof(value)); value.ThrowIfDisposed(); //if (Type() != value.Type()) @@ -501,7 +505,7 @@ public static UMat Eye(int rows, int cols, MatType type) get => SubMat(rowRange, colRange); set { - if (value == null) + if (value is null) throw new ArgumentNullException(nameof(value)); value.ThrowIfDisposed(); //if (Type() != value.Type()) @@ -527,7 +531,7 @@ public UMat this[Rect roi] get => SubMat(roi); set { - if (value == null) + if (value is null) throw new ArgumentNullException(nameof(value)); value.ThrowIfDisposed(); //if (Type() != value.Type()) @@ -553,7 +557,7 @@ public UMat this[params Range[] ranges] get => SubMat(ranges); set { - if (value == null) + if (value is null) throw new ArgumentNullException(nameof(value)); value.ThrowIfDisposed(); //if (Type() != value.Type()) @@ -739,12 +743,12 @@ public UMat Clone(Rect roi) public void CopyTo(OutputArray m, InputArray? mask = null) { ThrowIfDisposed(); - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); m.ThrowIfNotReady(); mask?.ThrowIfDisposed(); - if (mask == null) + if (mask is null) { NativeMethods.HandleException( NativeMethods.core_UMat_copyTo1(ptr, m.CvPtr)); @@ -769,12 +773,12 @@ public void CopyTo(OutputArray m, InputArray? mask = null) public void CopyTo(UMat m, InputArray? mask = null) { ThrowIfDisposed(); - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); m.ThrowIfDisposed(); mask?.ThrowIfDisposed(); - if (mask == null) + if (mask is null) { NativeMethods.HandleException( NativeMethods.core_UMat_copyTo_toUMat1(ptr, m.CvPtr)); @@ -802,7 +806,7 @@ public void CopyTo(UMat m, InputArray? mask = null) public void ConvertTo(OutputArray m, MatType rtype, double alpha = 1, double beta = 0) { ThrowIfDisposed(); - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); m.ThrowIfNotReady(); @@ -821,11 +825,11 @@ public void ConvertTo(OutputArray m, MatType rtype, double alpha = 1, double bet public void AssignTo(UMat m, MatType? type = null) { ThrowIfDisposed(); - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); NativeMethods.HandleException( - NativeMethods.core_UMat_assignTo(ptr, m.CvPtr, type ?? -1)); + NativeMethods.core_UMat_assignTo(ptr, m.CvPtr, type?.Value ?? -1)); GC.KeepAlive(this); GC.KeepAlive(m); @@ -859,7 +863,7 @@ public UMat SetTo(Scalar value, UMat? mask = null) public UMat SetTo(InputArray value, UMat? mask = null) { ThrowIfDisposed(); - if (value == null) + if (value is null) throw new ArgumentNullException(nameof(value)); value.ThrowIfDisposed(); @@ -954,7 +958,7 @@ public UMat Inv(DecompTypes method = DecompTypes.LU) public UMat Mul(InputArray m, double scale = 1) { ThrowIfDisposed(); - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); m.ThrowIfDisposed(); @@ -975,7 +979,7 @@ public UMat Mul(InputArray m, double scale = 1) public double Dot(InputArray m) { ThrowIfDisposed(); - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); m.ThrowIfDisposed(); diff --git a/src/OpenCvSharp/Modules/core/MatExpr.cs b/src/OpenCvSharp/Modules/core/MatExpr.cs index 884258247..6e187e05a 100644 --- a/src/OpenCvSharp/Modules/core/MatExpr.cs +++ b/src/OpenCvSharp/Modules/core/MatExpr.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.CodeAnalysis; using OpenCvSharp.Internal; namespace OpenCvSharp; @@ -26,7 +25,7 @@ internal MatExpr(IntPtr ptr) /// internal MatExpr(Mat mat) { - if (mat == null) + if (mat is null) throw new ArgumentNullException(nameof(mat)); NativeMethods.HandleException( NativeMethods.core_MatExpr_new2(mat.CvPtr, out ptr)); @@ -54,7 +53,7 @@ protected override void DisposeUnmanaged() public static implicit operator Mat(MatExpr self) { #pragma warning disable CA1065 // TODO - if (self == null) + if (self is null) throw new ArgumentNullException(nameof(self)); #pragma warning restore CA1065 return self.ToMat(); @@ -114,7 +113,7 @@ public static MatExpr FromMat(Mat mat) public static MatExpr operator -(MatExpr e) { - if (e == null) + if (e is null) throw new ArgumentNullException(nameof(e)); e.ThrowIfDisposed(); @@ -128,7 +127,7 @@ public static MatExpr FromMat(Mat mat) public static MatExpr operator ~(MatExpr e) { - if (e == null) + if (e is null) throw new ArgumentNullException(nameof(e)); e.ThrowIfDisposed(); @@ -142,9 +141,9 @@ public static MatExpr FromMat(Mat mat) public static MatExpr operator +(MatExpr e, Mat m) { - if (e == null) + if (e is null) throw new ArgumentNullException(nameof(e)); - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); e.ThrowIfDisposed(); m.ThrowIfDisposed(); @@ -158,9 +157,9 @@ public static MatExpr FromMat(Mat mat) public static MatExpr operator +(Mat m, MatExpr e) { - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); - if (e == null) + if (e is null) throw new ArgumentNullException(nameof(e)); m.ThrowIfDisposed(); e.ThrowIfDisposed(); @@ -174,7 +173,7 @@ public static MatExpr FromMat(Mat mat) public static MatExpr operator +(MatExpr e, Scalar s) { - if (e == null) + if (e is null) throw new ArgumentNullException(nameof(e)); e.ThrowIfDisposed(); @@ -186,7 +185,7 @@ public static MatExpr FromMat(Mat mat) public static MatExpr operator +(Scalar s, MatExpr e) { - if (e == null) + if (e is null) throw new ArgumentNullException(nameof(e)); e.ThrowIfDisposed(); @@ -198,9 +197,9 @@ public static MatExpr FromMat(Mat mat) public static MatExpr operator +(MatExpr e1, MatExpr e2) { - if (e1 == null) + if (e1 is null) throw new ArgumentNullException(nameof(e1)); - if (e2 == null) + if (e2 is null) throw new ArgumentNullException(nameof(e2)); e1.ThrowIfDisposed(); e2.ThrowIfDisposed(); @@ -218,9 +217,9 @@ public static MatExpr FromMat(Mat mat) public static MatExpr operator -(MatExpr e, Mat m) { - if (e == null) + if (e is null) throw new ArgumentNullException(nameof(e)); - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); e.ThrowIfDisposed(); m.ThrowIfDisposed(); @@ -234,9 +233,9 @@ public static MatExpr FromMat(Mat mat) public static MatExpr operator -(Mat m, MatExpr e) { - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); - if (e == null) + if (e is null) throw new ArgumentNullException(nameof(e)); m.ThrowIfDisposed(); e.ThrowIfDisposed(); @@ -250,7 +249,7 @@ public static MatExpr FromMat(Mat mat) public static MatExpr operator -(MatExpr e, Scalar s) { - if (e == null) + if (e is null) throw new ArgumentNullException(nameof(e)); e.ThrowIfDisposed(); @@ -262,7 +261,7 @@ public static MatExpr FromMat(Mat mat) public static MatExpr operator -(Scalar s, MatExpr e) { - if (e == null) + if (e is null) throw new ArgumentNullException(nameof(e)); e.ThrowIfDisposed(); @@ -274,9 +273,9 @@ public static MatExpr FromMat(Mat mat) public static MatExpr operator -(MatExpr e1, MatExpr e2) { - if (e1 == null) + if (e1 is null) throw new ArgumentNullException(nameof(e1)); - if (e2 == null) + if (e2 is null) throw new ArgumentNullException(nameof(e2)); e1.ThrowIfDisposed(); e2.ThrowIfDisposed(); @@ -294,9 +293,9 @@ public static MatExpr FromMat(Mat mat) public static MatExpr operator *(MatExpr e, Mat m) { - if (e == null) + if (e is null) throw new ArgumentNullException(nameof(e)); - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); e.ThrowIfDisposed(); m.ThrowIfDisposed(); @@ -310,9 +309,9 @@ public static MatExpr FromMat(Mat mat) public static MatExpr operator *(Mat m, MatExpr e) { - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); - if (e == null) + if (e is null) throw new ArgumentNullException(nameof(e)); m.ThrowIfDisposed(); e.ThrowIfDisposed(); @@ -326,7 +325,7 @@ public static MatExpr FromMat(Mat mat) public static MatExpr operator *(MatExpr e, double s) { - if (e == null) + if (e is null) throw new ArgumentNullException(nameof(e)); e.ThrowIfDisposed(); @@ -338,7 +337,7 @@ public static MatExpr FromMat(Mat mat) public static MatExpr operator *(double s, MatExpr e) { - if (e == null) + if (e is null) throw new ArgumentNullException(nameof(e)); e.ThrowIfDisposed(); @@ -350,9 +349,9 @@ public static MatExpr FromMat(Mat mat) public static MatExpr operator *(MatExpr e1, MatExpr e2) { - if (e1 == null) + if (e1 is null) throw new ArgumentNullException(nameof(e1)); - if (e2 == null) + if (e2 is null) throw new ArgumentNullException(nameof(e2)); e1.ThrowIfDisposed(); e2.ThrowIfDisposed(); @@ -370,9 +369,9 @@ public static MatExpr FromMat(Mat mat) public static MatExpr operator /(MatExpr e, Mat m) { - if (e == null) + if (e is null) throw new ArgumentNullException(nameof(e)); - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); e.ThrowIfDisposed(); m.ThrowIfDisposed(); @@ -386,9 +385,9 @@ public static MatExpr FromMat(Mat mat) public static MatExpr operator /(Mat m, MatExpr e) { - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); - if (e == null) + if (e is null) throw new ArgumentNullException(nameof(e)); m.ThrowIfDisposed(); e.ThrowIfDisposed(); @@ -402,7 +401,7 @@ public static MatExpr FromMat(Mat mat) public static MatExpr operator /(MatExpr e, double s) { - if (e == null) + if (e is null) throw new ArgumentNullException(nameof(e)); e.ThrowIfDisposed(); @@ -414,7 +413,7 @@ public static MatExpr FromMat(Mat mat) public static MatExpr operator /(double s, MatExpr e) { - if (e == null) + if (e is null) throw new ArgumentNullException(nameof(e)); e.ThrowIfDisposed(); @@ -426,9 +425,9 @@ public static MatExpr FromMat(Mat mat) public static MatExpr operator /(MatExpr e1, MatExpr e2) { - if (e1 == null) + if (e1 is null) throw new ArgumentNullException(nameof(e1)); - if (e2 == null) + if (e2 is null) throw new ArgumentNullException(nameof(e2)); e1.ThrowIfDisposed(); e2.ThrowIfDisposed(); @@ -623,7 +622,7 @@ public MatExpr Inv(DecompTypes method = DecompTypes.LU) /// public MatExpr Mul(MatExpr e, double scale = 1.0) { - if (e == null) + if (e is null) throw new ArgumentNullException(nameof(e)); ThrowIfDisposed(); e.ThrowIfDisposed(); @@ -646,7 +645,7 @@ public MatExpr Mul(MatExpr e, double scale = 1.0) /// public MatExpr Mul(Mat m, double scale = 1.0) { - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); ThrowIfDisposed(); m.ThrowIfDisposed(); @@ -667,7 +666,7 @@ public MatExpr Mul(Mat m, double scale = 1.0) /// public Mat Cross(Mat m) { - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); ThrowIfDisposed(); @@ -689,7 +688,7 @@ public Mat Cross(Mat m) /// public double Dot(Mat m) { - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); ThrowIfDisposed(); m.ThrowIfDisposed(); diff --git a/src/OpenCvSharp/Modules/core/MatExprRowColIndexer.cs b/src/OpenCvSharp/Modules/core/MatExprRowColIndexer.cs index d53d174d1..ab6f665db 100644 --- a/src/OpenCvSharp/Modules/core/MatExprRowColIndexer.cs +++ b/src/OpenCvSharp/Modules/core/MatExprRowColIndexer.cs @@ -15,7 +15,7 @@ public abstract class MatExprRowColIndexer /// /// /// - protected internal MatExprRowColIndexer(MatExpr parent) + internal protected MatExprRowColIndexer(MatExpr parent) { Parent = parent; } diff --git a/src/OpenCvSharp/Modules/core/OutputArray.cs b/src/OpenCvSharp/Modules/core/OutputArray.cs index 0e2d9f059..b22ceffec 100644 --- a/src/OpenCvSharp/Modules/core/OutputArray.cs +++ b/src/OpenCvSharp/Modules/core/OutputArray.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.CodeAnalysis; using OpenCvSharp.Internal; using OpenCvSharp.Internal.Vectors; @@ -23,7 +21,7 @@ public class OutputArray : DisposableCvObject /// internal OutputArray(Mat mat) { - if (mat == null) + if (mat is null) throw new ArgumentNullException(nameof(mat)); NativeMethods.HandleException( NativeMethods.core_OutputArray_new_byMat(mat.CvPtr, out ptr)); @@ -37,7 +35,7 @@ internal OutputArray(Mat mat) /// internal OutputArray(UMat mat) { - if (mat == null) + if (mat is null) throw new ArgumentNullException(nameof(mat)); NativeMethods.HandleException( NativeMethods.core_OutputArray_new_byUMat(mat.CvPtr, out ptr)); @@ -52,7 +50,7 @@ internal OutputArray(UMat mat) /// internal OutputArray(GpuMat mat) { - if (mat == null) + if (mat is null) throw new ArgumentNullException(nameof(mat)); ptr = NativeMethods.core_OutputArray_new_byGpuMat(mat.CvPtr); GC.KeepAlive(mat); @@ -66,7 +64,7 @@ internal OutputArray(GpuMat mat) /// internal OutputArray(IEnumerable mat) { - if (mat == null) + if (mat is null) throw new ArgumentNullException(nameof(mat)); using (var matVector = new VectorOfMat(mat)) { diff --git a/src/OpenCvSharp/Modules/core/OutputArrayOfMatList.cs b/src/OpenCvSharp/Modules/core/OutputArrayOfMatList.cs index 6d37fb29f..a94aa1e3d 100644 --- a/src/OpenCvSharp/Modules/core/OutputArrayOfMatList.cs +++ b/src/OpenCvSharp/Modules/core/OutputArrayOfMatList.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Generic; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; using OpenCvSharp.Internal.Vectors; namespace OpenCvSharp; diff --git a/src/OpenCvSharp/Modules/core/OutputArrayOfStructList.cs b/src/OpenCvSharp/Modules/core/OutputArrayOfStructList.cs index d788e1e8b..f9afc14d7 100644 --- a/src/OpenCvSharp/Modules/core/OutputArrayOfStructList.cs +++ b/src/OpenCvSharp/Modules/core/OutputArrayOfStructList.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Runtime.InteropServices; +using System.Runtime.InteropServices; using OpenCvSharp.Internal; using OpenCvSharp.Internal.Util; diff --git a/src/OpenCvSharp/Modules/core/PCA.cs b/src/OpenCvSharp/Modules/core/PCA.cs index d3665cb59..f02e650d2 100644 --- a/src/OpenCvSharp/Modules/core/PCA.cs +++ b/src/OpenCvSharp/Modules/core/PCA.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp; @@ -30,9 +29,9 @@ public PCA() /// maximum number of components that PCA should retain; by default, all the components are retained. public PCA(InputArray data, InputArray mean, Flags flags, int maxComponents = 0) { - if (data == null) + if (data is null) throw new ArgumentNullException(nameof(data)); - if (mean == null) + if (mean is null) throw new ArgumentNullException(nameof(mean)); data.ThrowIfDisposed(); mean.ThrowIfDisposed(); @@ -52,9 +51,9 @@ public PCA(InputArray data, InputArray mean, Flags flags, int maxComponents = 0) /// Using this parameter will let the PCA decided how many components to retain but it will always keep at least 2. public PCA(InputArray data, InputArray mean, Flags flags, double retainedVariance) { - if (data == null) + if (data is null) throw new ArgumentNullException(nameof(data)); - if (mean == null) + if (mean is null) throw new ArgumentNullException(nameof(mean)); data.ThrowIfDisposed(); mean.ThrowIfDisposed(); @@ -85,7 +84,7 @@ public Mat Eigenvectors NativeMethods.HandleException( NativeMethods.core_PCA_eigenvectors(ptr, out var ret)); GC.KeepAlive(this); - return new Mat(ret); + return Mat.FromNativePointer(ret); } } @@ -100,7 +99,7 @@ public Mat Eigenvalues NativeMethods.HandleException( NativeMethods.core_PCA_eigenvalues(ptr, out var ret)); GC.KeepAlive(this); - return new Mat(ret); + return Mat.FromNativePointer(ret); } } @@ -115,7 +114,7 @@ public Mat Mean NativeMethods.HandleException( NativeMethods.core_PCA_mean(ptr, out var ret)); GC.KeepAlive(this); - return new Mat(ret); + return Mat.FromNativePointer(ret); } } @@ -140,9 +139,9 @@ public Mat Mean public PCA Compute(InputArray data, InputArray mean, Flags flags, int maxComponents = 0) { ThrowIfDisposed(); - if (data == null) + if (data is null) throw new ArgumentNullException(nameof(data)); - if (mean == null) + if (mean is null) throw new ArgumentNullException(nameof(mean)); data.ThrowIfDisposed(); mean.ThrowIfDisposed(); @@ -177,9 +176,9 @@ public PCA Compute(InputArray data, InputArray mean, Flags flags, int maxCompone public PCA ComputeVar(InputArray data, InputArray mean, Flags flags, double retainedVariance) { ThrowIfDisposed(); - if (data == null) + if (data is null) throw new ArgumentNullException(nameof(data)); - if (mean == null) + if (mean is null) throw new ArgumentNullException(nameof(mean)); data.ThrowIfDisposed(); mean.ThrowIfDisposed(); @@ -209,14 +208,14 @@ public PCA ComputeVar(InputArray data, InputArray mean, Flags flags, double reta public Mat Project(InputArray vec) { ThrowIfDisposed(); - if (vec == null) + if (vec is null) throw new ArgumentNullException(nameof(vec)); vec.ThrowIfDisposed(); NativeMethods.HandleException( NativeMethods.core_PCA_project1(ptr, vec.CvPtr, out var ret)); GC.KeepAlive(this); GC.KeepAlive(vec); - return new Mat(ret); + return Mat.FromNativePointer(ret); } /// @@ -234,9 +233,9 @@ public Mat Project(InputArray vec) public void Project(InputArray vec, OutputArray result) { ThrowIfDisposed(); - if (vec == null) + if (vec is null) throw new ArgumentNullException(nameof(vec)); - if (result == null) + if (result is null) throw new ArgumentNullException(nameof(result)); vec.ThrowIfDisposed(); result.ThrowIfNotReady(); @@ -264,7 +263,7 @@ public void Project(InputArray vec, OutputArray result) public Mat BackProject(InputArray vec) { ThrowIfDisposed(); - if (vec == null) + if (vec is null) throw new ArgumentNullException(nameof(vec)); vec.ThrowIfDisposed(); NativeMethods.HandleException( @@ -291,9 +290,9 @@ public Mat BackProject(InputArray vec) public void BackProject(InputArray vec, OutputArray result) { ThrowIfDisposed(); - if (vec == null) + if (vec is null) throw new ArgumentNullException(nameof(vec)); - if (result == null) + if (result is null) throw new ArgumentNullException(nameof(result)); vec.ThrowIfDisposed(); result.ThrowIfNotReady(); @@ -312,7 +311,7 @@ public void BackProject(InputArray vec, OutputArray result) /// public void Write(FileStorage fs) { - if (fs == null) + if (fs is null) throw new ArgumentNullException(nameof(fs)); fs.ThrowIfDisposed(); @@ -330,7 +329,7 @@ public void Write(FileStorage fs) /// public void Read(FileNode fn) { - if (fn == null) + if (fn is null) throw new ArgumentNullException(nameof(fn)); fn.ThrowIfDisposed(); diff --git a/src/OpenCvSharp/Modules/core/RNG.cs b/src/OpenCvSharp/Modules/core/RNG.cs index 74756bc92..bda856d2f 100644 --- a/src/OpenCvSharp/Modules/core/RNG.cs +++ b/src/OpenCvSharp/Modules/core/RNG.cs @@ -1,5 +1,4 @@ -using System; -using System.Runtime.InteropServices; +using System.Runtime.InteropServices; using OpenCvSharp.Internal; namespace OpenCvSharp; @@ -277,11 +276,11 @@ public void Fill( InputArray b, bool saturateRange = false) { - if (mat == null) + if (mat is null) throw new ArgumentNullException(nameof(mat)); - if (a == null) + if (a is null) throw new ArgumentNullException(nameof(a)); - if (b == null) + if (b is null) throw new ArgumentNullException(nameof(b)); mat.ThrowIfNotReady(); a.ThrowIfDisposed(); diff --git a/src/OpenCvSharp/Modules/core/RNG_MT19937.cs b/src/OpenCvSharp/Modules/core/RNG_MT19937.cs index e6ff2e3d5..4163af78d 100644 --- a/src/OpenCvSharp/Modules/core/RNG_MT19937.cs +++ b/src/OpenCvSharp/Modules/core/RNG_MT19937.cs @@ -126,7 +126,7 @@ public void Seed(uint s) public uint Next() { /* mag01[x] = x * MATRIX_A for x=0,1 */ - uint[] mag01 = { 0x0U, /*MATRIX_A*/ 0x9908b0dfU }; + uint[] mag01 = [0x0U, /*MATRIX_A*/ 0x9908b0dfU]; const uint upperMask = 0x80000000U; const uint lowerMask = 0x7fffffffU; diff --git a/src/OpenCvSharp/Modules/core/SVD.cs b/src/OpenCvSharp/Modules/core/SVD.cs index 39ea8acec..3dc5b2d9b 100644 --- a/src/OpenCvSharp/Modules/core/SVD.cs +++ b/src/OpenCvSharp/Modules/core/SVD.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp; @@ -24,7 +23,7 @@ public SVD() /// public SVD(InputArray src, Flags flags = 0) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); src.ThrowIfDisposed(); NativeMethods.HandleException( @@ -88,7 +87,7 @@ public Mat Vt() public SVD Run(InputArray src, Flags flags = 0) { ThrowIfDisposed(); - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); src.ThrowIfDisposed(); NativeMethods.HandleException( @@ -106,9 +105,9 @@ public SVD Run(InputArray src, Flags flags = 0) public void BackSubst(InputArray rhs, OutputArray dst) { ThrowIfDisposed(); - if (rhs == null) + if (rhs is null) throw new ArgumentNullException(nameof(rhs)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); rhs.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -130,13 +129,13 @@ public void BackSubst(InputArray rhs, OutputArray dst) public static void Compute(InputArray src, OutputArray w, OutputArray u, OutputArray vt, Flags flags = 0) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (w == null) + if (w is null) throw new ArgumentNullException(nameof(w)); - if (u == null) + if (u is null) throw new ArgumentNullException(nameof(u)); - if (vt == null) + if (vt is null) throw new ArgumentNullException(nameof(vt)); src.ThrowIfDisposed(); w.ThrowIfNotReady(); @@ -161,9 +160,9 @@ public static void Compute(InputArray src, OutputArray w, /// public static void Compute(InputArray src, OutputArray w, Flags flags = 0) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (w == null) + if (w is null) throw new ArgumentNullException(nameof(w)); src.ThrowIfDisposed(); w.ThrowIfNotReady(); @@ -185,15 +184,15 @@ public static void Compute(InputArray src, OutputArray w, Flags flags = 0) public static void BackSubst(InputArray w, InputArray u, InputArray vt, InputArray rhs, OutputArray dst) { - if (w == null) + if (w is null) throw new ArgumentNullException(nameof(w)); - if (u == null) + if (u is null) throw new ArgumentNullException(nameof(u)); - if (vt == null) + if (vt is null) throw new ArgumentNullException(nameof(vt)); - if (rhs == null) + if (rhs is null) throw new ArgumentNullException(nameof(rhs)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); w.ThrowIfDisposed(); u.ThrowIfDisposed(); @@ -217,9 +216,9 @@ public static void BackSubst(InputArray w, InputArray u, /// public static void SolveZ(InputArray src, OutputArray dst) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); diff --git a/src/OpenCvSharp/Modules/core/SparseMat.cs b/src/OpenCvSharp/Modules/core/SparseMat.cs index 35fada82f..630a05a58 100644 --- a/src/OpenCvSharp/Modules/core/SparseMat.cs +++ b/src/OpenCvSharp/Modules/core/SparseMat.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Linq; +using System.Diagnostics.CodeAnalysis; using System.Runtime.InteropServices; using OpenCvSharp.Internal; @@ -194,7 +191,7 @@ public void CopyTo(Mat m) /// /// /// - public void ConvertTo(SparseMat m, int rtype, double alpha = 1) + public void ConvertTo(SparseMat m, MatType rtype, double alpha = 1) { if (m is null) throw new ArgumentNullException(nameof(m)); @@ -214,7 +211,7 @@ public void ConvertTo(SparseMat m, int rtype, double alpha = 1) /// The output matrix data type. When it is =-1, the output array will have the same data type as (*this) /// The scale factor /// The optional delta added to the scaled values before the conversion - public void ConvertTo(Mat m, int rtype, double alpha = 1, double beta = 0) + public void ConvertTo(Mat m, MatType rtype, double alpha = 1, double beta = 0) { if (m is null) throw new ArgumentNullException(nameof(m)); @@ -232,14 +229,14 @@ public void ConvertTo(Mat m, int rtype, double alpha = 1, double beta = 0) /// /// /// - public void AssignTo(SparseMat m, int type = -1) + public void AssignTo(SparseMat m, MatType? type = null) { if (m is null) throw new ArgumentNullException(nameof(m)); ThrowIfDisposed(); NativeMethods.HandleException( - NativeMethods.core_SparseMat_assignTo(ptr, m.CvPtr, type)); + NativeMethods.core_SparseMat_assignTo(ptr, m.CvPtr, type?.Value ?? -1)); GC.KeepAlive(this); GC.KeepAlive(m); diff --git a/src/OpenCvSharp/Modules/core/Struct/DMatch.cs b/src/OpenCvSharp/Modules/core/Struct/DMatch.cs index f065202f4..d2724afbe 100644 --- a/src/OpenCvSharp/Modules/core/Struct/DMatch.cs +++ b/src/OpenCvSharp/Modules/core/Struct/DMatch.cs @@ -1,42 +1,40 @@ -using System.Diagnostics.CodeAnalysis; +namespace OpenCvSharp; -namespace OpenCvSharp; #pragma warning disable CA1051 /// /// Struct for matching: query descriptor index, train descriptor index, train image index and distance between descriptors. /// -[SuppressMessage("Microsoft.Design", "CA1815: Override equals and operator equals on value types")] -public struct DMatch +/// +/// Constructor +/// +public record struct DMatch(int QueryIdx, int TrainIdx, int ImgIdx, float Distance) { /// /// query descriptor index /// - public int QueryIdx; + public int QueryIdx = QueryIdx; /// /// train descriptor index /// - public int TrainIdx; + public int TrainIdx = TrainIdx; /// /// train image index /// - public int ImgIdx; + public int ImgIdx = ImgIdx; /// /// /// - public float Distance; + public float Distance = Distance; /// /// /// /// - public static DMatch Empty() - { - return new (-1, -1, -1, float.MaxValue); - } + public static DMatch Empty() => new(-1, -1, -1, float.MaxValue); /// /// Constructor @@ -49,21 +47,6 @@ public DMatch(int queryIdx, int trainIdx, float distance) : { } - /// - /// Constructor - /// - /// - /// - /// - /// - public DMatch(int queryIdx, int trainIdx, int imgIdx, float distance) - { - QueryIdx = queryIdx; - TrainIdx = trainIdx; - ImgIdx = imgIdx; - Distance = distance; - } - /// /// Compares by distance (less is better) /// @@ -106,11 +89,4 @@ public DMatch(int queryIdx, int trainIdx, int imgIdx, float distance) public static DMatch FromVec4f(Vec4f v) => new ((int)v.Item0, (int)v.Item1, (int)v.Item2, v.Item3); #pragma warning restore 1591 - - /// - public override readonly string ToString() - { - // ReSharper disable once UseStringInterpolation - return $"DMatch (QueryIdx:{QueryIdx}, TrainIdx:{TrainIdx}, ImgIdx:{ImgIdx}, Distance:{Distance})"; - } } diff --git a/src/OpenCvSharp/Modules/core/Struct/KeyPoint.cs b/src/OpenCvSharp/Modules/core/Struct/KeyPoint.cs index bfd9c1b4a..742f6b09f 100644 --- a/src/OpenCvSharp/Modules/core/Struct/KeyPoint.cs +++ b/src/OpenCvSharp/Modules/core/Struct/KeyPoint.cs @@ -1,6 +1,4 @@ -using System; -using System.Diagnostics.CodeAnalysis; -using System.Globalization; +using System.Diagnostics.CodeAnalysis; using System.Runtime.InteropServices; namespace OpenCvSharp; @@ -8,66 +6,50 @@ namespace OpenCvSharp; /// /// Data structure for salient point detectors /// +/// +/// Complete constructor +/// +/// Coordinate of the point +/// Feature size +/// Feature orientation in degrees (has negative value if the orientation is not defined/not computed) +/// Feature strength (can be used to select only the most prominent key points) +/// Scale-space octave in which the feature has been found; may correlate with the size +/// Point class (can be used by feature classifiers or object detectors) [Serializable] [StructLayout(LayoutKind.Sequential)] [SuppressMessage("Design", "CA1051: Do not declare visible instance fields")] -public struct KeyPoint : IEquatable +public record struct KeyPoint( + Point2f Pt, float Size, float Angle = -1, float Response = 0, int Octave = 0, int ClassId = -1) { - #region Properties - /// /// Coordinate of the point /// - public Point2f Pt; + public Point2f Pt = Pt; /// /// Feature size /// - public float Size; + public float Size = Size; /// /// Feature orientation in degrees (has negative value if the orientation is not defined/not computed) /// - public float Angle; + public float Angle = Angle; /// /// Feature strength (can be used to select only the most prominent key points) /// - public float Response; + public float Response = Response; /// /// Scale-space octave in which the feature has been found; may correlate with the size /// - public int Octave; + public int Octave = Octave; /// /// Point class (can be used by feature classifiers or object detectors) /// - public int ClassId; - - #endregion - - #region Constructors - - /// - /// Complete constructor - /// - /// Coordinate of the point - /// Feature size - /// Feature orientation in degrees (has negative value if the orientation is not defined/not computed) - /// Feature strength (can be used to select only the most prominent key points) - /// Scale-space octave in which the feature has been found; may correlate with the size - /// Point class (can be used by feature classifiers or object detectors) - public KeyPoint(Point2f pt, float size, float angle = -1, float response = 0, int octave = 0, - int classId = -1) - { - Pt = pt; - Size = size; - Angle = angle; - Response = response; - Octave = octave; - ClassId = classId; - } + public int ClassId = ClassId; /// /// Complete constructor @@ -79,82 +61,9 @@ public KeyPoint(Point2f pt, float size, float angle = -1, float response = 0, in /// Feature strength (can be used to select only the most prominent key points) /// Scale-space octave in which the feature has been found; may correlate with the size /// Point class (can be used by feature classifiers or object detectors) - public KeyPoint(float x, float y, float size, float angle = -1, float response = 0, int octave = 0, - int classId = -1) + public KeyPoint( + float x, float y, float size, float angle = -1, float response = 0, int octave = 0, int classId = -1) : this(new Point2f(x, y), size, angle, response, octave, classId) { } - - #endregion - - #region Operators - - /// - /// Compares two CvPoint objects. The result specifies whether the members of each object are equal. - /// - /// A Point to compare. - /// A Point to compare. - /// This operator returns true if the members of left and right are equal; otherwise, false. - public static bool operator ==(KeyPoint lhs, KeyPoint rhs) - { - return lhs.Equals(rhs); - } - - /// - /// Compares two CvPoint objects. The result specifies whether the members of each object are unequal. - /// - /// A Point to compare. - /// A Point to compare. - /// This operator returns true if the members of left and right are unequal; otherwise, false. - public static bool operator !=(KeyPoint lhs, KeyPoint rhs) - { - return !lhs.Equals(rhs); - } - - #endregion - - #region Overrided Methods - - /// - public readonly bool Equals(KeyPoint other) - { - return Pt.Equals(other.Pt) && Size.Equals(other.Size) && Angle.Equals(other.Angle) && Response.Equals(other.Response) && Octave == other.Octave && ClassId == other.ClassId; - } - - /// - public override readonly bool Equals(object? obj) - { - return obj is KeyPoint other && Equals(other); - } - - /// - public override readonly int GetHashCode() - { -#if NET48 || NETSTANDARD2_0 - unchecked - { - var hashCode = Pt.GetHashCode(); - hashCode = (hashCode * 397) ^ Size.GetHashCode(); - hashCode = (hashCode * 397) ^ Angle.GetHashCode(); - hashCode = (hashCode * 397) ^ Response.GetHashCode(); - hashCode = (hashCode * 397) ^ Octave; - hashCode = (hashCode * 397) ^ ClassId; - return hashCode; - } -#else - return HashCode.Combine(Pt, Size, Angle, Response, Octave, ClassId); -#endif - } - - /// - public override readonly string ToString() - { - // ReSharper disable once UseStringInterpolation - return string.Format( - CultureInfo.InvariantCulture, - "[Pt:{0}, Size:{1}, Angle:{2}, Response:{3}, Octave:{4}, ClassId:{5}]", - Pt, Size, Angle, Response, Octave, ClassId); - } - - #endregion } diff --git a/src/OpenCvSharp/Modules/core/Struct/MatType.cs b/src/OpenCvSharp/Modules/core/Struct/MatType.cs index a94b68a13..db62f4fa3 100644 --- a/src/OpenCvSharp/Modules/core/Struct/MatType.cs +++ b/src/OpenCvSharp/Modules/core/Struct/MatType.cs @@ -1,38 +1,27 @@ -using System; - -namespace OpenCvSharp; +namespace OpenCvSharp; // ReSharper disable InconsistentNaming #pragma warning disable 1591 /// /// Matrix data type (depth and number of channels) /// -public readonly struct MatType : IEquatable, IEquatable +public readonly record struct MatType(int value) : IEquatable { /// /// Entity value /// - private readonly int value; + private readonly int value = value; /// /// Entity value /// public int Value => value; - /// - /// - /// - /// - public MatType(int value) - { - this.value = value; - } - /// /// /// /// - public static implicit operator int(MatType self) + public static explicit operator int(MatType self) { return self.value; } @@ -40,10 +29,7 @@ public static implicit operator int(MatType self) /// /// /// - public int ToInt32() - { - return value; - } + public int ToInt32() => value; /// /// @@ -78,35 +64,11 @@ public static MatType FromInt32(int value) /// public int Channels => (Value >> CV_CN_SHIFT) + 1; - public bool Equals(MatType other) - { - return value == other.value; - } - public bool Equals(int other) { return value == other; } - public override bool Equals(object? obj) - { - if (obj is null) - return false; - if (obj.GetType() != typeof (MatType)) - return false; - return obj is MatType mt && Equals(mt); - } - - public static bool operator ==(MatType self, MatType other) - { - return self.Equals(other); - } - - public static bool operator !=(MatType self, MatType other) - { - return !self.Equals(other); - } - public static bool operator ==(MatType self, int other) { return self.Equals(other); @@ -117,11 +79,6 @@ public override bool Equals(object? obj) return !self.Equals(other); } - public override int GetHashCode() - { - return value.GetHashCode(); - } - /// public override string ToString() { diff --git a/src/OpenCvSharp/Modules/core/Struct/Point.cs b/src/OpenCvSharp/Modules/core/Struct/Point.cs index 7e4d3ec6e..9dced2758 100644 --- a/src/OpenCvSharp/Modules/core/Struct/Point.cs +++ b/src/OpenCvSharp/Modules/core/Struct/Point.cs @@ -1,5 +1,4 @@ -using System; -using System.Runtime.InteropServices; +using System.Runtime.InteropServices; #pragma warning disable CA1051 @@ -10,28 +9,17 @@ namespace OpenCvSharp; /// [Serializable] [StructLayout(LayoutKind.Sequential)] -public struct Point : IEquatable +public record struct Point(int X, int Y) { /// /// /// - public int X; + public int X = X; /// /// /// - public int Y; - - /// - /// - /// - /// - /// - public Point(int x, int y) - { - X = x; - Y = y; - } + public int Y = Y; /// /// @@ -39,9 +27,8 @@ public Point(int x, int y) /// /// public Point(double x, double y) + : this((int)x, (int)y) { - X = (int) x; - Y = (int) y; } #region Cast @@ -64,34 +51,6 @@ public Point(double x, double y) #region Operators - #region == / != - - /// - /// Compares two Point objects. The result specifies whether the values of the X and Y properties of the two Point objects are equal. - /// - /// A Point to compare. - /// A Point to compare. - /// This operator returns true if the X and Y values of left and right are equal; otherwise, false. - public static bool operator ==(Point lhs, Point rhs) - { - return lhs.Equals(rhs); - } - - /// - /// Compares two Point objects. The result specifies whether the values of the X or Y properties of the two Point objects are unequal. - /// - /// A Point to compare. - /// A Point to compare. - /// This operator returns true if the values of either the X properties or the Y properties of left and right differ; otherwise, false. - public static bool operator !=(Point lhs, Point rhs) - { - return !lhs.Equals(rhs); - } - - #endregion - - #region + / - - /// /// Unary plus operator /// @@ -165,43 +124,6 @@ public Point(double x, double y) #endregion - #endregion - - #region Override - - /// - public readonly bool Equals(Point other) - { - return X == other.X && Y == other.Y; - } - - /// - public override readonly bool Equals(object? obj) - { - return obj is Point other && Equals(other); - } - - /// - public override readonly int GetHashCode() - { -#if DOTNET_FRAMEWORK || NETSTANDARD2_0 - unchecked - { - return (X.GetHashCode() * 397) ^ Y.GetHashCode(); - } -#else - return HashCode.Combine(X, Y); -#endif - } - - /// - public override readonly string ToString() - { - return $"(x:{X} y:{Y})"; - } - - #endregion - #region Methods /// diff --git a/src/OpenCvSharp/Modules/core/Struct/Point2d.cs b/src/OpenCvSharp/Modules/core/Struct/Point2d.cs index cc72ab5c4..67c252d9e 100644 --- a/src/OpenCvSharp/Modules/core/Struct/Point2d.cs +++ b/src/OpenCvSharp/Modules/core/Struct/Point2d.cs @@ -1,37 +1,24 @@ -using System; -using System.Runtime.InteropServices; +using System.Runtime.InteropServices; #pragma warning disable CA1051 namespace OpenCvSharp; -/// -/// +/// /// /// [Serializable] [StructLayout(LayoutKind.Sequential)] -public struct Point2d : IEquatable +public record struct Point2d(double X, double Y) { /// /// /// - public double X; + public double X = X; /// /// /// - public double Y; - - /// - /// - /// - /// - /// - public Point2d(double x, double y) - { - X = x; - Y = y; - } + public double Y = Y; #region Cast @@ -62,34 +49,6 @@ public Point2d(double x, double y) #region Operators - #region == / != - - /// - /// Compares two CvPoint objects. The result specifies whether the values of the X and Y properties of the two CvPoint objects are equal. - /// - /// A Point to compare. - /// A Point to compare. - /// This operator returns true if the X and Y values of left and right are equal; otherwise, false. - public static bool operator ==(Point2d lhs, Point2d rhs) - { - return lhs.Equals(rhs); - } - - /// - /// Compares two CvPoint2D32f objects. The result specifies whether the values of the X or Y properties of the two CvPoint2D32f objects are unequal. - /// - /// A Point to compare. - /// A Point to compare. - /// This operator returns true if the values of either the X properties or the Y properties of left and right differ; otherwise, false. - public static bool operator !=(Point2d lhs, Point2d rhs) - { - return !lhs.Equals(rhs); - } - - #endregion - - #region + / - - /// /// Unary plus operator /// @@ -163,43 +122,6 @@ public Point2d(double x, double y) #endregion - #endregion - - #region Override - - /// - public readonly bool Equals(Point2d other) - { - return X.Equals(other.X) && Y.Equals(other.Y); - } - - /// - public override readonly bool Equals(object? obj) - { - return obj is Point2d other && Equals(other); - } - - /// - public override readonly int GetHashCode() - { -#if DOTNET_FRAMEWORK || NETSTANDARD2_0 - unchecked - { - return (X.GetHashCode() * 397) ^ Y.GetHashCode(); - } -#else - return HashCode.Combine(X, Y); -#endif - } - - /// - public override readonly string ToString() - { - return $"(x:{X} y:{Y})"; - } - - #endregion - #region Methods /// diff --git a/src/OpenCvSharp/Modules/core/Struct/Point2f.cs b/src/OpenCvSharp/Modules/core/Struct/Point2f.cs index 073d803e7..9cf0b3159 100644 --- a/src/OpenCvSharp/Modules/core/Struct/Point2f.cs +++ b/src/OpenCvSharp/Modules/core/Struct/Point2f.cs @@ -1,5 +1,4 @@ -using System; -using System.Runtime.InteropServices; +using System.Runtime.InteropServices; #pragma warning disable CA1051 @@ -11,28 +10,17 @@ namespace OpenCvSharp; [Serializable] [StructLayout(LayoutKind.Sequential)] // ReSharper disable once InconsistentNaming -public struct Point2f : IEquatable +public record struct Point2f(float X, float Y) { /// /// /// - public float X; + public float X = X; /// /// /// - public float Y; - - /// - /// - /// - /// - /// - public Point2f(float x, float y) - { - X = x; - Y = y; - } + public float Y = Y; #region Cast @@ -63,34 +51,6 @@ public Point2f(float x, float y) #region Operators - #region == / != - - /// - /// Compares two CvPoint objects. The result specifies whether the values of the X and Y properties of the two CvPoint objects are equal. - /// - /// A Point to compare. - /// A Point to compare. - /// This operator returns true if the X and Y values of left and right are equal; otherwise, false. - public static bool operator ==(Point2f lhs, Point2f rhs) - { - return lhs.Equals(rhs); - } - - /// - /// Compares two CvPoint2D32f objects. The result specifies whether the values of the X or Y properties of the two CvPoint2D32f objects are unequal. - /// - /// A Point to compare. - /// A Point to compare. - /// This operator returns true if the values of either the X properties or the Y properties of left and right differ; otherwise, false. - public static bool operator !=(Point2f lhs, Point2f rhs) - { - return !lhs.Equals(rhs); - } - - #endregion - - #region + / - - /// /// Unary plus operator /// @@ -167,43 +127,6 @@ public Point2f(float x, float y) #endregion - #endregion - - #region Override - - /// - public readonly bool Equals(Point2f other) - { - return X.Equals(other.X) && Y.Equals(other.Y); - } - - /// - public override readonly bool Equals(object? obj) - { - return obj is Point2f other && Equals(other); - } - - /// - public override readonly int GetHashCode() - { -#if DOTNET_FRAMEWORK || NETSTANDARD2_0 - unchecked - { - return (X.GetHashCode() * 397) ^ Y.GetHashCode(); - } -#else - return HashCode.Combine(X, Y); -#endif - } - - /// - public override readonly string ToString() - { - return $"(x:{X} y:{Y})"; - } - - #endregion - #region Methods /// diff --git a/src/OpenCvSharp/Modules/core/Struct/Point3d.cs b/src/OpenCvSharp/Modules/core/Struct/Point3d.cs index d2153e610..48536847e 100644 --- a/src/OpenCvSharp/Modules/core/Struct/Point3d.cs +++ b/src/OpenCvSharp/Modules/core/Struct/Point3d.cs @@ -1,44 +1,29 @@ -using System; -using System.Runtime.InteropServices; +using System.Runtime.InteropServices; #pragma warning disable CA1051 namespace OpenCvSharp; -/// -/// +/// /// /// [Serializable] [StructLayout(LayoutKind.Sequential)] -public struct Point3d : IEquatable +public record struct Point3d(double X, double Y, double Z) { /// /// /// - public double X; + public double X = X; /// /// /// - public double Y; + public double Y = Y; /// /// /// - public double Z; - - /// - /// - /// - /// - /// - /// - public Point3d(double x, double y, double z) - { - X = x; - Y = y; - Z = z; - } + public double Z = Z; #region Cast @@ -70,34 +55,6 @@ public Point3d(double x, double y, double z) #region Operators - #region == / != - - /// - /// Compares two CvPoint objects. The result specifies whether the values of the X and Y properties of the two CvPoint objects are equal. - /// - /// A Point to compare. - /// A Point to compare. - /// This operator returns true if the X and Y values of left and right are equal; otherwise, false. - public static bool operator ==(Point3d lhs, Point3d rhs) - { - return lhs.Equals(rhs); - } - - /// - /// Compares two CvPoint2D32f objects. The result specifies whether the values of the X or Y properties of the two CvPoint2D32f objects are unequal. - /// - /// A Point to compare. - /// A Point to compare. - /// This operator returns true if the values of either the X properties or the Y properties of left and right differ; otherwise, false. - public static bool operator !=(Point3d lhs, Point3d rhs) - { - return !lhs.Equals(rhs); - } - - #endregion - - #region + / - - /// /// Unary plus operator /// @@ -170,44 +127,4 @@ public Point3d(double x, double y, double z) public readonly Point3d Multiply(double scale) => new(X * scale, Y * scale, Z * scale); #endregion - - #endregion - - #region Override - - /// - public readonly bool Equals(Point3d other) - { - return X.Equals(other.X) && Y.Equals(other.Y) && Z.Equals(other.Z); - } - - /// - public override readonly bool Equals(object? obj) - { - return obj is Point3d other && Equals(other); - } - - /// - public override readonly int GetHashCode() - { -#if DOTNET_FRAMEWORK || NETSTANDARD2_0 - unchecked - { - var hashCode = X.GetHashCode(); - hashCode = (hashCode * 397) ^ Y.GetHashCode(); - hashCode = (hashCode * 397) ^ Z.GetHashCode(); - return hashCode; - } -#else - return HashCode.Combine(X, Y, Z); -#endif - } - - /// - public override readonly string ToString() - { - return $"(x:{X} y:{Y} z:{Z})"; - } - - #endregion } diff --git a/src/OpenCvSharp/Modules/core/Struct/Point3f.cs b/src/OpenCvSharp/Modules/core/Struct/Point3f.cs index 8713a8975..76423a7c8 100644 --- a/src/OpenCvSharp/Modules/core/Struct/Point3f.cs +++ b/src/OpenCvSharp/Modules/core/Struct/Point3f.cs @@ -1,45 +1,30 @@ -using System; -using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.CodeAnalysis; using System.Runtime.InteropServices; namespace OpenCvSharp; -/// -/// +/// /// /// [Serializable] [StructLayout(LayoutKind.Sequential)] [SuppressMessage("Design", "CA1051: Do not declare visible instance fields")] // ReSharper disable once InconsistentNaming -public struct Point3f : IEquatable +public record struct Point3f(float X, float Y, float Z) { /// /// /// - public float X; + public float X = X; /// /// /// - public float Y; + public float Y = Y; /// /// /// - public float Z; - - /// - /// Constructor - /// - /// - /// - /// - public Point3f(float x, float y, float z) - { - X = x; - Y = y; - Z = z; - } + public float Z = Z; #region Cast @@ -70,35 +55,7 @@ public Point3f(float x, float y, float z) #endregion #region Operators - - #region == / != - - /// - /// Compares two CvPoint objects. The result specifies whether the values of the X and Y properties of the two CvPoint objects are equal. - /// - /// A Point to compare. - /// A Point to compare. - /// This operator returns true if the X and Y values of left and right are equal; otherwise, false. - public static bool operator ==(Point3f lhs, Point3f rhs) - { - return lhs.Equals(rhs); - } - - /// - /// Compares two CvPoint2D32f objects. The result specifies whether the values of the X or Y properties of the two CvPoint2D32f objects are unequal. - /// - /// A Point to compare. - /// A Point to compare. - /// This operator returns true if the values of either the X properties or the Y properties of left and right differ; otherwise, false. - public static bool operator !=(Point3f lhs, Point3f rhs) - { - return !lhs.Equals(rhs); - } - - #endregion - - #region + / - - + /// /// Unary plus operator /// @@ -172,45 +129,4 @@ public readonly Point3f Multiply(double scale) public static Point3f operator *(Point3f pt, double scale) => pt.Multiply(scale); #endregion - - #endregion - - #region Override - - /// - public readonly bool Equals(Point3f other) - { - return X.Equals(other.X) && Y.Equals(other.Y) && Z.Equals(other.Z); - } - - /// - public override readonly bool Equals(object? obj) - { - return obj is Point3f other && Equals(other); - } - - /// - public override readonly int GetHashCode() - { -#if DOTNET_FRAMEWORK || NETSTANDARD2_0 - unchecked - { - var hashCode = X.GetHashCode(); - hashCode = (hashCode * 397) ^ Y.GetHashCode(); - hashCode = (hashCode * 397) ^ Z.GetHashCode(); - return hashCode; - } -#else - return HashCode.Combine(X, Y, Z); -#endif - } - - /// - public override readonly string ToString() - { - return $"(x:{X} y:{Y} z:{Z})"; - } - - #endregion - } diff --git a/src/OpenCvSharp/Modules/core/Struct/Point3i.cs b/src/OpenCvSharp/Modules/core/Struct/Point3i.cs index 13c20a46e..6dd154357 100644 --- a/src/OpenCvSharp/Modules/core/Struct/Point3i.cs +++ b/src/OpenCvSharp/Modules/core/Struct/Point3i.cs @@ -1,5 +1,4 @@ -using System; -using System.Runtime.InteropServices; +using System.Runtime.InteropServices; #pragma warning disable CA1051 @@ -11,35 +10,22 @@ namespace OpenCvSharp; [Serializable] [StructLayout(LayoutKind.Sequential)] // ReSharper disable once InconsistentNaming -public struct Point3i : IEquatable +public record struct Point3i(int X, int Y, int Z) { /// /// /// - public int X; + public int X = X; /// /// /// - public int Y; + public int Y = Y; /// /// /// - public int Z; - - /// - /// - /// - /// - /// - /// - public Point3i(int x, int y, int z) - { - X = x; - Y = y; - Z = z; - } + public int Z = Z; #region Cast @@ -61,34 +47,6 @@ public Point3i(int x, int y, int z) #region Operators - #region == / != - - /// - /// Compares two CvPoint objects. The result specifies whether the values of the X and Y properties of the two CvPoint objects are equal. - /// - /// A Point to compare. - /// A Point to compare. - /// This operator returns true if the X and Y values of left and right are equal; otherwise, false. - public static bool operator ==(Point3i lhs, Point3i rhs) - { - return lhs.Equals(rhs); - } - - /// - /// Compares two CvPoint2D32f objects. The result specifies whether the values of the X or Y properties of the two CvPoint2D32f objects are unequal. - /// - /// A Point to compare. - /// A Point to compare. - /// This operator returns true if the values of either the X properties or the Y properties of left and right differ; otherwise, false. - public static bool operator !=(Point3i lhs, Point3i rhs) - { - return !lhs.Equals(rhs); - } - - #endregion - - #region + / - - /// /// Unary plus operator /// @@ -164,44 +122,4 @@ public Point3i(int x, int y, int z) public readonly Point3i Multiply(double scale) => new ((int)(X * scale), (int)(Y * scale), (int)(Z * scale)); #endregion - - #endregion - - #region Override - - /// - public readonly bool Equals(Point3i other) - { - return X == other.X && Y == other.Y && Z == other.Z; - } - - /// - public override readonly bool Equals(object? obj) - { - return obj is Point3i other && Equals(other); - } - - /// - public override readonly int GetHashCode() - { -#if DOTNET_FRAMEWORK || NETSTANDARD2_0 - unchecked - { - var hashCode = X; - hashCode = (hashCode * 397) ^ Y; - hashCode = (hashCode * 397) ^ Z; - return hashCode; - } -#else - return HashCode.Combine(X, Y, Z); -#endif - } - - /// - public override readonly string ToString() - { - return $"(x:{X} y:{Y} z:{Z})"; - } - - #endregion } diff --git a/src/OpenCvSharp/Modules/core/Struct/Range.cs b/src/OpenCvSharp/Modules/core/Struct/Range.cs index b7b54a000..a1767d2b1 100644 --- a/src/OpenCvSharp/Modules/core/Struct/Range.cs +++ b/src/OpenCvSharp/Modules/core/Struct/Range.cs @@ -1,5 +1,4 @@ -using System; -using System.Runtime.InteropServices; +using System.Runtime.InteropServices; #pragma warning disable CA1051 @@ -10,74 +9,20 @@ namespace OpenCvSharp; /// [Serializable] [StructLayout(LayoutKind.Sequential)] -public readonly struct Range : IEquatable +public readonly record struct Range(int Start, int End) { /// /// /// - public readonly int Start; + public readonly int Start = Start; /// /// /// - public readonly int End; + public readonly int End = End; /// /// /// - /// - /// - public Range(int start, int end) - { - Start = start; - End = end; - } - - /// - /// - /// - public static Range All => new Range(int.MinValue, int.MaxValue); - - /// - public readonly bool Equals(Range other) - { - return Start == other.Start && End == other.End; - } - - /// - public override readonly bool Equals(object? obj) - { - return obj is Range other && Equals(other); - } - - /// - public override readonly int GetHashCode() - { - unchecked - { - return (Start * 397) ^ End; - } - } - - /// - /// - /// - /// - /// - /// - public static bool operator ==(Range left, Range right) - { - return left.Equals(right); - } - - /// - /// - /// - /// - /// - /// - public static bool operator !=(Range left, Range right) - { - return !(left == right); - } + public static Range All => new(int.MinValue, int.MaxValue); } diff --git a/src/OpenCvSharp/Modules/core/Struct/Rangef.cs b/src/OpenCvSharp/Modules/core/Struct/Rangef.cs index 14d232072..ee0ed903f 100644 --- a/src/OpenCvSharp/Modules/core/Struct/Rangef.cs +++ b/src/OpenCvSharp/Modules/core/Struct/Rangef.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.CodeAnalysis; using System.Runtime.InteropServices; namespace OpenCvSharp; @@ -11,29 +10,17 @@ namespace OpenCvSharp; [StructLayout(LayoutKind.Sequential)] [SuppressMessage("Design", "CA1051: Do not declare visible instance fields")] // ReSharper disable once IdentifierTypo -public readonly struct Rangef : IEquatable +public readonly record struct Rangef(float Start, float End) { /// /// /// - public readonly float Start; + public readonly float Start = Start; /// /// /// - public readonly float End; - - /// - /// Constructor - /// - /// - /// - // ReSharper disable once IdentifierTypo - public Rangef(float start, float end) - { - Start = start; - End = end; - } + public readonly float End = End; /// /// Convert to Range @@ -52,40 +39,4 @@ public Rangef(float start, float end) /// Range(int.MinValue, int.MaxValue) /// public static Range All => new (int.MinValue, int.MaxValue); - -#pragma warning disable CS1591 - public bool Equals(Rangef other) - { - return Start.Equals(other.Start) && End.Equals(other.End); - } - - public override bool Equals(object? obj) - { - return obj is Rangef other && Equals(other); - } - - public override int GetHashCode() - { -#if DOTNET_FRAMEWORK || NETSTANDARD2_0 - unchecked - { - var hashCode = Start.GetHashCode(); - hashCode = (hashCode * 397) ^ End.GetHashCode(); - return hashCode; - } -#else - return HashCode.Combine(Start, End); -#endif - } - - public static bool operator ==(Rangef left, Rangef right) - { - return left.Equals(right); - } - - public static bool operator !=(Rangef left, Rangef right) - { - return !left.Equals(right); - } -#pragma warning restore CS1591 } diff --git a/src/OpenCvSharp/Modules/core/Struct/Rect.cs b/src/OpenCvSharp/Modules/core/Struct/Rect.cs index 9ab0364ea..87521f222 100644 --- a/src/OpenCvSharp/Modules/core/Struct/Rect.cs +++ b/src/OpenCvSharp/Modules/core/Struct/Rect.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.CodeAnalysis; using System.Runtime.InteropServices; #pragma warning disable CA1051 @@ -9,53 +8,33 @@ namespace OpenCvSharp; /// /// Stores a set of four integers that represent the location and size of a rectangle /// +/// The x-coordinate of the upper-left corner of the rectangle. +/// The y-coordinate of the upper-left corner of the rectangle. +/// The width of the rectangle. +/// The height of the rectangle. [Serializable] [StructLayout(LayoutKind.Sequential)] -public struct Rect : IEquatable +public record struct Rect(int X, int Y, int Width, int Height) { - #region Field - /// - /// + /// The x-coordinate of the upper-left corner of the rectangle. /// - public int X; + public int X = X; /// - /// + /// The y-coordinate of the upper-left corner of the rectangle. /// - public int Y; + public int Y = Y; /// - /// + /// The width of the rectangle. /// - public int Width; + public int Width = Width; /// - /// + /// The height of the rectangle. /// - public int Height; - - /// - /// Represents a Rect structure with its properties left uninitialized. - /// - public static readonly Rect Empty; - - #endregion - - /// - /// Initializes a new instance of the Rectangle class with the specified location and size. - /// - /// The x-coordinate of the upper-left corner of the rectangle. - /// The y-coordinate of the upper-left corner of the rectangle. - /// The width of the rectangle. - /// The height of the rectangle. - public Rect(int x, int y, int width, int height) - { - X = x; - Y = y; - Width = width; - Height = height; - } + public int Height = Height; /// /// Initializes a new instance of the Rectangle class with the specified location and size. @@ -63,11 +42,8 @@ public Rect(int x, int y, int width, int height) /// A Point that represents the upper-left corner of the rectangular region. /// A Size that represents the width and height of the rectangular region. public Rect(Point location, Size size) + : this(location.X, location.Y, size.Width, size.Height) { - X = location.X; - Y = location.Y; - Width = size.Width; - Height = size.Height; } /// @@ -97,32 +73,6 @@ public static Rect FromLTRB(int left, int top, int right, int bottom) #region Operators - #region == / != - - /// - /// Compares two Rect objects. The result specifies whether the members of each object are equal. - /// - /// A Point to compare. - /// A Point to compare. - /// This operator returns true if the members of left and right are equal; otherwise, false. - public static bool operator ==(Rect lhs, Rect rhs) - { - return lhs.Equals(rhs); - } - - /// - /// Compares two Rect objects. The result specifies whether the members of each object are unequal. - /// - /// A Point to compare. - /// A Point to compare. - /// This operator returns true if the members of left and right are unequal; otherwise, false. - public static bool operator !=(Rect lhs, Rect rhs) - { - return !lhs.Equals(rhs); - } - - #endregion - #region + / - /// @@ -138,7 +88,12 @@ public static Rect FromLTRB(int left, int top, int right, int bottom) /// /// /// - public readonly Rect Add(Point pt) => new (X + pt.X, Y + pt.Y, Width, Height); + public readonly Rect Add(Point pt) + => this with + { + X = X + pt.X, + Y = Y + pt.Y + }; /// /// Shifts rectangle by a certain offset @@ -147,16 +102,23 @@ public static Rect FromLTRB(int left, int top, int right, int bottom) /// /// public static Rect operator -(Rect rect, Point pt) - { - return new (rect.X - pt.X, rect.Y - pt.Y, rect.Width, rect.Height); - } + => rect with + { + X = rect.X - pt.X, + Y = rect.Y - pt.Y + }; /// /// Shifts rectangle by a certain offset /// /// /// - public readonly Rect Subtract(Point pt) => new(X - pt.X, Y - pt.Y, Width, Height); + public readonly Rect Subtract(Point pt) + => this with + { + X = X - pt.X, + Y = Y - pt.Y + }; /// /// Expands or shrinks rectangle by a certain amount @@ -164,17 +126,23 @@ public static Rect FromLTRB(int left, int top, int right, int bottom) /// /// /// - public static Rect operator +(Rect rect, Size size) - { - return new (rect.X, rect.Y, rect.Width + size.Width, rect.Height + size.Height); - } + public static Rect operator +(Rect rect, Size size) => + rect with + { + Width = rect.Width + size.Width, + Height = rect.Height + size.Height + }; /// /// Expands or shrinks rectangle by a certain amount /// /// /// - public readonly Rect Add(Size size) => new (X, Y, Width + size.Width, Height + size.Height); + public readonly Rect Add(Size size) => this with + { + Width = Width + size.Width, + Height = Height + size.Height + }; /// /// Expands or shrinks rectangle by a certain amount @@ -182,17 +150,24 @@ public static Rect FromLTRB(int left, int top, int right, int bottom) /// /// /// - public static Rect operator -(Rect rect, Size size) - { - return new Rect(rect.X, rect.Y, rect.Width - size.Width, rect.Height - size.Height); - } + public static Rect operator -(Rect rect, Size size) => + rect with + { + Width = rect.Width - size.Width, + Height = rect.Height - size.Height + }; /// /// Expands or shrinks rectangle by a certain amount /// /// /// - public readonly Rect Subtract(Size size) => new(X, Y, Width - size.Width, Height - size.Height); + public readonly Rect Subtract(Size size) + => this with + { + Width = Width - size.Width, + Height = Height - size.Height + }; #endregion @@ -206,9 +181,7 @@ public static Rect FromLTRB(int left, int top, int right, int bottom) /// [SuppressMessage("Microsoft.Design", "CA2225: Operator overloads have named alternates")] public static Rect operator &(Rect a, Rect b) - { - return Intersect(a, b); - } + => Intersect(a, b); /// /// Gets a Rect structure that contains the union of two Rect structures. @@ -218,9 +191,7 @@ public static Rect FromLTRB(int left, int top, int right, int bottom) /// [SuppressMessage("Microsoft.Design", "CA2225: Operator overloads have named alternates")] public static Rect operator |(Rect a, Rect b) - { - return Union(a, b); - } + => Union(a, b); #endregion @@ -233,7 +204,7 @@ public static Rect FromLTRB(int left, int top, int right, int bottom) /// public int Top { - get => Y; + readonly get => Y; set => Y = value; } @@ -261,7 +232,7 @@ public int Left /// public Point Location { - get => new (X, Y); + get => new(X, Y); set { X = value.X; @@ -274,7 +245,7 @@ public Point Location /// public Size Size { - get => new (Width, Height); + get => new(Width, Height); set { Width = value.Width; @@ -285,12 +256,12 @@ public Size Size /// /// Coordinate of the left-most rectangle corner [Point(X, Y)] /// - public Point TopLeft => new (X, Y); + public Point TopLeft => new(X, Y); /// /// Coordinate of the right-most rectangle corner [Point(X+Width, Y+Height)] /// - public Point BottomRight => new (X + Width, Y + Height); + public Point BottomRight => new(X + Width, Y + Height); #endregion @@ -303,9 +274,7 @@ public Size Size /// y-coordinate of the point /// public readonly bool Contains(int x, int y) - { - return (X <= x && Y <= y && X + Width > x && Y + Height > y); - } + => (X <= x && Y <= y && X + Width > x && Y + Height > y); /// /// Determines if the specified point is contained within the rectangular region defined by this Rectangle. @@ -313,22 +282,18 @@ public readonly bool Contains(int x, int y) /// point /// public readonly bool Contains(Point pt) - { - return Contains(pt.X, pt.Y); - } + => Contains(pt.X, pt.Y); /// /// Determines if the specified rectangle is contained within the rectangular region defined by this Rectangle. /// /// rectangle /// - public readonly bool Contains(Rect rect) - { - return X <= rect.X && - (rect.X + rect.Width) <= (X + Width) && - Y <= rect.Y && - (rect.Y + rect.Height) <= (Y + Height); - } + public readonly bool Contains(Rect rect) => + X <= rect.X && + (rect.X + rect.Width) <= (X + Width) && + Y <= rect.Y && + (rect.Y + rect.Height) <= (Y + Height); /// /// Inflates this Rect by the specified amount. @@ -339,18 +304,15 @@ public void Inflate(int width, int height) { X -= width; Y -= height; - Width += (2*width); - Height += (2*height); + Width += (2 * width); + Height += (2 * height); } /// /// Inflates this Rect by the specified amount. /// /// The amount to inflate this rectangle. - public void Inflate(Size size) - { - Inflate(size.Width, size.Height); - } + public void Inflate(Size size) => Inflate(size.Width, size.Height); /// /// Creates and returns an inflated copy of the specified Rect structure. @@ -380,7 +342,7 @@ public static Rect Intersect(Rect a, Rect b) if (x2 >= x1 && y2 >= y1) return new Rect(x1, y1, x2 - x1, y2 - y1); - return Empty; + return default; } /// @@ -388,35 +350,26 @@ public static Rect Intersect(Rect a, Rect b) /// /// A rectangle to intersect. /// - public readonly Rect Intersect(Rect rect) - { - return Intersect(this, rect); - } + public readonly Rect Intersect(Rect rect) => Intersect(this, rect); /// /// Determines if this rectangle intersects with rect. /// /// Rectangle /// - public readonly bool IntersectsWith(Rect rect) - { - return - (X < rect.X + rect.Width) && - (X + Width > rect.X) && - (Y < rect.Y + rect.Height) && - (Y + Height > rect.Y); - } + public readonly bool IntersectsWith(Rect rect) => + (X < rect.X + rect.Width) && + (X + Width > rect.X) && + (Y < rect.Y + rect.Height) && + (Y + Height > rect.Y); /// /// Gets a Rect structure that contains the union of two Rect structures. /// /// A rectangle to union. /// - public readonly Rect Union(Rect rect) - { - return Union(this, rect); - } - + public readonly Rect Union(Rect rect) => Union(this, rect); + /// /// Gets a Rect structure that contains the union of two Rect structures. /// @@ -432,37 +385,6 @@ public static Rect Union(Rect a, Rect b) return new Rect(x1, y1, x2 - x1, y2 - y1); } - - /// - public readonly bool Equals(Rect other) - { - return X == other.X && Y == other.Y && Width == other.Width && Height == other.Height; - } - - /// - public override readonly bool Equals(object? obj) - { - return obj is Rect other && Equals(other); - } - - /// - public override readonly int GetHashCode() - { - unchecked - { - var hashCode = X; - hashCode = (hashCode * 397) ^ Y; - hashCode = (hashCode * 397) ^ Width; - hashCode = (hashCode * 397) ^ Height; - return hashCode; - } - } - - /// - public override readonly string ToString() - { - return $"(x:{X} y:{Y} width:{Width} height:{Height})"; - } #endregion } diff --git a/src/OpenCvSharp/Modules/core/Struct/Rect2d.cs b/src/OpenCvSharp/Modules/core/Struct/Rect2d.cs index 9758e6fd7..b0994e30f 100644 --- a/src/OpenCvSharp/Modules/core/Struct/Rect2d.cs +++ b/src/OpenCvSharp/Modules/core/Struct/Rect2d.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.CodeAnalysis; using System.Runtime.InteropServices; #pragma warning disable CA1051 @@ -7,58 +6,43 @@ namespace OpenCvSharp; /// -/// +/// Stores a set of four double-precision floating-point numbers that represent the location and size of a rectangle /// +/// The x-coordinate of the upper-left corner of the rectangle. +/// The y-coordinate of the upper-left corner of the rectangle. +/// The width of the rectangle. +/// The height of the rectangle. [Serializable] [StructLayout(LayoutKind.Sequential)] -public struct Rect2d : IEquatable +public record struct Rect2d(double X, double Y, double Width, double Height) { /// - /// - /// - public double X; - - /// - /// + /// The x-coordinate of the upper-left corner of the rectangle. /// - public double Y; + public double X = X; /// - /// + /// The y-coordinate of the upper-left corner of the rectangle. /// - public double Width; + public double Y = Y; /// - /// + /// The width of the rectangle. /// - public double Height; + public double Width = Width; /// - /// Represents a Rect2d structure with its properties left uninitialized. + /// The height of the rectangle. /// - public static readonly Rect2d Empty; - - /// - /// Constructor - /// - /// - /// - /// - /// - public Rect2d(double x, double y, double width, double height) - { - X = x; - Y = y; - Width = width; - Height = height; - } - + public double Height = Height; + /// /// Constructor /// /// /// public Rect2d(Point2d location, Size2d size) + : this(location.X, location.Y, size.Width, size.Height) { X = location.X; Y = location.Y; @@ -93,32 +77,6 @@ public static Rect2d FromLTRB(double left, double top, double right, double bott #region Operators - #region == / != - - /// - /// Compares two Rect2d objects. The result specifies whether the members of each object are equal. - /// - /// A Point to compare. - /// A Point to compare. - /// This operator returns true if the members of left and right are equal; otherwise, false. - public static bool operator ==(Rect2d lhs, Rect2d rhs) - { - return lhs.Equals(rhs); - } - - /// - /// Compares two Rect2d objects. The result specifies whether the members of each object are unequal. - /// - /// A Point to compare. - /// A Point to compare. - /// This operator returns true if the members of left and right are unequal; otherwise, false. - public static bool operator !=(Rect2d lhs, Rect2d rhs) - { - return !lhs.Equals(rhs); - } - - #endregion - #region + / - /// @@ -127,14 +85,20 @@ public static Rect2d FromLTRB(double left, double top, double right, double bott /// /// /// - public static Rect2d operator +(Rect2d rect, Point2d pt) => rect.Add(pt); + public static Rect2d operator +(Rect2d rect, Point2d pt) + => rect.Add(pt); /// /// Shifts rectangle by a certain offset /// /// /// - public readonly Rect2d Add(Point2d pt) => new (X + pt.X, Y + pt.Y, Width, Height); + public readonly Rect2d Add(Point2d pt) + => this with + { + X = X + pt.X, + Y = Y + pt.Y + }; /// /// Shifts rectangle by a certain offset @@ -142,14 +106,20 @@ public static Rect2d FromLTRB(double left, double top, double right, double bott /// /// /// - public static Rect2d operator -(Rect2d rect, Point2d pt) => rect.Subtract(pt); + public static Rect2d operator -(Rect2d rect, Point2d pt) + => rect.Subtract(pt); /// /// Shifts rectangle by a certain offset /// /// /// - public readonly Rect2d Subtract(Point2d pt) => new(X - pt.X, Y - pt.Y, Width, Height); + public readonly Rect2d Subtract(Point2d pt) + => this with + { + X = X - pt.X, + Y = Y - pt.Y + }; /// /// Expands or shrinks rectangle by a certain amount @@ -158,16 +128,23 @@ public static Rect2d FromLTRB(double left, double top, double right, double bott /// /// public static Rect2d operator +(Rect2d rect, Size2d size) - { - return new (rect.X, rect.Y, rect.Width + size.Width, rect.Height + size.Height); - } + => rect with + { + Width = rect.Width + size.Width, + Height = rect.Height + size.Height + }; /// /// Shifts rectangle by a certain offset /// /// /// - public readonly Rect2d Add(Size2d size) => new(X, Y, Width + size.Width, Height + size.Height); + public readonly Rect2d Add(Size2d size) + => this with + { + Width = Width + size.Width, + Height = Height + size.Height + }; /// /// Expands or shrinks rectangle by a certain amount @@ -176,16 +153,23 @@ public static Rect2d FromLTRB(double left, double top, double right, double bott /// /// public static Rect2d operator -(Rect2d rect, Size2d size) - { - return new (rect.X, rect.Y, rect.Width - size.Width, rect.Height - size.Height); - } + => rect with + { + Width = rect.Width - size.Width, + Height = rect.Height - size.Height + }; /// /// Shifts rectangle by a certain offset /// /// /// - public readonly Rect2d Subtract(Size2d size) => new(X, Y, Width - size.Width, Height - size.Height); + public readonly Rect2d Subtract(Size2d size) + => this with + { + Width = Width - size.Width, + Height = Height - size.Height + }; #endregion @@ -199,9 +183,7 @@ public static Rect2d FromLTRB(double left, double top, double right, double bott /// [SuppressMessage("Microsoft.Design", "CA2225: Operator overloads have named alternates")] public static Rect2d operator &(Rect2d a, Rect2d b) - { - return Intersect(a, b); - } + => Intersect(a, b); /// /// Gets a Rect2d structure that contains the union of two Rect2d structures. @@ -211,9 +193,7 @@ public static Rect2d FromLTRB(double left, double top, double right, double bott /// [SuppressMessage("Microsoft.Design", "CA2225: Operator overloads have named alternates")] public static Rect2d operator |(Rect2d a, Rect2d b) - { - return Union(a, b); - } + => Union(a, b); #endregion @@ -226,35 +206,35 @@ public static Rect2d FromLTRB(double left, double top, double right, double bott /// public double Top { - get => Y; + readonly get => Y; set => Y = value; } /// /// Gets the y-coordinate that is the sum of the Y and Height property values of this Rect2d structure. /// - public double Bottom => Y + Height; + public readonly double Bottom => Y + Height; /// /// Gets the x-coordinate of the left edge of this Rect2d structure. /// public double Left { - get => X; + readonly get => X; set => X = value; } /// /// Gets the x-coordinate that is the sum of X and Width property values of this Rect2d structure. /// - public double Right => X + Width; + public readonly double Right => X + Width; /// /// Coordinate of the left-most rectangle corner [Point2d(X, Y)] /// public Point2d Location { - get => new (X, Y); + readonly get => new(X, Y); set { X = value.X; @@ -267,7 +247,7 @@ public Point2d Location /// public Size2d Size { - get => new (Width, Height); + readonly get => new(Width, Height); set { Width = value.Width; @@ -278,12 +258,12 @@ public Size2d Size /// /// Coordinate of the left-most rectangle corner [Point2d(X, Y)] /// - public Point2d TopLeft => new (X, Y); + public readonly Point2d TopLeft => new(X, Y); /// /// Coordinate of the right-most rectangle corner [Point2d(X+Width, Y+Height)] /// - public Point2d BottomRight => new (X + Width, Y + Height); + public readonly Point2d BottomRight => new(X + Width, Y + Height); #endregion @@ -294,9 +274,7 @@ public Size2d Size /// /// public readonly Rect ToRect() - { - return new ((int) X, (int) Y, (int) Width, (int) Height); - } + => new((int)X, (int)Y, (int)Width, (int)Height); /// /// Determines if the specified point is contained within the rectangular region defined by this Rectangle. @@ -305,9 +283,7 @@ public readonly Rect ToRect() /// y-coordinate of the point /// public readonly bool Contains(double x, double y) - { - return (X <= x && Y <= y && X + Width > x && Y + Height > y); - } + => (X <= x && Y <= y && X + Width > x && Y + Height > y); /// /// Determines if the specified point is contained within the rectangular region defined by this Rectangle. @@ -315,23 +291,19 @@ public readonly bool Contains(double x, double y) /// point /// public readonly bool Contains(Point2d pt) - { - return Contains(pt.X, pt.Y); - } + => Contains(pt.X, pt.Y); /// /// Determines if the specified rectangle is contained within the rectangular region defined by this Rectangle. /// /// rectangle /// - public readonly bool Contains(Rect2d rect) - { - return X <= rect.X && - (rect.X + rect.Width) <= (X + Width) && - Y <= rect.Y && - (rect.Y + rect.Height) <= (Y + Height); - } - + public readonly bool Contains(Rect2d rect) => + X <= rect.X && + (rect.X + rect.Width) <= (X + Width) && + Y <= rect.Y && + (rect.Y + rect.Height) <= (Y + Height); + /// /// Inflates this Rect by the specified amount. /// @@ -349,10 +321,7 @@ public void Inflate(double width, double height) /// Inflates this Rect by the specified amount. /// /// The amount to inflate this rectangle. - public void Inflate(Size2d size) - { - Inflate(size.Width, size.Height); - } + public void Inflate(Size2d size) => Inflate(size.Width, size.Height); /// /// Creates and returns an inflated copy of the specified Rect2d structure. @@ -382,7 +351,7 @@ public static Rect2d Intersect(Rect2d a, Rect2d b) if (x2 >= x1 && y2 >= y1) return new Rect2d(x1, y1, x2 - x1, y2 - y1); - return Empty; + return default; } /// @@ -390,34 +359,25 @@ public static Rect2d Intersect(Rect2d a, Rect2d b) /// /// A rectangle to intersect. /// - public readonly Rect2d Intersect(Rect2d rect) - { - return Intersect(this, rect); - } + public readonly Rect2d Intersect(Rect2d rect) => Intersect(this, rect); /// /// Determines if this rectangle intersects with rect. /// /// Rectangle /// - public readonly bool IntersectsWith(Rect2d rect) - { - return - (X < rect.X + rect.Width) && - (X + Width > rect.X) && - (Y < rect.Y + rect.Height) && - (Y + Height > rect.Y); - } + public readonly bool IntersectsWith(Rect2d rect) => + (X < rect.X + rect.Width) && + (X + Width > rect.X) && + (Y < rect.Y + rect.Height) && + (Y + Height > rect.Y); /// /// Gets a Rect2d structure that contains the union of two Rect2d structures. /// /// A rectangle to union. /// - public readonly Rect2d Union(Rect2d rect) - { - return Union(this, rect); - } + public readonly Rect2d Union(Rect2d rect) => Union(this, rect); /// /// Gets a Rect2d structure that contains the union of two Rect2d structures. @@ -434,37 +394,6 @@ public static Rect2d Union(Rect2d a, Rect2d b) return new Rect2d(x1, y1, x2 - x1, y2 - y1); } - - /// - public readonly bool Equals(Rect2d other) - { - return X.Equals(other.X) && Y.Equals(other.Y) && Width.Equals(other.Width) && Height.Equals(other.Height); - } - - /// - public override readonly bool Equals(object? obj) - { - return obj is Rect2d other && Equals(other); - } - - /// - public override readonly int GetHashCode() - { - unchecked - { - var hashCode = X.GetHashCode(); - hashCode = (hashCode * 397) ^ Y.GetHashCode(); - hashCode = (hashCode * 397) ^ Width.GetHashCode(); - hashCode = (hashCode * 397) ^ Height.GetHashCode(); - return hashCode; - } - } - - /// - public override readonly string ToString() - { - return $"(x:{X} y:{Y} width:{Width} height:{Height})"; - } #endregion } diff --git a/src/OpenCvSharp/Modules/core/Struct/Rect2f.cs b/src/OpenCvSharp/Modules/core/Struct/Rect2f.cs index 7cd698e1d..94fe4a1a4 100644 --- a/src/OpenCvSharp/Modules/core/Struct/Rect2f.cs +++ b/src/OpenCvSharp/Modules/core/Struct/Rect2f.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.CodeAnalysis; using System.Runtime.InteropServices; namespace OpenCvSharp; @@ -7,45 +6,43 @@ namespace OpenCvSharp; /// /// A rectangle with float type coordinates in 2D space /// +/// The x-coordinate of the upper-left corner of the rectangle. +/// The y-coordinate of the upper-left corner of the rectangle. +/// The width of the rectangle. +/// The height of the rectangle. [Serializable] [StructLayout(LayoutKind.Sequential)] [SuppressMessage("Design", "CA1051: Do not declare visible instance fields")] // ReSharper disable once InconsistentNaming -public struct Rect2f : IEquatable +public record struct Rect2f(float X, float Y, float Width, float Height) { -#pragma warning disable 1591 - public float X; - public float Y; - public float Width; - public float Height; -#pragma warning restore 1591 + /// + /// The x-coordinate of the upper-left corner of the rectangle. + /// + public float X = X; /// - /// Represents a Rect2f structure with its properties left uninitialized. + /// The y-coordinate of the upper-left corner of the rectangle. /// - public static readonly Rect2f Empty; + public float Y = Y; /// - /// Constructor + /// The width of the rectangle. /// - /// - /// - /// - /// - public Rect2f(float x, float y, float width, float height) - { - X = x; - Y = y; - Width = width; - Height = height; - } + public float Width = Width; + /// + /// The height of the rectangle. + /// + public float Height = Height; + /// /// Constructor /// /// /// public Rect2f(Point2f location, Size2f size) + : this(location.X, location.Y, size.Width, size.Height) { X = location.X; Y = location.Y; @@ -80,32 +77,6 @@ public static Rect2f FromLTRB(float left, float top, float right, float bottom) #region Operators - #region == / != - - /// - /// Compares two Rect2f objects. The result specifies whether the members of each object are equal. - /// - /// A Point to compare. - /// A Point to compare. - /// This operator returns true if the members of left and right are equal; otherwise, false. - public static bool operator ==(Rect2f lhs, Rect2f rhs) - { - return lhs.Equals(rhs); - } - - /// - /// Compares two Rect2f objects. The result specifies whether the members of each object are unequal. - /// - /// A Point to compare. - /// A Point to compare. - /// This operator returns true if the members of left and right are unequal; otherwise, false. - public static bool operator !=(Rect2f lhs, Rect2f rhs) - { - return !lhs.Equals(rhs); - } - - #endregion - #region + / - /// @@ -113,7 +84,12 @@ public static Rect2f FromLTRB(float left, float top, float right, float bottom) /// /// /// - public readonly Rect2f Add(Point2f pt) => new (X + pt.X, Y + pt.Y, Width, Height); + public readonly Rect2f Add(Point2f pt) + => this with + { + X = X + pt.X, + Y = Y + pt.Y + }; /// /// Shifts rectangle by a certain offset @@ -121,14 +97,20 @@ public static Rect2f FromLTRB(float left, float top, float right, float bottom) /// /// /// - public static Rect2f operator +(Rect2f rect, Point2f pt) => rect.Add(pt); + public static Rect2f operator +(Rect2f rect, Point2f pt) + => rect.Add(pt); /// /// Shifts rectangle by a certain offset /// /// /// - public readonly Rect2f Subtract(Point2f pt) => new (X - pt.X, Y - pt.Y, Width, Height); + public readonly Rect2f Subtract(Point2f pt) + => this with + { + X = X - pt.X, + Y = Y - pt.Y + }; /// /// Shifts rectangle by a certain offset @@ -136,14 +118,20 @@ public static Rect2f FromLTRB(float left, float top, float right, float bottom) /// /// /// - public static Rect2f operator -(Rect2f rect, Point2f pt) => rect.Subtract(pt); + public static Rect2f operator -(Rect2f rect, Point2f pt) + => rect.Subtract(pt); /// /// Expands or shrinks rectangle by a certain amount /// /// /// - public readonly Rect2f Add(Size2f size) => new (X, Y, Width + size.Width, Height + size.Height); + public readonly Rect2f Add(Size2f size) + => this with + { + Width = Width + size.Width, + Height = Height + size.Height + }; /// /// Expands or shrinks rectangle by a certain amount @@ -151,14 +139,20 @@ public static Rect2f FromLTRB(float left, float top, float right, float bottom) /// /// /// - public static Rect2f operator +(Rect2f rect, Size2f size) => rect.Add(size); + public static Rect2f operator +(Rect2f rect, Size2f size) + => rect.Add(size); /// /// Expands or shrinks rectangle by a certain amount /// /// /// - public readonly Rect2f Subtract(Size2f size) => new (X, Y, Width - size.Width, Height - size.Height); + public readonly Rect2f Subtract(Size2f size) + => this with + { + Width = Width - size.Width, + Height = Height - size.Height + }; /// /// Expands or shrinks rectangle by a certain amount @@ -166,7 +160,8 @@ public static Rect2f FromLTRB(float left, float top, float right, float bottom) /// /// /// - public static Rect2f operator -(Rect2f rect, Size2f size) => rect.Subtract(size); + public static Rect2f operator -(Rect2f rect, Size2f size) + => rect.Subtract(size); #endregion @@ -179,10 +174,8 @@ public static Rect2f FromLTRB(float left, float top, float right, float bottom) /// A rectangle to intersect. /// [SuppressMessage("Microsoft.Design", "CA2225: Operator overloads have named alternates")] - public static Rect2f operator &(Rect2f a, Rect2f b) - { - return Intersect(a, b); - } + public static Rect2f operator &(Rect2f a, Rect2f b) + => Intersect(a, b); /// /// Gets a Rect2f structure that contains the union of two Rect2f structures. @@ -191,10 +184,8 @@ public static Rect2f FromLTRB(float left, float top, float right, float bottom) /// A rectangle to union. /// [SuppressMessage("Microsoft.Design", "CA2225: Operator overloads have named alternates")] - public static Rect2f operator |(Rect2f a, Rect2f b) - { - return Union(a, b); - } + public static Rect2f operator |(Rect2f a, Rect2f b) + => Union(a, b); #endregion @@ -207,35 +198,35 @@ public static Rect2f FromLTRB(float left, float top, float right, float bottom) /// public float Top { - get => Y; + readonly get => Y; set => Y = value; } /// /// Gets the y-coordinate that is the sum of the Y and Height property values of this Rect2f structure. /// - public float Bottom => Y + Height; + public readonly float Bottom => Y + Height; /// /// Gets the x-coordinate of the left edge of this Rect2f structure. /// public float Left { - get => X; + readonly get => X; set => X = value; } /// /// Gets the x-coordinate that is the sum of X and Width property values of this Rect2f structure. /// - public float Right => X + Width; + public readonly float Right => X + Width; /// /// Coordinate of the left-most rectangle corner [Point2f(X, Y)] /// public Point2f Location { - get => new (X, Y); + readonly get => new(X, Y); set { X = value.X; @@ -248,7 +239,7 @@ public Point2f Location /// public Size2f Size { - get => new (Width, Height); + readonly get => new(Width, Height); set { Width = value.Width; @@ -259,12 +250,12 @@ public Size2f Size /// /// Coordinate of the left-most rectangle corner [Point2f(X, Y)] /// - public Point2f TopLeft => new (X, Y); + public readonly Point2f TopLeft => new(X, Y); /// /// Coordinate of the right-most rectangle corner [Point2f(X+Width, Y+Height)] /// - public Point2f BottomRight => new (X + Width, Y + Height); + public readonly Point2f BottomRight => new(X + Width, Y + Height); #endregion @@ -277,9 +268,7 @@ public Size2f Size /// y-coordinate of the point /// public readonly bool Contains(float x, float y) - { - return (X <= x && Y <= y && X + Width > x && Y + Height > y); - } + => (X <= x && Y <= y && X + Width > x && Y + Height > y); /// /// Determines if the specified point is contained within the rectangular region defined by this Rectangle. @@ -287,22 +276,18 @@ public readonly bool Contains(float x, float y) /// point /// public readonly bool Contains(Point2f pt) - { - return Contains(pt.X, pt.Y); - } + => Contains(pt.X, pt.Y); /// /// Determines if the specified rectangle is contained within the rectangular region defined by this Rectangle. /// /// rectangle /// - public readonly bool Contains(Rect2f rect) - { - return X <= rect.X && - (rect.X + rect.Width) <= (X + Width) && - Y <= rect.Y && - (rect.Y + rect.Height) <= (Y + Height); - } + public readonly bool Contains(Rect2f rect) => + X <= rect.X && + (rect.X + rect.Width) <= (X + Width) && + Y <= rect.Y && + (rect.Y + rect.Height) <= (Y + Height); /// /// Inflates this Rect by the specified amount. @@ -322,9 +307,7 @@ public void Inflate(float width, float height) /// /// The amount to inflate this rectangle. public void Inflate(Size2f size) - { - Inflate(size.Width, size.Height); - } + => Inflate(size.Width, size.Height); /// /// Creates and returns an inflated copy of the specified Rect2f structure. @@ -354,7 +337,7 @@ public static Rect2f Intersect(Rect2f a, Rect2f b) if (x2 >= x1 && y2 >= y1) return new Rect2f(x1, y1, x2 - x1, y2 - y1); - return Empty; + return default; } /// @@ -363,23 +346,18 @@ public static Rect2f Intersect(Rect2f a, Rect2f b) /// A rectangle to intersect. /// public readonly Rect2f Intersect(Rect2f rect) - { - return Intersect(this, rect); - } + => Intersect(this, rect); /// /// Determines if this rectangle intersects with rect. /// /// Rectangle /// - public readonly bool IntersectsWith(Rect2f rect) - { - return - (X < rect.X + rect.Width) && - (X + Width > rect.X) && - (Y < rect.Y + rect.Height) && - (Y + Height > rect.Y); - } + public readonly bool IntersectsWith(Rect2f rect) => + (X < rect.X + rect.Width) && + (X + Width > rect.X) && + (Y < rect.Y + rect.Height) && + (Y + Height > rect.Y); /// /// Gets a Rect2f structure that contains the union of two Rect2f structures. @@ -387,9 +365,7 @@ public readonly bool IntersectsWith(Rect2f rect) /// A rectangle to union. /// public readonly Rect2f Union(Rect2f rect) - { - return Union(this, rect); - } + => Union(this, rect); /// /// Gets a Rect2f structure that contains the union of two Rect2f structures. @@ -406,41 +382,6 @@ public static Rect2f Union(Rect2f a, Rect2f b) return new Rect2f(x1, y1, x2 - x1, y2 - y1); } - - /// - public readonly bool Equals(Rect2f other) - { - return X.Equals(other.X) && Y.Equals(other.Y) && Width.Equals(other.Width) && Height.Equals(other.Height); - } - - /// - public override readonly bool Equals(object? obj) - { - return obj is Rect2f other && Equals(other); - } - - /// - public override readonly int GetHashCode() - { -#if NET48 || NETSTANDARD2_0 - unchecked - { - var hashCode = X.GetHashCode(); - hashCode = (hashCode * 397) ^ Y.GetHashCode(); - hashCode = (hashCode * 397) ^ Width.GetHashCode(); - hashCode = (hashCode * 397) ^ Height.GetHashCode(); - return hashCode; - } -#else - return HashCode.Combine(X, Y, Width, Height); -#endif - } - - /// - public override readonly string ToString() - { - return $"(x:{X} y:{Y} width:{Width} height:{Height})"; - } #endregion } diff --git a/src/OpenCvSharp/Modules/core/Struct/RotatedRect.cs b/src/OpenCvSharp/Modules/core/Struct/RotatedRect.cs index d586c96cb..c203c6ef8 100644 --- a/src/OpenCvSharp/Modules/core/Struct/RotatedRect.cs +++ b/src/OpenCvSharp/Modules/core/Struct/RotatedRect.cs @@ -1,6 +1,7 @@ -using System; +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Runtime.InteropServices; +using OpenCvSharp.Internal; namespace OpenCvSharp; @@ -9,7 +10,7 @@ namespace OpenCvSharp; /// [StructLayout(LayoutKind.Sequential)] [SuppressMessage("Design", "CA1051: Do not declare visible instance fields")] -public struct RotatedRect : IEquatable +public record struct RotatedRect { /// /// the rectangle mass center @@ -39,6 +40,71 @@ public RotatedRect(Point2f center, Size2f size, float angle) Angle = angle; } + /// + /// Any 3 end points of the RotatedRect. They must be given in order (either clockwise or anticlockwise). + /// + public RotatedRect(Point2f point1, Point2f point2, Point2f point3) + { // https://github.com/opencv/opencv/blob/6ad77b23193bdf7e40db83e6077789284ac08781/modules/core/src/types.cpp#LL147C20-L147C20 + var center = (point1 + point3) * 0.5; + var vecs = new Vec2f[2]; + vecs[0] = (point1 - point2).ToVec2f(); + vecs[1] = (point2 - point3).ToVec2f(); + var x = Math.Max(Norm(point1), Math.Max(Norm(point2), Norm(point3))); + var a = Math.Min(Norm(vecs[0]), Norm(vecs[1])); + + const float fltEpsilon = 1.19209290e-7f; // https://github.com/opencv/opencv/blob/6ad77b23193bdf7e40db83e6077789284ac08781/modules/dnn/src/math_utils.hpp#L39 + + // check that given sides are perpendicular + Debug.Assert( + Math.Abs(Ddot(vecs[0], vecs[1])) * a <= fltEpsilon * 9 * x * (Norm(vecs[0]) * Norm(vecs[1]))); + + // wd_i stores which vector (0,1) or (1,2) will make the width + // One of them will definitely have slope within -1 to 1 + var wdI = 0; + if (Math.Abs(vecs[1][1]) < Math.Abs(vecs[1][0])) + { + wdI = 1; + } + var htI = (wdI + 1) % 2; + + var angle = Math.Atan(vecs[wdI][1] / vecs[wdI][0]) * 180.0f / (float)Cv2.PI; + var width = (float)Norm(vecs[wdI]); + var height = (float)Norm(vecs[htI]); + + Center = center; + Size = new(width, height); + Angle = (float)angle; + + static double Ddot(Vec2f a, Vec2f b) + { // https://github.com/opencv/opencv/blob/0052d46b8e33c7bfe0e1450e4bff28b88f455570/modules/core/include/opencv2/core/matx.hpp#L741 + var s = 0d; + for (var i = 0; i < 2; i++) + { + s += (double)a[i] * b[i]; + } + return s; + } + + // core/types.hpp + /* + template static inline + double norm(const Point_<_Tp>& pt) + { + return std::sqrt((double)pt.x*pt.x + (double)pt.y*pt.y); + } + */ + static double Norm(Point2f p) + { + return Math.Sqrt((double)p.X * p.X + (double)p.Y * p.Y); + } + } + + /// + /// Any 3 end points of the RotatedRect. They must be given in order (either clockwise or anticlockwise). + /// + public static RotatedRect FromThreeVertexPoints(Point2f point1, Point2f point2, Point2f point3) + => NativeMethods.core_RotatedRect_byThreeVertexPoints(point1, point2, point3); + /// /// returns 4 vertices of the rectangle /// @@ -79,43 +145,4 @@ public readonly Rect BoundingRect() r.Height -= r.Y - 1; return r; } - -#pragma warning disable CS1591 - - public bool Equals(RotatedRect other) - { - return Center.Equals(other.Center) && Size.Equals(other.Size) && Angle.Equals(other.Angle); - } - - public override bool Equals(object? obj) - { - return obj is RotatedRect other && Equals(other); - } - - public override int GetHashCode() - { -#if DOTNET_FRAMEWORK || NETSTANDARD2_0 - unchecked - { - var hashCode = Center.GetHashCode(); - hashCode = (hashCode * 397) ^ Size.GetHashCode(); - hashCode = (hashCode * 397) ^ Angle.GetHashCode(); - return hashCode; - } -#else - return HashCode.Combine(Center, Size, Angle); -#endif - } - - public static bool operator ==(RotatedRect left, RotatedRect right) - { - return left.Equals(right); - } - - public static bool operator !=(RotatedRect left, RotatedRect right) - { - return !left.Equals(right); - } - -#pragma warning restore CS1591 } diff --git a/src/OpenCvSharp/Modules/core/Struct/Scalar.cs b/src/OpenCvSharp/Modules/core/Struct/Scalar.cs index 3630c3fa0..204903e1e 100644 --- a/src/OpenCvSharp/Modules/core/Struct/Scalar.cs +++ b/src/OpenCvSharp/Modules/core/Struct/Scalar.cs @@ -1,5 +1,4 @@ -using System; -using System.Runtime.InteropServices; +using System.Runtime.InteropServices; using System.Security.Cryptography; #pragma warning disable CA1051 @@ -11,38 +10,37 @@ namespace OpenCvSharp; /// [Serializable] [StructLayout(LayoutKind.Sequential)] -public struct Scalar : IEquatable +public record struct Scalar(double Val0, double Val1, double Val2, double Val3) { #region Field /// /// /// - public double Val0; + public double Val0 = Val0; /// /// /// - public double Val1; + public double Val1 = Val1; /// /// /// - public double Val2; + public double Val2 = Val2; /// /// /// - public double Val3; + public double Val3 = Val3; /// /// /// public double this[int i] { - get - { - return i switch + get => + i switch { 0 => Val0, 1 => Val1, @@ -50,7 +48,6 @@ public double this[int i] 3 => Val3, _ => throw new ArgumentOutOfRangeException(nameof(i)), }; - } set { switch (i) @@ -80,48 +77,33 @@ public double this[int i] /// /// /// - /// - public Scalar(double v0) - : this(v0, 0, 0, 0) + /// + public Scalar(double val0) + : this(val0, 0, 0, 0) { } /// /// /// - /// - /// - public Scalar(double v0, double v1) - : this(v0, v1, 0, 0) + /// + /// + public Scalar(double val0, double val1) + : this(val0, val1, 0, 0) { } /// /// /// - /// - /// - /// - public Scalar(double v0, double v1, double v2) - : this(v0, v1, v2, 0) + /// + /// + /// + public Scalar(double val0, double val1, double val2) + : this(val0, val1, val2, 0) { } - /// - /// - /// - /// - /// - /// - /// - public Scalar(double v0, double v1, double v2, double v3) - { - Val0 = v0; - Val1 = v1; - Val2 = v2; - Val3 = v3; - } - /// /// /// @@ -144,7 +126,7 @@ public static Scalar FromRgb(int r, int g, int b) /// .NET random number generator. This method uses Random.NextBytes() public static Scalar RandomColor(RandomNumberGenerator rng) { - if (rng == null) + if (rng is null) throw new ArgumentNullException(nameof(rng)); var buf = new byte[3]; @@ -185,7 +167,7 @@ public static Scalar RandomColor(RandomNumberGenerator rng) public static Scalar FromRect(Rect p) => new(p.X, p.Y, p.Width, p.Height); // ReSharper restore InconsistentNaming - public static implicit operator Scalar(double val) => FromDouble(val); + public static explicit operator Scalar(double val) => FromDouble(val); public static explicit operator Scalar(DMatch d) => FromDMatch(d); public static explicit operator Scalar(Vec3b v) => FromVec3b(v); public static explicit operator Scalar(Vec3f v) => FromVec3f(v); @@ -206,71 +188,6 @@ public static Scalar RandomColor(RandomNumberGenerator rng) #endregion - #region Override - - /// - public readonly bool Equals(Scalar other) - { - return Val0.Equals(other.Val0) && Val1.Equals(other.Val1) && Val2.Equals(other.Val2) && Val3.Equals(other.Val3); - } - - /// - public override readonly bool Equals(object? obj) - { - return obj is Scalar other && Equals(other); - } - - /// - public override readonly int GetHashCode() - { -#if NET48 || NETSTANDARD2_0 - unchecked - { - var hashCode = Val0.GetHashCode(); - hashCode = (hashCode * 397) ^ Val1.GetHashCode(); - hashCode = (hashCode * 397) ^ Val2.GetHashCode(); - hashCode = (hashCode * 397) ^ Val3.GetHashCode(); - return hashCode; - } -#else - return HashCode.Combine(Val0, Val1, Val2, Val3); -#endif - } - - /// - public override readonly string ToString() - { - return $"[{Val0}, {Val1}, {Val2}, {Val3}]"; - } - - #endregion - - #region Operators - - /// - /// - /// - /// - /// - /// - public static bool operator ==(Scalar s1, Scalar s2) - { - return s1.Equals(s2); - } - - /// - /// - /// - /// - /// - /// - public static bool operator !=(Scalar s1, Scalar s2) - { - return !s1.Equals(s2); - } - - #endregion - #region Methods /// diff --git a/src/OpenCvSharp/Modules/core/Struct/Size.cs b/src/OpenCvSharp/Modules/core/Struct/Size.cs index 8aa695ba0..6fda432a9 100644 --- a/src/OpenCvSharp/Modules/core/Struct/Size.cs +++ b/src/OpenCvSharp/Modules/core/Struct/Size.cs @@ -1,112 +1,47 @@ -using System; -using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.CodeAnalysis; using System.Runtime.InteropServices; namespace OpenCvSharp; /// -/// +/// /// [Serializable] [StructLayout(LayoutKind.Sequential)] [SuppressMessage("Design", "CA1051: Do not declare visible instance fields")] -public struct Size : IEquatable +public record struct Size(int Width, int Height) { /// - /// + /// /// - public int Width; + public int Width = Width; /// - /// + /// /// - public int Height; - - /// - /// Constructor - /// - /// - /// - public Size(int width, int height) - { - Width = width; - Height = height; - } - + public int Height = Height; + /// /// Constructor /// /// /// public Size(double width, double height) + : this((int)width, (int)height) { - Width = (int)width; - Height = (int)height; } - - /// - /// Zero size - /// - public static readonly Size Zero; - - #region Operators - - /// - /// Compares two CvPoint objects. The result specifies whether the members of each object are equal. + +#pragma warning disable CA2225 + /// /// - /// A Point to compare. - /// A Point to compare. - /// This operator returns true if the members of left and right are equal; otherwise, false. - public static bool operator ==(Size lhs, Size rhs) - { - return lhs.Equals(rhs); - } + /// + public static explicit operator Size(Size2d size) + => new(size.Width, size.Height); - /// - /// Compares two CvPoint objects. The result specifies whether the members of each object are unequal. + /// /// - /// A Point to compare. - /// A Point to compare. - /// This operator returns true if the members of left and right are unequal; otherwise, false. - public static bool operator !=(Size lhs, Size rhs) - { - return !lhs.Equals(rhs); - } - - #endregion - - #region Override - - /// - public readonly bool Equals(Size other) - { - return Width == other.Width && Height == other.Height; - } - - /// - public override readonly bool Equals(object? obj) - { - return obj is Size other && Equals(other); - } - - /// - public override readonly int GetHashCode() - { -#if DOTNET_FRAMEWORK || NETSTANDARD2_0 - unchecked - { - return (Width * 397) ^ Height; - } -#else - return HashCode.Combine(Width, Height); -#endif - } - - /// - public override readonly string ToString() - { - return $"(width:{Width} height:{Height})"; - } - #endregion - + /// + public static explicit operator Size(Size2f size) + => new(size.Width, size.Height); +#pragma warning restore CA2225 } diff --git a/src/OpenCvSharp/Modules/core/Struct/Size2d.cs b/src/OpenCvSharp/Modules/core/Struct/Size2d.cs index aa6580e57..8511fd538 100644 --- a/src/OpenCvSharp/Modules/core/Struct/Size2d.cs +++ b/src/OpenCvSharp/Modules/core/Struct/Size2d.cs @@ -1,108 +1,48 @@ -using System; -using System.Runtime.InteropServices; +using System.Runtime.InteropServices; #pragma warning disable CA1051 namespace OpenCvSharp; /// -/// +/// /// [Serializable] [StructLayout(LayoutKind.Sequential)] -public struct Size2d : IEquatable +public record struct Size2d(double Width, double Height) { /// - /// + /// /// - public double Width; + public double Width = Width; /// - /// + /// /// - public double Height; - - /// - /// Constructor + public double Height = Height; + +#pragma warning disable CA2225 + /// /// - /// - /// - public Size2d(float width, float height) - { - Width = width; - Height = height; - } + /// + public static implicit operator Size2d(Size size) + => new(size.Width, size.Height); - /// - /// Constructor + /// /// - /// - /// - public Size2d(double width, double height) - { - Width = width; - Height = height; - } + /// + public static implicit operator Size2d(Size2f size) + => new(size.Width, size.Height); +#pragma warning restore CA2225 - #region Operators - - /// - /// Compares two CvPoint objects. The result specifies whether the members of each object are equal. + /// /// - /// A Point to compare. - /// A Point to compare. - /// This operator returns true if the members of left and right are equal; otherwise, false. - public static bool operator ==(Size2d lhs, Size2d rhs) - { - return lhs.Equals(rhs); - } + /// + public readonly Size ToSize() => new (Width, Height); - /// - /// Compares two CvPoint objects. The result specifies whether the members of each object are unequal. + /// /// - /// A Point to compare. - /// A Point to compare. - /// This operator returns true if the members of left and right are unequal; otherwise, false. - public static bool operator !=(Size2d lhs, Size2d rhs) - { - return !lhs.Equals(rhs); - } - - #endregion - - #region Override - - /// - public readonly bool Equals(Size2d other) - { - return Width.Equals(other.Width) && Height.Equals(other.Height); - } - - /// - public override readonly bool Equals(object? obj) - { - return obj is Size2d other && Equals(other); - } - - /// - public override readonly int GetHashCode() - { -#if DOTNET_FRAMEWORK || NETSTANDARD2_0 - unchecked - { - return (Width.GetHashCode() * 397) ^ Height.GetHashCode(); - } -#else - return HashCode.Combine(Width, Height); -#endif - } - - /// - public override readonly string ToString() - { - return $"(width:{Width} height:{Height})"; - } - - #endregion - + /// + // ReSharper disable once InconsistentNaming + public readonly Size2f ToSize2f() => new (Width, Height); } diff --git a/src/OpenCvSharp/Modules/core/Struct/Size2f.cs b/src/OpenCvSharp/Modules/core/Struct/Size2f.cs index caf63e798..9395156cc 100644 --- a/src/OpenCvSharp/Modules/core/Struct/Size2f.cs +++ b/src/OpenCvSharp/Modules/core/Struct/Size2f.cs @@ -1,108 +1,58 @@ -using System; -using System.Runtime.InteropServices; +using System.Runtime.InteropServices; #pragma warning disable CA1051 namespace OpenCvSharp; /// -/// +/// /// [Serializable] [StructLayout(LayoutKind.Sequential)] // ReSharper disable once InconsistentNaming -public struct Size2f : IEquatable +public record struct Size2f(float Width, float Height) { /// - /// + /// /// - public float Width; + public float Width = Width; /// - /// + /// /// - public float Height; - - /// - /// Constructor - /// - /// - /// - public Size2f(float width, float height) - { - Width = width; - Height = height; - } - + public float Height = Height; + /// /// Constructor /// /// /// public Size2f(double width, double height) + : this((float)width, (float)height) { - Width = (float) width; - Height = (float) height; } - - #region Operators - - /// - /// Compares two CvPoint objects. The result specifies whether the members of each object are equal. + +#pragma warning disable CA2225 + /// /// - /// A Point to compare. - /// A Point to compare. - /// This operator returns true if the members of left and right are equal; otherwise, false. - public static bool operator ==(Size2f lhs, Size2f rhs) - { - return lhs.Equals(rhs); - } + /// + public static implicit operator Size2f(Size size) + => new(size.Width, size.Height); - /// - /// Compares two CvPoint objects. The result specifies whether the members of each object are unequal. + /// /// - /// A Point to compare. - /// A Point to compare. - /// This operator returns true if the members of left and right are unequal; otherwise, false. - public static bool operator !=(Size2f lhs, Size2f rhs) - { - return !lhs.Equals(rhs); - } - - #endregion - - #region Override - - /// - public readonly bool Equals(Size2f other) - { - return Width.Equals(other.Width) && Height.Equals(other.Height); - } - - /// - public override readonly bool Equals(object? obj) - { - return obj is Size2f other && Equals(other); - } - - /// - public override readonly int GetHashCode() - { -#if DOTNET_FRAMEWORK || NETSTANDARD2_0 - unchecked - { - return (Width.GetHashCode() * 397) ^ Height.GetHashCode(); - } -#else - return HashCode.Combine(Width, Height); -#endif - } - - /// - public override readonly string ToString() - { - return $"(width:{Width} height:{Height})"; - } + /// + public static explicit operator Size2f(Size2d size) + => new(size.Width, size.Height); +#pragma warning restore CA2225 + + /// + /// + /// + public readonly Size ToSize() => new (Width, Height); - #endregion + /// + /// + /// + public readonly Size2d ToSize2d() => new (Width, Height); } diff --git a/src/OpenCvSharp/Modules/core/Struct/TermCriteria.cs b/src/OpenCvSharp/Modules/core/Struct/TermCriteria.cs index e764b8017..527a29948 100644 --- a/src/OpenCvSharp/Modules/core/Struct/TermCriteria.cs +++ b/src/OpenCvSharp/Modules/core/Struct/TermCriteria.cs @@ -1,41 +1,26 @@ -using System; - -#pragma warning disable CA1051 +#pragma warning disable CA1051 namespace OpenCvSharp; /// /// The class defining termination criteria for iterative algorithms. /// -public readonly struct TermCriteria : IEquatable +public readonly record struct TermCriteria(CriteriaTypes Type, int MaxCount, double Epsilon) { /// /// the type of termination criteria: COUNT, EPS or COUNT + EPS /// - public readonly CriteriaTypes Type; + public readonly CriteriaTypes Type = Type; /// /// the maximum number of iterations/elements /// - public readonly int MaxCount; + public readonly int MaxCount = MaxCount; /// /// the desired accuracy /// - public readonly double Epsilon; - - /// - /// full constructor - /// - /// - /// - /// - public TermCriteria(CriteriaTypes type, int maxCount, double epsilon) - { - Type = type; - MaxCount = maxCount; - Epsilon = epsilon; - } + public readonly double Epsilon = Epsilon; /// /// full constructor with both type (count | epsilon) @@ -45,47 +30,8 @@ public TermCriteria(CriteriaTypes type, int maxCount, double epsilon) public static TermCriteria Both(int maxCount, double epsilon) { return new ( - type: CriteriaTypes.Count | CriteriaTypes.Eps, - maxCount: maxCount, - epsilon: epsilon); - } - -#pragma warning disable CS1591 - - public bool Equals(TermCriteria other) - { - return Type == other.Type && MaxCount == other.MaxCount && Epsilon.Equals(other.Epsilon); + Type: CriteriaTypes.Count | CriteriaTypes.Eps, + MaxCount: maxCount, + Epsilon: epsilon); } - - public override bool Equals(object? obj) - { - return obj is TermCriteria other && Equals(other); - } - - public override int GetHashCode() - { -#if DOTNET_FRAMEWORK || NETSTANDARD2_0 - unchecked - { - var hashCode = Type.GetHashCode(); - hashCode = (hashCode * 397) ^ MaxCount.GetHashCode(); - hashCode = (hashCode * 397) ^ Epsilon.GetHashCode(); - return hashCode; - } -#else - return HashCode.Combine((int) Type, MaxCount, Epsilon); -#endif - } - - public static bool operator ==(TermCriteria left, TermCriteria right) - { - return left.Equals(right); - } - - public static bool operator !=(TermCriteria left, TermCriteria right) - { - return !left.Equals(right); - } - -#pragma warning restore CS1591 } diff --git a/src/OpenCvSharp/Modules/core/Struct/Vec/IVec.cs b/src/OpenCvSharp/Modules/core/Struct/Vec/IVec.cs index 4cf496bad..6a21f61f6 100644 --- a/src/OpenCvSharp/Modules/core/Struct/Vec/IVec.cs +++ b/src/OpenCvSharp/Modules/core/Struct/Vec/IVec.cs @@ -5,8 +5,7 @@ namespace OpenCvSharp; /// /// Vec empty interface /// -public interface IVec -{ } +public interface IVec; /// /// Vec** interface diff --git a/src/OpenCvSharp/Modules/core/Struct/Vec/Vec2b.cs b/src/OpenCvSharp/Modules/core/Struct/Vec/Vec2b.cs index 4da261b93..5e43b6dca 100644 --- a/src/OpenCvSharp/Modules/core/Struct/Vec/Vec2b.cs +++ b/src/OpenCvSharp/Modules/core/Struct/Vec/Vec2b.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.CodeAnalysis; using System.Runtime.InteropServices; using OpenCvSharp.Internal.Util; @@ -101,15 +100,13 @@ public Vec2b(byte item0, byte item1) /// public byte this[int i] { - readonly get - { - return i switch + readonly get => + i switch { 0 => Item0, 1 => Item1, _ => throw new ArgumentOutOfRangeException(nameof(i)) }; - } set { switch (i) @@ -134,14 +131,12 @@ readonly get #pragma warning restore 1591 /// - public readonly bool Equals(Vec2b other) - { - return Item0 == other.Item0 && - Item1 == other.Item1; - } + public readonly bool Equals(Vec2b other) => + Item0 == other.Item0 && + Item1 == other.Item1; /// - public override readonly bool Equals(object? obj) + public readonly override bool Equals(object? obj) { if (obj is null) return false; return obj is Vec2b v && Equals(v); @@ -152,23 +147,17 @@ public override readonly bool Equals(object? obj) /// /// /// - public static bool operator ==(Vec2b a, Vec2b b) - { - return a.Equals(b); - } + public static bool operator ==(Vec2b a, Vec2b b) => a.Equals(b); /// /// /// /// /// - public static bool operator !=(Vec2b a, Vec2b b) - { - return !a.Equals(b); - } - + public static bool operator !=(Vec2b a, Vec2b b) => !a.Equals(b); + /// - public override readonly int GetHashCode() + public readonly override int GetHashCode() { #if DOTNET_FRAMEWORK || NETSTANDARD2_0 unchecked @@ -181,8 +170,5 @@ public override readonly int GetHashCode() } /// - public override readonly string ToString() - { - return $"{nameof(Vec2b)} ({Item0}, {Item1})"; - } + public readonly override string ToString() => $"{nameof(Vec2b)} ({Item0}, {Item1})"; } diff --git a/src/OpenCvSharp/Modules/core/Struct/Vec/Vec2d.cs b/src/OpenCvSharp/Modules/core/Struct/Vec/Vec2d.cs index c4ab86fba..1e716487d 100644 --- a/src/OpenCvSharp/Modules/core/Struct/Vec/Vec2d.cs +++ b/src/OpenCvSharp/Modules/core/Struct/Vec/Vec2d.cs @@ -1,5 +1,4 @@ -using System; -using System.Runtime.InteropServices; +using System.Runtime.InteropServices; #pragma warning disable CA1051 @@ -92,15 +91,13 @@ public Vec2d(double item0, double item1) /// public double this[int i] { - readonly get - { - return i switch + readonly get => + i switch { 0 => Item0, 1 => Item1, _ => throw new ArgumentOutOfRangeException(nameof(i)) }; - } set { switch (i) @@ -115,17 +112,14 @@ readonly get #endregion /// - public readonly bool Equals(Vec2d other) - { - return Item0.Equals(other.Item0) && Item1.Equals(other.Item1); - } + public readonly bool Equals(Vec2d other) => Item0.Equals(other.Item0) && Item1.Equals(other.Item1); /// /// /// /// /// - public override readonly bool Equals(object? obj) + public readonly override bool Equals(object? obj) { if (obj is null) return false; return obj is Vec2d v && Equals(v); @@ -136,23 +130,17 @@ public override readonly bool Equals(object? obj) /// /// /// - public static bool operator ==(Vec2d a, Vec2d b) - { - return a.Equals(b); - } + public static bool operator ==(Vec2d a, Vec2d b) => a.Equals(b); /// /// /// /// /// - public static bool operator !=(Vec2d a, Vec2d b) - { - return !(a == b); - } + public static bool operator !=(Vec2d a, Vec2d b) => !(a == b); /// - public override readonly int GetHashCode() + public readonly override int GetHashCode() { #if DOTNET_FRAMEWORK || NETSTANDARD2_0 unchecked @@ -165,8 +153,5 @@ public override readonly int GetHashCode() } /// - public override readonly string ToString() - { - return $"{nameof(Vec2d)} ({Item0}, {Item1})"; - } + public readonly override string ToString() => $"{nameof(Vec2d)} ({Item0}, {Item1})"; } diff --git a/src/OpenCvSharp/Modules/core/Struct/Vec/Vec2f.cs b/src/OpenCvSharp/Modules/core/Struct/Vec/Vec2f.cs index 5343f023d..0f7f2c7d3 100644 --- a/src/OpenCvSharp/Modules/core/Struct/Vec/Vec2f.cs +++ b/src/OpenCvSharp/Modules/core/Struct/Vec/Vec2f.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.CodeAnalysis; using System.Runtime.InteropServices; namespace OpenCvSharp; @@ -93,15 +92,13 @@ public Vec2f(float item0, float item1) /// public float this[int i] { - readonly get - { - return i switch + readonly get => + i switch { 0 => Item0, 1 => Item1, _ => throw new ArgumentOutOfRangeException(nameof(i)) }; - } set { switch (i) @@ -123,13 +120,10 @@ readonly get #pragma warning restore 1591 /// - public readonly bool Equals(Vec2f other) - { - return Item0.Equals(other.Item0) && Item1.Equals(other.Item1); - } + public readonly bool Equals(Vec2f other) => Item0.Equals(other.Item0) && Item1.Equals(other.Item1); /// - public override readonly bool Equals(object? obj) + public readonly override bool Equals(object? obj) { if (obj is null) return false; return obj is Vec2f v && Equals(v); @@ -140,23 +134,17 @@ public override readonly bool Equals(object? obj) /// /// /// - public static bool operator ==(Vec2f a, Vec2f b) - { - return a.Equals(b); - } + public static bool operator ==(Vec2f a, Vec2f b) => a.Equals(b); /// /// /// /// /// - public static bool operator !=(Vec2f a, Vec2f b) - { - return !(a == b); - } + public static bool operator !=(Vec2f a, Vec2f b) => !(a == b); /// - public override readonly int GetHashCode() + public readonly override int GetHashCode() { #if DOTNET_FRAMEWORK || NETSTANDARD2_0 unchecked @@ -169,8 +157,5 @@ public override readonly int GetHashCode() } /// - public override readonly string ToString() - { - return $"{nameof(Vec2f)} ({Item0}, {Item1})"; - } + public readonly override string ToString() => $"{nameof(Vec2f)} ({Item0}, {Item1})"; } diff --git a/src/OpenCvSharp/Modules/core/Struct/Vec/Vec2i.cs b/src/OpenCvSharp/Modules/core/Struct/Vec/Vec2i.cs index 8dec0dcb8..7e6f20b98 100644 --- a/src/OpenCvSharp/Modules/core/Struct/Vec/Vec2i.cs +++ b/src/OpenCvSharp/Modules/core/Struct/Vec/Vec2i.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.CodeAnalysis; using System.Runtime.InteropServices; using OpenCvSharp.Internal.Util; @@ -94,15 +93,13 @@ public Vec2i(int item0, int item1) /// public int this[int i] { - readonly get - { - return i switch + readonly get => + i switch { 0 => Item0, 1 => Item1, _ => throw new ArgumentOutOfRangeException(nameof(i)) }; - } set { switch (i) @@ -124,14 +121,12 @@ readonly get #pragma warning restore 1591 /// - public readonly bool Equals(Vec2i other) - { - return Item0 == other.Item0 && - Item1 == other.Item1; - } + public readonly bool Equals(Vec2i other) => + Item0 == other.Item0 && + Item1 == other.Item1; /// - public override readonly bool Equals(object? obj) + public readonly override bool Equals(object? obj) { if (obj is null) return false; return obj is Vec2i v && Equals(v); @@ -142,23 +137,17 @@ public override readonly bool Equals(object? obj) /// /// /// - public static bool operator ==(Vec2i a, Vec2i b) - { - return a.Equals(b); - } + public static bool operator ==(Vec2i a, Vec2i b) => a.Equals(b); /// /// /// /// /// - public static bool operator !=(Vec2i a, Vec2i b) - { - return !a.Equals(b); - } + public static bool operator !=(Vec2i a, Vec2i b) => !a.Equals(b); /// - public override readonly int GetHashCode() + public readonly override int GetHashCode() { #if DOTNET_FRAMEWORK || NETSTANDARD2_0 unchecked @@ -171,8 +160,5 @@ public override readonly int GetHashCode() } /// - public override readonly string ToString() - { - return $"{nameof(Vec2i)} ({Item0}, {Item1})"; - } + public readonly override string ToString() => $"{nameof(Vec2i)} ({Item0}, {Item1})"; } diff --git a/src/OpenCvSharp/Modules/core/Struct/Vec/Vec2s.cs b/src/OpenCvSharp/Modules/core/Struct/Vec/Vec2s.cs index a27655981..ab67d0fa5 100644 --- a/src/OpenCvSharp/Modules/core/Struct/Vec/Vec2s.cs +++ b/src/OpenCvSharp/Modules/core/Struct/Vec/Vec2s.cs @@ -1,5 +1,4 @@ -using System; -using System.Runtime.InteropServices; +using System.Runtime.InteropServices; using OpenCvSharp.Internal.Util; #pragma warning disable CA1051 @@ -94,15 +93,13 @@ public Vec2s(short item0, short item1) /// public short this[int i] { - readonly get - { - return i switch + readonly get => + i switch { 0 => Item0, 1 => Item1, _ => throw new ArgumentOutOfRangeException(nameof(i)) }; - } set { switch (i) @@ -126,13 +123,10 @@ readonly get #pragma warning restore 1591 /// - public readonly bool Equals(Vec2s other) - { - return Item0 == other.Item0 && Item1 == other.Item1; - } + public readonly bool Equals(Vec2s other) => Item0 == other.Item0 && Item1 == other.Item1; /// - public override readonly bool Equals(object? obj) + public readonly override bool Equals(object? obj) { if (obj is null) return false; return obj is Vec2s v && Equals(v); @@ -143,23 +137,17 @@ public override readonly bool Equals(object? obj) /// /// /// - public static bool operator ==(Vec2s a, Vec2s b) - { - return a.Equals(b); - } + public static bool operator ==(Vec2s a, Vec2s b) => a.Equals(b); /// /// /// /// /// - public static bool operator !=(Vec2s a, Vec2s b) - { - return !a.Equals(b); - } + public static bool operator !=(Vec2s a, Vec2s b) => !a.Equals(b); /// - public override readonly int GetHashCode() + public readonly override int GetHashCode() { #if DOTNET_FRAMEWORK || NETSTANDARD2_0 unchecked @@ -172,8 +160,5 @@ public override readonly int GetHashCode() } /// - public override readonly string ToString() - { - return $"{nameof(Vec2s)} ({Item0}, {Item1})"; - } + public readonly override string ToString() => $"{nameof(Vec2s)} ({Item0}, {Item1})"; } diff --git a/src/OpenCvSharp/Modules/core/Struct/Vec/Vec2w.cs b/src/OpenCvSharp/Modules/core/Struct/Vec/Vec2w.cs index 8faa39c76..284ab61cb 100644 --- a/src/OpenCvSharp/Modules/core/Struct/Vec/Vec2w.cs +++ b/src/OpenCvSharp/Modules/core/Struct/Vec/Vec2w.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.CodeAnalysis; using System.Runtime.InteropServices; using OpenCvSharp.Internal.Util; @@ -94,15 +93,13 @@ public Vec2w(ushort item0, ushort item1) /// public ushort this[int i] { - readonly get - { - return i switch + readonly get => + i switch { 0 => Item0, 1 => Item1, _ => throw new ArgumentOutOfRangeException(nameof(i)) }; - } set { switch (i) @@ -127,13 +124,10 @@ readonly get #pragma warning restore 1591 /// - public readonly bool Equals(Vec2w other) - { - return Item0 == other.Item0 && Item1 == other.Item1; - } + public readonly bool Equals(Vec2w other) => Item0 == other.Item0 && Item1 == other.Item1; /// - public override readonly bool Equals(object? obj) + public readonly override bool Equals(object? obj) { if (obj is null) return false; return obj is Vec2w w && Equals(w); @@ -144,23 +138,17 @@ public override readonly bool Equals(object? obj) /// /// /// - public static bool operator ==(Vec2w a, Vec2w b) - { - return a.Equals(b); - } + public static bool operator ==(Vec2w a, Vec2w b) => a.Equals(b); /// /// /// /// /// - public static bool operator !=(Vec2w a, Vec2w b) - { - return !a.Equals(b); - } + public static bool operator !=(Vec2w a, Vec2w b) => !a.Equals(b); /// - public override readonly int GetHashCode() + public readonly override int GetHashCode() { #if DOTNET_FRAMEWORK || NETSTANDARD2_0 unchecked @@ -173,8 +161,5 @@ public override readonly int GetHashCode() } /// - public override readonly string ToString() - { - return $"{nameof(Vec2w)} ({Item0}, {Item1})"; - } + public readonly override string ToString() => $"{nameof(Vec2w)} ({Item0}, {Item1})"; } diff --git a/src/OpenCvSharp/Modules/core/Struct/Vec/Vec3b.cs b/src/OpenCvSharp/Modules/core/Struct/Vec/Vec3b.cs index 0040d0011..8de6ab418 100644 --- a/src/OpenCvSharp/Modules/core/Struct/Vec/Vec3b.cs +++ b/src/OpenCvSharp/Modules/core/Struct/Vec/Vec3b.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.CodeAnalysis; using System.Runtime.InteropServices; using OpenCvSharp.Internal.Util; @@ -106,16 +105,14 @@ public Vec3b(byte item0, byte item1, byte item2) /// public byte this[int i] { - readonly get - { - return i switch + readonly get => + i switch { 0 => Item0, 1 => Item1, 2 => Item2, _ => throw new ArgumentOutOfRangeException(nameof(i)) }; - } set { switch (i) @@ -141,15 +138,13 @@ readonly get #pragma warning restore 1591 /// - public readonly bool Equals(Vec3b other) - { - return Item0 == other.Item0 && - Item1 == other.Item1 && - Item2 == other.Item2; - } + public readonly bool Equals(Vec3b other) => + Item0 == other.Item0 && + Item1 == other.Item1 && + Item2 == other.Item2; /// - public override readonly bool Equals(object? obj) + public readonly override bool Equals(object? obj) { if (obj is null) return false; return obj is Vec3b b && Equals(b); @@ -160,23 +155,17 @@ public override readonly bool Equals(object? obj) /// /// /// - public static bool operator ==(Vec3b a, Vec3b b) - { - return a.Equals(b); - } + public static bool operator ==(Vec3b a, Vec3b b) => a.Equals(b); /// /// /// /// /// - public static bool operator !=(Vec3b a, Vec3b b) - { - return !(a == b); - } + public static bool operator !=(Vec3b a, Vec3b b) => !(a == b); /// - public override readonly int GetHashCode() + public readonly override int GetHashCode() { #if DOTNET_FRAMEWORK || NETSTANDARD2_0 unchecked @@ -192,8 +181,5 @@ public override readonly int GetHashCode() } /// - public override readonly string ToString() - { - return $"{nameof(Vec3b)} ({Item0}, {Item1}, {Item2})"; - } + public readonly override string ToString() => $"{nameof(Vec3b)} ({Item0}, {Item1}, {Item2})"; } diff --git a/src/OpenCvSharp/Modules/core/Struct/Vec/Vec3d.cs b/src/OpenCvSharp/Modules/core/Struct/Vec/Vec3d.cs index c67520b21..ebe66f923 100644 --- a/src/OpenCvSharp/Modules/core/Struct/Vec/Vec3d.cs +++ b/src/OpenCvSharp/Modules/core/Struct/Vec/Vec3d.cs @@ -1,5 +1,4 @@ -using System; -using System.Runtime.InteropServices; +using System.Runtime.InteropServices; #pragma warning disable CA1051 @@ -105,16 +104,14 @@ public Vec3d(double item0, double item1, double item2) /// public double this[int i] { - readonly get - { - return i switch + readonly get => + i switch { 0 => Item0, 1 => Item1, 2 => Item2, _ => throw new ArgumentOutOfRangeException(nameof(i)) }; - } set { switch (i) @@ -130,13 +127,10 @@ readonly get #endregion /// - public readonly bool Equals(Vec3d other) - { - return Item0.Equals(other.Item0) && Item1.Equals(other.Item1) && Item2.Equals(other.Item2); - } + public readonly bool Equals(Vec3d other) => Item0.Equals(other.Item0) && Item1.Equals(other.Item1) && Item2.Equals(other.Item2); /// - public override readonly bool Equals(object? obj) + public readonly override bool Equals(object? obj) { if (obj is null) return false; return obj is Vec3d v && Equals(v); @@ -147,23 +141,17 @@ public override readonly bool Equals(object? obj) /// /// /// - public static bool operator ==(Vec3d a, Vec3d b) - { - return a.Equals(b); - } + public static bool operator ==(Vec3d a, Vec3d b) => a.Equals(b); /// /// /// /// /// - public static bool operator !=(Vec3d a, Vec3d b) - { - return !(a == b); - } + public static bool operator !=(Vec3d a, Vec3d b) => !(a == b); /// - public override readonly int GetHashCode() + public readonly override int GetHashCode() { #if DOTNET_FRAMEWORK || NETSTANDARD2_0 unchecked @@ -179,8 +167,5 @@ public override readonly int GetHashCode() } /// - public override readonly string ToString() - { - return $"{nameof(Vec3d)} ({Item0}, {Item1}, {Item2})"; - } + public readonly override string ToString() => $"{nameof(Vec3d)} ({Item0}, {Item1}, {Item2})"; } diff --git a/src/OpenCvSharp/Modules/core/Struct/Vec/Vec3f.cs b/src/OpenCvSharp/Modules/core/Struct/Vec/Vec3f.cs index 64edb716a..e4f068589 100644 --- a/src/OpenCvSharp/Modules/core/Struct/Vec/Vec3f.cs +++ b/src/OpenCvSharp/Modules/core/Struct/Vec/Vec3f.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.CodeAnalysis; using System.Runtime.InteropServices; namespace OpenCvSharp; @@ -105,16 +104,14 @@ public Vec3f(float item0, float item1, float item2) /// public float this[int i] { - readonly get - { - return i switch + readonly get => + i switch { 0 => Item0, 1 => Item1, 2 => Item2, _ => throw new ArgumentOutOfRangeException(nameof(i)) }; - } set { switch (i) @@ -137,13 +134,10 @@ readonly get #pragma warning restore 1591 /// - public readonly bool Equals(Vec3f other) - { - return Item0.Equals(other.Item0) && Item1.Equals(other.Item1) && Item2.Equals(other.Item2); - } + public readonly bool Equals(Vec3f other) => Item0.Equals(other.Item0) && Item1.Equals(other.Item1) && Item2.Equals(other.Item2); /// - public override readonly bool Equals(object? obj) + public readonly override bool Equals(object? obj) { if (obj is null) return false; return obj is Vec3f v && Equals(v); @@ -154,23 +148,17 @@ public override readonly bool Equals(object? obj) /// /// /// - public static bool operator ==(Vec3f a, Vec3f b) - { - return a.Equals(b); - } + public static bool operator ==(Vec3f a, Vec3f b) => a.Equals(b); /// /// /// /// /// - public static bool operator !=(Vec3f a, Vec3f b) - { - return !(a == b); - } + public static bool operator !=(Vec3f a, Vec3f b) => !(a == b); /// - public override readonly int GetHashCode() + public readonly override int GetHashCode() { #if DOTNET_FRAMEWORK || NETSTANDARD2_0 unchecked @@ -186,8 +174,5 @@ public override readonly int GetHashCode() } /// - public override readonly string ToString() - { - return $"{nameof(Vec3f)} ({Item0}, {Item1}, {Item2})"; - } + public readonly override string ToString() => $"{nameof(Vec3f)} ({Item0}, {Item1}, {Item2})"; } diff --git a/src/OpenCvSharp/Modules/core/Struct/Vec/Vec3i.cs b/src/OpenCvSharp/Modules/core/Struct/Vec/Vec3i.cs index 2d07de62c..6a1ae0d34 100644 --- a/src/OpenCvSharp/Modules/core/Struct/Vec/Vec3i.cs +++ b/src/OpenCvSharp/Modules/core/Struct/Vec/Vec3i.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.CodeAnalysis; using System.Runtime.InteropServices; using OpenCvSharp.Internal.Util; @@ -107,16 +106,14 @@ public Vec3i(int item0, int item1, int item2) /// public int this[int i] { - readonly get - { - return i switch + readonly get => + i switch { 0 => Item0, 1 => Item1, 2 => Item2, _ => throw new ArgumentOutOfRangeException(nameof(i)) }; - } set { switch (i) @@ -139,15 +136,13 @@ readonly get #pragma warning restore 1591 /// - public readonly bool Equals(Vec3i other) - { - return Item0 == other.Item0 && - Item1 == other.Item1 && - Item2 == other.Item2; - } + public readonly bool Equals(Vec3i other) => + Item0 == other.Item0 && + Item1 == other.Item1 && + Item2 == other.Item2; /// - public override readonly bool Equals(object? obj) + public readonly override bool Equals(object? obj) { if (obj is null) return false; return obj is Vec3i v && Equals(v); @@ -158,23 +153,17 @@ public override readonly bool Equals(object? obj) /// /// /// - public static bool operator ==(Vec3i a, Vec3i b) - { - return a.Equals(b); - } + public static bool operator ==(Vec3i a, Vec3i b) => a.Equals(b); /// /// /// /// /// - public static bool operator !=(Vec3i a, Vec3i b) - { - return !a.Equals(b); - } + public static bool operator !=(Vec3i a, Vec3i b) => !a.Equals(b); /// - public override readonly int GetHashCode() + public readonly override int GetHashCode() { #if DOTNET_FRAMEWORK || NETSTANDARD2_0 unchecked @@ -190,8 +179,5 @@ public override readonly int GetHashCode() } /// - public override readonly string ToString() - { - return $"{nameof(Vec3i)} ({Item0}, {Item1}, {Item2})"; - } + public readonly override string ToString() => $"{nameof(Vec3i)} ({Item0}, {Item1}, {Item2})"; } diff --git a/src/OpenCvSharp/Modules/core/Struct/Vec/Vec3s.cs b/src/OpenCvSharp/Modules/core/Struct/Vec/Vec3s.cs index 0e13121f8..1aec6c785 100644 --- a/src/OpenCvSharp/Modules/core/Struct/Vec/Vec3s.cs +++ b/src/OpenCvSharp/Modules/core/Struct/Vec/Vec3s.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.CodeAnalysis; using System.Runtime.InteropServices; using OpenCvSharp.Internal.Util; @@ -106,16 +105,14 @@ public Vec3s(short item0, short item1, short item2) /// public short this[int i] { - readonly get - { - return i switch + readonly get => + i switch { 0 => Item0, 1 => Item1, 2 => Item2, _ => throw new ArgumentOutOfRangeException(nameof(i)) }; - } set { switch (i) @@ -141,15 +138,13 @@ readonly get #pragma warning restore 1591 /// - public readonly bool Equals(Vec3s other) - { - return Item0 == other.Item0 && - Item1 == other.Item1 && - Item2 == other.Item2; - } + public readonly bool Equals(Vec3s other) => + Item0 == other.Item0 && + Item1 == other.Item1 && + Item2 == other.Item2; /// - public override readonly bool Equals(object? obj) + public readonly override bool Equals(object? obj) { if (obj is null) return false; return obj is Vec3s v && Equals(v); @@ -160,23 +155,17 @@ public override readonly bool Equals(object? obj) /// /// /// - public static bool operator ==(Vec3s a, Vec3s b) - { - return a.Equals(b); - } + public static bool operator ==(Vec3s a, Vec3s b) => a.Equals(b); /// /// /// /// /// - public static bool operator !=(Vec3s a, Vec3s b) - { - return !a.Equals(b); - } + public static bool operator !=(Vec3s a, Vec3s b) => !a.Equals(b); /// - public override readonly int GetHashCode() + public readonly override int GetHashCode() { #if DOTNET_FRAMEWORK || NETSTANDARD2_0 unchecked @@ -192,8 +181,5 @@ public override readonly int GetHashCode() } /// - public override readonly string ToString() - { - return $"{nameof(Vec3s)} ({Item0}, {Item1}, {Item2})"; - } + public readonly override string ToString() => $"{nameof(Vec3s)} ({Item0}, {Item1}, {Item2})"; } diff --git a/src/OpenCvSharp/Modules/core/Struct/Vec/Vec3w.cs b/src/OpenCvSharp/Modules/core/Struct/Vec/Vec3w.cs index a06073472..0dfd4ca3e 100644 --- a/src/OpenCvSharp/Modules/core/Struct/Vec/Vec3w.cs +++ b/src/OpenCvSharp/Modules/core/Struct/Vec/Vec3w.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.CodeAnalysis; using System.Runtime.InteropServices; using OpenCvSharp.Internal.Util; @@ -107,16 +106,14 @@ public Vec3w(ushort item0, ushort item1, ushort item2) /// public ushort this[int i] { - readonly get - { - return i switch + readonly get => + i switch { 0 => Item0, 1 => Item1, 2 => Item2, _ => throw new ArgumentOutOfRangeException(nameof(i)) }; - } set { switch (i) @@ -142,15 +139,13 @@ readonly get #pragma warning restore 1591 /// - public readonly bool Equals(Vec3w other) - { - return Item0 == other.Item0 && - Item1 == other.Item1 && - Item2 == other.Item2; - } + public readonly bool Equals(Vec3w other) => + Item0 == other.Item0 && + Item1 == other.Item1 && + Item2 == other.Item2; /// - public override readonly bool Equals(object? obj) + public readonly override bool Equals(object? obj) { if (obj is null) return false; return obj is Vec3w v && Equals(v); @@ -161,23 +156,17 @@ public override readonly bool Equals(object? obj) /// /// /// - public static bool operator ==(Vec3w a, Vec3w b) - { - return a.Equals(b); - } + public static bool operator ==(Vec3w a, Vec3w b) => a.Equals(b); /// /// /// /// /// - public static bool operator !=(Vec3w a, Vec3w b) - { - return !a.Equals(b); - } + public static bool operator !=(Vec3w a, Vec3w b) => !a.Equals(b); /// - public override readonly int GetHashCode() + public readonly override int GetHashCode() { #if DOTNET_FRAMEWORK || NETSTANDARD2_0 unchecked @@ -193,8 +182,5 @@ public override readonly int GetHashCode() } /// - public override readonly string ToString() - { - return $"{nameof(Vec3w)} ({Item0}, {Item1}, {Item2})"; - } + public readonly override string ToString() => $"{nameof(Vec3w)} ({Item0}, {Item1}, {Item2})"; } diff --git a/src/OpenCvSharp/Modules/core/Struct/Vec/Vec4b.cs b/src/OpenCvSharp/Modules/core/Struct/Vec/Vec4b.cs index 2ac6a243a..49ec3c9d8 100644 --- a/src/OpenCvSharp/Modules/core/Struct/Vec/Vec4b.cs +++ b/src/OpenCvSharp/Modules/core/Struct/Vec/Vec4b.cs @@ -1,5 +1,4 @@ -using System; -using System.Runtime.InteropServices; +using System.Runtime.InteropServices; using OpenCvSharp.Internal.Util; #pragma warning disable CA1051 @@ -118,9 +117,8 @@ public Vec4b(byte item0, byte item1, byte item2, byte item3) /// public byte this[int i] { - readonly get - { - return i switch + readonly get => + i switch { 0 => Item0, 1 => Item1, @@ -128,7 +126,6 @@ readonly get 3 => Item3, _ => throw new ArgumentOutOfRangeException(nameof(i)) }; - } set { switch (i) @@ -155,16 +152,14 @@ readonly get #pragma warning restore 1591 /// - public readonly bool Equals(Vec4b other) - { - return Item0 == other.Item0 && - Item1 == other.Item1 && - Item2 == other.Item2 && - Item3 == other.Item3; - } + public readonly bool Equals(Vec4b other) => + Item0 == other.Item0 && + Item1 == other.Item1 && + Item2 == other.Item2 && + Item3 == other.Item3; /// - public override readonly bool Equals(object? obj) + public readonly override bool Equals(object? obj) { if (obj is null) return false; return obj is Vec4b v && Equals(v); @@ -175,23 +170,17 @@ public override readonly bool Equals(object? obj) /// /// /// - public static bool operator ==(Vec4b a, Vec4b b) - { - return a.Equals(b); - } + public static bool operator ==(Vec4b a, Vec4b b) => a.Equals(b); /// /// /// /// /// - public static bool operator !=(Vec4b a, Vec4b b) - { - return !(a == b); - } + public static bool operator !=(Vec4b a, Vec4b b) => !(a == b); /// - public override readonly int GetHashCode() + public readonly override int GetHashCode() { #if DOTNET_FRAMEWORK || NETSTANDARD2_0 unchecked @@ -208,8 +197,5 @@ public override readonly int GetHashCode() } /// - public override readonly string ToString() - { - return $"{nameof(Vec4b)} ({Item0}, {Item1}, {Item2}, {Item3})"; - } + public readonly override string ToString() => $"{nameof(Vec4b)} ({Item0}, {Item1}, {Item2}, {Item3})"; } diff --git a/src/OpenCvSharp/Modules/core/Struct/Vec/Vec4d.cs b/src/OpenCvSharp/Modules/core/Struct/Vec/Vec4d.cs index 0a7166bd2..fadee7752 100644 --- a/src/OpenCvSharp/Modules/core/Struct/Vec/Vec4d.cs +++ b/src/OpenCvSharp/Modules/core/Struct/Vec/Vec4d.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.CodeAnalysis; using System.Runtime.InteropServices; namespace OpenCvSharp; @@ -117,9 +116,8 @@ public Vec4d(double item0, double item1, double item2, double item3) /// public double this[int i] { - readonly get - { - return i switch + readonly get => + i switch { 0 => Item0, 1 => Item1, @@ -127,7 +125,6 @@ readonly get 3 => Item3, _ => throw new ArgumentOutOfRangeException(nameof(i)) }; - } set { switch (i) @@ -144,16 +141,14 @@ readonly get #endregion /// - public readonly bool Equals(Vec4d other) - { - return Item0.Equals(other.Item0) && - Item1.Equals(other.Item1) && - Item2.Equals(other.Item2) && - Item3.Equals(other.Item3); - } + public readonly bool Equals(Vec4d other) => + Item0.Equals(other.Item0) && + Item1.Equals(other.Item1) && + Item2.Equals(other.Item2) && + Item3.Equals(other.Item3); /// - public override readonly bool Equals(object? obj) + public readonly override bool Equals(object? obj) { if (obj is null) return false; return obj is Vec4d v && Equals(v); @@ -164,23 +159,17 @@ public override readonly bool Equals(object? obj) /// /// /// - public static bool operator ==(Vec4d a, Vec4d b) - { - return a.Equals(b); - } + public static bool operator ==(Vec4d a, Vec4d b) => a.Equals(b); /// /// /// /// /// - public static bool operator !=(Vec4d a, Vec4d b) - { - return !(a == b); - } + public static bool operator !=(Vec4d a, Vec4d b) => !(a == b); /// - public override readonly int GetHashCode() + public readonly override int GetHashCode() { #if DOTNET_FRAMEWORK || NETSTANDARD2_0 unchecked @@ -197,8 +186,5 @@ public override readonly int GetHashCode() } /// - public override readonly string ToString() - { - return $"{nameof(Vec4d)} ({Item0}, {Item1}, {Item2}, {Item3})"; - } + public readonly override string ToString() => $"{nameof(Vec4d)} ({Item0}, {Item1}, {Item2}, {Item3})"; } diff --git a/src/OpenCvSharp/Modules/core/Struct/Vec/Vec4f.cs b/src/OpenCvSharp/Modules/core/Struct/Vec/Vec4f.cs index 9ad72ecea..98572995a 100644 --- a/src/OpenCvSharp/Modules/core/Struct/Vec/Vec4f.cs +++ b/src/OpenCvSharp/Modules/core/Struct/Vec/Vec4f.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.CodeAnalysis; using System.Runtime.InteropServices; namespace OpenCvSharp; @@ -118,9 +117,8 @@ public Vec4f(float item0, float item1, float item2, float item3) /// public float this[int i] { - readonly get - { - return i switch + readonly get => + i switch { 0 => Item0, 1 => Item1, @@ -128,7 +126,6 @@ readonly get 3 => Item3, _ => throw new ArgumentOutOfRangeException(nameof(i)) }; - } set { switch (i) @@ -152,16 +149,14 @@ readonly get #pragma warning restore 1591 /// - public readonly bool Equals(Vec4f other) - { - return Item0.Equals(other.Item0) && - Item1.Equals(other.Item1) && - Item2.Equals(other.Item2) && - Item3.Equals(other.Item3); - } + public readonly bool Equals(Vec4f other) => + Item0.Equals(other.Item0) && + Item1.Equals(other.Item1) && + Item2.Equals(other.Item2) && + Item3.Equals(other.Item3); /// - public override readonly bool Equals(object? obj) + public readonly override bool Equals(object? obj) { if (obj is null) return false; return obj is Vec4f v && Equals(v); @@ -172,23 +167,17 @@ public override readonly bool Equals(object? obj) /// /// /// - public static bool operator ==(Vec4f a, Vec4f b) - { - return a.Equals(b); - } + public static bool operator ==(Vec4f a, Vec4f b) => a.Equals(b); /// /// /// /// /// - public static bool operator !=(Vec4f a, Vec4f b) - { - return !(a == b); - } + public static bool operator !=(Vec4f a, Vec4f b) => !(a == b); /// - public override readonly int GetHashCode() + public readonly override int GetHashCode() { #if DOTNET_FRAMEWORK || NETSTANDARD2_0 unchecked @@ -205,8 +194,5 @@ public override readonly int GetHashCode() } /// - public override readonly string ToString() - { - return $"{nameof(Vec4f)} ({Item0}, {Item1}, {Item2}, {Item3})"; - } + public readonly override string ToString() => $"{nameof(Vec4f)} ({Item0}, {Item1}, {Item2}, {Item3})"; } diff --git a/src/OpenCvSharp/Modules/core/Struct/Vec/Vec4i.cs b/src/OpenCvSharp/Modules/core/Struct/Vec/Vec4i.cs index 51c42128b..a935c1cb3 100644 --- a/src/OpenCvSharp/Modules/core/Struct/Vec/Vec4i.cs +++ b/src/OpenCvSharp/Modules/core/Struct/Vec/Vec4i.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.CodeAnalysis; using System.Runtime.InteropServices; using OpenCvSharp.Internal.Util; @@ -119,9 +118,8 @@ public Vec4i(int item0, int item1, int item2, int item3) /// public int this[int i] { - readonly get - { - return i switch + readonly get => + i switch { 0 => Item0, 1 => Item1, @@ -129,7 +127,6 @@ readonly get 3 => Item3, _ => throw new ArgumentOutOfRangeException(nameof(i)) }; - } set { switch (i) @@ -153,16 +150,14 @@ readonly get #pragma warning restore 1591 /// - public readonly bool Equals(Vec4i other) - { - return Item0 == other.Item0 && - Item1 == other.Item1 && - Item2 == other.Item2 && - Item3 == other.Item3; - } + public readonly bool Equals(Vec4i other) => + Item0 == other.Item0 && + Item1 == other.Item1 && + Item2 == other.Item2 && + Item3 == other.Item3; /// - public override readonly bool Equals(object? obj) + public readonly override bool Equals(object? obj) { if (obj is null) return false; return obj is Vec4i v && Equals(v); @@ -173,23 +168,17 @@ public override readonly bool Equals(object? obj) /// /// /// - public static bool operator ==(Vec4i a, Vec4i b) - { - return a.Equals(b); - } + public static bool operator ==(Vec4i a, Vec4i b) => a.Equals(b); /// /// /// /// /// - public static bool operator !=(Vec4i a, Vec4i b) - { - return !a.Equals(b); - } + public static bool operator !=(Vec4i a, Vec4i b) => !a.Equals(b); /// - public override readonly int GetHashCode() + public readonly override int GetHashCode() { #if DOTNET_FRAMEWORK || NETSTANDARD2_0 unchecked @@ -206,8 +195,5 @@ public override readonly int GetHashCode() } /// - public override readonly string ToString() - { - return $"{nameof(Vec4i)} ({Item0}, {Item1}, {Item2}, {Item3})"; - } + public readonly override string ToString() => $"{nameof(Vec4i)} ({Item0}, {Item1}, {Item2}, {Item3})"; } diff --git a/src/OpenCvSharp/Modules/core/Struct/Vec/Vec4s.cs b/src/OpenCvSharp/Modules/core/Struct/Vec/Vec4s.cs index 8fc722dd0..b5da3ead7 100644 --- a/src/OpenCvSharp/Modules/core/Struct/Vec/Vec4s.cs +++ b/src/OpenCvSharp/Modules/core/Struct/Vec/Vec4s.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.CodeAnalysis; using System.Runtime.InteropServices; using OpenCvSharp.Internal.Util; @@ -119,9 +118,8 @@ public Vec4s(short item0, short item1, short item2, short item3) /// public short this[int i] { - readonly get - { - return i switch + readonly get => + i switch { 0 => Item0, 1 => Item1, @@ -129,7 +127,6 @@ readonly get 3 => Item3, _ => throw new ArgumentOutOfRangeException(nameof(i)) }; - } set { switch (i) @@ -157,16 +154,14 @@ readonly get /// - public readonly bool Equals(Vec4s other) - { - return Item0 == other.Item0 && - Item1 == other.Item1 && - Item2 == other.Item2 && - Item3 == other.Item3; - } + public readonly bool Equals(Vec4s other) => + Item0 == other.Item0 && + Item1 == other.Item1 && + Item2 == other.Item2 && + Item3 == other.Item3; /// - public override readonly bool Equals(object? obj) + public readonly override bool Equals(object? obj) { if (obj is null) return false; return obj is Vec4s v && Equals(v); @@ -177,23 +172,17 @@ public override readonly bool Equals(object? obj) /// /// /// - public static bool operator ==(Vec4s a, Vec4s b) - { - return a.Equals(b); - } + public static bool operator ==(Vec4s a, Vec4s b) => a.Equals(b); /// /// /// /// /// - public static bool operator !=(Vec4s a, Vec4s b) - { - return !a.Equals(b); - } + public static bool operator !=(Vec4s a, Vec4s b) => !a.Equals(b); /// - public override readonly int GetHashCode() + public readonly override int GetHashCode() { #if DOTNET_FRAMEWORK || NETSTANDARD2_0 unchecked @@ -210,8 +199,5 @@ public override readonly int GetHashCode() } /// - public override readonly string ToString() - { - return $"{nameof(Vec4s)} ({Item0}, {Item1}, {Item2}, {Item3})"; - } + public readonly override string ToString() => $"{nameof(Vec4s)} ({Item0}, {Item1}, {Item2}, {Item3})"; } diff --git a/src/OpenCvSharp/Modules/core/Struct/Vec/Vec4w.cs b/src/OpenCvSharp/Modules/core/Struct/Vec/Vec4w.cs index 007e0438a..7603aba36 100644 --- a/src/OpenCvSharp/Modules/core/Struct/Vec/Vec4w.cs +++ b/src/OpenCvSharp/Modules/core/Struct/Vec/Vec4w.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.CodeAnalysis; using System.Runtime.InteropServices; using OpenCvSharp.Internal.Util; @@ -119,9 +118,8 @@ public Vec4w(ushort item0, ushort item1, ushort item2, ushort item3) /// public ushort this[int i] { - readonly get - { - return i switch + readonly get => + i switch { 0 => Item0, 1 => Item1, @@ -129,7 +127,6 @@ readonly get 3 => Item3, _ => throw new ArgumentOutOfRangeException(nameof(i)) }; - } set { switch (i) @@ -156,16 +153,14 @@ readonly get #pragma warning restore 1591 /// - public readonly bool Equals(Vec4w other) - { - return Item0 == other.Item0 && - Item1 == other.Item1 && - Item2 == other.Item2 && - Item3 == other.Item3; - } + public readonly bool Equals(Vec4w other) => + Item0 == other.Item0 && + Item1 == other.Item1 && + Item2 == other.Item2 && + Item3 == other.Item3; /// - public override readonly bool Equals(object? obj) + public readonly override bool Equals(object? obj) { if (obj is null) return false; return obj is Vec4w v && Equals(v); @@ -176,23 +171,17 @@ public override readonly bool Equals(object? obj) /// /// /// - public static bool operator ==(Vec4w a, Vec4w b) - { - return a.Equals(b); - } + public static bool operator ==(Vec4w a, Vec4w b) => a.Equals(b); /// /// /// /// /// - public static bool operator !=(Vec4w a, Vec4w b) - { - return !a.Equals(b); - } + public static bool operator !=(Vec4w a, Vec4w b) => !a.Equals(b); /// - public override readonly int GetHashCode() + public readonly override int GetHashCode() { #if DOTNET_FRAMEWORK || NETSTANDARD2_0 unchecked @@ -209,8 +198,5 @@ public override readonly int GetHashCode() } /// - public override readonly string ToString() - { - return $"{nameof(Vec4w)} ({Item0}, {Item1}, {Item2}, {Item3})"; - } + public readonly override string ToString() => $"{nameof(Vec4w)} ({Item0}, {Item1}, {Item2}, {Item3})"; } diff --git a/src/OpenCvSharp/Modules/core/Struct/Vec/Vec6b.cs b/src/OpenCvSharp/Modules/core/Struct/Vec/Vec6b.cs index dae28c45e..8171fdfac 100644 --- a/src/OpenCvSharp/Modules/core/Struct/Vec/Vec6b.cs +++ b/src/OpenCvSharp/Modules/core/Struct/Vec/Vec6b.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.CodeAnalysis; using System.Runtime.InteropServices; using OpenCvSharp.Internal.Util; @@ -142,9 +141,8 @@ public Vec6b(byte item0, byte item1, byte item2, byte item3, byte item4, byte it /// public byte this[int i] { - readonly get - { - return i switch + readonly get => + i switch { 0 => Item0, 1 => Item1, @@ -154,7 +152,6 @@ readonly get 5 => Item5, _ => throw new ArgumentOutOfRangeException(nameof(i)) }; - } set { switch (i) @@ -183,18 +180,16 @@ readonly get #pragma warning restore 1591 /// - public readonly bool Equals(Vec6b other) - { - return Item0 == other.Item0 && - Item1 == other.Item1 && - Item2 == other.Item2 && - Item3 == other.Item3 && - Item4 == other.Item4 && - Item5 == other.Item5; - } + public readonly bool Equals(Vec6b other) => + Item0 == other.Item0 && + Item1 == other.Item1 && + Item2 == other.Item2 && + Item3 == other.Item3 && + Item4 == other.Item4 && + Item5 == other.Item5; /// - public override readonly bool Equals(object? obj) + public readonly override bool Equals(object? obj) { if (obj is null) return false; return obj is Vec6b v && Equals(v); @@ -205,23 +200,17 @@ public override readonly bool Equals(object? obj) /// /// /// - public static bool operator ==(Vec6b a, Vec6b b) - { - return a.Equals(b); - } + public static bool operator ==(Vec6b a, Vec6b b) => a.Equals(b); /// /// /// /// /// - public static bool operator !=(Vec6b a, Vec6b b) - { - return !(a == b); - } + public static bool operator !=(Vec6b a, Vec6b b) => !(a == b); /// - public override readonly int GetHashCode() + public readonly override int GetHashCode() { #if DOTNET_FRAMEWORK || NETSTANDARD2_0 unchecked @@ -240,8 +229,6 @@ public override readonly int GetHashCode() } /// - public override readonly string ToString() - { - return $"{nameof(Vec6b)} ({Item0}, {Item1}, {Item2}, {Item3}, {Item4}, {Item5})"; - } + public readonly override string ToString() + => $"{nameof(Vec6b)} ({Item0}, {Item1}, {Item2}, {Item3}, {Item4}, {Item5})"; } diff --git a/src/OpenCvSharp/Modules/core/Struct/Vec/Vec6d.cs b/src/OpenCvSharp/Modules/core/Struct/Vec/Vec6d.cs index ffaae2c41..b78b8b3ff 100644 --- a/src/OpenCvSharp/Modules/core/Struct/Vec/Vec6d.cs +++ b/src/OpenCvSharp/Modules/core/Struct/Vec/Vec6d.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.CodeAnalysis; using System.Runtime.InteropServices; namespace OpenCvSharp; @@ -141,9 +140,8 @@ public Vec6d(double item0, double item1, double item2, double item3, double item /// public double this[int i] { - readonly get - { - return i switch + readonly get => + i switch { 0 => Item0, 1 => Item1, @@ -153,7 +151,6 @@ readonly get 5 => Item5, _ => throw new ArgumentOutOfRangeException(nameof(i)) }; - } set { switch (i) @@ -172,18 +169,16 @@ readonly get #endregion /// - public readonly bool Equals(Vec6d other) - { - return Item0.Equals(other.Item0) && - Item1.Equals(other.Item1) && - Item2.Equals(other.Item2) && - Item3.Equals(other.Item3) && - Item4.Equals(other.Item4) && - Item5.Equals(other.Item5); - } + public readonly bool Equals(Vec6d other) => + Item0.Equals(other.Item0) && + Item1.Equals(other.Item1) && + Item2.Equals(other.Item2) && + Item3.Equals(other.Item3) && + Item4.Equals(other.Item4) && + Item5.Equals(other.Item5); /// - public override readonly bool Equals(object? obj) + public readonly override bool Equals(object? obj) { if (obj is null) return false; return obj is Vec6d v && Equals(v); @@ -194,23 +189,17 @@ public override readonly bool Equals(object? obj) /// /// /// - public static bool operator ==(Vec6d a, Vec6d b) - { - return a.Equals(b); - } + public static bool operator ==(Vec6d a, Vec6d b) => a.Equals(b); /// /// /// /// /// - public static bool operator !=(Vec6d a, Vec6d b) - { - return !(a == b); - } + public static bool operator !=(Vec6d a, Vec6d b) => !(a == b); /// - public override readonly int GetHashCode() + public readonly override int GetHashCode() { #if DOTNET_FRAMEWORK || NETSTANDARD2_0 unchecked @@ -229,8 +218,5 @@ public override readonly int GetHashCode() } /// - public override readonly string ToString() - { - return $"{nameof(Vec6d)} ({Item0}, {Item1}, {Item2}, {Item3}, {Item4}, {Item5})"; - } + public readonly override string ToString() => $"{nameof(Vec6d)} ({Item0}, {Item1}, {Item2}, {Item3}, {Item4}, {Item5})"; } diff --git a/src/OpenCvSharp/Modules/core/Struct/Vec/Vec6f.cs b/src/OpenCvSharp/Modules/core/Struct/Vec/Vec6f.cs index db86482b5..5ceb4edbf 100644 --- a/src/OpenCvSharp/Modules/core/Struct/Vec/Vec6f.cs +++ b/src/OpenCvSharp/Modules/core/Struct/Vec/Vec6f.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.CodeAnalysis; using System.Runtime.InteropServices; namespace OpenCvSharp; @@ -142,9 +141,8 @@ public Vec6f(float item0, float item1, float item2, float item3, float item4, fl /// public float this[int i] { - readonly get - { - return i switch + readonly get => + i switch { 0 => Item0, 1 => Item1, @@ -154,7 +152,6 @@ readonly get 5 => Item5, _ => throw new ArgumentOutOfRangeException(nameof(i)) }; - } set { switch (i) @@ -180,18 +177,16 @@ readonly get #pragma warning restore 1591 /// - public readonly bool Equals(Vec6f other) - { - return Item0.Equals(other.Item0) && - Item1.Equals(other.Item1) && - Item2.Equals(other.Item2) && - Item3.Equals(other.Item3) && - Item4.Equals(other.Item4) && - Item5.Equals(other.Item5); - } + public readonly bool Equals(Vec6f other) => + Item0.Equals(other.Item0) && + Item1.Equals(other.Item1) && + Item2.Equals(other.Item2) && + Item3.Equals(other.Item3) && + Item4.Equals(other.Item4) && + Item5.Equals(other.Item5); /// - public override readonly bool Equals(object? obj) + public readonly override bool Equals(object? obj) { if (obj is null) return false; return obj is Vec6f v && Equals(v); @@ -202,23 +197,17 @@ public override readonly bool Equals(object? obj) /// /// /// - public static bool operator ==(Vec6f a, Vec6f b) - { - return a.Equals(b); - } + public static bool operator ==(Vec6f a, Vec6f b) => a.Equals(b); /// /// /// /// /// - public static bool operator !=(Vec6f a, Vec6f b) - { - return !a.Equals(b); - } + public static bool operator !=(Vec6f a, Vec6f b) => !a.Equals(b); /// - public override readonly int GetHashCode() + public readonly override int GetHashCode() { #if DOTNET_FRAMEWORK || NETSTANDARD2_0 unchecked @@ -237,8 +226,5 @@ public override readonly int GetHashCode() } /// - public override readonly string ToString() - { - return $"{nameof(Vec6f)} ({Item0}, {Item1}, {Item2}, {Item3}, {Item4}, {Item5})"; - } + public readonly override string ToString() => $"{nameof(Vec6f)} ({Item0}, {Item1}, {Item2}, {Item3}, {Item4}, {Item5})"; } diff --git a/src/OpenCvSharp/Modules/core/Struct/Vec/Vec6i.cs b/src/OpenCvSharp/Modules/core/Struct/Vec/Vec6i.cs index 9fe02fae5..008066543 100644 --- a/src/OpenCvSharp/Modules/core/Struct/Vec/Vec6i.cs +++ b/src/OpenCvSharp/Modules/core/Struct/Vec/Vec6i.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.CodeAnalysis; using System.Runtime.InteropServices; using OpenCvSharp.Internal.Util; @@ -143,9 +142,8 @@ public Vec6i(int item0, int item1, int item2, int item3, int item4, int item5) /// public int this[int i] { - readonly get - { - return i switch + readonly get => + i switch { 0 => Item0, 1 => Item1, @@ -155,7 +153,6 @@ readonly get 5 => Item5, _ => throw new ArgumentOutOfRangeException(nameof(i)) }; - } set { switch (i) @@ -181,18 +178,16 @@ readonly get #pragma warning restore 1591 /// - public readonly bool Equals(Vec6i other) - { - return Item0 == other.Item0 && - Item1 == other.Item1 && - Item2 == other.Item2 && - Item3 == other.Item3 && - Item4 == other.Item4 && - Item5 == other.Item5; - } + public readonly bool Equals(Vec6i other) => + Item0 == other.Item0 && + Item1 == other.Item1 && + Item2 == other.Item2 && + Item3 == other.Item3 && + Item4 == other.Item4 && + Item5 == other.Item5; /// - public override readonly bool Equals(object? obj) + public readonly override bool Equals(object? obj) { if (obj is null) return false; return obj is Vec6i v && Equals(v); @@ -203,23 +198,17 @@ public override readonly bool Equals(object? obj) /// /// /// - public static bool operator ==(Vec6i a, Vec6i b) - { - return a.Equals(b); - } + public static bool operator ==(Vec6i a, Vec6i b) => a.Equals(b); /// /// /// /// /// - public static bool operator !=(Vec6i a, Vec6i b) - { - return !a.Equals(b); - } + public static bool operator !=(Vec6i a, Vec6i b) => !a.Equals(b); /// - public override readonly int GetHashCode() + public readonly override int GetHashCode() { #if DOTNET_FRAMEWORK || NETSTANDARD2_0 unchecked @@ -238,8 +227,5 @@ public override readonly int GetHashCode() } /// - public override readonly string ToString() - { - return $"{nameof(Vec6i)} ({Item0}, {Item1}, {Item2}, {Item3}, {Item4}, {Item5})"; - } + public readonly override string ToString() => $"{nameof(Vec6i)} ({Item0}, {Item1}, {Item2}, {Item3}, {Item4}, {Item5})"; } diff --git a/src/OpenCvSharp/Modules/core/Struct/Vec/Vec6s.cs b/src/OpenCvSharp/Modules/core/Struct/Vec/Vec6s.cs index d96bcf76a..4ad68e974 100644 --- a/src/OpenCvSharp/Modules/core/Struct/Vec/Vec6s.cs +++ b/src/OpenCvSharp/Modules/core/Struct/Vec/Vec6s.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.CodeAnalysis; using System.Runtime.InteropServices; using OpenCvSharp.Internal.Util; @@ -143,9 +142,8 @@ public Vec6s(short item0, short item1, short item2, short item3, short item4, sh /// public short this[int i] { - readonly get - { - return i switch + readonly get => + i switch { 0 => Item0, 1 => Item1, @@ -155,7 +153,6 @@ readonly get 5 => Item5, _ => throw new ArgumentOutOfRangeException(nameof(i)) }; - } set { switch (i) @@ -184,18 +181,16 @@ readonly get #pragma warning restore 1591 /// - public readonly bool Equals(Vec6s other) - { - return Item0 == other.Item0 && - Item1 == other.Item1 && - Item2 == other.Item2 && - Item3 == other.Item3 && - Item4 == other.Item4 && - Item5 == other.Item5; - } + public readonly bool Equals(Vec6s other) => + Item0 == other.Item0 && + Item1 == other.Item1 && + Item2 == other.Item2 && + Item3 == other.Item3 && + Item4 == other.Item4 && + Item5 == other.Item5; /// - public override readonly bool Equals(object? obj) + public readonly override bool Equals(object? obj) { if (obj is null) return false; return obj is Vec6s v && Equals(v); @@ -206,23 +201,17 @@ public override readonly bool Equals(object? obj) /// /// /// - public static bool operator ==(Vec6s a, Vec6s b) - { - return a.Equals(b); - } + public static bool operator ==(Vec6s a, Vec6s b) => a.Equals(b); /// /// /// /// /// - public static bool operator !=(Vec6s a, Vec6s b) - { - return !a.Equals(b); - } + public static bool operator !=(Vec6s a, Vec6s b) => !a.Equals(b); /// - public override readonly int GetHashCode() + public readonly override int GetHashCode() { #if DOTNET_FRAMEWORK || NETSTANDARD2_0 unchecked @@ -241,8 +230,6 @@ public override readonly int GetHashCode() } /// - public override readonly string ToString() - { - return $"{nameof(Vec6s)} ({Item0}, {Item1}, {Item2}, {Item3}, {Item4}, {Item5})"; - } + public readonly override string ToString() + => $"{nameof(Vec6s)} ({Item0}, {Item1}, {Item2}, {Item3}, {Item4}, {Item5})"; } diff --git a/src/OpenCvSharp/Modules/core/Struct/Vec/Vec6w.cs b/src/OpenCvSharp/Modules/core/Struct/Vec/Vec6w.cs index 8a05916d7..cb4bba6fc 100644 --- a/src/OpenCvSharp/Modules/core/Struct/Vec/Vec6w.cs +++ b/src/OpenCvSharp/Modules/core/Struct/Vec/Vec6w.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.CodeAnalysis; using System.Runtime.InteropServices; using OpenCvSharp.Internal.Util; @@ -143,9 +142,8 @@ public Vec6w(ushort item0, ushort item1, ushort item2, ushort item3, ushort item /// public ushort this[int i] { - readonly get - { - return i switch + readonly get => + i switch { 0 => Item0, 1 => Item1, @@ -155,7 +153,6 @@ readonly get 5 => Item5, _ => throw new ArgumentOutOfRangeException(nameof(i)) }; - } set { switch(i) @@ -184,18 +181,16 @@ readonly get #pragma warning restore 1591 /// - public readonly bool Equals(Vec6w other) - { - return Item0 == other.Item0 && - Item1 == other.Item1 && - Item2 == other.Item2 && - Item3 == other.Item3 && - Item4 == other.Item4 && - Item5 == other.Item5; - } - + public readonly bool Equals(Vec6w other) => + Item0 == other.Item0 && + Item1 == other.Item1 && + Item2 == other.Item2 && + Item3 == other.Item3 && + Item4 == other.Item4 && + Item5 == other.Item5; + /// - public override readonly bool Equals(object? obj) + public readonly override bool Equals(object? obj) { if (obj is null) return false; return obj is Vec6w v && Equals(v); @@ -206,23 +201,17 @@ public override readonly bool Equals(object? obj) /// /// /// - public static bool operator ==(Vec6w a, Vec6w b) - { - return a.Equals(b); - } + public static bool operator ==(Vec6w a, Vec6w b) => a.Equals(b); /// /// /// /// /// - public static bool operator !=(Vec6w a, Vec6w b) - { - return !a.Equals(b); - } + public static bool operator !=(Vec6w a, Vec6w b) => !a.Equals(b); /// - public override readonly int GetHashCode() + public readonly override int GetHashCode() { #if DOTNET_FRAMEWORK || NETSTANDARD2_0 unchecked @@ -241,8 +230,6 @@ public override readonly int GetHashCode() } /// - public override readonly string ToString() - { - return $"{nameof(Vec6w)} ({Item0}, {Item1}, {Item2}, {Item3}, {Item4}, {Item5})"; - } + public readonly override string ToString() + => $"{nameof(Vec6w)} ({Item0}, {Item1}, {Item2}, {Item3}, {Item4}, {Item5})"; } diff --git a/src/OpenCvSharp/Modules/cuda/GpuMat.cs b/src/OpenCvSharp/Modules/cuda/GpuMat.cs index c7760e775..afa4ef70f 100644 --- a/src/OpenCvSharp/Modules/cuda/GpuMat.cs +++ b/src/OpenCvSharp/Modules/cuda/GpuMat.cs @@ -123,7 +123,7 @@ public GpuMat(Size size, MatType type, IntPtr data, long step = 0) public GpuMat(Mat m) { ThrowIfNotAvailable(); - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); ptr = NativeMethods.cuda_GpuMat_new4(m.CvPtr); GC.KeepAlive(m); @@ -138,7 +138,7 @@ public GpuMat(Mat m) public GpuMat(GpuMat m) { ThrowIfNotAvailable(); - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); ptr = NativeMethods.cuda_GpuMat_new5(m.CvPtr); GC.KeepAlive(m); @@ -193,7 +193,7 @@ public GpuMat(Size size, MatType type, Scalar s) public GpuMat(GpuMat m, Range rowRange, Range colRange) { ThrowIfNotAvailable(); - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); ptr = NativeMethods.cuda_GpuMat_new9(m.CvPtr, rowRange, colRange); GC.KeepAlive(m); @@ -209,7 +209,7 @@ public GpuMat(GpuMat m, Range rowRange, Range colRange) public GpuMat(GpuMat m, Rect roi) { ThrowIfNotAvailable(); - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); ptr = NativeMethods.cuda_GpuMat_new10(m.CvPtr, roi); GC.KeepAlive(m); @@ -245,7 +245,7 @@ protected override void DisposeUnmanaged() /// public static explicit operator GpuMat(Mat mat) { - if (mat == null) + if (mat is null) return null; IntPtr ret = NativeMethods.cuda_GpuMat_opToGpuMat(mat.CvPtr); @@ -260,7 +260,7 @@ public static explicit operator GpuMat(Mat mat) /// public static implicit operator Mat(GpuMat gpumat) { - if (gpumat == null) + if (gpumat is null) return null; IntPtr ret = NativeMethods.cuda_GpuMat_opToMat(gpumat.CvPtr); @@ -602,7 +602,7 @@ public override GpuMat this[int x] set { parent.ThrowIfDisposed(); - if (value == null) + if (value is null) throw new ArgumentNullException(nameof(value)); value.ThrowIfDisposed(); @@ -633,7 +633,7 @@ public override GpuMat this[int x] set { parent.ThrowIfDisposed(); - if (value == null) + if (value is null) throw new ArgumentNullException(nameof(value)); value.ThrowIfDisposed(); @@ -716,7 +716,7 @@ public override GpuMat this[int x] set { parent.ThrowIfDisposed(); - if (value == null) + if (value is null) throw new ArgumentNullException(nameof(value)); value.ThrowIfDisposed(); @@ -747,7 +747,7 @@ public override GpuMat this[int x] set { parent.ThrowIfDisposed(); - if (value == null) + if (value is null) throw new ArgumentNullException(nameof(value)); value.ThrowIfDisposed(); @@ -940,7 +940,7 @@ public GpuMat Clone() public void CopyTo(GpuMat m) { ThrowIfDisposed(); - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); NativeMethods.cuda_GpuMat_copyTo1(ptr, m.CvPtr); GC.KeepAlive(this); @@ -955,9 +955,9 @@ public void CopyTo(GpuMat m) public void CopyTo(GpuMat m, GpuMat mask) { ThrowIfDisposed(); - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); - if (mask == null) + if (mask is null) throw new ArgumentNullException(nameof(mask)); NativeMethods.cuda_GpuMat_copyTo2(ptr, m.CvPtr, mask.CvPtr); GC.KeepAlive(this); @@ -976,7 +976,7 @@ public void CopyTo(GpuMat m, GpuMat mask) public void ConvertTo(GpuMat dst, MatType rtype, double alpha = 1, double beta = 0) { ThrowIfDisposed(); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); NativeMethods.cuda_GpuMat_convertTo(ptr, dst.CvPtr, rtype, alpha, beta); GC.KeepAlive(this); @@ -1002,7 +1002,7 @@ public void AssignTo(GpuMat m) public void AssignTo(GpuMat m, MatType type) { ThrowIfDisposed(); - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); NativeMethods.cuda_GpuMat_assignTo(ptr, m.CvPtr, type); GC.KeepAlive(this); @@ -1073,7 +1073,7 @@ public void Create(Size size, MatType type) public void Swap(GpuMat mat) { ThrowIfDisposed(); - if (mat == null) + if (mat is null) throw new ArgumentNullException(nameof(mat)); NativeMethods.cuda_GpuMat_swap(ptr, mat.CvPtr); GC.KeepAlive(this); diff --git a/src/OpenCvSharp/Modules/cuda/Stream.cs b/src/OpenCvSharp/Modules/cuda/Stream.cs index 89bc2b432..021dc244f 100644 --- a/src/OpenCvSharp/Modules/cuda/Stream.cs +++ b/src/OpenCvSharp/Modules/cuda/Stream.cs @@ -56,7 +56,7 @@ public Stream() public Stream(Stream m) { ThrowIfNotAvailable(); - if (m == null) + if (m is null) throw new ArgumentNullException(nameof(m)); ptr = NativeMethods.cuda_Stream_new2(m.CvPtr); GC.KeepAlive(m); @@ -93,7 +93,7 @@ public static Stream Null { get { - if (nullObject == null) + if (nullObject is null) { IntPtr ret = NativeMethods.cuda_Stream_Null(); nullObject = new Stream(ret) {IsEnabledDispose = false}; @@ -147,9 +147,9 @@ public void WaitForCompletion() public void EnqueueDownload(GpuMat src, Mat dst) { ThrowIfDisposed(); - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfDisposed(); @@ -169,9 +169,9 @@ public void EnqueueDownload(GpuMat src, Mat dst) public void EnqueueUpload(Mat src, GpuMat dst) { ThrowIfDisposed(); - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfDisposed(); @@ -190,9 +190,9 @@ public void EnqueueUpload(Mat src, GpuMat dst) public void EnqueueCopy(GpuMat src, GpuMat dst) { ThrowIfDisposed(); - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfDisposed(); @@ -211,7 +211,7 @@ public void EnqueueCopy(GpuMat src, GpuMat dst) public void EnqueueMemSet(GpuMat src, Scalar val) { ThrowIfDisposed(); - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); src.ThrowIfDisposed(); @@ -229,7 +229,7 @@ public void EnqueueMemSet(GpuMat src, Scalar val) public void EnqueueMemSet(GpuMat src, Scalar val, GpuMat mask) { ThrowIfDisposed(); - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); src.ThrowIfDisposed(); @@ -250,9 +250,9 @@ public void EnqueueMemSet(GpuMat src, Scalar val, GpuMat mask) public void EnqueueConvert(GpuMat src, GpuMat dst, int dtype, double a = 1, double b = 0) { ThrowIfDisposed(); - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfDisposed(); @@ -272,7 +272,7 @@ public void EnqueueConvert(GpuMat src, GpuMat dst, int dtype, double a = 1, doub public void EnqueueHostCallback(StreamCallback callback, object userData = null) { ThrowIfDisposed(); - if (callback == null) + if (callback is null) throw new ArgumentNullException(nameof(callback)); if (callbackHandle.IsAllocated) @@ -281,7 +281,7 @@ public void EnqueueHostCallback(StreamCallback callback, object userData = null) userDataHandle.Free(); IntPtr userDataPtr = IntPtr.Zero; - if (userData != null) + if (userData is not null) { userDataHandle = GCHandle.Alloc(userData); userDataPtr = GCHandle.ToIntPtr(userDataHandle); diff --git a/src/OpenCvSharp/Modules/dnn/CvDnn.cs b/src/OpenCvSharp/Modules/dnn/CvDnn.cs index 0445f9461..f9889d0cc 100644 --- a/src/OpenCvSharp/Modules/dnn/CvDnn.cs +++ b/src/OpenCvSharp/Modules/dnn/CvDnn.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.IO; -using System.Linq; +using System.Diagnostics.CodeAnalysis; using OpenCvSharp.Internal; using OpenCvSharp.Internal.Vectors; @@ -50,7 +46,7 @@ public static class CvDnn /// This is shortcut consisting from DarknetImporter and Net::populateNet calls. public static Net? ReadNetFromDarknet(Stream bufferCfg, Stream? bufferModel = null) { - if (bufferCfg == null) + if (bufferCfg is null) throw new ArgumentNullException(nameof(bufferCfg)); return Net.ReadNetFromDarknet( bufferCfg.StreamToArray(), @@ -103,7 +99,7 @@ public static class CvDnn /// This is shortcut consisting from createCaffeImporter and Net::populateNet calls. public static Net? ReadNetFromCaffe(Stream bufferProto, Stream? bufferModel = null) { - if (bufferProto == null) + if (bufferProto is null) throw new ArgumentNullException(nameof(bufferProto)); return Net.ReadNetFromCaffe( bufferProto.StreamToArray(), @@ -144,7 +140,7 @@ public static class CvDnn /// This is shortcut consisting from createTensorflowImporter and Net::populateNet calls. public static Net? ReadNetFromTensorflow(Stream bufferModel, Stream? bufferConfig = null) { - if (bufferModel == null) + if (bufferModel is null) throw new ArgumentNullException(nameof(bufferModel)); return Net.ReadNetFromTensorflow( bufferModel.StreamToArray(), @@ -200,7 +196,7 @@ public static Net ReadNet(string model, string config = "", string framework = " /// public static Mat ReadTorchBlob(string fileName, bool isBinary = true) { - if (fileName == null) + if (fileName is null) throw new ArgumentNullException(nameof(fileName)); NativeMethods.HandleException( @@ -245,7 +241,7 @@ public static Mat ReadTorchBlob(string fileName, bool isBinary = true) /// public static Net? ReadNetFromOnnx(Stream onnxFileStream) { - if (onnxFileStream == null) + if (onnxFileStream is null) throw new ArgumentNullException(nameof(onnxFileStream)); return ReadNetFromOnnx(StreamToArray(onnxFileStream)); } @@ -257,7 +253,7 @@ public static Mat ReadTorchBlob(string fileName, bool isBinary = true) /// public static Mat? ReadTensorFromONNX(string path) { - if (path == null) + if (path is null) throw new ArgumentNullException(nameof(path)); NativeMethods.HandleException( @@ -284,7 +280,7 @@ public static Mat BlobFromImage( Mat image, double scaleFactor = 1.0, Size size = default, Scalar mean = default, bool swapRB = true, bool crop = true) { - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); NativeMethods.HandleException( @@ -312,7 +308,7 @@ public static Mat BlobFromImages( IEnumerable images, double scaleFactor, Size size = default, Scalar mean = default, bool swapRB = true, bool crop = true) { - if (images == null) + if (images is null) throw new ArgumentNullException(nameof(images)); var imagesPointers = images.Select(x => x.CvPtr).ToArray(); @@ -341,12 +337,12 @@ public static Mat BlobFromImages( [SuppressMessage("Maintainability", "CA1508: Avoid dead conditional code")] public static void ShrinkCaffeModel(string src, string dst, IEnumerable? layersTypes = null) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); - var layersTypesArray = layersTypes as string[] ?? layersTypes?.ToArray() ?? Array.Empty(); + var layersTypesArray = layersTypes as string[] ?? layersTypes?.ToArray() ?? []; NativeMethods.HandleException( NativeMethods.dnn_shrinkCaffeModel(src, dst, layersTypesArray, layersTypesArray.Length)); } @@ -358,9 +354,9 @@ public static void ShrinkCaffeModel(string src, string dst, IEnumerable? /// A path to output text file to be created. public static void WriteTextGraph(string model, string output) { - if (model == null) + if (model is null) throw new ArgumentNullException(nameof(model)); - if (output == null) + if (output is null) throw new ArgumentNullException(nameof(output)); NativeMethods.HandleException( @@ -383,9 +379,9 @@ public static void NMSBoxes(IEnumerable bboxes, IEnumerable scores, out int[] indices, float eta = 1.0f, int topK = 0) { - if (bboxes == null) + if (bboxes is null) throw new ArgumentNullException(nameof(bboxes)); - if (scores == null) + if (scores is null) throw new ArgumentNullException(nameof(scores)); // ReSharper disable once IdentifierTypo @@ -415,9 +411,9 @@ public static void NMSBoxes(IEnumerable bboxes, IEnumerable score out int[] indices, float eta = 1.0f, int topK = 0) { - if (bboxes == null) + if (bboxes is null) throw new ArgumentNullException(nameof(bboxes)); - if (scores == null) + if (scores is null) throw new ArgumentNullException(nameof(scores)); // ReSharper disable once IdentifierTypo @@ -447,9 +443,9 @@ public static void NMSBoxes(IEnumerable bboxes, IEnumerable out int[] indices, float eta = 1.0f, int topK = 0) { - if (bboxes == null) + if (bboxes is null) throw new ArgumentNullException(nameof(bboxes)); - if (scores == null) + if (scores is null) throw new ArgumentNullException(nameof(scores)); // ReSharper disable once IdentifierTypo diff --git a/src/OpenCvSharp/Modules/dnn/Net.cs b/src/OpenCvSharp/Modules/dnn/Net.cs index 79adcca90..f9f4da6f5 100644 --- a/src/OpenCvSharp/Modules/dnn/Net.cs +++ b/src/OpenCvSharp/Modules/dnn/Net.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; -using System.Linq; using OpenCvSharp.Internal; using OpenCvSharp.Internal.Vectors; @@ -66,9 +63,9 @@ protected override void DisposeUnmanaged() /// public static Net? ReadFromModelOptimizer(string xml, string bin) { - if (xml == null) + if (xml is null) throw new ArgumentNullException(nameof(xml)); - if (bin == null) + if (bin is null) throw new ArgumentNullException(nameof(bin)); NativeMethods.HandleException( @@ -85,7 +82,7 @@ protected override void DisposeUnmanaged() /// This is shortcut consisting from DarknetImporter and Net::populateNet calls. public static Net? ReadNetFromDarknet(string cfgFile, string? darknetModel = null) { - if (cfgFile == null) + if (cfgFile is null) throw new ArgumentNullException(nameof(cfgFile)); NativeMethods.HandleException( @@ -102,12 +99,12 @@ protected override void DisposeUnmanaged() /// This is shortcut consisting from createCaffeImporter and Net::populateNet calls. public static Net? ReadNetFromDarknet(byte[] bufferCfg, byte[]? bufferModel = null) { - if (bufferCfg == null) + if (bufferCfg is null) throw new ArgumentNullException(nameof(bufferCfg)); var ret = ReadNetFromDarknet( new ReadOnlySpan(bufferCfg), - bufferModel == null ? ReadOnlySpan.Empty : new ReadOnlySpan(bufferModel)); + bufferModel is null ? ReadOnlySpan.Empty : new ReadOnlySpan(bufferModel)); GC.KeepAlive(bufferCfg); GC.KeepAlive(bufferModel); return ret; @@ -149,7 +146,7 @@ protected override void DisposeUnmanaged() /// This is shortcut consisting from createCaffeImporter and Net::populateNet calls. public static Net? ReadNetFromCaffe(string prototxt, string? caffeModel = null) { - if (prototxt == null) + if (prototxt is null) throw new ArgumentNullException(nameof(prototxt)); NativeMethods.HandleException( @@ -166,12 +163,12 @@ protected override void DisposeUnmanaged() /// This is shortcut consisting from createCaffeImporter and Net::populateNet calls. public static Net? ReadNetFromCaffe(byte[] bufferProto, byte[]? bufferModel = null) { - if (bufferProto == null) + if (bufferProto is null) throw new ArgumentNullException(nameof(bufferProto)); var ret = ReadNetFromCaffe( new ReadOnlySpan(bufferProto), - bufferModel == null ? ReadOnlySpan.Empty : new ReadOnlySpan(bufferModel)); + bufferModel is null ? ReadOnlySpan.Empty : new ReadOnlySpan(bufferModel)); GC.KeepAlive(bufferProto); GC.KeepAlive(bufferModel); return ret; @@ -214,7 +211,7 @@ protected override void DisposeUnmanaged() /// This is shortcut consisting from createTensorflowImporter and Net::populateNet calls. public static Net? ReadNetFromTensorflow(string model, string? config = null) { - if (model == null) + if (model is null) throw new ArgumentNullException(nameof(model)); NativeMethods.HandleException( @@ -231,12 +228,12 @@ protected override void DisposeUnmanaged() /// This is shortcut consisting from createTensorflowImporter and Net::populateNet calls. public static Net? ReadNetFromTensorflow(byte[] bufferModel, byte[]? bufferConfig = null) { - if (bufferModel == null) + if (bufferModel is null) throw new ArgumentNullException(nameof(bufferModel)); var ret = ReadNetFromTensorflow( new ReadOnlySpan(bufferModel), - bufferConfig == null ? ReadOnlySpan.Empty : new ReadOnlySpan(bufferConfig)); + bufferConfig is null ? ReadOnlySpan.Empty : new ReadOnlySpan(bufferConfig)); GC.KeepAlive(bufferModel); GC.KeepAlive(bufferConfig); return ret; @@ -278,7 +275,7 @@ protected override void DisposeUnmanaged() /// This is shortcut consisting from createTorchImporter and Net::populateNet calls. public static Net? ReadNetFromTorch(string model, bool isBinary = true) { - if (model == null) + if (model is null) throw new ArgumentNullException(nameof(model)); NativeMethods.HandleException( @@ -328,9 +325,9 @@ public static Net ReadNet(string model, string config = "", string framework = " /// public static Net? ReadNetFromModelOptimizer(string xml, string bin) { - if (xml == null) + if (xml is null) throw new ArgumentNullException(nameof(xml)); - if (bin == null) + if (bin is null) throw new ArgumentNullException(nameof(bin)); NativeMethods.HandleException( @@ -346,7 +343,7 @@ public static Net ReadNet(string model, string config = "", string framework = " // ReSharper disable once InconsistentNaming public static Net? ReadNetFromONNX(string onnxFile) { - if (onnxFile == null) + if (onnxFile is null) throw new ArgumentNullException(nameof(onnxFile)); NativeMethods.HandleException( @@ -362,7 +359,7 @@ public static Net ReadNet(string model, string config = "", string framework = " // ReSharper disable once InconsistentNaming public static Net? ReadNetFromONNX(byte[] onnxFileData) { - if (onnxFileData == null) + if (onnxFileData is null) throw new ArgumentNullException(nameof(onnxFileData)); var ret = ReadNetFromONNX( @@ -433,7 +430,7 @@ public string Dump() /// path to output file with .dot extension public void DumpToFile(string path) { - if (path == null) + if (path is null) throw new ArgumentNullException(nameof(path)); NativeMethods.HandleException( NativeMethods.dnn_Net_dumpToFile(ptr, path)); @@ -447,7 +444,7 @@ public void DumpToFile(string path) /// id of the layer, or -1 if the layer wasn't found. public int GetLayerId(string layer) { - if (layer == null) + if (layer is null) throw new ArgumentNullException(nameof(layer)); ThrowIfDisposed(); @@ -477,9 +474,9 @@ public int GetLayerId(string layer) /// descriptor of the second layer input. public void Connect(string outPin, string inpPin) { - if (outPin == null) + if (outPin is null) throw new ArgumentNullException(nameof(outPin)); - if (inpPin == null) + if (inpPin is null) throw new ArgumentNullException(nameof(inpPin)); NativeMethods.HandleException( @@ -513,7 +510,7 @@ public void Connect(int outLayerId, int outNum, int inpLayerId, int inpNum) /// public void SetInputsNames(IEnumerable inputBlobNames) { - if (inputBlobNames == null) + if (inputBlobNames is null) throw new ArgumentNullException(nameof(inputBlobNames)); var inputBlobNamesArray = inputBlobNames.ToArray(); @@ -544,7 +541,7 @@ public Mat Forward(string? outputName = null) /// If outputName is empty, runs forward pass for the whole network. public void Forward(IEnumerable outputBlobs, string? outputName = null) { - if (outputBlobs == null) + if (outputBlobs is null) throw new ArgumentNullException(nameof(outputBlobs)); var outputBlobsPtrs = outputBlobs.Select(x => x.CvPtr).ToArray(); @@ -562,9 +559,9 @@ public void Forward(IEnumerable outputBlobs, string? outputName = null) /// names for layers which outputs are needed to get public void Forward(IEnumerable outputBlobs, IEnumerable outBlobNames) { - if (outputBlobs == null) + if (outputBlobs is null) throw new ArgumentNullException(nameof(outputBlobs)); - if (outBlobNames == null) + if (outBlobNames is null) throw new ArgumentNullException(nameof(outBlobNames)); var outputBlobsPtrs = outputBlobs.Select(x => x.CvPtr).ToArray(); @@ -628,7 +625,7 @@ public void SetPreferableTarget(Target targetId) /// public void SetInput(Mat blob, string name = "") { - if (blob == null) + if (blob is null) throw new ArgumentNullException(nameof(blob)); NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/dnn_superres/DnnSuperResImpl.cs b/src/OpenCvSharp/Modules/dnn_superres/DnnSuperResImpl.cs index 91833bfd5..1e725624a 100644 --- a/src/OpenCvSharp/Modules/dnn_superres/DnnSuperResImpl.cs +++ b/src/OpenCvSharp/Modules/dnn_superres/DnnSuperResImpl.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; -using System.Linq; using OpenCvSharp.Dnn; using OpenCvSharp.Internal; using OpenCvSharp.Internal.Vectors; @@ -144,9 +141,9 @@ public void SetPreferableTarget(Target targetId) public void Upsample(InputArray img, OutputArray result) { ThrowIfDisposed(); - if (img == null) + if (img is null) throw new ArgumentNullException(nameof(img)); - if (result == null) + if (result is null) throw new ArgumentNullException(nameof(result)); img.ThrowIfDisposed(); result.ThrowIfNotReady(); @@ -171,11 +168,11 @@ public void UpsampleMultioutput( InputArray img, out Mat[] imgsNew, IEnumerable scaleFactors, IEnumerable nodeNames) { ThrowIfDisposed(); - if (img == null) + if (img is null) throw new ArgumentNullException(nameof(img)); - if (scaleFactors == null) + if (scaleFactors is null) throw new ArgumentNullException(nameof(scaleFactors)); - if (nodeNames == null) + if (nodeNames is null) throw new ArgumentNullException(nameof(nodeNames)); using var imgsNewVec = new VectorOfMat(); diff --git a/src/OpenCvSharp/Modules/face/FaceRecognizer/BasicFaceRecognizer.cs b/src/OpenCvSharp/Modules/face/FaceRecognizer/BasicFaceRecognizer.cs index 9427b49bc..e66cdda7d 100644 --- a/src/OpenCvSharp/Modules/face/FaceRecognizer/BasicFaceRecognizer.cs +++ b/src/OpenCvSharp/Modules/face/FaceRecognizer/BasicFaceRecognizer.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; using OpenCvSharp.Internal.Vectors; namespace OpenCvSharp.Face; diff --git a/src/OpenCvSharp/Modules/face/FaceRecognizer/EigenFaceRecognizer.cs b/src/OpenCvSharp/Modules/face/FaceRecognizer/EigenFaceRecognizer.cs index 739ced42c..9e6860fc5 100644 --- a/src/OpenCvSharp/Modules/face/FaceRecognizer/EigenFaceRecognizer.cs +++ b/src/OpenCvSharp/Modules/face/FaceRecognizer/EigenFaceRecognizer.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp.Face; @@ -67,12 +66,8 @@ public static EigenFaceRecognizer Create(int numComponents = 0, double threshold return detector; } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/face/FaceRecognizer/FaceRecognizer.cs b/src/OpenCvSharp/Modules/face/FaceRecognizer/FaceRecognizer.cs index fdb13236f..40057424b 100644 --- a/src/OpenCvSharp/Modules/face/FaceRecognizer/FaceRecognizer.cs +++ b/src/OpenCvSharp/Modules/face/FaceRecognizer/FaceRecognizer.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; using OpenCvSharp.Internal.Vectors; namespace OpenCvSharp.Face; @@ -21,9 +18,9 @@ public abstract class FaceRecognizer : Algorithm public virtual void Train(IEnumerable src, IEnumerable labels) { ThrowIfDisposed(); - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (labels == null) + if (labels is null) throw new ArgumentNullException(nameof(labels)); var srcArray = src.Select(x => x.CvPtr).ToArray(); @@ -44,9 +41,9 @@ public virtual void Train(IEnumerable src, IEnumerable labels) public void Update(IEnumerable src, IEnumerable labels) { ThrowIfDisposed(); - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (labels == null) + if (labels is null) throw new ArgumentNullException(nameof(labels)); var srcArray = src.Select(x => x.CvPtr).ToArray(); @@ -66,7 +63,7 @@ public void Update(IEnumerable src, IEnumerable labels) public virtual int Predict(InputArray src) { ThrowIfDisposed(); - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); src.ThrowIfDisposed(); @@ -86,7 +83,7 @@ public virtual int Predict(InputArray src) public virtual void Predict(InputArray src, out int label, out double confidence) { ThrowIfDisposed(); - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); src.ThrowIfDisposed(); @@ -103,7 +100,7 @@ public virtual void Predict(InputArray src, out int label, out double confidence public virtual void Write(string fileName) { ThrowIfDisposed(); - if (fileName == null) + if (fileName is null) throw new ArgumentNullException(nameof(fileName)); NativeMethods.HandleException( @@ -117,7 +114,7 @@ public virtual void Write(string fileName) public virtual void Read(string fileName) { ThrowIfDisposed(); - if (fileName == null) + if (fileName is null) throw new ArgumentNullException(nameof(fileName)); NativeMethods.HandleException( @@ -132,7 +129,7 @@ public virtual void Read(string fileName) public override void Write(FileStorage fs) { ThrowIfDisposed(); - if (fs == null) + if (fs is null) throw new ArgumentNullException(nameof(fs)); fs.ThrowIfDisposed(); @@ -150,7 +147,7 @@ public override void Write(FileStorage fs) public override void Read(FileNode fn) { ThrowIfDisposed(); - if (fn == null) + if (fn is null) throw new ArgumentNullException(nameof(fn)); fn.ThrowIfDisposed(); @@ -169,7 +166,7 @@ public override void Read(FileNode fn) public void SetLabelInfo(int label, string strInfo) { ThrowIfDisposed(); - if (strInfo == null) + if (strInfo is null) throw new ArgumentNullException(nameof(strInfo)); NativeMethods.HandleException( @@ -204,7 +201,7 @@ public string GetLabelInfo(int label) public int[] GetLabelsByString(string str) { ThrowIfDisposed(); - if (str == null) + if (str is null) throw new ArgumentNullException(nameof(str)); using var resultVector = new VectorOfInt32(); NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/face/FaceRecognizer/FisherFaceRecognizer.cs b/src/OpenCvSharp/Modules/face/FaceRecognizer/FisherFaceRecognizer.cs index 47934b8fd..c52b9d009 100644 --- a/src/OpenCvSharp/Modules/face/FaceRecognizer/FisherFaceRecognizer.cs +++ b/src/OpenCvSharp/Modules/face/FaceRecognizer/FisherFaceRecognizer.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp.Face; @@ -67,12 +66,8 @@ public static FisherFaceRecognizer Create(int numComponents = 0, double threshol return detector; } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/face/FaceRecognizer/LBPHFaceRecognizer.cs b/src/OpenCvSharp/Modules/face/FaceRecognizer/LBPHFaceRecognizer.cs index bcfa9b325..35a33b172 100644 --- a/src/OpenCvSharp/Modules/face/FaceRecognizer/LBPHFaceRecognizer.cs +++ b/src/OpenCvSharp/Modules/face/FaceRecognizer/LBPHFaceRecognizer.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; using OpenCvSharp.Internal.Vectors; namespace OpenCvSharp.Face; @@ -230,12 +229,8 @@ public virtual Mat GetLabels() #endregion - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/face/Facemark/Facemark.cs b/src/OpenCvSharp/Modules/face/Facemark/Facemark.cs index 2747bea71..13fce514f 100644 --- a/src/OpenCvSharp/Modules/face/Facemark/Facemark.cs +++ b/src/OpenCvSharp/Modules/face/Facemark/Facemark.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; using OpenCvSharp.Internal.Vectors; // ReSharper disable UnusedMember.Global @@ -40,9 +39,9 @@ public virtual bool Fit( out Point2f[][] landmarks) { ThrowIfDisposed(); - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); - if (faces == null) + if (faces is null) throw new ArgumentNullException(nameof(faces)); image.ThrowIfDisposed(); faces.ThrowIfDisposed(); diff --git a/src/OpenCvSharp/Modules/face/Facemark/FacemarkAAM.cs b/src/OpenCvSharp/Modules/face/Facemark/FacemarkAAM.cs index 11957aa1a..b6595d701 100644 --- a/src/OpenCvSharp/Modules/face/Facemark/FacemarkAAM.cs +++ b/src/OpenCvSharp/Modules/face/Facemark/FacemarkAAM.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Generic; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; using OpenCvSharp.Internal.Vectors; namespace OpenCvSharp.Face; @@ -96,7 +94,7 @@ public string ModelFilename } set { - if (value == null) + if (value is null) throw new ArgumentNullException(nameof(value)); NativeMethods.HandleException( NativeMethods.face_FacemarkAAM_Params_model_filename_set(ptr, value)); @@ -231,7 +229,7 @@ public IReadOnlyList Scales /// public void Read(FileNode fn) { - if (fn == null) + if (fn is null) throw new ArgumentNullException(nameof(fn)); NativeMethods.HandleException( NativeMethods.face_FacemarkAAM_Params_write(ptr, fn.CvPtr)); @@ -244,7 +242,7 @@ public void Read(FileNode fn) /// public void Write(FileStorage fs) { - if (fs == null) + if (fs is null) throw new ArgumentNullException(nameof(fs)); NativeMethods.HandleException( NativeMethods.face_FacemarkAAM_Params_write(ptr, fs.CvPtr)); @@ -252,12 +250,8 @@ public void Write(FileStorage fs) } } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/face/Facemark/FacemarkLBF.cs b/src/OpenCvSharp/Modules/face/Facemark/FacemarkLBF.cs index 607b9d225..88225a467 100644 --- a/src/OpenCvSharp/Modules/face/Facemark/FacemarkLBF.cs +++ b/src/OpenCvSharp/Modules/face/Facemark/FacemarkLBF.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Generic; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; using OpenCvSharp.Internal.Vectors; namespace OpenCvSharp.Face; @@ -116,7 +114,7 @@ public string CascadeFace } set { - if (value == null) + if (value is null) throw new ArgumentNullException(nameof(value)); NativeMethods.HandleException( NativeMethods.face_FacemarkLBF_Params_cascade_face_set(ptr, value)); @@ -279,7 +277,7 @@ public string ModelFilename } set { - if (value == null) + if (value is null) throw new ArgumentNullException(nameof(value)); NativeMethods.HandleException( NativeMethods.face_FacemarkLBF_Params_model_filename_set(ptr, value)); @@ -330,11 +328,7 @@ public uint Seed /// /// /// -#if NET40 - public int[] FeatsM -#else public IReadOnlyList FeatsM -#endif { get { @@ -356,11 +350,7 @@ public IReadOnlyList FeatsM /// /// /// -#if NET40 - public double[] RadiusM -#else public IReadOnlyList RadiusM -#endif { get { @@ -382,11 +372,7 @@ public IReadOnlyList RadiusM /// /// index of facemark points on pupils of left and right eye /// -#if NET40 - public int[] Pupils0 -#else public IReadOnlyList Pupils0 -#endif { get { @@ -408,11 +394,7 @@ public IReadOnlyList Pupils0 /// /// index of facemark points on pupils of left and right eye /// -#if NET40 - public int[] Pupils1 -#else public IReadOnlyList Pupils1 -#endif { get { @@ -458,7 +440,7 @@ public Rect DetectROI /// public void Read(FileNode fn) { - if (fn == null) + if (fn is null) throw new ArgumentNullException(nameof(fn)); NativeMethods.HandleException( NativeMethods.face_FacemarkLBF_Params_write(ptr, fn.CvPtr)); @@ -471,7 +453,7 @@ public void Read(FileNode fn) /// public void Write(FileStorage fs) { - if (fs == null) + if (fs is null) throw new ArgumentNullException(nameof(fs)); NativeMethods.HandleException( NativeMethods.face_FacemarkLBF_Params_write(ptr, fs.CvPtr)); @@ -479,12 +461,8 @@ public void Write(FileStorage fs) } } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/features2d/AKAZE.cs b/src/OpenCvSharp/Modules/features2d/AKAZE.cs index a60157e90..600fd9fdf 100644 --- a/src/OpenCvSharp/Modules/features2d/AKAZE.cs +++ b/src/OpenCvSharp/Modules/features2d/AKAZE.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; // ReSharper disable UnusedMember.Global @@ -224,12 +223,8 @@ public KAZEDiffusivityType DiffusivityType } } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/features2d/AgastFeatureDetector.cs b/src/OpenCvSharp/Modules/features2d/AgastFeatureDetector.cs index 4f10bc09f..881453190 100644 --- a/src/OpenCvSharp/Modules/features2d/AgastFeatureDetector.cs +++ b/src/OpenCvSharp/Modules/features2d/AgastFeatureDetector.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; // ReSharper disable UnusedMember.Global // ReSharper disable InconsistentNaming @@ -116,12 +115,8 @@ public DetectorType Type } } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/features2d/BFMatcher.cs b/src/OpenCvSharp/Modules/features2d/BFMatcher.cs index 4b20bdd97..7c23f4c8f 100644 --- a/src/OpenCvSharp/Modules/features2d/BFMatcher.cs +++ b/src/OpenCvSharp/Modules/features2d/BFMatcher.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp; @@ -60,7 +59,7 @@ internal BFMatcher(IntPtr rawPtr) /// protected override void DisposeManaged() { - if (detectorPtr != null) + if (detectorPtr is not null) { detectorPtr.Dispose(); detectorPtr = null; @@ -74,7 +73,7 @@ protected override void DisposeManaged() /// protected override void DisposeUnmanaged() { - if (detectorPtr == null && ptr != IntPtr.Zero) + if (detectorPtr is null && ptr != IntPtr.Zero) NativeMethods.HandleException( NativeMethods.features2d_BFMatcher_delete(ptr)); ptr = IntPtr.Zero; @@ -94,12 +93,8 @@ public override bool IsMaskSupported() return ret != 0; } - internal new class Ptr : OpenCvSharp.Ptr + internal new class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/features2d/BOWImgDescriptorExtractor.cs b/src/OpenCvSharp/Modules/features2d/BOWImgDescriptorExtractor.cs index 0f2edbfca..e416ea52a 100644 --- a/src/OpenCvSharp/Modules/features2d/BOWImgDescriptorExtractor.cs +++ b/src/OpenCvSharp/Modules/features2d/BOWImgDescriptorExtractor.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; using OpenCvSharp.Internal.Vectors; namespace OpenCvSharp; @@ -18,9 +17,9 @@ public class BOWImgDescriptorExtractor : DisposableCvObject /// Descriptor matcher that is used to find the nearest word of the trained vocabulary for each keypoint descriptor of the image. public BOWImgDescriptorExtractor(Feature2D dextractor, DescriptorMatcher dmatcher) { - if (dextractor == null) + if (dextractor is null) throw new ArgumentNullException(nameof(dextractor)); - if (dmatcher == null) + if (dmatcher is null) throw new ArgumentNullException(nameof(dmatcher)); NativeMethods.HandleException( @@ -36,7 +35,7 @@ public BOWImgDescriptorExtractor(Feature2D dextractor, DescriptorMatcher dmatche /// Descriptor matcher that is used to find the nearest word of the trained vocabulary for each keypoint descriptor of the image. public BOWImgDescriptorExtractor(DescriptorMatcher dmatcher) { - if (dmatcher == null) + if (dmatcher is null) throw new ArgumentNullException(nameof(dmatcher)); NativeMethods.HandleException( @@ -62,7 +61,7 @@ protected override void DisposeUnmanaged() public void SetVocabulary(Mat vocabulary) { ThrowIfDisposed(); - if (vocabulary == null) + if (vocabulary is null) throw new ArgumentNullException(nameof(vocabulary)); NativeMethods.HandleException( NativeMethods.features2d_BOWImgDescriptorExtractor_setVocabulary(ptr, vocabulary.CvPtr)); @@ -96,9 +95,9 @@ public void Compute(InputArray image, ref KeyPoint[] keypoints, OutputArray imgD out int[][] pointIdxsOfClusters, Mat? descriptors = null) { ThrowIfDisposed(); - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); - if (imgDescriptor == null) + if (imgDescriptor is null) throw new ArgumentNullException(nameof(imgDescriptor)); using (var keypointsVec = new VectorOfKeyPoint(keypoints)) @@ -126,9 +125,9 @@ public void Compute(InputArray image, ref KeyPoint[] keypoints, OutputArray imgD public void Compute(InputArray keypointDescriptors, OutputArray imgDescriptor, out int[][] pointIdxsOfClusters) { ThrowIfDisposed(); - if (keypointDescriptors == null) + if (keypointDescriptors is null) throw new ArgumentNullException(nameof(keypointDescriptors)); - if (imgDescriptor == null) + if (imgDescriptor is null) throw new ArgumentNullException(nameof(imgDescriptor)); using (var pointIdxsOfClustersVec = new VectorOfVectorInt32()) @@ -152,9 +151,9 @@ public void Compute(InputArray keypointDescriptors, OutputArray imgDescriptor, o public void Compute2(Mat image, ref KeyPoint[] keypoints, Mat imgDescriptor) { ThrowIfDisposed(); - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); - if (imgDescriptor == null) + if (imgDescriptor is null) throw new ArgumentNullException(nameof(imgDescriptor)); using (var keypointsVec = new VectorOfKeyPoint(keypoints)) diff --git a/src/OpenCvSharp/Modules/features2d/BOWKMeansTrainer.cs b/src/OpenCvSharp/Modules/features2d/BOWKMeansTrainer.cs index 29c057dc0..4d6c16faa 100644 --- a/src/OpenCvSharp/Modules/features2d/BOWKMeansTrainer.cs +++ b/src/OpenCvSharp/Modules/features2d/BOWKMeansTrainer.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp; @@ -57,7 +56,7 @@ public override Mat Cluster() /// public override Mat Cluster(Mat descriptors) { - if (descriptors == null) + if (descriptors is null) throw new ArgumentNullException(nameof(descriptors)); ThrowIfDisposed(); descriptors.ThrowIfDisposed(); diff --git a/src/OpenCvSharp/Modules/features2d/BOWTrainer.cs b/src/OpenCvSharp/Modules/features2d/BOWTrainer.cs index d23c5b69d..9f085070d 100644 --- a/src/OpenCvSharp/Modules/features2d/BOWTrainer.cs +++ b/src/OpenCvSharp/Modules/features2d/BOWTrainer.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; using OpenCvSharp.Internal.Vectors; namespace OpenCvSharp; @@ -18,7 +17,7 @@ public abstract class BOWTrainer : DisposableCvObject /// The training set is clustered using clustermethod to construct the vocabulary. public void Add(Mat descriptors) { - if (descriptors == null) + if (descriptors is null) throw new ArgumentNullException(nameof(descriptors)); NativeMethods.HandleException( NativeMethods.features2d_BOWTrainer_add(ptr, descriptors.CvPtr)); diff --git a/src/OpenCvSharp/Modules/features2d/BRISK.cs b/src/OpenCvSharp/Modules/features2d/BRISK.cs index ec9ea540e..93cf5bb6d 100644 --- a/src/OpenCvSharp/Modules/features2d/BRISK.cs +++ b/src/OpenCvSharp/Modules/features2d/BRISK.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp; @@ -59,9 +56,9 @@ public static BRISK Create( float dMin = 8.2f, IEnumerable? indexChange = null) { - if (radiusList == null) + if (radiusList is null) throw new ArgumentNullException(nameof(radiusList)); - if (numberList == null) + if (numberList is null) throw new ArgumentNullException(nameof(numberList)); var radiusListArray = radiusList.ToArray(); @@ -99,9 +96,9 @@ public static BRISK Create( float dMin = 8.2f, IEnumerable? indexChange = null) { - if (radiusList == null) + if (radiusList is null) throw new ArgumentNullException(nameof(radiusList)); - if (numberList == null) + if (numberList is null) throw new ArgumentNullException(nameof(numberList)); var radiusListArray = radiusList.ToArray(); @@ -130,12 +127,8 @@ protected override void DisposeManaged() base.DisposeManaged(); } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/features2d/DenseFeatureDetector.cs b/src/OpenCvSharp/Modules/features2d/DenseFeatureDetector.cs index 5fcb72480..1f80074af 100644 --- a/src/OpenCvSharp/Modules/features2d/DenseFeatureDetector.cs +++ b/src/OpenCvSharp/Modules/features2d/DenseFeatureDetector.cs @@ -83,7 +83,7 @@ protected override void Dispose(bool disposing) { } // releases unmanaged resources - if (detectorPtr != null) + if (detectorPtr is not null) { detectorPtr.Dispose(); detectorPtr = null; diff --git a/src/OpenCvSharp/Modules/features2d/DescriptorMatcher.cs b/src/OpenCvSharp/Modules/features2d/DescriptorMatcher.cs index a6f6e158f..c51a6622f 100644 --- a/src/OpenCvSharp/Modules/features2d/DescriptorMatcher.cs +++ b/src/OpenCvSharp/Modules/features2d/DescriptorMatcher.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; using OpenCvSharp.Internal.Vectors; namespace OpenCvSharp; @@ -115,7 +112,7 @@ protected override void DisposeManaged() public virtual void Add(IEnumerable descriptors) { ThrowIfDisposed(); - if (descriptors == null) + if (descriptors is null) throw new ArgumentNullException(nameof(descriptors)); var descriptorsArray = descriptors.ToArray(); @@ -210,9 +207,9 @@ public virtual void Train() public DMatch[] Match(Mat queryDescriptors, Mat trainDescriptors, Mat? mask = null) { ThrowIfDisposed(); - if (queryDescriptors == null) + if (queryDescriptors is null) throw new ArgumentNullException(nameof(queryDescriptors)); - if (trainDescriptors == null) + if (trainDescriptors is null) throw new ArgumentNullException(nameof(trainDescriptors)); using var matchesVec = new VectorOfDMatch(); NativeMethods.HandleException( @@ -242,9 +239,9 @@ public DMatch[][] KnnMatch(Mat queryDescriptors, Mat trainDescriptors, int k, Mat? mask = null, bool compactResult = false) { ThrowIfDisposed(); - if (queryDescriptors == null) + if (queryDescriptors is null) throw new ArgumentNullException(nameof(queryDescriptors)); - if (trainDescriptors == null) + if (trainDescriptors is null) throw new ArgumentNullException(nameof(trainDescriptors)); using var matchesVec = new VectorOfVectorDMatch(); NativeMethods.HandleException( @@ -272,9 +269,9 @@ public DMatch[][] RadiusMatch(Mat queryDescriptors, Mat trainDescriptors, float maxDistance, Mat? mask = null, bool compactResult = false) { ThrowIfDisposed(); - if (queryDescriptors == null) + if (queryDescriptors is null) throw new ArgumentNullException(nameof(queryDescriptors)); - if (trainDescriptors == null) + if (trainDescriptors is null) throw new ArgumentNullException(nameof(trainDescriptors)); using var matchesVec = new VectorOfVectorDMatch(); @@ -298,11 +295,11 @@ public DMatch[][] RadiusMatch(Mat queryDescriptors, Mat trainDescriptors, public DMatch[] Match(Mat queryDescriptors, Mat[]? masks = null) { ThrowIfDisposed(); - if (queryDescriptors == null) + if (queryDescriptors is null) throw new ArgumentNullException(nameof(queryDescriptors)); var masksPtrs = Array.Empty(); - if (masks != null) + if (masks is not null) { masksPtrs = masks.Select(x => x.CvPtr).ToArray(); } @@ -331,11 +328,11 @@ public DMatch[] Match(Mat queryDescriptors, Mat[]? masks = null) public DMatch[][] KnnMatch(Mat queryDescriptors, int k, Mat[]? masks = null, bool compactResult = false) { ThrowIfDisposed(); - if (queryDescriptors == null) + if (queryDescriptors is null) throw new ArgumentNullException(nameof(queryDescriptors)); var masksPtrs = Array.Empty(); - if (masks != null) + if (masks is not null) { masksPtrs = masks.Select(x => x.CvPtr).ToArray(); } @@ -363,11 +360,11 @@ public DMatch[][] KnnMatch(Mat queryDescriptors, int k, Mat[]? masks = null, boo public DMatch[][] RadiusMatch(Mat queryDescriptors, float maxDistance, Mat[]? masks = null, bool compactResult = false) { ThrowIfDisposed(); - if (queryDescriptors == null) + if (queryDescriptors is null) throw new ArgumentNullException(nameof(queryDescriptors)); var masksPtrs = Array.Empty(); - if (masks != null) + if (masks is not null) { masksPtrs = masks.Select(x => x.CvPtr).ToArray(); } @@ -387,12 +384,8 @@ public DMatch[][] RadiusMatch(Mat queryDescriptors, float maxDistance, Mat[]? ma #endregion - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/features2d/Enum/AKAZEDescriptorType.cs b/src/OpenCvSharp/Modules/features2d/Enum/AKAZEDescriptorType.cs index 500535e06..7f7d8db72 100644 --- a/src/OpenCvSharp/Modules/features2d/Enum/AKAZEDescriptorType.cs +++ b/src/OpenCvSharp/Modules/features2d/Enum/AKAZEDescriptorType.cs @@ -1,4 +1,6 @@ -#pragma warning disable CA1008 // Enums should have zero value +// ReSharper disable InconsistentNaming +// ReSharper disable IdentifierTypo +#pragma warning disable CA1008 // Enums should have zero value namespace OpenCvSharp; diff --git a/src/OpenCvSharp/Modules/features2d/Enum/DrawMatchesFlags.cs b/src/OpenCvSharp/Modules/features2d/Enum/DrawMatchesFlags.cs index 30593d2c0..8ba000707 100644 --- a/src/OpenCvSharp/Modules/features2d/Enum/DrawMatchesFlags.cs +++ b/src/OpenCvSharp/Modules/features2d/Enum/DrawMatchesFlags.cs @@ -1,6 +1,4 @@ -using System; - -#pragma warning disable CA1008 // Enums should have zero value +#pragma warning disable CA1008 // Enums should have zero value namespace OpenCvSharp; diff --git a/src/OpenCvSharp/Modules/features2d/FastFeatureDetector.cs b/src/OpenCvSharp/Modules/features2d/FastFeatureDetector.cs index 402eb4c4a..278c69053 100644 --- a/src/OpenCvSharp/Modules/features2d/FastFeatureDetector.cs +++ b/src/OpenCvSharp/Modules/features2d/FastFeatureDetector.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp; @@ -107,12 +106,8 @@ public int Type } } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/features2d/Feature2D.cs b/src/OpenCvSharp/Modules/features2d/Feature2D.cs index 5827b9cbc..8e5e04e10 100644 --- a/src/OpenCvSharp/Modules/features2d/Feature2D.cs +++ b/src/OpenCvSharp/Modules/features2d/Feature2D.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; using OpenCvSharp.Internal.Vectors; namespace OpenCvSharp; @@ -89,7 +86,7 @@ public virtual int DefaultNorm /// The detected keypoints. public KeyPoint[] Detect(Mat image, Mat? mask = null) { - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); ThrowIfDisposed(); @@ -118,7 +115,7 @@ public KeyPoint[] Detect(Mat image, Mat? mask = null) /// The detected keypoints. public KeyPoint[] Detect(InputArray image, Mat? mask = null) { - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); ThrowIfDisposed(); @@ -146,7 +143,7 @@ public KeyPoint[] Detect(InputArray image, Mat? mask = null) /// Collection of keypoints detected in an input images. keypoints[i] is a set of keypoints detected in an images[i]. public KeyPoint[][] Detect(IEnumerable images, IEnumerable? masks = null) { - if (images == null) + if (images is null) throw new ArgumentNullException(nameof(images)); ThrowIfDisposed(); @@ -157,7 +154,7 @@ public KeyPoint[][] Detect(IEnumerable images, IEnumerable? masks = nu using var keypoints = new VectorOfVectorKeyPoint(); IntPtr[]? masksPtr = null; - if (masks != null) + if (masks is not null) { masksPtr = masks.Select(x => x.CvPtr).ToArray(); if (masksPtr.Length != imagesArray.Length) @@ -182,9 +179,9 @@ public KeyPoint[][] Detect(IEnumerable images, IEnumerable? masks = nu /// Computed descriptors. Row i is the descriptor for KeyPoint i.param> public virtual void Compute(InputArray image, ref KeyPoint[] keypoints, OutputArray descriptors) { - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); - if (descriptors == null) + if (descriptors is null) throw new ArgumentNullException(nameof(descriptors)); ThrowIfDisposed(); @@ -208,9 +205,9 @@ public virtual void Compute(InputArray image, ref KeyPoint[] keypoints, OutputAr public virtual void Compute(IEnumerable images, ref KeyPoint[][] keypoints, IEnumerable descriptors) { ThrowIfDisposed(); - if (images == null) + if (images is null) throw new ArgumentNullException(nameof(images)); - if (descriptors == null) + if (descriptors is null) throw new ArgumentNullException(nameof(descriptors)); var imagesPtrs = images.Select(x => x.CvPtr).ToArray(); @@ -245,9 +242,9 @@ public virtual void DetectAndCompute( bool useProvidedKeypoints = false) { ThrowIfDisposed(); - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); - if (descriptors == null) + if (descriptors is null) throw new ArgumentNullException(nameof(descriptors)); image.ThrowIfDisposed(); mask?.ThrowIfDisposed(); diff --git a/src/OpenCvSharp/Modules/features2d/FlannBasedMatcher.cs b/src/OpenCvSharp/Modules/features2d/FlannBasedMatcher.cs index 9cda7e124..6a9b4bf77 100644 --- a/src/OpenCvSharp/Modules/features2d/FlannBasedMatcher.cs +++ b/src/OpenCvSharp/Modules/features2d/FlannBasedMatcher.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using OpenCvSharp.Flann; +using OpenCvSharp.Flann; using OpenCvSharp.Internal; namespace OpenCvSharp; @@ -71,7 +68,7 @@ internal FlannBasedMatcher(IntPtr rawPtr) /// protected override void DisposeManaged() { - if (detectorPtr != null) + if (detectorPtr is not null) { detectorPtr.Dispose(); detectorPtr = null; @@ -85,7 +82,7 @@ protected override void DisposeManaged() /// protected override void DisposeUnmanaged() { - if (detectorPtr == null && ptr != IntPtr.Zero) + if (detectorPtr is null && ptr != IntPtr.Zero) NativeMethods.HandleException( NativeMethods.features2d_FlannBasedMatcher_delete(ptr)); indexParams = null; @@ -114,7 +111,7 @@ public override bool IsMaskSupported() public override void Add(IEnumerable descriptors) { ThrowIfDisposed(); - if (descriptors == null) + if (descriptors is null) throw new ArgumentNullException(nameof(descriptors)); var descriptorsArray = descriptors.ToArray(); @@ -156,12 +153,8 @@ public override void Train() GC.KeepAlive(this); } - internal new class Ptr : OpenCvSharp.Ptr + internal new class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/features2d/GFTTDetector.cs b/src/OpenCvSharp/Modules/features2d/GFTTDetector.cs index a30ab6456..daeb691d5 100644 --- a/src/OpenCvSharp/Modules/features2d/GFTTDetector.cs +++ b/src/OpenCvSharp/Modules/features2d/GFTTDetector.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp; @@ -189,12 +188,8 @@ public double K } } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/features2d/KAZE.cs b/src/OpenCvSharp/Modules/features2d/KAZE.cs index b11bf3a22..e1ded5dc0 100644 --- a/src/OpenCvSharp/Modules/features2d/KAZE.cs +++ b/src/OpenCvSharp/Modules/features2d/KAZE.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp; @@ -187,12 +186,8 @@ public bool Upright } } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/features2d/KeyPointsFilter.cs b/src/OpenCvSharp/Modules/features2d/KeyPointsFilter.cs index fdbea4a18..77f31e299 100644 --- a/src/OpenCvSharp/Modules/features2d/KeyPointsFilter.cs +++ b/src/OpenCvSharp/Modules/features2d/KeyPointsFilter.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Generic; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; using OpenCvSharp.Internal.Vectors; namespace OpenCvSharp; @@ -20,7 +18,7 @@ public static class KeyPointsFilter /// public static KeyPoint[] RunByImageBorder(IEnumerable keypoints, Size imageSize, int borderSize) { - if (keypoints == null) + if (keypoints is null) throw new ArgumentNullException(nameof(keypoints)); using var keypointsVec = new VectorOfKeyPoint(keypoints); @@ -40,7 +38,7 @@ public static KeyPoint[] RunByImageBorder(IEnumerable keypoints, Size public static KeyPoint[] RunByKeypointSize(IEnumerable keypoints, float minSize, float maxSize = float.MaxValue) { - if (keypoints == null) + if (keypoints is null) throw new ArgumentNullException(nameof(keypoints)); using var keypointsVec = new VectorOfKeyPoint(keypoints); @@ -58,9 +56,9 @@ public static KeyPoint[] RunByKeypointSize(IEnumerable keypoints, floa /// public static KeyPoint[] RunByPixelsMask(IEnumerable keypoints, Mat mask) { - if (keypoints == null) + if (keypoints is null) throw new ArgumentNullException(nameof(keypoints)); - if (mask == null) + if (mask is null) throw new ArgumentNullException(nameof(mask)); mask.ThrowIfDisposed(); @@ -78,7 +76,7 @@ public static KeyPoint[] RunByPixelsMask(IEnumerable keypoints, Mat ma /// public static KeyPoint[] RemoveDuplicated(IEnumerable keypoints) { - if (keypoints == null) + if (keypoints is null) throw new ArgumentNullException(nameof(keypoints)); using var keypointsVec = new VectorOfKeyPoint(keypoints); @@ -94,7 +92,7 @@ public static KeyPoint[] RemoveDuplicated(IEnumerable keypoints) /// public static KeyPoint[] RemoveDuplicatedSorted(IEnumerable keypoints) { - if (keypoints == null) + if (keypoints is null) throw new ArgumentNullException(nameof(keypoints)); using var keypointsVec = new VectorOfKeyPoint(keypoints); @@ -112,7 +110,7 @@ public static KeyPoint[] RemoveDuplicatedSorted(IEnumerable keypoints) /// public static KeyPoint[] RetainBest(IEnumerable keypoints, int nPoints) { - if (keypoints == null) + if (keypoints is null) throw new ArgumentNullException(nameof(keypoints)); using var keypointsVec = new VectorOfKeyPoint(keypoints); diff --git a/src/OpenCvSharp/Modules/features2d/MSER.cs b/src/OpenCvSharp/Modules/features2d/MSER.cs index 5bcfe4930..91a9eb4d1 100644 --- a/src/OpenCvSharp/Modules/features2d/MSER.cs +++ b/src/OpenCvSharp/Modules/features2d/MSER.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; using OpenCvSharp.Internal.Vectors; namespace OpenCvSharp; @@ -165,7 +164,7 @@ public virtual void DetectRegions( InputArray image, out Point[][] msers, out Rect[] bboxes) { ThrowIfDisposed(); - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); image.ThrowIfDisposed(); @@ -185,12 +184,8 @@ public virtual void DetectRegions( #endregion - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/features2d/ORB.cs b/src/OpenCvSharp/Modules/features2d/ORB.cs index 08976803d..ce27b9c08 100644 --- a/src/OpenCvSharp/Modules/features2d/ORB.cs +++ b/src/OpenCvSharp/Modules/features2d/ORB.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp; @@ -279,12 +278,8 @@ public int FastThreshold } } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/features2d/SIFT.cs b/src/OpenCvSharp/Modules/features2d/SIFT.cs index 1a29f43a2..8e8bbb367 100644 --- a/src/OpenCvSharp/Modules/features2d/SIFT.cs +++ b/src/OpenCvSharp/Modules/features2d/SIFT.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp.Features2D; @@ -54,12 +53,8 @@ protected override void DisposeManaged() base.DisposeManaged(); } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/features2d/SimpleBlobDetector.cs b/src/OpenCvSharp/Modules/features2d/SimpleBlobDetector.cs index b0021f961..2d491efc2 100644 --- a/src/OpenCvSharp/Modules/features2d/SimpleBlobDetector.cs +++ b/src/OpenCvSharp/Modules/features2d/SimpleBlobDetector.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.CodeAnalysis; using System.Runtime.InteropServices; using OpenCvSharp.Internal; @@ -209,8 +208,7 @@ protected SimpleBlobDetector(IntPtr p) /// public static SimpleBlobDetector Create(Params? parameters = null) { - if (parameters == null) - parameters = new Params(); + parameters ??= new Params(); NativeMethods.HandleException( NativeMethods.features2d_SimpleBlobDetector_create(ref parameters.Data, out var ptr)); return new SimpleBlobDetector(ptr); @@ -226,12 +224,8 @@ protected override void DisposeManaged() base.DisposeManaged(); } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/flann/Index.cs b/src/OpenCvSharp/Modules/flann/Index.cs index 31511326f..792a995ee 100644 --- a/src/OpenCvSharp/Modules/flann/Index.cs +++ b/src/OpenCvSharp/Modules/flann/Index.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp.Flann; @@ -16,9 +15,9 @@ public class Index : DisposableCvObject /// public Index(InputArray features, IndexParams @params, FlannDistance distType = FlannDistance.L2) { - if (features == null) + if (features is null) throw new ArgumentNullException(nameof(features)); - if (@params == null) + if (@params is null) throw new ArgumentNullException(nameof(@params)); NativeMethods.HandleException( @@ -50,9 +49,9 @@ protected override void DisposeUnmanaged() /// Search parameters public void KnnSearch(float[] queries, out int[] indices, out float[] dists, int knn, SearchParams @params) { - if (queries == null) + if (queries is null) throw new ArgumentNullException(nameof(queries)); - if (@params == null) + if (@params is null) throw new ArgumentNullException(nameof(@params)); if (queries.Length == 0) throw new ArgumentException("empty array", nameof(queries)); @@ -80,13 +79,13 @@ public void KnnSearch(float[] queries, out int[] indices, out float[] dists, int /// Search parameters public void KnnSearch(Mat queries, Mat indices, Mat dists, int knn, SearchParams @params) { - if (queries == null) + if (queries is null) throw new ArgumentNullException(nameof(queries)); - if (indices == null) + if (indices is null) throw new ArgumentNullException(nameof(indices)); - if (dists == null) + if (dists is null) throw new ArgumentNullException(nameof(dists)); - if (@params == null) + if (@params is null) throw new ArgumentNullException(nameof(@params)); NativeMethods.HandleException( @@ -110,9 +109,9 @@ public void KnnSearch(Mat queries, Mat indices, Mat dists, int knn, SearchParams /// Search parameters public void KnnSearch(Mat queries, out int[] indices, out float[] dists, int knn, SearchParams @params) { - if (queries == null) + if (queries is null) throw new ArgumentNullException(nameof(queries)); - if (@params == null) + if (@params is null) throw new ArgumentNullException(nameof(@params)); if (knn < 1) throw new ArgumentOutOfRangeException(nameof(knn)); @@ -140,13 +139,13 @@ public void KnnSearch(Mat queries, out int[] indices, out float[] dists, int knn /// Search parameters public void RadiusSearch(float[] queries, int[] indices, float[] dists, double radius, int maxResults, SearchParams @params) { - if (queries == null) + if (queries is null) throw new ArgumentNullException(nameof(queries)); - if (indices == null) + if (indices is null) throw new ArgumentNullException(nameof(indices)); - if (dists == null) + if (dists is null) throw new ArgumentNullException(nameof(dists)); - if (@params == null) + if (@params is null) throw new ArgumentNullException(nameof(@params)); NativeMethods.HandleException( @@ -168,13 +167,13 @@ public void RadiusSearch(float[] queries, int[] indices, float[] dists, double r /// Search parameters public void RadiusSearch(Mat queries, Mat indices, Mat dists, double radius, int maxResults, SearchParams @params) { - if (queries == null) + if (queries is null) throw new ArgumentNullException(nameof(queries)); - if (indices == null) + if (indices is null) throw new ArgumentNullException(nameof(indices)); - if (dists == null) + if (dists is null) throw new ArgumentNullException(nameof(dists)); - if (@params == null) + if (@params is null) throw new ArgumentNullException(nameof(@params)); NativeMethods.HandleException( @@ -199,13 +198,13 @@ public void RadiusSearch(Mat queries, Mat indices, Mat dists, double radius, int /// Search parameters public void RadiusSearch(Mat queries, int[] indices, float[] dists, double radius, int maxResults, SearchParams @params) { - if (queries == null) + if (queries is null) throw new ArgumentNullException(nameof(queries)); - if (indices == null) + if (indices is null) throw new ArgumentNullException(nameof(indices)); - if (dists == null) + if (dists is null) throw new ArgumentNullException(nameof(dists)); - if (@params == null) + if (@params is null) throw new ArgumentNullException(nameof(@params)); NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/flann/IndexParams/AutotunedIndexParams.cs b/src/OpenCvSharp/Modules/flann/IndexParams/AutotunedIndexParams.cs index 67ffdcb0c..db1e84b3d 100644 --- a/src/OpenCvSharp/Modules/flann/IndexParams/AutotunedIndexParams.cs +++ b/src/OpenCvSharp/Modules/flann/IndexParams/AutotunedIndexParams.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp.Flann; @@ -41,12 +40,8 @@ protected AutotunedIndexParams(OpenCvSharp.Ptr ptrObj) { } - internal new class Ptr : OpenCvSharp.Ptr + internal new class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/flann/IndexParams/CompositeIndexParams.cs b/src/OpenCvSharp/Modules/flann/IndexParams/CompositeIndexParams.cs index fabc48550..9bed06dca 100644 --- a/src/OpenCvSharp/Modules/flann/IndexParams/CompositeIndexParams.cs +++ b/src/OpenCvSharp/Modules/flann/IndexParams/CompositeIndexParams.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp.Flann; @@ -37,12 +36,8 @@ protected CompositeIndexParams(OpenCvSharp.Ptr ptrObj) { } - internal new class Ptr : OpenCvSharp.Ptr + internal new class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/flann/IndexParams/IndexParams.cs b/src/OpenCvSharp/Modules/flann/IndexParams/IndexParams.cs index 064aa82a5..b30032f12 100644 --- a/src/OpenCvSharp/Modules/flann/IndexParams/IndexParams.cs +++ b/src/OpenCvSharp/Modules/flann/IndexParams/IndexParams.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp.Flann; @@ -158,12 +157,8 @@ public void SetAlgorithm(int value) #endregion #endregion - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/flann/IndexParams/KDTreeIndexParams.cs b/src/OpenCvSharp/Modules/flann/IndexParams/KDTreeIndexParams.cs index 3d52b9345..7714ed7ba 100644 --- a/src/OpenCvSharp/Modules/flann/IndexParams/KDTreeIndexParams.cs +++ b/src/OpenCvSharp/Modules/flann/IndexParams/KDTreeIndexParams.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; // ReSharper disable InconsistentNaming @@ -35,12 +34,8 @@ protected KDTreeIndexParams(OpenCvSharp.Ptr ptrObj) { } - internal new class Ptr : OpenCvSharp.Ptr + internal new class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/flann/IndexParams/KMeansIndexParams.cs b/src/OpenCvSharp/Modules/flann/IndexParams/KMeansIndexParams.cs index 0111aa63c..a261fb044 100644 --- a/src/OpenCvSharp/Modules/flann/IndexParams/KMeansIndexParams.cs +++ b/src/OpenCvSharp/Modules/flann/IndexParams/KMeansIndexParams.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp.Flann; @@ -35,12 +34,8 @@ protected KMeansIndexParams(OpenCvSharp.Ptr ptrObj) { } - internal new class Ptr : OpenCvSharp.Ptr + internal new class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/flann/IndexParams/LinearIndexParams.cs b/src/OpenCvSharp/Modules/flann/IndexParams/LinearIndexParams.cs index e086718db..db598394c 100644 --- a/src/OpenCvSharp/Modules/flann/IndexParams/LinearIndexParams.cs +++ b/src/OpenCvSharp/Modules/flann/IndexParams/LinearIndexParams.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp.Flann; @@ -31,12 +30,8 @@ protected LinearIndexParams(OpenCvSharp.Ptr ptrObj) { } - internal new class Ptr : OpenCvSharp.Ptr + internal new class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/flann/IndexParams/LshIndexParams.cs b/src/OpenCvSharp/Modules/flann/IndexParams/LshIndexParams.cs index 51c178996..cb2e2d752 100644 --- a/src/OpenCvSharp/Modules/flann/IndexParams/LshIndexParams.cs +++ b/src/OpenCvSharp/Modules/flann/IndexParams/LshIndexParams.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp.Flann; @@ -34,12 +33,8 @@ protected LshIndexParams(OpenCvSharp.Ptr ptrObj) { } - internal new class Ptr : OpenCvSharp.Ptr + internal new class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/flann/IndexParams/SavedIndexParams.cs b/src/OpenCvSharp/Modules/flann/IndexParams/SavedIndexParams.cs index abef3e24c..4dfd57882 100644 --- a/src/OpenCvSharp/Modules/flann/IndexParams/SavedIndexParams.cs +++ b/src/OpenCvSharp/Modules/flann/IndexParams/SavedIndexParams.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp.Flann; @@ -35,12 +34,8 @@ protected SavedIndexParams(OpenCvSharp.Ptr ptrObj) { } - internal new class Ptr : OpenCvSharp.Ptr + internal new class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/flann/IndexParams/SearchParams.cs b/src/OpenCvSharp/Modules/flann/IndexParams/SearchParams.cs index 4b88f7eb5..2da6f523b 100644 --- a/src/OpenCvSharp/Modules/flann/IndexParams/SearchParams.cs +++ b/src/OpenCvSharp/Modules/flann/IndexParams/SearchParams.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp.Flann; @@ -34,12 +33,8 @@ protected SearchParams(OpenCvSharp.Ptr ptrObj) { } - internal new class Ptr : OpenCvSharp.Ptr + internal new class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/highgui/CvTrackbar.cs b/src/OpenCvSharp/Modules/highgui/CvTrackbar.cs index f9ab1d9c5..4e4143167 100644 --- a/src/OpenCvSharp/Modules/highgui/CvTrackbar.cs +++ b/src/OpenCvSharp/Modules/highgui/CvTrackbar.cs @@ -1,5 +1,4 @@ -using System; -using System.Runtime.InteropServices; +using System.Runtime.InteropServices; using OpenCvSharp.Internal; namespace OpenCvSharp; diff --git a/src/OpenCvSharp/Modules/highgui/Enum/MouseEventFlags.cs b/src/OpenCvSharp/Modules/highgui/Enum/MouseEventFlags.cs index b7c357822..885d5bcb0 100644 --- a/src/OpenCvSharp/Modules/highgui/Enum/MouseEventFlags.cs +++ b/src/OpenCvSharp/Modules/highgui/Enum/MouseEventFlags.cs @@ -1,6 +1,4 @@ -using System; - -namespace OpenCvSharp; +namespace OpenCvSharp; /// /// Mouse Event Flags see cv::MouseCallback diff --git a/src/OpenCvSharp/Modules/highgui/Enum/WindowFlags.cs b/src/OpenCvSharp/Modules/highgui/Enum/WindowFlags.cs index e2eebd89a..8677f5aa8 100644 --- a/src/OpenCvSharp/Modules/highgui/Enum/WindowFlags.cs +++ b/src/OpenCvSharp/Modules/highgui/Enum/WindowFlags.cs @@ -1,4 +1,4 @@ -using System; + // ReSharper disable InconsistentNaming #pragma warning disable CA1008 // Enums should have zero value diff --git a/src/OpenCvSharp/Modules/highgui/MouseCallback.cs b/src/OpenCvSharp/Modules/highgui/MouseCallback.cs index 06d0e0b9c..9e7ac7897 100644 --- a/src/OpenCvSharp/Modules/highgui/MouseCallback.cs +++ b/src/OpenCvSharp/Modules/highgui/MouseCallback.cs @@ -1,5 +1,4 @@ -using System; -using System.Runtime.InteropServices; +using System.Runtime.InteropServices; namespace OpenCvSharp; diff --git a/src/OpenCvSharp/Modules/highgui/TrackbarCallback.cs b/src/OpenCvSharp/Modules/highgui/TrackbarCallback.cs index c4afea50f..ba6755356 100644 --- a/src/OpenCvSharp/Modules/highgui/TrackbarCallback.cs +++ b/src/OpenCvSharp/Modules/highgui/TrackbarCallback.cs @@ -1,5 +1,4 @@ -using System; -using System.Runtime.InteropServices; +using System.Runtime.InteropServices; namespace OpenCvSharp; diff --git a/src/OpenCvSharp/Modules/highgui/Window.cs b/src/OpenCvSharp/Modules/highgui/Window.cs index 6d6fcea76..d7d47e694 100644 --- a/src/OpenCvSharp/Modules/highgui/Window.cs +++ b/src/OpenCvSharp/Modules/highgui/Window.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.InteropServices; +using System.Runtime.InteropServices; using OpenCvSharp.Internal; using OpenCvSharp.Internal.Util; @@ -16,7 +13,7 @@ public class Window : DisposableObject { #region Field - internal static Dictionary Windows = new Dictionary(); + internal static Dictionary Windows = new(); private static uint windowCount; private string name; @@ -84,7 +81,7 @@ public Window(string name, Mat? image = null, WindowFlags flags = WindowFlags.Au NativeMethods.HandleException( NativeMethods.highgui_namedWindow(name, (int) flags)); - if (image != null) + if (image is not null) ShowImage(image); trackbars = new Dictionary(); @@ -117,7 +114,7 @@ protected override void DisposeManaged() { Windows.Remove(name); } - if (callbackHandle != null && callbackHandle.IsAllocated) + if (callbackHandle is not null && callbackHandle.IsAllocated) { callbackHandle.Dispose(); } @@ -143,7 +140,7 @@ public static void DestroyAllWindows() { foreach (var window in Windows.Values) { - if (window == null || window.IsDisposed) + if (window is null || window.IsDisposed) { continue; } @@ -191,12 +188,12 @@ internal MouseCallback? MouseCallback get => mouseCallback; set { - if (callbackHandle != null && callbackHandle.IsAllocated) + if (callbackHandle is not null && callbackHandle.IsAllocated) { callbackHandle.Dispose(); } mouseCallback = value; - callbackHandle = (mouseCallback == null) ? null : new ScopedGCHandle(mouseCallback, GCHandleType.Normal); + callbackHandle = (mouseCallback is null) ? null : new ScopedGCHandle(mouseCallback, GCHandleType.Normal); } } @@ -304,7 +301,7 @@ public void SetProperty(WindowPropertyFlags propId, double propValue) /// Image to be shown. public void ShowImage(Mat? img) { - if (img != null) + if (img is not null) { image = img; NativeMethods.HandleException( @@ -319,7 +316,7 @@ public void ShowImage(Mat? img) /// Image to be shown. public void ShowImage(UMat? img) { - if (img != null) + if (img is not null) { //image = img; NativeMethods.HandleException( @@ -392,9 +389,9 @@ public static void ShowImages(params Mat[] images) /// public static void ShowImages(IEnumerable images, IEnumerable names) { - if (images == null) + if (images is null) throw new ArgumentNullException(nameof(images)); - if (names == null) + if (names is null) throw new ArgumentNullException(nameof(names)); var imagesArray = images.ToArray(); diff --git a/src/OpenCvSharp/Modules/img_hash/AverageHash.cs b/src/OpenCvSharp/Modules/img_hash/AverageHash.cs index 236cce63a..65a7d7810 100644 --- a/src/OpenCvSharp/Modules/img_hash/AverageHash.cs +++ b/src/OpenCvSharp/Modules/img_hash/AverageHash.cs @@ -1,4 +1,3 @@ -using System; using OpenCvSharp.Internal; namespace OpenCvSharp.ImgHash; @@ -57,12 +56,8 @@ public override void Compute(InputArray inputArr, OutputArray outputArr) base.Compute(inputArr, outputArr); }*/ - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/img_hash/BlockMeanHash.cs b/src/OpenCvSharp/Modules/img_hash/BlockMeanHash.cs index b553a93b5..dbd2dc42c 100644 --- a/src/OpenCvSharp/Modules/img_hash/BlockMeanHash.cs +++ b/src/OpenCvSharp/Modules/img_hash/BlockMeanHash.cs @@ -1,4 +1,3 @@ -using System; using OpenCvSharp.Internal; using OpenCvSharp.Internal.Vectors; @@ -86,12 +85,8 @@ public override void Compute(InputArray inputArr, OutputArray outputArr) base.Compute(inputArr, outputArr); }*/ - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/img_hash/ColorMomentHash.cs b/src/OpenCvSharp/Modules/img_hash/ColorMomentHash.cs index cce864cb4..d8287d6b7 100644 --- a/src/OpenCvSharp/Modules/img_hash/ColorMomentHash.cs +++ b/src/OpenCvSharp/Modules/img_hash/ColorMomentHash.cs @@ -1,4 +1,3 @@ -using System; using OpenCvSharp.Internal; namespace OpenCvSharp.ImgHash; @@ -58,12 +57,8 @@ public override void Compute(InputArray inputArr, OutputArray outputArr) base.Compute(inputArr, outputArr); } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/img_hash/ImgHashBase.cs b/src/OpenCvSharp/Modules/img_hash/ImgHashBase.cs index 351d7e6d4..a9171803a 100644 --- a/src/OpenCvSharp/Modules/img_hash/ImgHashBase.cs +++ b/src/OpenCvSharp/Modules/img_hash/ImgHashBase.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp.ImgHash; @@ -19,9 +18,9 @@ public virtual void Compute(InputArray inputArr, OutputArray outputArr) { ThrowIfDisposed(); - if (inputArr == null) + if (inputArr is null) throw new ArgumentNullException(nameof(inputArr)); - if (outputArr == null) + if (outputArr is null) throw new ArgumentNullException(nameof(outputArr)); inputArr.ThrowIfDisposed(); @@ -45,9 +44,9 @@ public virtual double Compare(InputArray hashOne, InputArray hashTwo) { ThrowIfDisposed(); - if (hashOne == null) + if (hashOne is null) throw new ArgumentNullException(nameof(hashOne)); - if (hashTwo == null) + if (hashTwo is null) throw new ArgumentNullException(nameof(hashTwo)); hashOne.ThrowIfDisposed(); diff --git a/src/OpenCvSharp/Modules/img_hash/MarrHildrethHash.cs b/src/OpenCvSharp/Modules/img_hash/MarrHildrethHash.cs index 5404fe5df..ec20638f5 100644 --- a/src/OpenCvSharp/Modules/img_hash/MarrHildrethHash.cs +++ b/src/OpenCvSharp/Modules/img_hash/MarrHildrethHash.cs @@ -1,4 +1,3 @@ -using System; using OpenCvSharp.Internal; namespace OpenCvSharp.ImgHash; @@ -121,12 +120,8 @@ public override void Compute(InputArray inputArr, OutputArray outputArr) base.Compute(inputArr, outputArr); } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/img_hash/PHash.cs b/src/OpenCvSharp/Modules/img_hash/PHash.cs index 719092277..b5794423f 100644 --- a/src/OpenCvSharp/Modules/img_hash/PHash.cs +++ b/src/OpenCvSharp/Modules/img_hash/PHash.cs @@ -1,4 +1,3 @@ -using System; using OpenCvSharp.Internal; namespace OpenCvSharp.ImgHash; @@ -60,12 +59,8 @@ public override void Compute(InputArray inputArr, OutputArray outputArr) base.Compute(inputArr, outputArr); } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/img_hash/RadialVarianceHash.cs b/src/OpenCvSharp/Modules/img_hash/RadialVarianceHash.cs index 4d7d09bd0..01b1e14bc 100644 --- a/src/OpenCvSharp/Modules/img_hash/RadialVarianceHash.cs +++ b/src/OpenCvSharp/Modules/img_hash/RadialVarianceHash.cs @@ -1,4 +1,3 @@ -using System; using OpenCvSharp.Internal; // ReSharper disable UnusedMember.Global @@ -106,12 +105,8 @@ public override void Compute(InputArray inputArr, OutputArray outputArr) base.Compute(inputArr, outputArr); } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/imgcodecs/Enum/ImreadModes.cs b/src/OpenCvSharp/Modules/imgcodecs/Enum/ImreadModes.cs index 16e238012..ed63d72ff 100644 --- a/src/OpenCvSharp/Modules/imgcodecs/Enum/ImreadModes.cs +++ b/src/OpenCvSharp/Modules/imgcodecs/Enum/ImreadModes.cs @@ -1,6 +1,4 @@ -using System; - -#pragma warning disable CA1008 // Enums should have zero value +#pragma warning disable CA1008 // Enums should have zero value #pragma warning disable CA2217 // Do not mark enums with FlagsAttribute namespace OpenCvSharp; diff --git a/src/OpenCvSharp/Modules/imgcodecs/ImageEncodingParam.cs b/src/OpenCvSharp/Modules/imgcodecs/ImageEncodingParam.cs index 626cfb598..31d989cad 100644 --- a/src/OpenCvSharp/Modules/imgcodecs/ImageEncodingParam.cs +++ b/src/OpenCvSharp/Modules/imgcodecs/ImageEncodingParam.cs @@ -1,6 +1,4 @@ -using System; - -namespace OpenCvSharp; +namespace OpenCvSharp; /// /// The format-specific save parameters for cv::imwrite and cv::imencode diff --git a/src/OpenCvSharp/Modules/imgproc/CLAHE.cs b/src/OpenCvSharp/Modules/imgproc/CLAHE.cs index e96e4b2ca..20ee8c59f 100644 --- a/src/OpenCvSharp/Modules/imgproc/CLAHE.cs +++ b/src/OpenCvSharp/Modules/imgproc/CLAHE.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; // ReSharper disable InconsistentNaming // ReSharper disable IdentifierTypo @@ -59,9 +58,9 @@ protected override void DisposeManaged() public void Apply(InputArray src, OutputArray dst) { ThrowIfDisposed(); - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -131,12 +130,8 @@ public void CollectGarbage() GC.KeepAlive(this); } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/imgproc/ConnectedComponent.cs b/src/OpenCvSharp/Modules/imgproc/ConnectedComponent.cs index 93a298d28..1bd9e3c89 100644 --- a/src/OpenCvSharp/Modules/imgproc/ConnectedComponent.cs +++ b/src/OpenCvSharp/Modules/imgproc/ConnectedComponent.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using OpenCvSharp.Internal.Util; +using OpenCvSharp.Internal.Util; namespace OpenCvSharp; @@ -45,10 +42,8 @@ internal ConnectedComponents(IReadOnlyList blobs, int[,] labels, int label /// Destination image. /// Label value. /// Filtered image. - public void FilterByLabel(Mat src, Mat dst, int labelValue) - { - FilterByLabels(src, dst, new[] { labelValue }); - } + public void FilterByLabel(Mat src, Mat dst, int labelValue) + => FilterByLabels(src, dst, [labelValue]); /// /// Filter a image with the specified label values. @@ -59,11 +54,11 @@ public void FilterByLabel(Mat src, Mat dst, int labelValue) /// Filtered image. public void FilterByLabels(Mat src, Mat dst, IEnumerable labelValues) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); - if (labelValues == null) + if (labelValues is null) throw new ArgumentNullException(nameof(labelValues)); var labelArray = labelValues.ToArray(); if (labelArray.Length == 0) @@ -95,9 +90,9 @@ public void FilterByLabels(Mat src, Mat dst, IEnumerable labelValues) /// Filtered image. public void FilterByBlob(Mat src, Mat dst, Blob blob) { - if (blob == null) + if (blob is null) throw new ArgumentNullException(nameof(blob)); - FilterByLabels(src, dst, new[] { blob.Label }); + FilterByLabels(src, dst, [blob.Label]); } /// @@ -118,16 +113,16 @@ public void FilterByBlobs(Mat src, Mat dst, IEnumerable blobs) /// The target image to be drawn. public void RenderBlobs(Mat img) { - if (img == null) + if (img is null) throw new ArgumentNullException(nameof(img)); /* if (img.Empty()) throw new ArgumentException("img is empty"); if (img.Type() != MatType.CV_8UC3) throw new ArgumentException("img must be CV_8UC3");*/ - if (Blobs == null || Blobs.Count == 0) + if (Blobs is null || Blobs.Count == 0) throw new OpenCvSharpException("Blobs is empty"); - if (Labels == null) + if (Labels is null) throw new OpenCvSharpException("Labels is empty"); var height = Labels.GetLength(0); @@ -141,16 +136,14 @@ public void RenderBlobs(Mat img) colors[i] = Scalar.RandomColor(); } - using (var imgt = new Mat(img)) + using var imgt = new Mat(img); + var indexer = imgt.GetIndexer(); + for (var y = 0; y < height; y++) { - var indexer = imgt.GetIndexer(); - for (var y = 0; y < height; y++) + for (var x = 0; x < width; x++) { - for (var x = 0; x < width; x++) - { - var labelValue = Labels[y, x]; - indexer[y, x] = colors[labelValue].ToVec3b(); - } + var labelValue = Labels[y, x]; + indexer[y, x] = colors[labelValue].ToVec3b(); } } } @@ -162,7 +155,7 @@ public void RenderBlobs(Mat img) #pragma warning disable CA1024 // Use properties where appropriate public Blob GetLargestBlob() { - if (Blobs == null || Blobs.Count <= 1) + if (Blobs is null || Blobs.Count <= 1) throw new OpenCvSharpException("Blobs is empty"); var max = Blobs[1]; @@ -184,13 +177,11 @@ private Mat GetLabelMask(int label) { var rows = Labels.GetLength(0); var cols = Labels.GetLength(1); - using (var labels = new Mat(rows, cols, MatType.CV_32SC1, Labels.GetBuffer())) - using (var cmp = new Mat(rows, cols, MatType.CV_32SC1, Scalar.All(label))) - { - var result = new Mat(); - Cv2.Compare(labels, cmp, result, CmpType.EQ); - return result; - } + using var labels = Mat.FromPixelData(rows, cols, MatType.CV_32SC1, Labels.GetBuffer()); + using var cmp = new Mat(rows, cols, MatType.CV_32SC1, Scalar.All(label)); + var result = new Mat(); + Cv2.Compare(labels, cmp, result, CmpType.EQ); + return result; } #pragma warning disable CA1034 @@ -232,7 +223,7 @@ public class Blob /// /// The bounding box. /// - public Rect Rect => new Rect(Left, Top, Width, Height); + public Rect Rect => new (Left, Top, Width, Height); /// /// The total area (in pixels) of the connected component. diff --git a/src/OpenCvSharp/Modules/imgproc/Enum/ColorConversionCodes.cs b/src/OpenCvSharp/Modules/imgproc/Enum/ColorConversionCodes.cs index 8e4492a68..40e8b1679 100644 --- a/src/OpenCvSharp/Modules/imgproc/Enum/ColorConversionCodes.cs +++ b/src/OpenCvSharp/Modules/imgproc/Enum/ColorConversionCodes.cs @@ -3,6 +3,10 @@ #pragma warning disable 1591 #pragma warning disable CA1027 // Mark enums with FlagsAttribute +// ReSharper disable InconsistentNaming +// ReSharper disable IdentifierTypo +// ReSharper disable CommentTypo + namespace OpenCvSharp; /// diff --git a/src/OpenCvSharp/Modules/imgproc/Enum/ColormapTypes.cs b/src/OpenCvSharp/Modules/imgproc/Enum/ColormapTypes.cs index d0965a269..a8ca629c7 100644 --- a/src/OpenCvSharp/Modules/imgproc/Enum/ColormapTypes.cs +++ b/src/OpenCvSharp/Modules/imgproc/Enum/ColormapTypes.cs @@ -26,5 +26,7 @@ public enum ColormapTypes Viridis = 16, Cividis = 17, Twilight = 18, - TwilightShifted = 19 + TwilightShifted = 19, + Turbo = 20, + DeepGreen = 21 } diff --git a/src/OpenCvSharp/Modules/imgproc/Enum/DistanceTransformMasks.cs b/src/OpenCvSharp/Modules/imgproc/Enum/DistanceTransformMasks.cs index 95dc4c756..4437fade6 100644 --- a/src/OpenCvSharp/Modules/imgproc/Enum/DistanceTransformMasks.cs +++ b/src/OpenCvSharp/Modules/imgproc/Enum/DistanceTransformMasks.cs @@ -1,6 +1,4 @@ -using System; - -#pragma warning disable CA1008 // Enums should have zero value +#pragma warning disable CA1008 // Enums should have zero value #pragma warning disable CA2217 // Do not mark enums with FlagsAttribute namespace OpenCvSharp; diff --git a/src/OpenCvSharp/Modules/imgproc/Enum/FloodFillFlags.cs b/src/OpenCvSharp/Modules/imgproc/Enum/FloodFillFlags.cs index fb4b6c79f..ea7e7b8c4 100644 --- a/src/OpenCvSharp/Modules/imgproc/Enum/FloodFillFlags.cs +++ b/src/OpenCvSharp/Modules/imgproc/Enum/FloodFillFlags.cs @@ -1,6 +1,4 @@ -using System; - -namespace OpenCvSharp; +namespace OpenCvSharp; /// /// floodFill Operation flags. Lower bits contain a connectivity value, 4 (default) or 8, used within the function. Connectivity determines which neighbors of a pixel are considered. Upper bits can be 0 or a combination of the following flags: diff --git a/src/OpenCvSharp/Modules/imgproc/Enum/GrabCutModes.cs b/src/OpenCvSharp/Modules/imgproc/Enum/GrabCutModes.cs index 816f41c5b..b51ca4610 100644 --- a/src/OpenCvSharp/Modules/imgproc/Enum/GrabCutModes.cs +++ b/src/OpenCvSharp/Modules/imgproc/Enum/GrabCutModes.cs @@ -1,6 +1,4 @@ -using System; - -#pragma warning disable CA1008 // Enums should have zero value +#pragma warning disable CA1008 // Enums should have zero value namespace OpenCvSharp; diff --git a/src/OpenCvSharp/Modules/imgproc/Enum/InterpolationFlags.cs b/src/OpenCvSharp/Modules/imgproc/Enum/InterpolationFlags.cs index f73fc7b54..e2bf02006 100644 --- a/src/OpenCvSharp/Modules/imgproc/Enum/InterpolationFlags.cs +++ b/src/OpenCvSharp/Modules/imgproc/Enum/InterpolationFlags.cs @@ -1,6 +1,4 @@ -using System; - -#pragma warning disable CA1008 // Enums should have zero value +#pragma warning disable CA1008 // Enums should have zero value namespace OpenCvSharp; diff --git a/src/OpenCvSharp/Modules/imgproc/Enum/LineSegmentDetectorModes.cs b/src/OpenCvSharp/Modules/imgproc/Enum/LineSegmentDetectorModes.cs new file mode 100644 index 000000000..03c0bda48 --- /dev/null +++ b/src/OpenCvSharp/Modules/imgproc/Enum/LineSegmentDetectorModes.cs @@ -0,0 +1,27 @@ +#pragma warning disable CA1008 // Enums should have zero value + +namespace OpenCvSharp; + +/// +/// Variants of Line Segment %Detector +/// +[Flags] +public enum LineSegmentDetectorModes : int +{ + /// + /// No refinement applied + /// + RefineNone = 0, + + /// + /// Standard refinement is applied. E.g. breaking arches into smaller straighter line approximations. + /// + RefineStd = 1, + + /// + /// Advanced refinement. Number of false alarms is calculated, lines are + /// refined through increase of precision, decrement in size, etc. + /// + RefineAdv = 2, +} + diff --git a/src/OpenCvSharp/Modules/imgproc/Enum/MorphTypes.cs b/src/OpenCvSharp/Modules/imgproc/Enum/MorphTypes.cs index 5315c4415..445dbe903 100644 --- a/src/OpenCvSharp/Modules/imgproc/Enum/MorphTypes.cs +++ b/src/OpenCvSharp/Modules/imgproc/Enum/MorphTypes.cs @@ -1,6 +1,4 @@ -using System; - -#pragma warning disable CA1008 // Enums should have zero value +#pragma warning disable CA1008 // Enums should have zero value namespace OpenCvSharp; diff --git a/src/OpenCvSharp/Modules/imgproc/Enum/ThresholdTypes.cs b/src/OpenCvSharp/Modules/imgproc/Enum/ThresholdTypes.cs index 9143b5355..848fac2e5 100644 --- a/src/OpenCvSharp/Modules/imgproc/Enum/ThresholdTypes.cs +++ b/src/OpenCvSharp/Modules/imgproc/Enum/ThresholdTypes.cs @@ -1,6 +1,4 @@ -using System; - -#pragma warning disable CA1008 // Enums should have zero value +#pragma warning disable CA1008 // Enums should have zero value namespace OpenCvSharp; diff --git a/src/OpenCvSharp/Modules/imgproc/Enum/WarpPolarMode.cs b/src/OpenCvSharp/Modules/imgproc/Enum/WarpPolarMode.cs index 8dd6a406e..72b9c6bdd 100644 --- a/src/OpenCvSharp/Modules/imgproc/Enum/WarpPolarMode.cs +++ b/src/OpenCvSharp/Modules/imgproc/Enum/WarpPolarMode.cs @@ -1,6 +1,4 @@ -using System; - -#pragma warning disable CA1008 // Enums should have zero value +#pragma warning disable CA1008 // Enums should have zero value namespace OpenCvSharp; diff --git a/src/OpenCvSharp/Modules/imgproc/GeneralizedHough.cs b/src/OpenCvSharp/Modules/imgproc/GeneralizedHough.cs index 0e212b703..5e1965447 100644 --- a/src/OpenCvSharp/Modules/imgproc/GeneralizedHough.cs +++ b/src/OpenCvSharp/Modules/imgproc/GeneralizedHough.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp; @@ -142,7 +141,7 @@ public void SetTemplate(InputArray templ, Point? templCenter = null) { if (ptr == IntPtr.Zero) throw new ObjectDisposedException(GetType().Name); - if (templ == null) + if (templ is null) throw new ArgumentNullException(nameof(templ)); templ.ThrowIfDisposed(); var templCenterValue = templCenter.GetValueOrDefault(new Point(-1, -1)); @@ -164,11 +163,11 @@ public virtual void SetTemplate(InputArray edges, InputArray dx, InputArray dy, { if (ptr == IntPtr.Zero) throw new ObjectDisposedException(GetType().Name); - if (edges == null) + if (edges is null) throw new ArgumentNullException(nameof(edges)); - if (dx == null) + if (dx is null) throw new ArgumentNullException(nameof(dx)); - if (dy == null) + if (dy is null) throw new ArgumentNullException(nameof(dy)); edges.ThrowIfDisposed(); dx.ThrowIfDisposed(); @@ -194,9 +193,9 @@ public virtual void SetTemplate(InputArray edges, InputArray dx, InputArray dy, public virtual void Detect( InputArray image, OutputArray positions, OutputArray? votes = null) { - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); - if (positions == null) + if (positions is null) throw new ArgumentNullException(nameof(positions)); image.ThrowIfDisposed(); positions.ThrowIfNotReady(); @@ -225,13 +224,13 @@ public virtual void Detect( public virtual void Detect( InputArray edges, InputArray dx, InputArray dy, OutputArray positions, OutputArray? votes = null) { - if (edges == null) + if (edges is null) throw new ArgumentNullException(nameof(edges)); - if (dx == null) + if (dx is null) throw new ArgumentNullException(nameof(dx)); - if (dy == null) + if (dy is null) throw new ArgumentNullException(nameof(dy)); - if (positions == null) + if (positions is null) throw new ArgumentNullException(nameof(positions)); edges.ThrowIfDisposed(); dx.ThrowIfDisposed(); diff --git a/src/OpenCvSharp/Modules/imgproc/GeneralizedHoughBallard.cs b/src/OpenCvSharp/Modules/imgproc/GeneralizedHoughBallard.cs index a5f2f2046..5b2d05578 100644 --- a/src/OpenCvSharp/Modules/imgproc/GeneralizedHoughBallard.cs +++ b/src/OpenCvSharp/Modules/imgproc/GeneralizedHoughBallard.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp; @@ -92,12 +91,8 @@ public int VotesThreshold } } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/imgproc/GeneralizedHoughGuil.cs b/src/OpenCvSharp/Modules/imgproc/GeneralizedHoughGuil.cs index 0241ce972..5b01479af 100644 --- a/src/OpenCvSharp/Modules/imgproc/GeneralizedHoughGuil.cs +++ b/src/OpenCvSharp/Modules/imgproc/GeneralizedHoughGuil.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp; @@ -322,12 +321,8 @@ public int PosThresh } } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/imgproc/IntelligentScissorsMB.cs b/src/OpenCvSharp/Modules/imgproc/IntelligentScissorsMB.cs index c0c0f1b3d..7b2ffdb99 100644 --- a/src/OpenCvSharp/Modules/imgproc/IntelligentScissorsMB.cs +++ b/src/OpenCvSharp/Modules/imgproc/IntelligentScissorsMB.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp.Segmentation; diff --git a/src/OpenCvSharp/Modules/imgproc/LineIterator.cs b/src/OpenCvSharp/Modules/imgproc/LineIterator.cs index b5926e6b8..01c1d28db 100644 --- a/src/OpenCvSharp/Modules/imgproc/LineIterator.cs +++ b/src/OpenCvSharp/Modules/imgproc/LineIterator.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections; -using System.Collections.Generic; +using System.Collections; using System.Runtime.InteropServices; using OpenCvSharp.Internal; diff --git a/src/OpenCvSharp/Modules/imgproc/LineSegmentDetector.cs b/src/OpenCvSharp/Modules/imgproc/LineSegmentDetector.cs new file mode 100644 index 000000000..8f10a8c66 --- /dev/null +++ b/src/OpenCvSharp/Modules/imgproc/LineSegmentDetector.cs @@ -0,0 +1,198 @@ +using OpenCvSharp.Internal; +using OpenCvSharp.Internal.Vectors; + +namespace OpenCvSharp; + +/// +/// Line segment detector class +/// +public class LineSegmentDetector : Algorithm +{ + /// + /// cv::Ptr<LineSegmentDetector> + /// + private readonly Ptr ptrObj; + + /// + /// + /// + protected LineSegmentDetector(IntPtr p) + { + ptrObj = new Ptr(p); + ptr = ptrObj.Get(); + } + + /// + /// Creates a smart pointer to a LineSegmentDetector object and initializes it. + /// + /// The way found lines will be refined, see cv::LineSegmentDetectorModes + /// The scale of the image that will be used to find the lines. Range (0..1]. + /// Sigma for Gaussian filter. It is computed as sigma = _sigma_scale/_scale. + /// Bound to the quantization error on the gradient norm. + /// Gradient angle tolerance in degrees. + /// Detection threshold: -log10(NFA) \> log_eps. + /// Used only when advancent refinement is chosen. + /// Minimal density of aligned region points in the enclosing rectangle. + /// Number of bins in pseudo-ordering of gradient modulus. + /// + public static LineSegmentDetector Create( + LineSegmentDetectorModes refine = LineSegmentDetectorModes.RefineNone, + double scale = 0.8, double sigmaScale = 0.6, double quant = 2.0, double angTh = 22.5, + double logEps = 0, double densityTh = 0.7, int nBins = 1024) + { + IntPtr ptr = NativeMethods.imgproc_createLineSegmentDetector( + (int)refine, scale, sigmaScale, quant, angTh, logEps, densityTh, nBins); + return new LineSegmentDetector(ptr); + } + + /// + /// Releases managed resources + /// + protected override void DisposeManaged() + { + ptrObj.Dispose(); + base.DisposeManaged(); + } + + /// + /// Finds lines in the input image. + /// This is the output of the default parameters of the algorithm on the above shown image. + /// + /// A grayscale (CV_8UC1) input image. + /// A vector of Vec4i or Vec4f elements specifying the beginning and ending point of a line. + /// Where Vec4i/Vec4f is (x1, y1, x2, y2), point 1 is the start, point 2 - end. Returned lines are strictly oriented depending on the gradient. + /// Vector of widths of the regions, where the lines are found. E.g. Width of line. + /// Vector of precisions with which the lines are found. + /// Vector containing number of false alarms in the line region, + /// with precision of 10%. The bigger the value, logarithmically better the detection. + public virtual void Detect(InputArray image, OutputArray lines, + OutputArray? width = null, OutputArray? prec = null, OutputArray? nfa = null) + { + if (image is null) + throw new ArgumentNullException(nameof(image)); + if (lines is null) + throw new ArgumentNullException(nameof(lines)); + image.ThrowIfDisposed(); + lines.ThrowIfNotReady(); + width?.ThrowIfNotReady(); + prec?.ThrowIfNotReady(); + nfa?.ThrowIfNotReady(); + + NativeMethods.imgproc_LineSegmentDetector_detect_OutputArray(ptr, image.CvPtr, lines.CvPtr, + Cv2.ToPtr(width), Cv2.ToPtr(prec), Cv2.ToPtr(nfa)); + GC.KeepAlive(this); + GC.KeepAlive(image); + GC.KeepAlive(lines); + GC.KeepAlive(width); + GC.KeepAlive(prec); + GC.KeepAlive(nfa); + lines.Fix(); + width?.Fix(); + prec?.Fix(); + nfa?.Fix(); + } + + /// + /// Finds lines in the input image. + /// This is the output of the default parameters of the algorithm on the above shown image. + /// + /// A grayscale (CV_8UC1) input image. + /// A vector of Vec4i or Vec4f elements specifying the beginning and ending point of a line. + /// Where Vec4i/Vec4f is (x1, y1, x2, y2), point 1 is the start, point 2 - end. Returned lines are strictly oriented depending on the gradient. + /// Vector of widths of the regions, where the lines are found. E.g. Width of line. + /// Vector of precisions with which the lines are found. + /// Vector containing number of false alarms in the line region, + /// with precision of 10%. The bigger the value, logarithmically better the detection. + public virtual void Detect(InputArray image, out Vec4f[] lines, + out double[] width, out double[] prec, out double[] nfa) + { + if (image is null) + throw new ArgumentNullException(nameof(image)); + image.ThrowIfDisposed(); + + using (var linesVec = new VectorOfVec4f()) + using (var widthVec = new VectorOfDouble()) + using (var precVec = new VectorOfDouble()) + using (var nfaVec = new VectorOfDouble()) + { + NativeMethods.imgproc_LineSegmentDetector_detect_vector(ptr, image.CvPtr, + linesVec.CvPtr, widthVec.CvPtr, precVec.CvPtr, nfaVec.CvPtr); + + lines = linesVec.ToArray(); + width = widthVec.ToArray(); + prec = precVec.ToArray(); + nfa = nfaVec.ToArray(); + } + GC.KeepAlive(this); + GC.KeepAlive(image); + } + + /// + /// Draws the line segments on a given image. + /// + /// The image, where the liens will be drawn. + /// Should be bigger or equal to the image, where the lines were found. + /// A vector of the lines that needed to be drawn. + public virtual void DrawSegments(InputOutputArray image, InputArray lines) + { + if (image is null) + throw new ArgumentNullException(nameof(image)); + if (lines is null) + throw new ArgumentNullException(nameof(lines)); + image.ThrowIfNotReady(); + lines.ThrowIfDisposed(); + + NativeMethods.imgproc_LineSegmentDetector_drawSegments(ptr, image.CvPtr, lines.CvPtr); + GC.KeepAlive(this); + GC.KeepAlive(image); + image.Fix(); + GC.KeepAlive(lines); + } + + /// + /// Draws two groups of lines in blue and red, counting the non overlapping (mismatching) pixels. + /// + /// The size of the image, where lines1 and lines2 were found. + /// The first group of lines that needs to be drawn. It is visualized in blue color. + /// The second group of lines. They visualized in red color. + /// Optional image, where the lines will be drawn. + /// The image should be color(3-channel) in order for lines1 and lines2 to be drawn + /// in the above mentioned colors. + /// + public virtual int CompareSegments( + Size size, InputArray lines1, InputArray lines2, InputOutputArray? image = null) + { + if (lines1 is null) + throw new ArgumentNullException(nameof(lines1)); + if (lines2 is null) + throw new ArgumentNullException(nameof(lines2)); + lines1.ThrowIfDisposed(); + lines2.ThrowIfDisposed(); + image?.ThrowIfNotReady(); + + var ret = NativeMethods.imgproc_LineSegmentDetector_compareSegments( + ptr, size, lines1.CvPtr, lines2.CvPtr, Cv2.ToPtr(image)); + GC.KeepAlive(this); + GC.KeepAlive(lines1); + GC.KeepAlive(lines2); + GC.KeepAlive(image); + image?.Fix(); + + return ret; + } + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) + { + public override IntPtr Get() + { + var res = NativeMethods.imgproc_Ptr_LineSegmentDetector_get(ptr); + GC.KeepAlive(this); + return res; + } + + protected override void DisposeUnmanaged() + { + NativeMethods.imgproc_Ptr_LineSegmentDetector_delete(ptr); + base.DisposeUnmanaged(); + } + } +} diff --git a/src/OpenCvSharp/Modules/imgproc/Model/CircleSegment.cs b/src/OpenCvSharp/Modules/imgproc/Model/CircleSegment.cs index 0b0761b1e..2313369c4 100644 --- a/src/OpenCvSharp/Modules/imgproc/Model/CircleSegment.cs +++ b/src/OpenCvSharp/Modules/imgproc/Model/CircleSegment.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.CodeAnalysis; using System.Runtime.InteropServices; namespace OpenCvSharp; diff --git a/src/OpenCvSharp/Modules/imgproc/Model/Line2D.cs b/src/OpenCvSharp/Modules/imgproc/Model/Line2D.cs index f5cc4f3a5..d5f12359a 100644 --- a/src/OpenCvSharp/Modules/imgproc/Model/Line2D.cs +++ b/src/OpenCvSharp/Modules/imgproc/Model/Line2D.cs @@ -1,6 +1,4 @@ -using System; - -namespace OpenCvSharp; +namespace OpenCvSharp; /// /// 2-dimentional line vector @@ -54,7 +52,7 @@ public Line2D(double vx, double vy, double x1, double y1) /// The returned value from cvFitLineparam> public Line2D(float[] line) { - if (line == null) + if (line is null) throw new ArgumentNullException(nameof(line)); Vx = line[0]; diff --git a/src/OpenCvSharp/Modules/imgproc/Model/Line3D.cs b/src/OpenCvSharp/Modules/imgproc/Model/Line3D.cs index 202323a32..ad392a05d 100644 --- a/src/OpenCvSharp/Modules/imgproc/Model/Line3D.cs +++ b/src/OpenCvSharp/Modules/imgproc/Model/Line3D.cs @@ -1,6 +1,4 @@ -using System; - -namespace OpenCvSharp; +namespace OpenCvSharp; /// /// A 3-dimensional line object @@ -62,7 +60,7 @@ public Line3D(double vx, double vy, double vz, double x1, double y1, double z1) /// The returned value from cvFitLineparam> public Line3D(float[] line) { - if (line == null) + if (line is null) throw new ArgumentNullException(nameof(line)); if (line.Length != 6) throw new ArgumentException("array.Length != 6", nameof(line)); diff --git a/src/OpenCvSharp/Modules/imgproc/Model/LineSegmentPoint.cs b/src/OpenCvSharp/Modules/imgproc/Model/LineSegmentPoint.cs index 02dc84744..cbc929ed6 100644 --- a/src/OpenCvSharp/Modules/imgproc/Model/LineSegmentPoint.cs +++ b/src/OpenCvSharp/Modules/imgproc/Model/LineSegmentPoint.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.CodeAnalysis; using System.Runtime.InteropServices; namespace OpenCvSharp; diff --git a/src/OpenCvSharp/Modules/imgproc/Model/LineSegmentPolar.cs b/src/OpenCvSharp/Modules/imgproc/Model/LineSegmentPolar.cs index 8abaf2fbc..c4eb2c835 100644 --- a/src/OpenCvSharp/Modules/imgproc/Model/LineSegmentPolar.cs +++ b/src/OpenCvSharp/Modules/imgproc/Model/LineSegmentPolar.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.CodeAnalysis; using System.Runtime.InteropServices; namespace OpenCvSharp; diff --git a/src/OpenCvSharp/Modules/imgproc/Moments.cs b/src/OpenCvSharp/Modules/imgproc/Moments.cs index ec0f37af5..219a9fa55 100644 --- a/src/OpenCvSharp/Modules/imgproc/Moments.cs +++ b/src/OpenCvSharp/Modules/imgproc/Moments.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Linq; +using System.Diagnostics.CodeAnalysis; using System.Runtime.InteropServices; using OpenCvSharp.Internal; @@ -70,7 +67,7 @@ public Moments(double m00, double m10, double m01, double m20, double m11, /// public Moments(InputArray array, bool binaryImage = false) { - if (array == null) + if (array is null) throw new ArgumentNullException(nameof(array)); array.ThrowIfDisposed(); InitializeFromInputArray(array, binaryImage); @@ -85,11 +82,11 @@ public Moments(InputArray array, bool binaryImage = false) /// public Moments(byte[,] array, bool binaryImage = false) { - if (array == null) + if (array is null) throw new ArgumentNullException(nameof(array)); var rows = array.GetLength(0); var cols = array.GetLength(1); - using var arrayMat = new Mat(rows, cols, MatType.CV_8UC1, array); + using var arrayMat = Mat.FromPixelData(rows, cols, MatType.CV_8UC1, array); InitializeFromInputArray(arrayMat, binaryImage); } @@ -102,11 +99,11 @@ public Moments(byte[,] array, bool binaryImage = false) /// public Moments(float[,] array, bool binaryImage = false) { - if (array == null) + if (array is null) throw new ArgumentNullException(nameof(array)); var rows = array.GetLength(0); var cols = array.GetLength(1); - using var arrayMat = new Mat(rows, cols, MatType.CV_32FC1, array); + using var arrayMat = Mat.FromPixelData(rows, cols, MatType.CV_32FC1, array); InitializeFromInputArray(arrayMat, binaryImage); } @@ -119,10 +116,10 @@ public Moments(float[,] array, bool binaryImage = false) /// public Moments(IEnumerable array, bool binaryImage = false) { - if (array == null) + if (array is null) throw new ArgumentNullException(nameof(array)); var points = array.ToArray(); - using var pointsMat = new Mat(points.Length, 1, MatType.CV_32SC2, points); + using var pointsMat = Mat.FromPixelData(points.Length, 1, MatType.CV_32SC2, points); InitializeFromInputArray(pointsMat, binaryImage); } @@ -135,10 +132,10 @@ public Moments(IEnumerable array, bool binaryImage = false) /// public Moments(IEnumerable array, bool binaryImage = false) { - if (array == null) + if (array is null) throw new ArgumentNullException(nameof(array)); var points = array.ToArray(); - using var pointsMat = new Mat(points.Length, 1, MatType.CV_32FC2, points); + using var pointsMat = Mat.FromPixelData(points.Length, 1, MatType.CV_32FC2, points); InitializeFromInputArray(pointsMat, binaryImage); } diff --git a/src/OpenCvSharp/Modules/imgproc/Subdiv2D.cs b/src/OpenCvSharp/Modules/imgproc/Subdiv2D.cs index 750f1cd8e..67cfe59ca 100644 --- a/src/OpenCvSharp/Modules/imgproc/Subdiv2D.cs +++ b/src/OpenCvSharp/Modules/imgproc/Subdiv2D.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; using OpenCvSharp.Internal.Util; using OpenCvSharp.Internal.Vectors; @@ -118,7 +115,7 @@ public int Insert(Point2f pt) public void Insert(IEnumerable ptVec) { ThrowIfDisposed(); - if (ptVec == null) + if (ptVec is null) throw new ArgumentNullException(nameof(ptVec)); var ptVecArray = ptVec.CastOrToArray(); diff --git a/src/OpenCvSharp/Modules/line_descriptors/LSDDetector.cs b/src/OpenCvSharp/Modules/line_descriptors/LSDDetector.cs index e36a8ec83..b6d24f7dc 100644 --- a/src/OpenCvSharp/Modules/line_descriptors/LSDDetector.cs +++ b/src/OpenCvSharp/Modules/line_descriptors/LSDDetector.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using OpenCvSharp.Internal.Vectors; + // ReSharper disable UnusedMember.Global @@ -76,7 +73,7 @@ protected override void DisposeUnmanaged() /// vector that will store extracted lines for one or more images public KeyLine[] Detect(Mat image, int scale, int numOctaves, Mat? mask = null) { - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); image.ThrowIfDisposed(); mask?.ThrowIfDisposed(); @@ -103,19 +100,19 @@ public KeyLine[] Detect(Mat image, int scale, int numOctaves, Mat? mask = null) /// set of vectors that will store extracted lines for one or more images public KeyLine[][] Detect(IEnumerable images, int scale, int numOctaves, IEnumerable? masks = null) { - if (images == null) + if (images is null) throw new ArgumentNullException(nameof(images)); var imagesPtrs = images.Select(i => { - if (i == null) + if (i is null) throw new ArgumentException($"'{nameof(images)}' contains null", nameof(images)); i.ThrowIfDisposed(); return i.CvPtr; }).ToArray(); var masksPtrs = masks?.Select(i => { - if (i == null) + if (i is null) throw new ArgumentException($"'{nameof(images)}' contains null", nameof(images)); i.ThrowIfDisposed(); return i.CvPtr; diff --git a/src/OpenCvSharp/Modules/line_descriptors/LSDParam.cs b/src/OpenCvSharp/Modules/line_descriptors/LSDParam.cs index c2e922149..b6d6f6f7b 100644 --- a/src/OpenCvSharp/Modules/line_descriptors/LSDParam.cs +++ b/src/OpenCvSharp/Modules/line_descriptors/LSDParam.cs @@ -7,31 +7,20 @@ namespace OpenCvSharp.LineDescriptor; [StructLayout(LayoutKind.Sequential)] [SuppressMessage("Design", "CA1051: Do not declare visible instance fields")] // ReSharper disable once InconsistentNaming -public readonly struct LSDParam +public readonly struct LSDParam( + double scale = 0.8, + double sigmaScale = 0.6, + double quant = 2.0, + double angTh = 22.5, + double logEps = 0, + double densityTh = 0.7, + int nBins = 1024) { - public readonly double Scale; - public readonly double SigmaScale; - public readonly double Quant; - public readonly double AngTh; - public readonly double LogEps; - public readonly double DensityTh; - public readonly int NBins; - - public LSDParam( - double scale = 0.8, - double sigmaScale = 0.6, - double quant = 2.0, - double angTh = 22.5, - double logEps = 0, - double densityTh = 0.7, - int nBins = 1024) - { - Scale = scale; - SigmaScale = sigmaScale; - Quant = quant; - AngTh = angTh; - LogEps = logEps; - DensityTh = densityTh; - NBins = nBins; - } + public readonly double Scale = scale; + public readonly double SigmaScale = sigmaScale; + public readonly double Quant = quant; + public readonly double AngTh = angTh; + public readonly double LogEps = logEps; + public readonly double DensityTh = densityTh; + public readonly int NBins = nBins; } diff --git a/src/OpenCvSharp/Modules/ml/ANN_MLP.cs b/src/OpenCvSharp/Modules/ml/ANN_MLP.cs index c37977131..510267840 100644 --- a/src/OpenCvSharp/Modules/ml/ANN_MLP.cs +++ b/src/OpenCvSharp/Modules/ml/ANN_MLP.cs @@ -1,5 +1,4 @@ -using System; -using System.ComponentModel; +using System.ComponentModel; using OpenCvSharp.Internal; namespace OpenCvSharp.ML; @@ -43,7 +42,7 @@ public static ANN_MLP Create() /// public static ANN_MLP Load(string filePath) { - if (filePath == null) + if (filePath is null) throw new ArgumentNullException(nameof(filePath)); NativeMethods.HandleException( NativeMethods.ml_ANN_MLP_load(filePath, out var ptr)); @@ -57,7 +56,7 @@ public static ANN_MLP Load(string filePath) /// public static ANN_MLP LoadFromString(string strModel) { - if (strModel == null) + if (strModel is null) throw new ArgumentNullException(nameof(strModel)); NativeMethods.HandleException( NativeMethods.ml_ANN_MLP_loadFromString(strModel, out var ptr)); @@ -318,7 +317,7 @@ public virtual void SetActivationFunction(ActivationFunctions type, double param public virtual void SetLayerSizes(InputArray layerSizes) { ThrowIfDisposed(); - if (layerSizes == null) + if (layerSizes is null) throw new ArgumentNullException(nameof(layerSizes)); NativeMethods.HandleException( @@ -419,12 +418,8 @@ public enum TrainingMethods #endregion - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/ml/Boost.cs b/src/OpenCvSharp/Modules/ml/Boost.cs index 746f55488..c30722ca4 100644 --- a/src/OpenCvSharp/Modules/ml/Boost.cs +++ b/src/OpenCvSharp/Modules/ml/Boost.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp.ML; @@ -39,7 +38,7 @@ protected Boost(IntPtr p) /// public new static Boost Load(string filePath) { - if (filePath == null) + if (filePath is null) throw new ArgumentNullException(nameof(filePath)); NativeMethods.HandleException( NativeMethods.ml_Boost_load(filePath, out var ptr)); @@ -53,7 +52,7 @@ protected Boost(IntPtr p) /// public new static Boost LoadFromString(string strModel) { - if (strModel == null) + if (strModel is null) throw new ArgumentNullException(nameof(strModel)); NativeMethods.HandleException( NativeMethods.ml_Boost_loadFromString(strModel, out var ptr)); @@ -180,12 +179,8 @@ public enum Types #endregion - internal new class Ptr : OpenCvSharp.Ptr + internal new class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/ml/DTrees.cs b/src/OpenCvSharp/Modules/ml/DTrees.cs index 74f02bdda..aff241c45 100644 --- a/src/OpenCvSharp/Modules/ml/DTrees.cs +++ b/src/OpenCvSharp/Modules/ml/DTrees.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.CodeAnalysis; using OpenCvSharp.Internal; using OpenCvSharp.Internal.Vectors; @@ -49,7 +48,7 @@ public static DTrees Create() /// public static DTrees Load(string filePath) { - if (filePath == null) + if (filePath is null) throw new ArgumentNullException(nameof(filePath)); NativeMethods.HandleException( NativeMethods.ml_DTrees_load(filePath, out var ptr)); @@ -63,7 +62,7 @@ public static DTrees Load(string filePath) /// public static DTrees LoadFromString(string strModel) { - if (strModel == null) + if (strModel is null) throw new ArgumentNullException(nameof(strModel)); NativeMethods.HandleException( NativeMethods.ml_DTrees_loadFromString(strModel, out var ptr)); @@ -272,7 +271,7 @@ public Mat Priors } set { - if (value == null) + if (value is null) throw new ArgumentNullException(nameof(value)); NativeMethods.HandleException( @@ -444,12 +443,8 @@ public struct Split #endregion - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/ml/EM.cs b/src/OpenCvSharp/Modules/ml/EM.cs index 88580ef10..a504b62ce 100644 --- a/src/OpenCvSharp/Modules/ml/EM.cs +++ b/src/OpenCvSharp/Modules/ml/EM.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; using OpenCvSharp.Internal.Vectors; namespace OpenCvSharp; @@ -51,7 +50,7 @@ public static EM Create() /// public static EM Load(string filePath) { - if (filePath == null) + if (filePath is null) throw new ArgumentNullException(nameof(filePath)); NativeMethods.HandleException( NativeMethods.ml_EM_load(filePath, out var ret)); @@ -65,7 +64,7 @@ public static EM Load(string filePath) /// public static EM LoadFromString(string strModel) { - if (strModel == null) + if (strModel is null) throw new ArgumentNullException(nameof(strModel)); NativeMethods.HandleException( NativeMethods.ml_EM_loadFromString(strModel, out var ret)); @@ -224,7 +223,7 @@ public virtual bool TrainEM( OutputArray? probs = null) { ThrowIfDisposed(); - if (samples == null) + if (samples is null) throw new ArgumentNullException(nameof(samples)); samples.ThrowIfDisposed(); @@ -283,9 +282,9 @@ public virtual bool TrainE( OutputArray? probs = null) { ThrowIfDisposed(); - if (samples == null) + if (samples is null) throw new ArgumentNullException(nameof(samples)); - if (means0 == null) + if (means0 is null) throw new ArgumentNullException(nameof(means0)); samples.ThrowIfDisposed(); means0.ThrowIfDisposed(); @@ -344,9 +343,9 @@ public virtual bool TrainM( OutputArray? probs = null) { ThrowIfDisposed(); - if (samples == null) + if (samples is null) throw new ArgumentNullException(nameof(samples)); - if (probs0 == null) + if (probs0 is null) throw new ArgumentNullException(nameof(probs0)); samples.ThrowIfDisposed(); probs0.ThrowIfDisposed(); @@ -388,7 +387,7 @@ public virtual bool TrainM( public virtual Vec2d Predict2(InputArray sample, OutputArray? probs = null) { ThrowIfDisposed(); - if (sample == null) + if (sample is null) throw new ArgumentNullException(nameof(sample)); sample.ThrowIfDisposed(); probs?.ThrowIfNotReady(); @@ -404,12 +403,8 @@ public virtual Vec2d Predict2(InputArray sample, OutputArray? probs = null) #endregion - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/ml/KNearest.cs b/src/OpenCvSharp/Modules/ml/KNearest.cs index 55778cb0a..ecfa47f47 100644 --- a/src/OpenCvSharp/Modules/ml/KNearest.cs +++ b/src/OpenCvSharp/Modules/ml/KNearest.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; #pragma warning disable CA1008 // Enums should have zero value @@ -41,7 +40,7 @@ public static KNearest Create() /// public static KNearest Load(string filePath) { - if (filePath == null) + if (filePath is null) throw new ArgumentNullException(nameof(filePath)); NativeMethods.HandleException( NativeMethods.ml_KNearest_load(filePath, out var ptr)); @@ -55,7 +54,7 @@ public static KNearest Load(string filePath) /// public static KNearest LoadFromString(string strModel) { - if (strModel == null) + if (strModel is null) throw new ArgumentNullException(nameof(strModel)); NativeMethods.HandleException( NativeMethods.ml_KNearest_loadFromString(strModel, out var ptr)); @@ -177,9 +176,9 @@ public float FindNearest(InputArray samples, int k, OutputArray results, OutputArray? neighborResponses = null, OutputArray? dist = null) { ThrowIfDisposed(); - if (samples == null) + if (samples is null) throw new ArgumentNullException(nameof(samples)); - if (results == null) + if (results is null) throw new ArgumentNullException(nameof(results)); samples.ThrowIfDisposed(); results.ThrowIfNotReady(); @@ -218,12 +217,8 @@ public enum Types #endregion - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/ml/LogisticRegression.cs b/src/OpenCvSharp/Modules/ml/LogisticRegression.cs index 1da040bcf..1b94f4b39 100644 --- a/src/OpenCvSharp/Modules/ml/LogisticRegression.cs +++ b/src/OpenCvSharp/Modules/ml/LogisticRegression.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp.ML; @@ -39,7 +38,7 @@ public static LogisticRegression Create() /// public static LogisticRegression Load(string filePath) { - if (filePath == null) + if (filePath is null) throw new ArgumentNullException(nameof(filePath)); NativeMethods.HandleException( NativeMethods.ml_LogisticRegression_load(filePath, out var ptr)); @@ -53,7 +52,7 @@ public static LogisticRegression Load(string filePath) /// public static LogisticRegression LoadFromString(string strModel) { - if (strModel == null) + if (strModel is null) throw new ArgumentNullException(nameof(strModel)); NativeMethods.HandleException( NativeMethods.ml_LogisticRegression_loadFromString(strModel, out var ptr)); @@ -212,7 +211,7 @@ public TermCriteria TermCriteria public float Predict(InputArray samples, OutputArray? results = null, int flags = 0) { ThrowIfDisposed(); - if (samples == null) + if (samples is null) throw new ArgumentNullException(nameof(samples)); samples.ThrowIfDisposed(); results?.ThrowIfNotReady(); @@ -286,12 +285,8 @@ public enum Methods #endregion - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/ml/NormalBayesClassifier.cs b/src/OpenCvSharp/Modules/ml/NormalBayesClassifier.cs index a8afea51f..8ff5eeb39 100644 --- a/src/OpenCvSharp/Modules/ml/NormalBayesClassifier.cs +++ b/src/OpenCvSharp/Modules/ml/NormalBayesClassifier.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp.ML; @@ -38,7 +37,7 @@ public static NormalBayesClassifier Create() /// public static NormalBayesClassifier Load(string filePath) { - if (filePath == null) + if (filePath is null) throw new ArgumentNullException(nameof(filePath)); NativeMethods.HandleException( NativeMethods.ml_NormalBayesClassifier_load(filePath, out var ptr)); @@ -52,7 +51,7 @@ public static NormalBayesClassifier Load(string filePath) /// public static NormalBayesClassifier LoadFromString(string strModel) { - if (strModel == null) + if (strModel is null) throw new ArgumentNullException(nameof(strModel)); NativeMethods.HandleException( NativeMethods.ml_NormalBayesClassifier_loadFromString(strModel, out var ptr)); @@ -87,11 +86,11 @@ public float PredictProb(InputArray inputs, OutputArray outputs, OutputArray outputProbs, int flags = 0) { ThrowIfDisposed(); - if (inputs == null) + if (inputs is null) throw new ArgumentNullException(nameof(inputs)); - if (outputs == null) + if (outputs is null) throw new ArgumentNullException(nameof(outputs)); - if (outputProbs == null) + if (outputProbs is null) throw new ArgumentNullException(nameof(outputProbs)); inputs.ThrowIfDisposed(); @@ -110,12 +109,8 @@ public float PredictProb(InputArray inputs, OutputArray outputs, return ret; } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/ml/RTrees.cs b/src/OpenCvSharp/Modules/ml/RTrees.cs index 31b250216..f5c7f0be4 100644 --- a/src/OpenCvSharp/Modules/ml/RTrees.cs +++ b/src/OpenCvSharp/Modules/ml/RTrees.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp.ML; @@ -39,7 +38,7 @@ protected RTrees(IntPtr p) /// public new static RTrees Load(string filePath) { - if (filePath == null) + if (filePath is null) throw new ArgumentNullException(nameof(filePath)); NativeMethods.HandleException( NativeMethods.ml_RTrees_load(filePath, out var ptr)); @@ -53,7 +52,7 @@ protected RTrees(IntPtr p) /// public new static RTrees LoadFromString(string strModel) { - if (strModel == null) + if (strModel is null) throw new ArgumentNullException(nameof(strModel)); NativeMethods.HandleException( NativeMethods.ml_RTrees_loadFromString(strModel, out var ptr)); @@ -101,7 +100,7 @@ public bool CalculateVarImportance /// The size of the randomly selected subset of features at each tree node /// and that are used to find the best split(s). /// - public bool ActiveVarCount + public int ActiveVarCount { get { @@ -109,13 +108,13 @@ public bool ActiveVarCount NativeMethods.HandleException( NativeMethods.ml_RTrees_getActiveVarCount(ptr, out var ret)); GC.KeepAlive(this); - return ret != 0; + return ret; } set { ThrowIfDisposed(); NativeMethods.HandleException( - NativeMethods.ml_RTrees_setActiveVarCount(ptr, value ? 1 : 0)); + NativeMethods.ml_RTrees_setActiveVarCount(ptr, value)); GC.KeepAlive(this); } } @@ -164,12 +163,8 @@ public Mat GetVarImportance() #endregion - internal new class Ptr : OpenCvSharp.Ptr + internal new class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/ml/SVM.cs b/src/OpenCvSharp/Modules/ml/SVM.cs index 554f3731a..9c2cc9d3f 100644 --- a/src/OpenCvSharp/Modules/ml/SVM.cs +++ b/src/OpenCvSharp/Modules/ml/SVM.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp.ML; @@ -45,7 +44,7 @@ public static SVM Create() /// public static SVM Load(string filePath) { - if (filePath == null) + if (filePath is null) throw new ArgumentNullException(nameof(filePath)); NativeMethods.HandleException( NativeMethods.ml_SVM_load(filePath, out var ptr)); @@ -59,7 +58,7 @@ public static SVM Load(string filePath) /// public static SVM LoadFromString(string strModel) { - if (strModel == null) + if (strModel is null) throw new ArgumentNullException(nameof(strModel)); NativeMethods.HandleException( NativeMethods.ml_SVM_loadFromString(strModel, out var ptr)); @@ -247,7 +246,7 @@ public Mat ClassWeights } set { - if (value == null) + if (value is null) throw new ArgumentNullException(nameof(value)); NativeMethods.HandleException( @@ -374,9 +373,9 @@ public Mat GetSupportVectors() public double GetDecisionFunction(int i, OutputArray alpha, OutputArray svidx) { ThrowIfDisposed(); - if (alpha == null) + if (alpha is null) throw new ArgumentNullException(nameof(alpha)); - if (svidx == null) + if (svidx is null) throw new ArgumentNullException(nameof(svidx)); alpha.ThrowIfNotReady(); @@ -517,12 +516,8 @@ public enum ParamTypes #endregion - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/ml/StatModel.cs b/src/OpenCvSharp/Modules/ml/StatModel.cs index 147ca0c60..5168399d9 100644 --- a/src/OpenCvSharp/Modules/ml/StatModel.cs +++ b/src/OpenCvSharp/Modules/ml/StatModel.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.CodeAnalysis; using OpenCvSharp.Internal; namespace OpenCvSharp.ML; @@ -93,9 +92,9 @@ public virtual bool Train(InputArray samples, SampleTypes layout, InputArray res { if (ptr == IntPtr.Zero) throw new ObjectDisposedException(GetType().Name); - if (samples == null) + if (samples is null) throw new ArgumentNullException(nameof(samples)); - if (responses == null) + if (responses is null) throw new ArgumentNullException(nameof(responses)); samples.ThrowIfDisposed(); responses.ThrowIfDisposed(); @@ -136,7 +135,7 @@ public virtual float Predict(InputArray samples, OutputArray? results = null, Fl { if (ptr == IntPtr.Zero) throw new ObjectDisposedException(GetType().Name); - if (samples == null) + if (samples is null) throw new ArgumentNullException(nameof(samples)); samples.ThrowIfDisposed(); results?.ThrowIfNotReady(); diff --git a/src/OpenCvSharp/Modules/ml/TrainData.cs b/src/OpenCvSharp/Modules/ml/TrainData.cs index 2577ecd35..1286d88c2 100644 --- a/src/OpenCvSharp/Modules/ml/TrainData.cs +++ b/src/OpenCvSharp/Modules/ml/TrainData.cs @@ -1,6 +1,4 @@ -using System; - -namespace OpenCvSharp.ML; +namespace OpenCvSharp.ML; /// /// diff --git a/src/OpenCvSharp/Modules/objdetect/CascadeClassifier.cs b/src/OpenCvSharp/Modules/objdetect/CascadeClassifier.cs index 5c184ce8b..895cdbac7 100644 --- a/src/OpenCvSharp/Modules/objdetect/CascadeClassifier.cs +++ b/src/OpenCvSharp/Modules/objdetect/CascadeClassifier.cs @@ -1,7 +1,4 @@ - -using System; -using System.IO; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; using OpenCvSharp.Internal.Vectors; // ReSharper disable InconsistentNaming @@ -95,7 +92,7 @@ public virtual bool Read(FileNode fn) { if (ptr == IntPtr.Zero) throw new ObjectDisposedException(GetType().Name); - if (fn == null) + if (fn is null) throw new ArgumentNullException(nameof(fn)); NativeMethods.HandleException( @@ -126,7 +123,7 @@ public virtual Rect[] DetectMultiScale( Size? maxSize = null) { ThrowIfDisposed(); - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); image.ThrowIfDisposed(); @@ -170,7 +167,7 @@ public virtual Rect[] DetectMultiScale( bool outputRejectLevels = false) { ThrowIfDisposed(); - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); image.ThrowIfDisposed(); diff --git a/src/OpenCvSharp/Modules/objdetect/Enum/HaarDetectionTypes.cs b/src/OpenCvSharp/Modules/objdetect/Enum/HaarDetectionTypes.cs index 8b3f81839..2322a98d1 100644 --- a/src/OpenCvSharp/Modules/objdetect/Enum/HaarDetectionTypes.cs +++ b/src/OpenCvSharp/Modules/objdetect/Enum/HaarDetectionTypes.cs @@ -1,6 +1,4 @@ -using System; - -namespace OpenCvSharp; +namespace OpenCvSharp; /// /// Modes of operation for cvHaarDetectObjects diff --git a/src/OpenCvSharp/Modules/objdetect/HOGDescriptor.cs b/src/OpenCvSharp/Modules/objdetect/HOGDescriptor.cs index 9f15034a5..62d1508bf 100644 --- a/src/OpenCvSharp/Modules/objdetect/HOGDescriptor.cs +++ b/src/OpenCvSharp/Modules/objdetect/HOGDescriptor.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Generic; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; using OpenCvSharp.Internal.Vectors; // ReSharper disable InconsistentNaming @@ -29,8 +27,8 @@ public class HOGDescriptor : DisposableCvObject /// /// Returns coefficients of the classifier trained for people detection (for default window size). /// - public static readonly float[] DefaultPeopleDetector = - { + public static readonly float[] DefaultPeopleDetector = + [ 0.05359386f, -0.14721455f, -0.05532170f, 0.05077307f, 0.11547081f, -0.04268804f, 0.04635834f, -0.05468199f, 0.08232084f, 0.10424068f, -0.02294518f, 0.01108519f, 0.01378693f, 0.11193510f, @@ -836,7 +834,7 @@ public class HOGDescriptor : DisposableCvObject -0.01612278f, -1.46097376e-003f, 0.14013411f, -8.96181818e-003f, -0.03250246f, 3.38630192e-003f, 2.64779478e-003f, 0.03359732f, -0.02411991f, -0.04229729f, 0.10666174f, -6.66579151f - }; + ]; #endregion #region DaimlerPeopleDetector @@ -845,7 +843,7 @@ public class HOGDescriptor : DisposableCvObject /// To use these coeffs the detection window size should be (48,96) /// public static readonly float[] DaimlerPeopleDetector = - { + [ 0.294350f, -0.098796f, -0.129522f, 0.078753f, 0.387527f, 0.261529f, 0.145939f, 0.061520f, 0.328699f, 0.227148f, -0.066467f, -0.086723f, @@ -1342,7 +1340,7 @@ public class HOGDescriptor : DisposableCvObject -0.025054f, -0.093026f, -0.035372f, -0.233209f, -0.049869f, -0.039151f, -0.022279f, -0.065380f, -9.063785f - }; + ]; #endregion #endregion @@ -1780,7 +1778,7 @@ public double GetWinSigma() public virtual float[] Compute(Mat img, Size? winStride = null, Size? padding = null, Point[]? locations = null) { ThrowIfDisposed(); - if (img == null) + if (img is null) throw new ArgumentNullException(nameof(img)); var winStride0 = winStride.GetValueOrDefault(new Size()); @@ -1811,7 +1809,7 @@ public virtual Point[] Detect(Mat img, double hitThreshold = 0, Size? winStride = null, Size? padding = null, Point[]? searchLocations = null) { ThrowIfDisposed(); - if (img == null) + if (img is null) throw new ArgumentNullException(nameof(img)); img.ThrowIfDisposed(); @@ -1846,7 +1844,7 @@ public virtual Point[] Detect(Mat img, out double[] weights, double hitThreshold = 0, Size? winStride = null, Size? padding = null, Point[]? searchLocations = null) { ThrowIfDisposed(); - if (img == null) + if (img is null) throw new ArgumentNullException(nameof(img)); img.ThrowIfDisposed(); @@ -1883,7 +1881,7 @@ public virtual Rect[] DetectMultiScale(Mat img, double hitThreshold = 0, Size? winStride = null, Size? padding = null, double scale=1.05, int groupThreshold = 2) { ThrowIfDisposed(); - if (img == null) + if (img is null) throw new ArgumentNullException(nameof(img)); img.ThrowIfDisposed(); @@ -1917,7 +1915,7 @@ public virtual Rect[] DetectMultiScale(Mat img, out double[] foundWeights, double hitThreshold = 0, Size? winStride = null, Size? padding = null, double scale = 1.05, int groupThreshold = 2) { ThrowIfDisposed(); - if (img == null) + if (img is null) throw new ArgumentNullException(nameof(img)); img.ThrowIfDisposed(); @@ -1948,11 +1946,11 @@ public virtual Rect[] DetectMultiScale(Mat img, out double[] foundWeights, public virtual void ComputeGradient(Mat img, Mat grad, Mat angleOfs, Size? paddingTL = null, Size? paddingBR = null) { ThrowIfDisposed(); - if (img == null) + if (img is null) throw new ArgumentNullException(nameof(img)); - if (grad == null) + if (grad is null) throw new ArgumentNullException(nameof(grad)); - if (angleOfs == null) + if (angleOfs is null) throw new ArgumentNullException(nameof(angleOfs)); img.ThrowIfDisposed(); grad.ThrowIfDisposed(); @@ -1987,9 +1985,9 @@ public void DetectROI( double hitThreshold = 0, Size? winStride = null, Size? padding = null) { ThrowIfDisposed(); - if (img == null) + if (img is null) throw new ArgumentNullException(nameof(img)); - if (locations == null) + if (locations is null) throw new ArgumentNullException(nameof(locations)); img.ThrowIfDisposed(); @@ -2026,7 +2024,7 @@ public void DetectMultiScaleROI( int groupThreshold = 0) { ThrowIfDisposed(); - if (img == null) + if (img is null) throw new ArgumentNullException(nameof(img)); img.ThrowIfDisposed(); diff --git a/src/OpenCvSharp/Modules/objdetect/QRCodeDetector.cs b/src/OpenCvSharp/Modules/objdetect/QRCodeDetector.cs index 9e0d37c9e..571093bed 100644 --- a/src/OpenCvSharp/Modules/objdetect/QRCodeDetector.cs +++ b/src/OpenCvSharp/Modules/objdetect/QRCodeDetector.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Generic; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; using OpenCvSharp.Internal.Vectors; // ReSharper disable InconsistentNaming @@ -63,7 +61,7 @@ public void SetEpsY(double epsY) /// public bool Detect(InputArray img, out Point2f[] points) { - if (img == null) + if (img is null) throw new ArgumentNullException(nameof(img)); img.ThrowIfDisposed(); @@ -89,9 +87,9 @@ public bool Detect(InputArray img, out Point2f[] points) /// public string Decode(InputArray img, IEnumerable points, OutputArray? straightQrCode = null) { - if (img == null) + if (img is null) throw new ArgumentNullException(nameof(img)); - if (points == null) + if (points is null) throw new ArgumentNullException(nameof(points)); img.ThrowIfDisposed(); straightQrCode?.ThrowIfNotReady(); @@ -119,7 +117,7 @@ public string Decode(InputArray img, IEnumerable points, OutputArray? s /// public string DetectAndDecode(InputArray img, out Point2f[] points, OutputArray? straightQrCode = null) { - if (img == null) + if (img is null) throw new ArgumentNullException(nameof(img)); img.ThrowIfDisposed(); straightQrCode?.ThrowIfNotReady(); @@ -146,7 +144,7 @@ public string DetectAndDecode(InputArray img, out Point2f[] points, OutputArray? /// public bool DetectMulti(InputArray img, out Point2f[] points) { - if (img == null) + if (img is null) throw new ArgumentNullException(nameof(img)); img.ThrowIfDisposed(); @@ -202,9 +200,9 @@ public bool DecodeMulti(InputArray img, IEnumerable points, out string? /// protected bool DecodeMulti(InputArray img, IEnumerable points, out string?[] decodedInfo, out Mat[] straightQrCode, bool isOutputStraightQrCode) { - if (img == null) + if (img is null) throw new ArgumentNullException(nameof(img)); - if (points == null) + if (points is null) throw new ArgumentNullException(nameof(points)); img.ThrowIfDisposed(); @@ -226,7 +224,7 @@ protected bool DecodeMulti(InputArray img, IEnumerable points, out stri NativeMethods.HandleException( NativeMethods.objdetect_QRCodeDetector_decodeMulti_NoStraightQrCode( ptr, img.CvPtr, pointsVec.CvPtr, decodedInfoVec.CvPtr, out ret)); - straightQrCode = Array.Empty(); + straightQrCode = []; } // decode utf-8 bytes. diff --git a/src/OpenCvSharp/Modules/objdetect/SimilarRects.cs b/src/OpenCvSharp/Modules/objdetect/SimilarRects.cs index 3e6f32461..26f5df290 100644 --- a/src/OpenCvSharp/Modules/objdetect/SimilarRects.cs +++ b/src/OpenCvSharp/Modules/objdetect/SimilarRects.cs @@ -1,4 +1,4 @@ -using System; + // ReSharper disable InconsistentNaming diff --git a/src/OpenCvSharp/Modules/optflow/CvOptFlow.cs b/src/OpenCvSharp/Modules/optflow/CvOptFlow.cs index aa92b42ee..3f672a35a 100644 --- a/src/OpenCvSharp/Modules/optflow/CvOptFlow.cs +++ b/src/OpenCvSharp/Modules/optflow/CvOptFlow.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; using OpenCvSharp.Internal.Vectors; namespace OpenCvSharp.OptFlow; @@ -21,9 +20,9 @@ public static void UpdateMotionHistory( InputArray silhouette, InputOutputArray mhi, double timestamp, double duration) { - if (silhouette == null) + if (silhouette is null) throw new ArgumentNullException(nameof(silhouette)); - if (mhi == null) + if (mhi is null) throw new ArgumentNullException(nameof(mhi)); silhouette.ThrowIfDisposed(); mhi.ThrowIfNotReady(); @@ -55,11 +54,11 @@ public static void CalcMotionGradient( InputArray mhi, OutputArray mask, OutputArray orientation, double delta1, double delta2, int apertureSize = 3) { - if (mhi == null) + if (mhi is null) throw new ArgumentNullException(nameof(mhi)); - if (mask == null) + if (mask is null) throw new ArgumentNullException(nameof(mask)); - if (orientation == null) + if (orientation is null) throw new ArgumentNullException(nameof(orientation)); mhi.ThrowIfDisposed(); mask.ThrowIfNotReady(); @@ -90,11 +89,11 @@ public static double CalcGlobalOrientation( InputArray orientation, InputArray mask, InputArray mhi, double timestamp, double duration) { - if (orientation == null) + if (orientation is null) throw new ArgumentNullException(nameof(orientation)); - if (mask == null) + if (mask is null) throw new ArgumentNullException(nameof(mask)); - if (mhi == null) + if (mhi is null) throw new ArgumentNullException(nameof(mhi)); orientation.ThrowIfDisposed(); mask.ThrowIfDisposed(); @@ -124,9 +123,9 @@ public static void SegmentMotion( out Rect[] boundingRects, double timestamp, double segThresh) { - if (mhi == null) + if (mhi is null) throw new ArgumentNullException(nameof(mhi)); - if (segmask == null) + if (segmask is null) throw new ArgumentNullException(nameof(segmask)); mhi.ThrowIfDisposed(); segmask.ThrowIfNotReady(); @@ -159,11 +158,11 @@ public static void CalcOpticalFlowSF( int averagingBlockSize, int maxFlow) { - if (from == null) + if (from is null) throw new ArgumentNullException(nameof(from)); - if (to == null) + if (to is null) throw new ArgumentNullException(nameof(to)); - if (flow == null) + if (flow is null) throw new ArgumentNullException(nameof(flow)); from.ThrowIfDisposed(); to.ThrowIfDisposed(); @@ -216,11 +215,11 @@ public static void CalcOpticalFlowSF( double upscaleSigmaColor, double speedUpThr) { - if (from == null) + if (from is null) throw new ArgumentNullException(nameof(from)); - if (to == null) + if (to is null) throw new ArgumentNullException(nameof(to)); - if (flow == null) + if (flow is null) throw new ArgumentNullException(nameof(flow)); from.ThrowIfDisposed(); to.ThrowIfDisposed(); @@ -265,11 +264,11 @@ public static void CalcOpticalFlowSparseToDense( float fgsLambda = 500.0f, float fgsSigma = 1.5f) { - if (from == null) + if (from is null) throw new ArgumentNullException(nameof(from)); - if (to == null) + if (to is null) throw new ArgumentNullException(nameof(to)); - if (flow == null) + if (flow is null) throw new ArgumentNullException(nameof(flow)); from.ThrowIfDisposed(); to.ThrowIfDisposed(); diff --git a/src/OpenCvSharp/Modules/photo/CalibrateCRF.cs b/src/OpenCvSharp/Modules/photo/CalibrateCRF.cs index 0f6b09932..211610f43 100644 --- a/src/OpenCvSharp/Modules/photo/CalibrateCRF.cs +++ b/src/OpenCvSharp/Modules/photo/CalibrateCRF.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp; @@ -19,11 +16,11 @@ public abstract class CalibrateCRF : Algorithm /// vector of exposure time values for each image public virtual void Process(IEnumerable src, OutputArray dst, IEnumerable times) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); - if (times == null) + if (times is null) throw new ArgumentNullException(nameof(times)); dst.ThrowIfNotReady(); diff --git a/src/OpenCvSharp/Modules/photo/CalibrateDebevec.cs b/src/OpenCvSharp/Modules/photo/CalibrateDebevec.cs index b4c9ff5bb..695b961c4 100644 --- a/src/OpenCvSharp/Modules/photo/CalibrateDebevec.cs +++ b/src/OpenCvSharp/Modules/photo/CalibrateDebevec.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp; @@ -56,11 +55,9 @@ public float Lambda NativeMethods.photo_CalibrateDebevec_getLambda(ptr, out var ret)); return ret; } - set - { + set => NativeMethods.HandleException( NativeMethods.photo_CalibrateDebevec_setLambda(ptr, value)); - } } /// @@ -74,11 +71,9 @@ public float Samples NativeMethods.photo_CalibrateDebevec_getSamples(ptr, out var ret)); return ret; } - set - { + set => NativeMethods.HandleException( NativeMethods.photo_CalibrateDebevec_setSamples(ptr, value)); - } } /// @@ -92,19 +87,13 @@ public bool Random NativeMethods.photo_CalibrateDebevec_getRandom(ptr, out var ret)); return ret != 0; } - set - { + set => NativeMethods.HandleException( NativeMethods.photo_CalibrateDebevec_setRandom(ptr, value ? 1 : 0)); - } } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/photo/CalibrateRobertson.cs b/src/OpenCvSharp/Modules/photo/CalibrateRobertson.cs index ea5f36e11..da399234d 100644 --- a/src/OpenCvSharp/Modules/photo/CalibrateRobertson.cs +++ b/src/OpenCvSharp/Modules/photo/CalibrateRobertson.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp; @@ -53,11 +52,9 @@ public int MaxIter NativeMethods.photo_CalibrateRobertson_getMaxIter(ptr, out var ret)); return ret; } - set - { + set => NativeMethods.HandleException( NativeMethods.photo_CalibrateRobertson_setMaxIter(ptr, value)); - } } /// @@ -71,11 +68,9 @@ public float Threshold NativeMethods.photo_CalibrateRobertson_getThreshold(ptr, out var ret)); return ret; } - set - { + set => NativeMethods.HandleException( NativeMethods.photo_CalibrateRobertson_setThreshold(ptr, value)); - } } /// @@ -92,12 +87,8 @@ public Mat Radiance } } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/photo/MergeDebevec.cs b/src/OpenCvSharp/Modules/photo/MergeDebevec.cs index b940a54ef..e1c1b5d61 100644 --- a/src/OpenCvSharp/Modules/photo/MergeDebevec.cs +++ b/src/OpenCvSharp/Modules/photo/MergeDebevec.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp; @@ -42,12 +41,8 @@ protected override void DisposeManaged() base.DisposeManaged(); } - private class Ptr : OpenCvSharp.Ptr + private class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { var res = NativeMethods.photo_Ptr_MergeDebevec_get(ptr); diff --git a/src/OpenCvSharp/Modules/photo/MergeExposures.cs b/src/OpenCvSharp/Modules/photo/MergeExposures.cs index 43a935b2e..e61236195 100644 --- a/src/OpenCvSharp/Modules/photo/MergeExposures.cs +++ b/src/OpenCvSharp/Modules/photo/MergeExposures.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp; @@ -19,13 +16,13 @@ public abstract class MergeExposures : Algorithm /// 256x1 matrix with inverse camera response function for each pixel value, it should have the same number of channels as images. public virtual void Process(IEnumerable src, OutputArray dst, IEnumerable times, InputArray response) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); - if (times == null) + if (times is null) throw new ArgumentNullException(nameof(times)); - if (response == null) + if (response is null) throw new ArgumentNullException(nameof(response)); dst.ThrowIfNotReady(); diff --git a/src/OpenCvSharp/Modules/photo/MergeMertens.cs b/src/OpenCvSharp/Modules/photo/MergeMertens.cs index 294632e76..ef9128f3e 100644 --- a/src/OpenCvSharp/Modules/photo/MergeMertens.cs +++ b/src/OpenCvSharp/Modules/photo/MergeMertens.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp; @@ -45,9 +42,9 @@ public static MergeMertens Create() /// result image public void Process(IEnumerable src, OutputArray dst) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); dst.ThrowIfNotReady(); @@ -72,12 +69,8 @@ protected override void DisposeManaged() base.DisposeManaged(); } - private class Ptr : OpenCvSharp.Ptr + private class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { var res = NativeMethods.photo_Ptr_MergeMertens_get(ptr); diff --git a/src/OpenCvSharp/Modules/photo/Tonemap.cs b/src/OpenCvSharp/Modules/photo/Tonemap.cs index 4c75ce36f..c5c287315 100644 --- a/src/OpenCvSharp/Modules/photo/Tonemap.cs +++ b/src/OpenCvSharp/Modules/photo/Tonemap.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp; @@ -63,9 +62,9 @@ protected override void DisposeManaged() /// destination image - CV_32FC3 Mat with values in [0, 1] range public virtual void Process(InputArray src, OutputArray dst) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); @@ -103,12 +102,8 @@ public float Gamma } } - private class Ptr : OpenCvSharp.Ptr + private class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/photo/TonemapDrago.cs b/src/OpenCvSharp/Modules/photo/TonemapDrago.cs index f590cfa45..201188098 100644 --- a/src/OpenCvSharp/Modules/photo/TonemapDrago.cs +++ b/src/OpenCvSharp/Modules/photo/TonemapDrago.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; // ReSharper disable UnusedMember.Global @@ -104,12 +103,8 @@ public float Bias } } - private class Ptr : OpenCvSharp.Ptr + private class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/photo/TonemapMantiuk.cs b/src/OpenCvSharp/Modules/photo/TonemapMantiuk.cs index 915bc3d43..c783d058e 100644 --- a/src/OpenCvSharp/Modules/photo/TonemapMantiuk.cs +++ b/src/OpenCvSharp/Modules/photo/TonemapMantiuk.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; // ReSharper disable UnusedMember.Global @@ -104,12 +103,8 @@ public float Saturation } } - private class Ptr : OpenCvSharp.Ptr + private class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/photo/TonemapReinhard.cs b/src/OpenCvSharp/Modules/photo/TonemapReinhard.cs index a4b09280e..46f453b43 100644 --- a/src/OpenCvSharp/Modules/photo/TonemapReinhard.cs +++ b/src/OpenCvSharp/Modules/photo/TonemapReinhard.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; // ReSharper disable UnusedMember.Global @@ -127,12 +126,8 @@ public float ColorAdaptation } } - private class Ptr : OpenCvSharp.Ptr + private class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/quality/QualityBRISQUE.cs b/src/OpenCvSharp/Modules/quality/QualityBRISQUE.cs index 6faf1c5fe..0e125910e 100644 --- a/src/OpenCvSharp/Modules/quality/QualityBRISQUE.cs +++ b/src/OpenCvSharp/Modules/quality/QualityBRISQUE.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; using OpenCvSharp.ML; // ReSharper disable InconsistentNaming // ReSharper disable CommentTypo @@ -55,9 +54,9 @@ public static QualityBRISQUE Create(string modelFilePath, string rangeFilePath) /// public static QualityBRISQUE Create(SVM model, Mat range) { - if (model == null) + if (model is null) throw new ArgumentNullException(nameof(model)); - if (range == null) + if (range is null) throw new ArgumentNullException(nameof(range)); model.ThrowIfDisposed(); range.ThrowIfDisposed(); @@ -78,7 +77,7 @@ public static QualityBRISQUE Create(SVM model, Mat range) /// cv::Scalar with the score in the first element. The score ranges from 0 (best quality) to 100 (worst quality) public static Scalar Compute(InputArray img, string modelFilePath, string rangeFilePath) { - if (img == null) + if (img is null) throw new ArgumentNullException(nameof(img)); if (string.IsNullOrEmpty(modelFilePath)) throw new ArgumentNullException(nameof(modelFilePath)); @@ -100,9 +99,9 @@ public static Scalar Compute(InputArray img, string modelFilePath, string rangeF /// output row vector of features to cv::Mat or cv::UMat public static void ComputeFeatures(InputArray img, OutputArray features) { - if (img == null) + if (img is null) throw new ArgumentNullException(nameof(img)); - if (features == null) + if (features is null) throw new ArgumentNullException(nameof(features)); NativeMethods.HandleException( @@ -122,12 +121,8 @@ protected override void DisposeManaged() base.DisposeManaged(); } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/quality/QualityBase.cs b/src/OpenCvSharp/Modules/quality/QualityBase.cs index fc9033231..fee1ede62 100644 --- a/src/OpenCvSharp/Modules/quality/QualityBase.cs +++ b/src/OpenCvSharp/Modules/quality/QualityBase.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp.Quality; @@ -30,7 +29,7 @@ public override bool Empty /// public virtual void GetQualityMap(OutputArray dst) { - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); dst.ThrowIfNotReady(); NativeMethods.HandleException( @@ -45,7 +44,7 @@ public virtual void GetQualityMap(OutputArray dst) /// comparison image, or image to evaluate for no-reference quality algorithms public virtual Scalar Compute(InputArray img) { - if (img == null) + if (img is null) throw new ArgumentNullException(nameof(img)); img.ThrowIfDisposed(); diff --git a/src/OpenCvSharp/Modules/quality/QualityGMSD.cs b/src/OpenCvSharp/Modules/quality/QualityGMSD.cs index fa24d1336..c98485278 100644 --- a/src/OpenCvSharp/Modules/quality/QualityGMSD.cs +++ b/src/OpenCvSharp/Modules/quality/QualityGMSD.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; // ReSharper disable InconsistentNaming // ReSharper disable IdentifierTypo @@ -30,7 +29,7 @@ protected QualityGMSD(IntPtr p) /// public static QualityGMSD Create(InputArray @ref) { - if (@ref == null) + if (@ref is null) throw new ArgumentNullException(nameof(@ref)); @ref.ThrowIfDisposed(); @@ -49,9 +48,9 @@ public static QualityGMSD Create(InputArray @ref) /// cv::Scalar with per-channel quality values. Values range from 0 (worst) to 1 (best) public static Scalar Compute(InputArray @ref, InputArray cmp, OutputArray? qualityMap) { - if (@ref == null) + if (@ref is null) throw new ArgumentNullException(nameof(@ref)); - if (cmp == null) + if (cmp is null) throw new ArgumentNullException(nameof(cmp)); @ref.ThrowIfDisposed(); cmp.ThrowIfDisposed(); @@ -77,12 +76,8 @@ protected override void DisposeManaged() base.DisposeManaged(); } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/quality/QualityMSE.cs b/src/OpenCvSharp/Modules/quality/QualityMSE.cs index c9f090a49..28f91c252 100644 --- a/src/OpenCvSharp/Modules/quality/QualityMSE.cs +++ b/src/OpenCvSharp/Modules/quality/QualityMSE.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp.Quality; @@ -27,7 +26,7 @@ protected QualityMSE(IntPtr p) /// public static QualityMSE Create(InputArray @ref) { - if (@ref == null) + if (@ref is null) throw new ArgumentNullException(nameof(@ref)); @ref.ThrowIfDisposed(); @@ -50,9 +49,9 @@ public static QualityMSE Create(InputArray @ref) /// cv::Scalar with per-channel quality values. Values range from 0 (worst) to 1 (best) public static Scalar Compute(InputArray @ref, InputArray cmp, OutputArray? qualityMap) { - if (@ref == null) + if (@ref is null) throw new ArgumentNullException(nameof(@ref)); - if (cmp == null) + if (cmp is null) throw new ArgumentNullException(nameof(cmp)); @ref.ThrowIfDisposed(); cmp.ThrowIfDisposed(); @@ -78,12 +77,8 @@ protected override void DisposeManaged() base.DisposeManaged(); } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/quality/QualityPSNR.cs b/src/OpenCvSharp/Modules/quality/QualityPSNR.cs index 7fe1def65..ee4a5d3b7 100644 --- a/src/OpenCvSharp/Modules/quality/QualityPSNR.cs +++ b/src/OpenCvSharp/Modules/quality/QualityPSNR.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; // ReSharper disable InconsistentNaming @@ -54,7 +53,7 @@ public double MaxPixelValue /// public static QualityPSNR Create(InputArray @ref, double maxPixelValue = MaxPixelValueDefault) { - if (@ref == null) + if (@ref is null) throw new ArgumentNullException(nameof(@ref)); @ref.ThrowIfDisposed(); @@ -74,9 +73,9 @@ public static QualityPSNR Create(InputArray @ref, double maxPixelValue = MaxPixe /// PSNR value, or double.PositiveInfinity if the MSE between the two images == 0 public static Scalar Compute(InputArray @ref, InputArray cmp, OutputArray? qualityMap, double maxPixelValue = MaxPixelValueDefault) { - if (@ref == null) + if (@ref is null) throw new ArgumentNullException(nameof(@ref)); - if (cmp == null) + if (cmp is null) throw new ArgumentNullException(nameof(cmp)); @ref.ThrowIfDisposed(); cmp.ThrowIfDisposed(); @@ -102,12 +101,8 @@ protected override void DisposeManaged() base.DisposeManaged(); } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/quality/QualitySSIM.cs b/src/OpenCvSharp/Modules/quality/QualitySSIM.cs index e87bdca7f..191ce8caf 100644 --- a/src/OpenCvSharp/Modules/quality/QualitySSIM.cs +++ b/src/OpenCvSharp/Modules/quality/QualitySSIM.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; // ReSharper disable InconsistentNaming // ReSharper disable IdentifierTypo @@ -29,7 +28,7 @@ protected QualitySSIM(IntPtr p) /// public static QualitySSIM Create(InputArray @ref) { - if (@ref == null) + if (@ref is null) throw new ArgumentNullException(nameof(@ref)); @ref.ThrowIfDisposed(); @@ -48,9 +47,9 @@ public static QualitySSIM Create(InputArray @ref) /// cv::Scalar with per-channel quality values. Values range from 0 (worst) to 1 (best) public static Scalar Compute(InputArray @ref, InputArray cmp, OutputArray? qualityMap) { - if (@ref == null) + if (@ref is null) throw new ArgumentNullException(nameof(@ref)); - if (cmp == null) + if (cmp is null) throw new ArgumentNullException(nameof(cmp)); @ref.ThrowIfDisposed(); cmp.ThrowIfDisposed(); @@ -76,12 +75,8 @@ protected override void DisposeManaged() base.DisposeManaged(); } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/shape/HausdorffDistanceExtractor.cs b/src/OpenCvSharp/Modules/shape/HausdorffDistanceExtractor.cs index 8f13c28cc..fd05b6351 100644 --- a/src/OpenCvSharp/Modules/shape/HausdorffDistanceExtractor.cs +++ b/src/OpenCvSharp/Modules/shape/HausdorffDistanceExtractor.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp; @@ -101,12 +100,8 @@ public float RankProportion #endregion - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/shape/ShapeContextDistanceExtractor.cs b/src/OpenCvSharp/Modules/shape/ShapeContextDistanceExtractor.cs index b9cdb4b7d..d16b1ab51 100644 --- a/src/OpenCvSharp/Modules/shape/ShapeContextDistanceExtractor.cs +++ b/src/OpenCvSharp/Modules/shape/ShapeContextDistanceExtractor.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp; @@ -293,9 +292,9 @@ public float StdDev public void SetImages(InputArray image1, InputArray image2) { ThrowIfDisposed(); - if (image1 == null) + if (image1 is null) throw new ArgumentNullException(nameof(image1)); - if (image2 == null) + if (image2 is null) throw new ArgumentNullException(nameof(image2)); image1.ThrowIfDisposed(); image2.ThrowIfDisposed(); @@ -317,9 +316,9 @@ public void SetImages(InputArray image1, InputArray image2) public void GetImages(OutputArray image1, OutputArray image2) { ThrowIfDisposed(); - if (image1 == null) + if (image1 is null) throw new ArgumentNullException(nameof(image1)); - if (image2 == null) + if (image2 is null) throw new ArgumentNullException(nameof(image2)); image1.ThrowIfNotReady(); image2.ThrowIfNotReady(); @@ -336,12 +335,8 @@ public void GetImages(OutputArray image1, OutputArray image2) #endregion - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/shape/ShapeDistanceExtractor.cs b/src/OpenCvSharp/Modules/shape/ShapeDistanceExtractor.cs index e483adc3d..8075e13a3 100644 --- a/src/OpenCvSharp/Modules/shape/ShapeDistanceExtractor.cs +++ b/src/OpenCvSharp/Modules/shape/ShapeDistanceExtractor.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp; @@ -19,9 +18,9 @@ public virtual float ComputeDistance(InputArray contour1, InputArray contour2) { if (ptr == IntPtr.Zero) throw new ObjectDisposedException(GetType().Name); - if (contour1 == null) + if (contour1 is null) throw new ArgumentNullException(nameof(contour1)); - if (contour2 == null) + if (contour2 is null) throw new ArgumentNullException(nameof(contour2)); contour1.ThrowIfDisposed(); contour2.ThrowIfDisposed(); diff --git a/src/OpenCvSharp/Modules/stitching/AffineBestOf2NearestMatcher.cs b/src/OpenCvSharp/Modules/stitching/AffineBestOf2NearestMatcher.cs index 296e38472..d8a16e3f7 100644 --- a/src/OpenCvSharp/Modules/stitching/AffineBestOf2NearestMatcher.cs +++ b/src/OpenCvSharp/Modules/stitching/AffineBestOf2NearestMatcher.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp.Detail; diff --git a/src/OpenCvSharp/Modules/stitching/BestOf2NearestMatcher.cs b/src/OpenCvSharp/Modules/stitching/BestOf2NearestMatcher.cs index c59015c71..f6506c2fc 100644 --- a/src/OpenCvSharp/Modules/stitching/BestOf2NearestMatcher.cs +++ b/src/OpenCvSharp/Modules/stitching/BestOf2NearestMatcher.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp.Detail; diff --git a/src/OpenCvSharp/Modules/stitching/CvDetail.cs b/src/OpenCvSharp/Modules/stitching/CvDetail.cs index 55f264d9b..4fba3d07b 100644 --- a/src/OpenCvSharp/Modules/stitching/CvDetail.cs +++ b/src/OpenCvSharp/Modules/stitching/CvDetail.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.InteropServices; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; using OpenCvSharp.Internal.Vectors; // ReSharper disable UnusedMember.Global @@ -25,9 +21,9 @@ public static ImageFeatures[] ComputeImageFeatures( IEnumerable images, IEnumerable? masks = null) { - if (featuresFinder == null) + if (featuresFinder is null) throw new ArgumentNullException(nameof(featuresFinder)); - if (images == null) + if (images is null) throw new ArgumentNullException(nameof(images)); featuresFinder.ThrowIfDisposed(); @@ -37,7 +33,7 @@ public static ImageFeatures[] ComputeImageFeatures( var imagesPointers = imagesArray.Select(i => i.CvPtr).ToArray(); var masksPointers = masks?.Select(i => i.CvPtr).ToArray(); - if (masksPointers != null && imagesPointers.Length != masksPointers.Length) + if (masksPointers is not null && imagesPointers.Length != masksPointers.Length) throw new ArgumentException("size of images != size of masks"); using var wImageFeaturesVec = new VectorOfImageFeatures(); @@ -68,9 +64,9 @@ public static ImageFeatures ComputeImageFeatures( InputArray image, InputArray? mask = null) { - if (featuresFinder == null) + if (featuresFinder is null) throw new ArgumentNullException(nameof(featuresFinder)); - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); featuresFinder.ThrowIfDisposed(); image.ThrowIfDisposed(); diff --git a/src/OpenCvSharp/Modules/stitching/FeaturesMatcher.cs b/src/OpenCvSharp/Modules/stitching/FeaturesMatcher.cs index 955ef05f0..b81d9b06b 100644 --- a/src/OpenCvSharp/Modules/stitching/FeaturesMatcher.cs +++ b/src/OpenCvSharp/Modules/stitching/FeaturesMatcher.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; using OpenCvSharp.Internal.Util; using OpenCvSharp.Internal.Vectors; @@ -32,14 +29,14 @@ public virtual MatchesInfo Apply( { ThrowIfDisposed(); - if (features1 == null) + if (features1 is null) throw new ArgumentNullException(nameof(features1)); - if (features2 == null) + if (features2 is null) throw new ArgumentNullException(nameof(features2)); - if (features1.Descriptors == null) - throw new ArgumentException($"{nameof(features1)}.Descriptors == null", nameof(features1)); - if (features2.Descriptors == null) - throw new ArgumentException($"{nameof(features2)}.Descriptors == null", nameof(features1)); + if (features1.Descriptors is null) + throw new ArgumentException($"{nameof(features1)}.Descriptors is null", nameof(features1)); + if (features2.Descriptors is null) + throw new ArgumentException($"{nameof(features2)}.Descriptors is null", nameof(features1)); features1.Descriptors.ThrowIfDisposed(); features2.Descriptors.ThrowIfDisposed(); @@ -91,7 +88,7 @@ public virtual MatchesInfo Apply( public virtual MatchesInfo[] Apply( IEnumerable features, Mat? mask = null) { - if (features == null) + if (features is null) throw new ArgumentNullException(nameof(features)); ThrowIfDisposed(); @@ -105,7 +102,7 @@ public virtual MatchesInfo[] Apply( { for (int i = 0; i < featuresArray.Length; i++) { - if (featuresArray[i].Descriptors == null) + if (featuresArray[i].Descriptors is null) throw new ArgumentException("features contain null descriptor mat", nameof(features)); featuresArray[i].Descriptors.ThrowIfDisposed(); diff --git a/src/OpenCvSharp/Modules/stitching/ImageFeatures.cs b/src/OpenCvSharp/Modules/stitching/ImageFeatures.cs index 21fd0b3ea..072ad05eb 100644 --- a/src/OpenCvSharp/Modules/stitching/ImageFeatures.cs +++ b/src/OpenCvSharp/Modules/stitching/ImageFeatures.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.CodeAnalysis; using System.Runtime.InteropServices; namespace OpenCvSharp.Detail; diff --git a/src/OpenCvSharp/Modules/stitching/MatchesInfo.cs b/src/OpenCvSharp/Modules/stitching/MatchesInfo.cs index 836031324..e40051e75 100644 --- a/src/OpenCvSharp/Modules/stitching/MatchesInfo.cs +++ b/src/OpenCvSharp/Modules/stitching/MatchesInfo.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; - -namespace OpenCvSharp.Detail; +namespace OpenCvSharp.Detail; /// /// Structure containing information about matches between two images. @@ -80,7 +77,7 @@ public MatchesInfo( /// public MatchesInfo(MatchesInfo other) { - if (other == null) + if (other is null) throw new ArgumentNullException(nameof(other)); SrcImgIdx = other.SrcImgIdx; DstImgIdx = other.DstImgIdx; diff --git a/src/OpenCvSharp/Modules/stitching/Stitcher.cs b/src/OpenCvSharp/Modules/stitching/Stitcher.cs index 395e0fffd..5dc91b8ae 100644 --- a/src/OpenCvSharp/Modules/stitching/Stitcher.cs +++ b/src/OpenCvSharp/Modules/stitching/Stitcher.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using OpenCvSharp.Detail; +using OpenCvSharp.Detail; using OpenCvSharp.Internal; using OpenCvSharp.Internal.Util; using OpenCvSharp.Internal.Vectors; @@ -20,33 +17,19 @@ public enum WaveCorrectKind Vertical } - public class FeaturesFinder - { - } + public class FeaturesFinder; - public class BundleAdjusterBase - { - } + public class BundleAdjusterBase; - public class WarperCreator - { - } + public class WarperCreator; - public class ExposureCompensator - { - } + public class ExposureCompensator; - public class SeamFinder - { - } + public class SeamFinder; - public class Blender - { - } + public class Blender; - public class CameraParams - { - } + public class CameraParams; } /// @@ -313,7 +296,7 @@ public double WorkScale public Status EstimateTransform(InputArray images) { - if (images == null) + if (images is null) throw new ArgumentNullException(nameof(images)); images.ThrowIfDisposed(); @@ -328,9 +311,9 @@ public Status EstimateTransform(InputArray images) public Status EstimateTransform(InputArray images, Rect[][] rois) { - if (images == null) + if (images is null) throw new ArgumentNullException(nameof(images)); - if (rois == null) + if (rois is null) throw new ArgumentNullException(nameof(rois)); images.ThrowIfDisposed(); @@ -348,7 +331,7 @@ public Status EstimateTransform(InputArray images, Rect[][] rois) public Status EstimateTransform(IEnumerable images) { - if (images == null) + if (images is null) throw new ArgumentNullException(nameof(images)); var imagesPtrs = images.Select(x => x.CvPtr).ToArray(); @@ -364,9 +347,9 @@ public Status EstimateTransform(IEnumerable images) public Status EstimateTransform(IEnumerable images, Rect[][] rois) { - if (images == null) + if (images is null) throw new ArgumentNullException(nameof(images)); - if (rois == null) + if (rois is null) throw new ArgumentNullException(nameof(rois)); var imagesPtrs = images.Select(x => x.CvPtr).ToArray(); @@ -384,7 +367,7 @@ public Status EstimateTransform(IEnumerable images, Rect[][] rois) public Status ComposePanorama(OutputArray pano) { - if (pano == null) + if (pano is null) throw new ArgumentNullException(nameof(pano)); pano.ThrowIfNotReady(); @@ -400,9 +383,9 @@ public Status ComposePanorama(OutputArray pano) public Status ComposePanorama(InputArray images, OutputArray pano) { - if (images == null) + if (images is null) throw new ArgumentNullException(nameof(images)); - if (pano == null) + if (pano is null) throw new ArgumentNullException(nameof(pano)); images.ThrowIfDisposed(); pano.ThrowIfNotReady(); @@ -420,9 +403,9 @@ public Status ComposePanorama(InputArray images, OutputArray pano) public Status ComposePanorama(IEnumerable images, OutputArray pano) { - if (images == null) + if (images is null) throw new ArgumentNullException(nameof(images)); - if (pano == null) + if (pano is null) throw new ArgumentNullException(nameof(pano)); pano.ThrowIfNotReady(); @@ -446,9 +429,9 @@ public Status ComposePanorama(IEnumerable images, OutputArray pano) /// Status code. public Status Stitch(InputArray images, OutputArray pano) { - if (images == null) + if (images is null) throw new ArgumentNullException(nameof(images)); - if (pano == null) + if (pano is null) throw new ArgumentNullException(nameof(pano)); images.ThrowIfDisposed(); pano.ThrowIfNotReady(); @@ -473,9 +456,9 @@ public Status Stitch(InputArray images, OutputArray pano) /// Status code. public Status Stitch(IEnumerable images, OutputArray pano) { - if (images == null) + if (images is null) throw new ArgumentNullException(nameof(images)); - if (pano == null) + if (pano is null) throw new ArgumentNullException(nameof(pano)); pano.ThrowIfNotReady(); @@ -502,11 +485,11 @@ public Status Stitch(IEnumerable images, OutputArray pano) /// Status code. public Status Stitch(InputArray images, Rect[][] rois, OutputArray pano) { - if (images == null) + if (images is null) throw new ArgumentNullException(nameof(images)); - if (rois == null) + if (rois is null) throw new ArgumentNullException(nameof(rois)); - if (pano == null) + if (pano is null) throw new ArgumentNullException(nameof(pano)); images.ThrowIfDisposed(); pano.ThrowIfNotReady(); @@ -534,11 +517,11 @@ public Status Stitch(InputArray images, Rect[][] rois, OutputArray pano) /// Status code. public Status Stitch(IEnumerable images, Rect[][] rois, OutputArray pano) { - if (images == null) + if (images is null) throw new ArgumentNullException(nameof(images)); - if (rois == null) + if (rois is null) throw new ArgumentNullException(nameof(rois)); - if (pano == null) + if (pano is null) throw new ArgumentNullException(nameof(pano)); pano.ThrowIfNotReady(); @@ -560,12 +543,8 @@ public Status Stitch(IEnumerable images, Rect[][] rois, OutputArray pano) #endregion - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/superres/BroxOpticalFlow.cs b/src/OpenCvSharp/Modules/superres/BroxOpticalFlow.cs index a049310f5..104328eb8 100644 --- a/src/OpenCvSharp/Modules/superres/BroxOpticalFlow.cs +++ b/src/OpenCvSharp/Modules/superres/BroxOpticalFlow.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp; @@ -194,12 +193,8 @@ public int SolverIterations #endregion - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/superres/DenseOpticalFlowExt.cs b/src/OpenCvSharp/Modules/superres/DenseOpticalFlowExt.cs index e2fe059c3..30c453459 100644 --- a/src/OpenCvSharp/Modules/superres/DenseOpticalFlowExt.cs +++ b/src/OpenCvSharp/Modules/superres/DenseOpticalFlowExt.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp; @@ -98,11 +97,11 @@ public virtual void CollectGarbage() /// public virtual void Calc(InputArray frame0, InputArray frame1, OutputArray flow1, OutputArray? flow2 = null) { - if (frame0 == null) + if (frame0 is null) throw new ArgumentNullException(nameof(frame0)); - if (frame1 == null) + if (frame1 is null) throw new ArgumentNullException(nameof(frame1)); - if (flow1 == null) + if (flow1 is null) throw new ArgumentNullException(nameof(flow1)); frame0.ThrowIfDisposed(); frame1.ThrowIfDisposed(); diff --git a/src/OpenCvSharp/Modules/superres/DualTVL1OpticalFlow.cs b/src/OpenCvSharp/Modules/superres/DualTVL1OpticalFlow.cs index 5ecb0c988..70ddcb822 100644 --- a/src/OpenCvSharp/Modules/superres/DualTVL1OpticalFlow.cs +++ b/src/OpenCvSharp/Modules/superres/DualTVL1OpticalFlow.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp; @@ -238,12 +237,8 @@ public bool UseInitialFlow #endregion - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/superres/FarnebackOpticalFlow.cs b/src/OpenCvSharp/Modules/superres/FarnebackOpticalFlow.cs index 190653f12..c3f24ba16 100644 --- a/src/OpenCvSharp/Modules/superres/FarnebackOpticalFlow.cs +++ b/src/OpenCvSharp/Modules/superres/FarnebackOpticalFlow.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp; @@ -214,12 +213,8 @@ public int Flags #endregion - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/superres/FrameSource.cs b/src/OpenCvSharp/Modules/superres/FrameSource.cs index 1901f3019..5c32f0bb7 100644 --- a/src/OpenCvSharp/Modules/superres/FrameSource.cs +++ b/src/OpenCvSharp/Modules/superres/FrameSource.cs @@ -1,6 +1,4 @@ -using System; -using System.IO; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp; @@ -107,7 +105,7 @@ public static FrameSource CreateFrameSource_Camera(int deviceId) public virtual void NextFrame(OutputArray frame) { ThrowIfDisposed(); - if (frame == null) + if (frame is null) throw new ArgumentNullException(nameof(frame)); frame.ThrowIfNotReady(); @@ -132,12 +130,8 @@ public virtual void Reset() #endregion - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/superres/PyrLKOpticalFlow.cs b/src/OpenCvSharp/Modules/superres/PyrLKOpticalFlow.cs index 87824a42e..7ecb649cc 100644 --- a/src/OpenCvSharp/Modules/superres/PyrLKOpticalFlow.cs +++ b/src/OpenCvSharp/Modules/superres/PyrLKOpticalFlow.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp; @@ -126,12 +125,8 @@ public int Iterations #endregion - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/superres/SuperResolution.cs b/src/OpenCvSharp/Modules/superres/SuperResolution.cs index 99149c810..cead10bc6 100644 --- a/src/OpenCvSharp/Modules/superres/SuperResolution.cs +++ b/src/OpenCvSharp/Modules/superres/SuperResolution.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp; @@ -83,7 +82,7 @@ public static SuperResolution CreateBTVL1_CUDA() public virtual void SetInput(FrameSource fs) { ThrowIfDisposed(); - if (fs == null) + if (fs is null) throw new ArgumentNullException(nameof(fs)); fs.ThrowIfDisposed(); @@ -100,7 +99,7 @@ public virtual void SetInput(FrameSource fs) public virtual void NextFrame(OutputArray frame) { ThrowIfDisposed(); - if (frame == null) + if (frame is null) throw new ArgumentNullException(nameof(frame)); frame.ThrowIfNotReady(); @@ -373,12 +372,8 @@ public DenseOpticalFlowExt OpticalFlow #endregion - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/text/CvText.cs b/src/OpenCvSharp/Modules/text/CvText.cs index 0b86422f3..5ad1c0509 100644 --- a/src/OpenCvSharp/Modules/text/CvText.cs +++ b/src/OpenCvSharp/Modules/text/CvText.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; using OpenCvSharp.Internal.Vectors; // ReSharper disable UnusedMember.Global @@ -27,7 +26,7 @@ public static class CvText public static Rect[] DetectTextSWT( InputArray input, bool darkOnLight, OutputArray? draw = null, OutputArray? chainBBs = null) { - if (input == null) + if (input is null) throw new ArgumentNullException(nameof(input)); input.ThrowIfDisposed(); draw?.ThrowIfNotReady(); diff --git a/src/OpenCvSharp/Modules/text/OCRTesseract.cs b/src/OpenCvSharp/Modules/text/OCRTesseract.cs index 91733e045..d4782fac0 100644 --- a/src/OpenCvSharp/Modules/text/OCRTesseract.cs +++ b/src/OpenCvSharp/Modules/text/OCRTesseract.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; using OpenCvSharp.Internal.Vectors; namespace OpenCvSharp.Text; @@ -88,7 +87,7 @@ public override void Run( out float[] componentConfidences, ComponentLevels componentLevel = ComponentLevels.Word) { - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); image.ThrowIfDisposed(); @@ -139,9 +138,9 @@ public override void Run( out float[] componentConfidences, ComponentLevels componentLevel = ComponentLevels.Word) { - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); - if (mask == null) + if (mask is null) throw new ArgumentNullException(nameof(mask)); image.ThrowIfDisposed(); mask.ThrowIfDisposed(); @@ -175,7 +174,7 @@ public override void Run( /// public void SetWhiteList(string charWhitelist) { - if (charWhitelist == null) + if (charWhitelist is null) throw new ArgumentNullException(nameof(charWhitelist)); NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/text/TextDetector.cs b/src/OpenCvSharp/Modules/text/TextDetector.cs index b53d36a4a..3c9cb298e 100644 --- a/src/OpenCvSharp/Modules/text/TextDetector.cs +++ b/src/OpenCvSharp/Modules/text/TextDetector.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; using OpenCvSharp.Internal.Vectors; namespace OpenCvSharp; @@ -17,7 +16,7 @@ public abstract class TextDetector : DisposableCvObject /// a vector of float that will be updated with the confidence the classifier has for the selected bounding box public virtual void Detect(InputArray inputImage, out Rect[] bbox, out float[] confidence) { - if (inputImage == null) + if (inputImage is null) throw new ArgumentNullException(nameof(inputImage)); inputImage.ThrowIfDisposed(); diff --git a/src/OpenCvSharp/Modules/text/TextDetectorCNN.cs b/src/OpenCvSharp/Modules/text/TextDetectorCNN.cs index 791a548e2..d48ee3e45 100644 --- a/src/OpenCvSharp/Modules/text/TextDetectorCNN.cs +++ b/src/OpenCvSharp/Modules/text/TextDetectorCNN.cs @@ -1,6 +1,3 @@ -using System; -using System.Collections.Generic; -using System.Linq; using OpenCvSharp.Internal; using OpenCvSharp.Internal.Vectors; @@ -39,7 +36,7 @@ public static TextDetectorCNN Create( throw new ArgumentException("empty string", nameof(detectionSizes)); if (string.IsNullOrEmpty(modelWeightsFilename)) throw new ArgumentException("empty string", nameof(modelWeightsFilename)); - if (detectionSizes == null) + if (detectionSizes is null) throw new ArgumentNullException(nameof(detectionSizes)); var detectionSizesArray = detectionSizes.ToArray(); @@ -90,7 +87,7 @@ protected override void DisposeManaged() /// a vector of float that will be updated with the confidence the classifier has for the selected bounding box public override void Detect(InputArray inputImage, out Rect[] bbox, out float[] confidence) { - if (inputImage == null) + if (inputImage is null) throw new ArgumentNullException(nameof(inputImage)); inputImage.ThrowIfDisposed(); @@ -106,12 +103,8 @@ public override void Detect(InputArray inputImage, out Rect[] bbox, out float[] GC.KeepAlive(inputImage); } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/tracking/TrackerCSRT.cs b/src/OpenCvSharp/Modules/tracking/TrackerCSRT.cs index fa08ac6d4..82662f564 100644 --- a/src/OpenCvSharp/Modules/tracking/TrackerCSRT.cs +++ b/src/OpenCvSharp/Modules/tracking/TrackerCSRT.cs @@ -1,4 +1,3 @@ -using System; using System.Diagnostics.CodeAnalysis; using System.Runtime.InteropServices; using OpenCvSharp.Internal; @@ -52,7 +51,7 @@ public static TrackerCSRT Create(Params parameters) /// public virtual void SetInitialMask(InputArray mask) { - if (mask == null) + if (mask is null) throw new ArgumentNullException(nameof(mask)); mask.ThrowIfDisposed(); @@ -62,12 +61,8 @@ public virtual void SetInitialMask(InputArray mask) GC.KeepAlive(mask); } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/tracking/TrackerKCF.cs b/src/OpenCvSharp/Modules/tracking/TrackerKCF.cs index 9f831150b..78a5fc578 100644 --- a/src/OpenCvSharp/Modules/tracking/TrackerKCF.cs +++ b/src/OpenCvSharp/Modules/tracking/TrackerKCF.cs @@ -1,4 +1,3 @@ -using System; using System.Runtime.InteropServices; using OpenCvSharp.Internal; @@ -46,12 +45,8 @@ public static TrackerKCF Create(Params parameters) return new TrackerKCF(p); } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/video/BackgroundSubtractor.cs b/src/OpenCvSharp/Modules/video/BackgroundSubtractor.cs index dc6c8bdd2..efe2f5702 100644 --- a/src/OpenCvSharp/Modules/video/BackgroundSubtractor.cs +++ b/src/OpenCvSharp/Modules/video/BackgroundSubtractor.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp; @@ -18,9 +17,9 @@ public abstract class BackgroundSubtractor : Algorithm /// public virtual void Apply(InputArray image, OutputArray fgmask, double learningRate = -1) { - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); - if (fgmask == null) + if (fgmask is null) throw new ArgumentNullException(nameof(fgmask)); image.ThrowIfDisposed(); fgmask.ThrowIfNotReady(); @@ -40,7 +39,7 @@ public virtual void Apply(InputArray image, OutputArray fgmask, double learningR /// public virtual void GetBackgroundImage(OutputArray backgroundImage) { - if (backgroundImage == null) + if (backgroundImage is null) throw new ArgumentNullException(nameof(backgroundImage)); backgroundImage.ThrowIfNotReady(); diff --git a/src/OpenCvSharp/Modules/video/BackgroundSubtractorKNN.cs b/src/OpenCvSharp/Modules/video/BackgroundSubtractorKNN.cs index 0af8eec5b..28ae953ac 100644 --- a/src/OpenCvSharp/Modules/video/BackgroundSubtractorKNN.cs +++ b/src/OpenCvSharp/Modules/video/BackgroundSubtractorKNN.cs @@ -1,4 +1,3 @@ -using System; using OpenCvSharp.Internal; namespace OpenCvSharp; @@ -62,8 +61,8 @@ public int History get { ThrowIfDisposed(); - if (objectPtr == null) - throw new NotSupportedException("objectPtr == null"); + if (objectPtr is null) + throw new NotSupportedException("objectPtr is null"); NativeMethods.HandleException( NativeMethods.video_BackgroundSubtractorKNN_getHistory(objectPtr.CvPtr, out var ret)); GC.KeepAlive(this); @@ -72,8 +71,8 @@ public int History set { ThrowIfDisposed(); - if (objectPtr == null) - throw new NotSupportedException("objectPtr == null"); + if (objectPtr is null) + throw new NotSupportedException("objectPtr is null"); NativeMethods.HandleException( NativeMethods.video_BackgroundSubtractorKNN_setHistory(objectPtr.CvPtr, value)); GC.KeepAlive(this); @@ -88,8 +87,8 @@ public int NSamples get { ThrowIfDisposed(); - if (objectPtr == null) - throw new NotSupportedException("objectPtr == null"); + if (objectPtr is null) + throw new NotSupportedException("objectPtr is null"); NativeMethods.HandleException( NativeMethods.video_BackgroundSubtractorKNN_getNSamples(objectPtr.CvPtr, out var ret)); GC.KeepAlive(this); @@ -98,8 +97,8 @@ public int NSamples set { ThrowIfDisposed(); - if (objectPtr == null) - throw new NotSupportedException("objectPtr == null"); + if (objectPtr is null) + throw new NotSupportedException("objectPtr is null"); NativeMethods.HandleException( NativeMethods.video_BackgroundSubtractorKNN_setNSamples(objectPtr.CvPtr, value)); GC.KeepAlive(this); @@ -115,8 +114,8 @@ public double Dist2Threshold get { ThrowIfDisposed(); - if (objectPtr == null) - throw new NotSupportedException("objectPtr == null"); + if (objectPtr is null) + throw new NotSupportedException("objectPtr is null"); NativeMethods.HandleException( NativeMethods.video_BackgroundSubtractorKNN_getDist2Threshold(objectPtr.CvPtr, out var ret)); GC.KeepAlive(this); @@ -125,8 +124,8 @@ public double Dist2Threshold set { ThrowIfDisposed(); - if (objectPtr == null) - throw new NotSupportedException("objectPtr == null"); + if (objectPtr is null) + throw new NotSupportedException("objectPtr is null"); NativeMethods.HandleException( NativeMethods.video_BackgroundSubtractorKNN_setDist2Threshold(objectPtr.CvPtr, value)); GC.KeepAlive(this); @@ -143,8 +142,8 @@ public int KNNSamples get { ThrowIfDisposed(); - if (objectPtr == null) - throw new NotSupportedException("objectPtr == null"); + if (objectPtr is null) + throw new NotSupportedException("objectPtr is null"); NativeMethods.HandleException( NativeMethods.video_BackgroundSubtractorKNN_getkNNSamples(objectPtr.CvPtr, out var ret)); GC.KeepAlive(this); @@ -153,8 +152,8 @@ public int KNNSamples set { ThrowIfDisposed(); - if (objectPtr == null) - throw new NotSupportedException("objectPtr == null"); + if (objectPtr is null) + throw new NotSupportedException("objectPtr is null"); NativeMethods.HandleException( NativeMethods.video_BackgroundSubtractorKNN_setkNNSamples(objectPtr.CvPtr, value)); GC.KeepAlive(this); @@ -170,8 +169,8 @@ public bool DetectShadows get { ThrowIfDisposed(); - if (objectPtr == null) - throw new NotSupportedException("objectPtr == null"); + if (objectPtr is null) + throw new NotSupportedException("objectPtr is null"); NativeMethods.HandleException( NativeMethods.video_BackgroundSubtractorKNN_getDetectShadows(objectPtr.CvPtr, out var ret)); GC.KeepAlive(this); @@ -180,8 +179,8 @@ public bool DetectShadows set { ThrowIfDisposed(); - if (objectPtr == null) - throw new NotSupportedException("objectPtr == null"); + if (objectPtr is null) + throw new NotSupportedException("objectPtr is null"); NativeMethods.HandleException( NativeMethods.video_BackgroundSubtractorKNN_setDetectShadows(objectPtr.CvPtr, value ? 1 : 0)); GC.KeepAlive(this); @@ -198,8 +197,8 @@ public int ShadowValue get { ThrowIfDisposed(); - if (objectPtr == null) - throw new NotSupportedException("objectPtr == null"); + if (objectPtr is null) + throw new NotSupportedException("objectPtr is null"); NativeMethods.HandleException( NativeMethods.video_BackgroundSubtractorKNN_getShadowValue(objectPtr.CvPtr, out var ret)); GC.KeepAlive(this); @@ -208,8 +207,8 @@ public int ShadowValue set { ThrowIfDisposed(); - if (objectPtr == null) - throw new NotSupportedException("objectPtr == null"); + if (objectPtr is null) + throw new NotSupportedException("objectPtr is null"); NativeMethods.HandleException( NativeMethods.video_BackgroundSubtractorKNN_setShadowValue(objectPtr.CvPtr, value)); GC.KeepAlive(this); @@ -228,8 +227,8 @@ public double ShadowThreshold get { ThrowIfDisposed(); - if (objectPtr == null) - throw new NotSupportedException("objectPtr == null"); + if (objectPtr is null) + throw new NotSupportedException("objectPtr is null"); NativeMethods.HandleException( NativeMethods.video_BackgroundSubtractorKNN_getShadowThreshold(objectPtr.CvPtr, out var ret)); GC.KeepAlive(this); @@ -238,8 +237,8 @@ public double ShadowThreshold set { ThrowIfDisposed(); - if (objectPtr == null) - throw new NotSupportedException("objectPtr == null"); + if (objectPtr is null) + throw new NotSupportedException("objectPtr is null"); NativeMethods.HandleException( NativeMethods.video_BackgroundSubtractorKNN_setShadowThreshold(objectPtr.CvPtr, value)); GC.KeepAlive(this); @@ -248,12 +247,8 @@ public double ShadowThreshold #endregion - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/video/BackgroundSubtractorMog2.cs b/src/OpenCvSharp/Modules/video/BackgroundSubtractorMog2.cs index a09ed04f2..7d2c0ea65 100644 --- a/src/OpenCvSharp/Modules/video/BackgroundSubtractorMog2.cs +++ b/src/OpenCvSharp/Modules/video/BackgroundSubtractorMog2.cs @@ -1,4 +1,3 @@ -using System; using OpenCvSharp.Internal; namespace OpenCvSharp; @@ -65,8 +64,8 @@ public int History get { ThrowIfDisposed(); - if (objectPtr == null) - throw new NotSupportedException("objectPtr == null"); + if (objectPtr is null) + throw new NotSupportedException("objectPtr is null"); NativeMethods.HandleException( NativeMethods.video_BackgroundSubtractorMOG2_getHistory(objectPtr.CvPtr, out var ret)); GC.KeepAlive(this); @@ -75,8 +74,8 @@ public int History set { ThrowIfDisposed(); - if (objectPtr == null) - throw new NotSupportedException("objectPtr == null"); + if (objectPtr is null) + throw new NotSupportedException("objectPtr is null"); NativeMethods.HandleException( NativeMethods.video_BackgroundSubtractorMOG2_setHistory(objectPtr.CvPtr, value)); GC.KeepAlive(this); @@ -91,8 +90,8 @@ public int NMixtures get { ThrowIfDisposed(); - if (objectPtr == null) - throw new NotSupportedException("objectPtr == null"); + if (objectPtr is null) + throw new NotSupportedException("objectPtr is null"); NativeMethods.HandleException( NativeMethods.video_BackgroundSubtractorMOG2_getNMixtures(objectPtr.CvPtr, out var ret)); GC.KeepAlive(this); @@ -101,8 +100,8 @@ public int NMixtures set { ThrowIfDisposed(); - if (objectPtr == null) - throw new NotSupportedException("objectPtr == null"); + if (objectPtr is null) + throw new NotSupportedException("objectPtr is null"); NativeMethods.HandleException( NativeMethods.video_BackgroundSubtractorMOG2_setNMixtures(objectPtr.CvPtr, value)); GC.KeepAlive(this); @@ -120,8 +119,8 @@ public double BackgroundRatio get { ThrowIfDisposed(); - if (objectPtr == null) - throw new NotSupportedException("objectPtr == null"); + if (objectPtr is null) + throw new NotSupportedException("objectPtr is null"); NativeMethods.HandleException( NativeMethods.video_BackgroundSubtractorMOG2_getBackgroundRatio(objectPtr.CvPtr, out var ret)); GC.KeepAlive(this); @@ -130,8 +129,8 @@ public double BackgroundRatio set { ThrowIfDisposed(); - if (objectPtr == null) - throw new NotSupportedException("objectPtr == null"); + if (objectPtr is null) + throw new NotSupportedException("objectPtr is null"); NativeMethods.HandleException( NativeMethods.video_BackgroundSubtractorMOG2_setBackgroundRatio(objectPtr.CvPtr, value)); GC.KeepAlive(this); @@ -148,8 +147,8 @@ public double VarThreshold get { ThrowIfDisposed(); - if (objectPtr == null) - throw new NotSupportedException("objectPtr == null"); + if (objectPtr is null) + throw new NotSupportedException("objectPtr is null"); NativeMethods.HandleException( NativeMethods.video_BackgroundSubtractorMOG2_getVarThreshold(objectPtr.CvPtr, out var ret)); GC.KeepAlive(this); @@ -158,8 +157,8 @@ public double VarThreshold set { ThrowIfDisposed(); - if (objectPtr == null) - throw new NotSupportedException("objectPtr == null"); + if (objectPtr is null) + throw new NotSupportedException("objectPtr is null"); NativeMethods.HandleException( NativeMethods.video_BackgroundSubtractorMOG2_setVarThreshold(objectPtr.CvPtr, value)); GC.KeepAlive(this); @@ -178,8 +177,8 @@ public double VarThresholdGen get { ThrowIfDisposed(); - if (objectPtr == null) - throw new NotSupportedException("objectPtr == null"); + if (objectPtr is null) + throw new NotSupportedException("objectPtr is null"); NativeMethods.HandleException( NativeMethods.video_BackgroundSubtractorMOG2_getVarThresholdGen(objectPtr.CvPtr, out var ret)); GC.KeepAlive(this); @@ -188,8 +187,8 @@ public double VarThresholdGen set { ThrowIfDisposed(); - if (objectPtr == null) - throw new NotSupportedException("objectPtr == null"); + if (objectPtr is null) + throw new NotSupportedException("objectPtr is null"); NativeMethods.HandleException( NativeMethods.video_BackgroundSubtractorMOG2_setVarThresholdGen(objectPtr.CvPtr, value)); GC.KeepAlive(this); @@ -204,8 +203,8 @@ public double VarInit get { ThrowIfDisposed(); - if (objectPtr == null) - throw new NotSupportedException("objectPtr == null"); + if (objectPtr is null) + throw new NotSupportedException("objectPtr is null"); NativeMethods.HandleException( NativeMethods.video_BackgroundSubtractorMOG2_getVarInit(objectPtr.CvPtr, out var ret)); GC.KeepAlive(this); @@ -214,8 +213,8 @@ public double VarInit set { ThrowIfDisposed(); - if (objectPtr == null) - throw new NotSupportedException("objectPtr == null"); + if (objectPtr is null) + throw new NotSupportedException("objectPtr is null"); NativeMethods.HandleException( NativeMethods.video_BackgroundSubtractorMOG2_setVarInit(objectPtr.CvPtr, value)); GC.KeepAlive(this); @@ -230,8 +229,8 @@ public double VarMin get { ThrowIfDisposed(); - if (objectPtr == null) - throw new NotSupportedException("objectPtr == null"); + if (objectPtr is null) + throw new NotSupportedException("objectPtr is null"); NativeMethods.HandleException( NativeMethods.video_BackgroundSubtractorMOG2_getVarMin(objectPtr.CvPtr, out var ret)); GC.KeepAlive(this); @@ -240,8 +239,8 @@ public double VarMin set { ThrowIfDisposed(); - if (objectPtr == null) - throw new NotSupportedException("objectPtr == null"); + if (objectPtr is null) + throw new NotSupportedException("objectPtr is null"); NativeMethods.HandleException( NativeMethods.video_BackgroundSubtractorMOG2_setVarMin(objectPtr.CvPtr, value)); GC.KeepAlive(this); @@ -256,8 +255,8 @@ public double VarMax get { ThrowIfDisposed(); - if (objectPtr == null) - throw new NotSupportedException("objectPtr == null"); + if (objectPtr is null) + throw new NotSupportedException("objectPtr is null"); NativeMethods.HandleException( NativeMethods.video_BackgroundSubtractorMOG2_getVarMax(objectPtr.CvPtr, out var ret)); GC.KeepAlive(this); @@ -266,8 +265,8 @@ public double VarMax set { ThrowIfDisposed(); - if (objectPtr == null) - throw new NotSupportedException("objectPtr == null"); + if (objectPtr is null) + throw new NotSupportedException("objectPtr is null"); NativeMethods.HandleException( NativeMethods.video_BackgroundSubtractorMOG2_setVarMax(objectPtr.CvPtr, value)); GC.KeepAlive(this); @@ -284,8 +283,8 @@ public double ComplexityReductionThreshold get { ThrowIfDisposed(); - if (objectPtr == null) - throw new NotSupportedException("objectPtr == null"); + if (objectPtr is null) + throw new NotSupportedException("objectPtr is null"); NativeMethods.HandleException( NativeMethods.video_BackgroundSubtractorMOG2_getComplexityReductionThreshold(objectPtr.CvPtr, out var ret)); GC.KeepAlive(this); @@ -294,8 +293,8 @@ public double ComplexityReductionThreshold set { ThrowIfDisposed(); - if (objectPtr == null) - throw new NotSupportedException("objectPtr == null"); + if (objectPtr is null) + throw new NotSupportedException("objectPtr is null"); NativeMethods.HandleException( NativeMethods.video_BackgroundSubtractorMOG2_setComplexityReductionThreshold(objectPtr.CvPtr, value)); GC.KeepAlive(this); @@ -311,8 +310,8 @@ public bool DetectShadows get { ThrowIfDisposed(); - if (objectPtr == null) - throw new NotSupportedException("objectPtr == null"); + if (objectPtr is null) + throw new NotSupportedException("objectPtr is null"); NativeMethods.HandleException( NativeMethods.video_BackgroundSubtractorMOG2_getDetectShadows(objectPtr.CvPtr, out var ret)); GC.KeepAlive(this); @@ -321,8 +320,8 @@ public bool DetectShadows set { ThrowIfDisposed(); - if (objectPtr == null) - throw new NotSupportedException("objectPtr == null"); + if (objectPtr is null) + throw new NotSupportedException("objectPtr is null"); NativeMethods.HandleException( NativeMethods.video_BackgroundSubtractorMOG2_setDetectShadows(objectPtr.CvPtr, value ? 1 : 0)); GC.KeepAlive(this); @@ -339,8 +338,8 @@ public int ShadowValue get { ThrowIfDisposed(); - if (objectPtr == null) - throw new NotSupportedException("objectPtr == null"); + if (objectPtr is null) + throw new NotSupportedException("objectPtr is null"); NativeMethods.HandleException( NativeMethods.video_BackgroundSubtractorMOG2_getShadowValue(objectPtr.CvPtr, out var ret)); GC.KeepAlive(this); @@ -349,8 +348,8 @@ public int ShadowValue set { ThrowIfDisposed(); - if (objectPtr == null) - throw new NotSupportedException("objectPtr == null"); + if (objectPtr is null) + throw new NotSupportedException("objectPtr is null"); NativeMethods.HandleException( NativeMethods.video_BackgroundSubtractorMOG2_setShadowValue(objectPtr.CvPtr, value)); GC.KeepAlive(this); @@ -369,8 +368,8 @@ public double ShadowThreshold get { ThrowIfDisposed(); - if (objectPtr == null) - throw new NotSupportedException("objectPtr == null"); + if (objectPtr is null) + throw new NotSupportedException("objectPtr is null"); NativeMethods.HandleException( NativeMethods.video_BackgroundSubtractorMOG2_getShadowThreshold(objectPtr.CvPtr, out var ret)); GC.KeepAlive(this); @@ -379,8 +378,8 @@ public double ShadowThreshold set { ThrowIfDisposed(); - if (objectPtr == null) - throw new NotSupportedException("objectPtr == null"); + if (objectPtr is null) + throw new NotSupportedException("objectPtr is null"); NativeMethods.HandleException( NativeMethods.video_BackgroundSubtractorMOG2_setShadowThreshold(objectPtr.CvPtr, value)); GC.KeepAlive(this); @@ -389,12 +388,8 @@ public double ShadowThreshold #endregion - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/video/Enum/OpticalFlowFlags.cs b/src/OpenCvSharp/Modules/video/Enum/OpticalFlowFlags.cs index cf0261788..2898b320d 100644 --- a/src/OpenCvSharp/Modules/video/Enum/OpticalFlowFlags.cs +++ b/src/OpenCvSharp/Modules/video/Enum/OpticalFlowFlags.cs @@ -1,6 +1,4 @@ -using System; - -namespace OpenCvSharp; +namespace OpenCvSharp; /// /// cv::calcOpticalFlowPyrLK flags diff --git a/src/OpenCvSharp/Modules/video/KalmanFilter.cs b/src/OpenCvSharp/Modules/video/KalmanFilter.cs index d40f85f70..f22fd9315 100644 --- a/src/OpenCvSharp/Modules/video/KalmanFilter.cs +++ b/src/OpenCvSharp/Modules/video/KalmanFilter.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp; @@ -65,7 +64,7 @@ public Mat StatePre } set { - if (value == null) + if (value is null) throw new ArgumentNullException(nameof(value)); value.ThrowIfDisposed(); @@ -89,7 +88,7 @@ public Mat StatePost } set { - if (value == null) + if (value is null) throw new ArgumentNullException(nameof(value)); value.ThrowIfDisposed(); @@ -113,7 +112,7 @@ public Mat TransitionMatrix } set { - if (value == null) + if (value is null) throw new ArgumentNullException(nameof(value)); value.ThrowIfDisposed(); @@ -137,7 +136,7 @@ public Mat ControlMatrix } set { - if (value == null) + if (value is null) throw new ArgumentNullException(nameof(value)); value.ThrowIfDisposed(); @@ -161,7 +160,7 @@ public Mat MeasurementMatrix } set { - if (value == null) + if (value is null) throw new ArgumentNullException(nameof(value)); value.ThrowIfDisposed(); @@ -185,7 +184,7 @@ public Mat ProcessNoiseCov } set { - if (value == null) + if (value is null) throw new ArgumentNullException(nameof(value)); value.ThrowIfDisposed(); @@ -209,7 +208,7 @@ public Mat MeasurementNoiseCov } set { - if (value == null) + if (value is null) throw new ArgumentNullException(nameof(value)); value.ThrowIfDisposed(); @@ -233,7 +232,7 @@ public Mat ErrorCovPre } set { - if (value == null) + if (value is null) throw new ArgumentNullException(nameof(value)); value.ThrowIfDisposed(); @@ -257,7 +256,7 @@ public Mat Gain } set { - if (value == null) + if (value is null) throw new ArgumentNullException(nameof(value)); value.ThrowIfDisposed(); @@ -281,7 +280,7 @@ public Mat ErrorCovPost } set { - if (value == null) + if (value is null) throw new ArgumentNullException(nameof(value)); value.ThrowIfDisposed(); @@ -334,7 +333,7 @@ public Mat Predict(Mat? control = null) public Mat Correct(Mat measurement) { ThrowIfDisposed(); - if (measurement == null) + if (measurement is null) throw new ArgumentNullException(nameof(measurement)); measurement.ThrowIfDisposed(); diff --git a/src/OpenCvSharp/Modules/video/Tracker.cs b/src/OpenCvSharp/Modules/video/Tracker.cs index 5762c22d6..5bfac175d 100644 --- a/src/OpenCvSharp/Modules/video/Tracker.cs +++ b/src/OpenCvSharp/Modules/video/Tracker.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp; @@ -40,7 +39,7 @@ public void Init(Mat image, Rect boundingBox) { ThrowIfDisposed(); - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); image.ThrowIfDisposed(); @@ -62,7 +61,7 @@ public bool Update(Mat image, ref Rect boundingBox) { ThrowIfDisposed(); - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); image.ThrowIfDisposed(); diff --git a/src/OpenCvSharp/Modules/video/TrackerGOTURN.cs b/src/OpenCvSharp/Modules/video/TrackerGOTURN.cs index e8e7a754a..30355168a 100644 --- a/src/OpenCvSharp/Modules/video/TrackerGOTURN.cs +++ b/src/OpenCvSharp/Modules/video/TrackerGOTURN.cs @@ -1,4 +1,3 @@ -using System; using System.Runtime.InteropServices; using OpenCvSharp.Internal; @@ -61,12 +60,8 @@ public static TrackerGOTURN Create(Params parameters) } } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( @@ -88,7 +83,5 @@ protected override void DisposeUnmanaged() /// /// [StructLayout(LayoutKind.Sequential)] - public struct Params - { - } + public struct Params; } diff --git a/src/OpenCvSharp/Modules/video/TrackerMIL.cs b/src/OpenCvSharp/Modules/video/TrackerMIL.cs index 5084cc24e..30f40dbd9 100644 --- a/src/OpenCvSharp/Modules/video/TrackerMIL.cs +++ b/src/OpenCvSharp/Modules/video/TrackerMIL.cs @@ -1,4 +1,3 @@ -using System; using System.Diagnostics.CodeAnalysis; using System.Runtime.InteropServices; using OpenCvSharp.Internal; @@ -48,12 +47,8 @@ public static TrackerMIL Create(Params parameters) } } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/videoio/Enum/VideoCapturePara.cs b/src/OpenCvSharp/Modules/videoio/Enum/VideoCapturePara.cs index da292a225..1512cefce 100644 --- a/src/OpenCvSharp/Modules/videoio/Enum/VideoCapturePara.cs +++ b/src/OpenCvSharp/Modules/videoio/Enum/VideoCapturePara.cs @@ -1,9 +1,7 @@ -using System; - -namespace OpenCvSharp; +namespace OpenCvSharp; /// -/// Parameters of VideoCature for hardware acceleration +/// Parameters of VideoCapture for hardware acceleration /// Please check the link below for current HW acceleration types support matrix /// https://github.com/opencv/opencv/wiki/Video-IO-hardware-acceleration /// @@ -22,7 +20,7 @@ public record VideoCapturePara public int HwDeviceIndex { get; } /// - /// Constructor, parameter of VideoCature for hardware acceleration + /// Constructor, parameter of VideoCapture for hardware acceleration /// public VideoCapturePara() { @@ -31,7 +29,7 @@ public VideoCapturePara() } /// - /// Constructor, parameter of VideoCature for hardware acceleration + /// Constructor, parameter of VideoCapture for hardware acceleration /// /// Video Acceleration type /// Hardware device index @@ -42,8 +40,11 @@ public VideoCapturePara(VideoAccelerationType videoAcceleration, int deviceIndex } /// - /// Get parameters of VideoCature for hardware acceleration + /// Get parameters of VideoCapture for hardware acceleration /// - public int[] GetParameters() => new[] { (int)VideoCaptureProperties.HwAcceleration, (int)AccelerationType, - (int)VideoCaptureProperties.HwDevice, HwDeviceIndex }; + public int[] GetParameters() => + [ + (int)VideoCaptureProperties.HwAcceleration, (int)AccelerationType, + (int)VideoCaptureProperties.HwDevice, HwDeviceIndex + ]; } diff --git a/src/OpenCvSharp/Modules/videoio/Enum/VideoWriterPara.cs b/src/OpenCvSharp/Modules/videoio/Enum/VideoWriterPara.cs index a24da2e83..04dc64996 100644 --- a/src/OpenCvSharp/Modules/videoio/Enum/VideoWriterPara.cs +++ b/src/OpenCvSharp/Modules/videoio/Enum/VideoWriterPara.cs @@ -1,6 +1,4 @@ -using System; - -namespace OpenCvSharp; +namespace OpenCvSharp; /// /// Parameters of VideoWriter for hardware acceleration @@ -44,6 +42,9 @@ public VideoWriterPara(VideoAccelerationType videoAcceleration, int deviceIndex) /// /// Get parameters of VideoWriter for hardware acceleration /// - public int[] GetParameters() => new[] { (int)VideoWriterProperties.HwAcceleration, (int)AccelerationType, - (int)VideoWriterProperties.HwDevice, HwDeviceIndex }; + public int[] GetParameters() => + [ + (int)VideoWriterProperties.HwAcceleration, (int)AccelerationType, + (int)VideoWriterProperties.HwDevice, HwDeviceIndex + ]; } diff --git a/src/OpenCvSharp/Modules/videoio/FourCC.cs b/src/OpenCvSharp/Modules/videoio/FourCC.cs index c085e69f6..339d18891 100644 --- a/src/OpenCvSharp/Modules/videoio/FourCC.cs +++ b/src/OpenCvSharp/Modules/videoio/FourCC.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.CodeAnalysis; using System.Runtime.InteropServices; namespace OpenCvSharp; @@ -104,7 +103,7 @@ public static FourCC FromFourChars(char c1, char c2, char c3, char c4) /// public static FourCC FromString(string code) { - if (code == null) + if (code is null) throw new ArgumentNullException(nameof(code)); if (code.Length == 0) throw new ArgumentException("code.Length == 0", nameof(code)); diff --git a/src/OpenCvSharp/Modules/videoio/VideoCapture.cs b/src/OpenCvSharp/Modules/videoio/VideoCapture.cs index ecf0549d4..437d4e170 100644 --- a/src/OpenCvSharp/Modules/videoio/VideoCapture.cs +++ b/src/OpenCvSharp/Modules/videoio/VideoCapture.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.InteropServices; +using System.Runtime.InteropServices; using OpenCvSharp.Internal; using OpenCvSharp.Internal.Vectors; @@ -85,7 +82,7 @@ public VideoCapture(int index, VideoCaptureAPIs apiPreference, int[] prms) /// (to backward compatibility usage of camera_id + domain_offset (CAP_*) is valid when apiPreference is CAP_ANY) /// preferred Capture API backends to use. Can be used to enforce a specific reader implementation /// if multiple are available: e.g. cv::CAP_DSHOW or cv::CAP_MSMF or cv::CAP_V4L. - /// Parameters of VideoCature for hardware acceleration + /// Parameters of VideoCapture for hardware acceleration /// public VideoCapture(int index, VideoCaptureAPIs apiPreference, VideoCapturePara prms) { @@ -119,9 +116,9 @@ public static VideoCapture FromCamera(int index, VideoCaptureAPIs apiPreference /// Opens a video file or a capturing device or an IP video stream for video capturing with API Preference /// /// it can be: - /// - name of video file (eg. `video.avi`) - /// - or image sequence (eg. `img_%02d.jpg`, which will read samples like `img_00.jpg, img_01.jpg, img_02.jpg, ...`) - /// - or URL of video stream (eg. `protocol://host:port/script_name?script_params|auth`). + /// - name of video file (e.g. `video.avi`) + /// - or image sequence (e.g. `img_%02d.jpg`, which will read samples like `img_00.jpg, img_01.jpg, img_02.jpg, ...`) + /// - or URL of video stream (e.g. `protocol://host:port/script_name?script_params|auth`). /// Note that each video stream or IP camera feed has its own URL scheme. Please refer to the /// documentation of source stream to know the right URL. /// apiPreference preferred Capture API backends to use. Can be used to enforce a specific reader @@ -175,9 +172,9 @@ public VideoCapture(string fileName, VideoCaptureAPIs apiPreference, int[] prms) /// Opens a video file or a capturing device or an IP video stream for video capturing with API Preference /// /// it can be: - /// - name of video file (eg. `video.avi`) - /// - or image sequence (eg. `img_%02d.jpg`, which will read samples like `img_00.jpg, img_01.jpg, img_02.jpg, ...`) - /// - or URL of video stream (eg. `protocol://host:port/script_name?script_params|auth`). + /// - name of video file (e.g. `video.avi`) + /// - or image sequence (e.g. `img_%02d.jpg`, which will read samples like `img_00.jpg, img_01.jpg, img_02.jpg, ...`) + /// - or URL of video stream (e.g. `protocol://host:port/script_name?script_params|auth`). /// Note that each video stream or IP camera feed has its own URL scheme. Please refer to the /// documentation of source stream to know the right URL. /// apiPreference preferred Capture API backends to use. Can be used to enforce a specific reader @@ -205,24 +202,22 @@ public VideoCapture(string fileName, VideoCaptureAPIs apiPreference, VideoCaptur /// Opens a video file or a capturing device or an IP video stream for video capturing with API Preference /// /// it can be: - /// - name of video file (eg. `video.avi`) - /// - or image sequence (eg. `img_%02d.jpg`, which will read samples like `img_00.jpg, img_01.jpg, img_02.jpg, ...`) - /// - or URL of video stream (eg. `protocol://host:port/script_name?script_params|auth`). + /// - name of video file (e.g. `video.avi`) + /// - or image sequence (e.g. `img_%02d.jpg`, which will read samples like `img_00.jpg, img_01.jpg, img_02.jpg, ...`) + /// - or URL of video stream (e.g. `protocol://host:port/script_name?script_params|auth`). /// Note that each video stream or IP camera feed has its own URL scheme. Please refer to the /// documentation of source stream to know the right URL. /// apiPreference preferred Capture API backends to use. Can be used to enforce a specific reader /// implementation if multiple are available: e.g. cv::CAP_FFMPEG or cv::CAP_IMAGES or cv::CAP_DSHOW. /// - public static VideoCapture FromFile(string fileName, VideoCaptureAPIs apiPreference = VideoCaptureAPIs.ANY) - { - return new VideoCapture(fileName, apiPreference); - } + public static VideoCapture FromFile(string fileName, VideoCaptureAPIs apiPreference = VideoCaptureAPIs.ANY) + => new(fileName, apiPreference); /// /// Initializes from native pointer /// /// CvCapture* - protected internal VideoCapture(IntPtr ptr) + internal protected VideoCapture(IntPtr ptr) { this.ptr = ptr; } @@ -232,8 +227,9 @@ protected internal VideoCapture(IntPtr ptr) /// protected override void DisposeUnmanaged() { - NativeMethods.HandleException( - NativeMethods.videoio_VideoCapture_delete(ptr)); + if (ptr != IntPtr.Zero) + NativeMethods.HandleException( + NativeMethods.videoio_VideoCapture_delete(ptr)); base.DisposeUnmanaged(); } @@ -336,12 +332,13 @@ public string FourCC { var src = (int)Get(VideoCaptureProperties.FourCC); var bytes = new IntBytes { Value = src }; - char[] fourcc = { + char[] fourcc = + [ Convert.ToChar(bytes.B1), Convert.ToChar(bytes.B2), Convert.ToChar(bytes.B3), Convert.ToChar(bytes.B4) - }; + ]; return new string(fourcc); } set @@ -356,13 +353,7 @@ public string FourCC /// /// Gets number of frames in video file /// - public int FrameCount - { - get - { - return (int)Get(VideoCaptureProperties.FrameCount); - } - } + public int FrameCount => (int)Get(VideoCaptureProperties.FrameCount); /// /// Gets or sets brightness of image (only for cameras) @@ -1156,7 +1147,7 @@ public bool Grab() public bool Retrieve(OutputArray image, int flag = 0) { ThrowIfDisposed(); - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); image.ThrowIfNotReady(); @@ -1181,7 +1172,7 @@ public bool Retrieve(OutputArray image, int flag = 0) public bool Retrieve(OutputArray image, CameraChannels streamIdx) { ThrowIfDisposed(); - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); image.ThrowIfNotReady(); @@ -1206,7 +1197,7 @@ public bool Retrieve(OutputArray image, CameraChannels streamIdx) public bool Retrieve(Mat image, int flag = 0) { ThrowIfDisposed(); - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); image.ThrowIfDisposed(); @@ -1231,7 +1222,7 @@ public bool Retrieve(Mat image, int flag = 0) public bool Retrieve(Mat image, CameraChannels streamIdx) { ThrowIfDisposed(); - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); image.ThrowIfDisposed(); @@ -1274,7 +1265,7 @@ public Mat RetrieveMat() public bool Read(OutputArray image) { ThrowIfDisposed(); - if(image == null) + if(image is null) throw new ArgumentNullException(nameof(image)); image.ThrowIfNotReady(); @@ -1298,7 +1289,7 @@ public bool Read(OutputArray image) public bool Read(Mat image) { ThrowIfDisposed(); - if(image == null) + if(image is null) throw new ArgumentNullException(nameof(image)); image.ThrowIfDisposed(); @@ -1427,12 +1418,12 @@ public static bool WaitAny( out int[] readyIndex, long timeoutNs = 0) { - if (streams == null) + if (streams is null) throw new ArgumentNullException(nameof(streams)); var streamPtrs = streams.Select(s => { - if (s == null) + if (s is null) throw new ArgumentException($"{nameof(streams)} contains null", nameof(streams)); s.ThrowIfDisposed(); return s.CvPtr; diff --git a/src/OpenCvSharp/Modules/videoio/VideoWriter.cs b/src/OpenCvSharp/Modules/videoio/VideoWriter.cs index 56b100824..235e238c0 100644 --- a/src/OpenCvSharp/Modules/videoio/VideoWriter.cs +++ b/src/OpenCvSharp/Modules/videoio/VideoWriter.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp; @@ -17,7 +16,7 @@ public VideoWriter() { FileName = null; Fps = -1; - FrameSize = Size.Zero; + FrameSize = default; IsColor = true; NativeMethods.HandleException( NativeMethods.videoio_VideoWriter_new1(out ptr)); @@ -42,7 +41,7 @@ public VideoWriter(string fileName, FourCC fourcc, double fps, Size frameSize, b FrameSize = frameSize; IsColor = isColor; NativeMethods.HandleException( - NativeMethods.videoio_VideoWriter_new2(fileName, (int)fourcc, fps, frameSize, isColor ? 1 : 0, out ptr)); + NativeMethods.videoio_VideoWriter_new2(fileName, fourcc, fps, frameSize, isColor ? 1 : 0, out ptr)); if (ptr == IntPtr.Zero) throw new OpenCvSharpException("Failed to create VideoWriter"); } @@ -66,7 +65,7 @@ public VideoWriter(string fileName, VideoCaptureAPIs apiPreference, FourCC fourc FrameSize = frameSize; IsColor = isColor; NativeMethods.HandleException( - NativeMethods.videoio_VideoWriter_new3(fileName, (int)apiPreference, (int)fourcc, fps, frameSize, isColor ? 1 : 0, out ptr)); + NativeMethods.videoio_VideoWriter_new3(fileName, (int)apiPreference, fourcc, fps, frameSize, isColor ? 1 : 0, out ptr)); if (ptr == IntPtr.Zero) throw new OpenCvSharpException("Failed to create VideoWriter"); } @@ -90,7 +89,7 @@ public VideoWriter(string fileName, FourCC fourcc, double fps, Size frameSize, i Fps = fps; FrameSize = frameSize; NativeMethods.HandleException( - NativeMethods.videoio_VideoWriter_new4(fileName, (int)fourcc, fps, frameSize, prms, prms.Length, out ptr)); + NativeMethods.videoio_VideoWriter_new4(fileName, fourcc, fps, frameSize, prms, prms.Length, out ptr)); if (ptr == IntPtr.Zero) throw new OpenCvSharpException("Failed to create VideoWriter"); } @@ -114,7 +113,7 @@ public VideoWriter(string fileName, FourCC fourcc, double fps, Size frameSize, V FrameSize = frameSize; var p = prms.GetParameters(); NativeMethods.HandleException( - NativeMethods.videoio_VideoWriter_new4(fileName, (int)fourcc, fps, frameSize, p, p.Length, out ptr)); + NativeMethods.videoio_VideoWriter_new4(fileName, fourcc, fps, frameSize, p, p.Length, out ptr)); if (ptr == IntPtr.Zero) throw new OpenCvSharpException("Failed to create VideoWriter"); } @@ -140,7 +139,7 @@ public VideoWriter(string fileName, VideoCaptureAPIs apiPreference, FourCC fourc Fps = fps; FrameSize = frameSize; NativeMethods.HandleException( - NativeMethods.videoio_VideoWriter_new5(fileName, (int)apiPreference, (int)fourcc, fps, frameSize, prms, prms.Length, out ptr)); + NativeMethods.videoio_VideoWriter_new5(fileName, (int)apiPreference, fourcc, fps, frameSize, prms, prms.Length, out ptr)); if (ptr == IntPtr.Zero) throw new OpenCvSharpException("Failed to create VideoWriter"); } @@ -166,7 +165,7 @@ public VideoWriter(string fileName, VideoCaptureAPIs apiPreference, FourCC fourc FrameSize = frameSize; var p = prms.GetParameters(); NativeMethods.HandleException( - NativeMethods.videoio_VideoWriter_new5(fileName, (int)apiPreference, (int)fourcc, fps, frameSize, p, p.Length, out ptr)); + NativeMethods.videoio_VideoWriter_new5(fileName, (int)apiPreference, fourcc, fps, frameSize, p, p.Length, out ptr)); if (ptr == IntPtr.Zero) throw new OpenCvSharpException("Failed to create VideoWriter"); } @@ -270,7 +269,7 @@ public bool Open(string fileName, VideoCaptureAPIs apiPreference, FourCC fourcc, IsColor = isColor; NativeMethods.HandleException( - NativeMethods.videoio_VideoWriter_open2(ptr, fileName, (int)apiPreference, (int)fourcc, fps, frameSize, isColor ? 1 : 0, out var ret)); + NativeMethods.videoio_VideoWriter_open2(ptr, fileName, (int)apiPreference, fourcc, fps, frameSize, isColor ? 1 : 0, out var ret)); GC.KeepAlive(this); return ret != 0; @@ -309,7 +308,7 @@ public void Release() public void Write(InputArray image) { ThrowIfDisposed(); - if(image == null) + if(image is null) throw new ArgumentNullException(nameof(image)); image.ThrowIfDisposed(); @@ -376,7 +375,7 @@ public static int FourCC(char c1, char c2, char c3, char c4) // ReSharper disable once InconsistentNaming public static int FourCC(string code) { - if (code == null) + if (code is null) throw new ArgumentNullException(nameof(code)); if (code.Length != 4) throw new ArgumentException("code.Length != 4", nameof(code)); diff --git a/src/OpenCvSharp/Modules/wechat_qrcode/WeChatQRCode.cs b/src/OpenCvSharp/Modules/wechat_qrcode/WeChatQRCode.cs index 40b12d64b..8d64c6555 100644 --- a/src/OpenCvSharp/Modules/wechat_qrcode/WeChatQRCode.cs +++ b/src/OpenCvSharp/Modules/wechat_qrcode/WeChatQRCode.cs @@ -1,6 +1,5 @@ using OpenCvSharp.Internal; using OpenCvSharp.Internal.Vectors; -using System; namespace OpenCvSharp; @@ -63,7 +62,7 @@ public static WeChatQRCode Create( /// list of decoded string. public void DetectAndDecode(InputArray inputImage, out Mat[] bbox, out string[] results) { - if (inputImage == null) + if (inputImage is null) throw new ArgumentNullException(nameof(inputImage)); inputImage.ThrowIfDisposed(); @@ -87,12 +86,8 @@ protected override void DisposeManaged() base.DisposeManaged(); } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/xfeatures2d/BriefDescriptorExtractor.cs b/src/OpenCvSharp/Modules/xfeatures2d/BriefDescriptorExtractor.cs index 01c21e78b..e1c592ec7 100644 --- a/src/OpenCvSharp/Modules/xfeatures2d/BriefDescriptorExtractor.cs +++ b/src/OpenCvSharp/Modules/xfeatures2d/BriefDescriptorExtractor.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp.XFeatures2D; @@ -62,12 +61,8 @@ protected override void DisposeManaged() base.DisposeManaged(); } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/xfeatures2d/FREAK.cs b/src/OpenCvSharp/Modules/xfeatures2d/FREAK.cs index c9a103611..19161cd6f 100644 --- a/src/OpenCvSharp/Modules/xfeatures2d/FREAK.cs +++ b/src/OpenCvSharp/Modules/xfeatures2d/FREAK.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; // ReSharper disable once InconsistentNaming @@ -58,12 +55,8 @@ protected override void DisposeManaged() base.DisposeManaged(); } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/xfeatures2d/LATCH.cs b/src/OpenCvSharp/Modules/xfeatures2d/LATCH.cs index bf01679e7..14d36534b 100644 --- a/src/OpenCvSharp/Modules/xfeatures2d/LATCH.cs +++ b/src/OpenCvSharp/Modules/xfeatures2d/LATCH.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; // ReSharper disable InconsistentNaming // ReSharper disable CommentTypo @@ -56,12 +55,8 @@ protected override void DisposeManaged() base.DisposeManaged(); } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/xfeatures2d/LUCID.cs b/src/OpenCvSharp/Modules/xfeatures2d/LUCID.cs index 8b3215e6c..9ccac389e 100644 --- a/src/OpenCvSharp/Modules/xfeatures2d/LUCID.cs +++ b/src/OpenCvSharp/Modules/xfeatures2d/LUCID.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp.XFeatures2D; @@ -47,12 +46,8 @@ protected override void DisposeManaged() base.DisposeManaged(); } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/xfeatures2d/SURF.cs b/src/OpenCvSharp/Modules/xfeatures2d/SURF.cs index e3f6e1762..ef5083f95 100644 --- a/src/OpenCvSharp/Modules/xfeatures2d/SURF.cs +++ b/src/OpenCvSharp/Modules/xfeatures2d/SURF.cs @@ -1,6 +1,4 @@ - -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp.XFeatures2D; @@ -177,12 +175,8 @@ public bool Upright #endregion - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/xfeatures2d/StarDetector.cs b/src/OpenCvSharp/Modules/xfeatures2d/StarDetector.cs index 559aecf02..2005313a1 100644 --- a/src/OpenCvSharp/Modules/xfeatures2d/StarDetector.cs +++ b/src/OpenCvSharp/Modules/xfeatures2d/StarDetector.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp.XFeatures2D; @@ -51,12 +50,8 @@ protected override void DisposeManaged() base.DisposeManaged(); } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/ximgproc/CvXImgProc.cs b/src/OpenCvSharp/Modules/ximgproc/CvXImgProc.cs index 24caa97f7..567520926 100644 --- a/src/OpenCvSharp/Modules/ximgproc/CvXImgProc.cs +++ b/src/OpenCvSharp/Modules/ximgproc/CvXImgProc.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; using OpenCvSharp.XImgProc.Segmentation; // ReSharper disable UnusedMember.Global @@ -134,9 +131,9 @@ public static class RL /// thresholding type (only cv::THRESH_BINARY and cv::THRESH_BINARY_INV are supported) public static void Threshold(InputArray src, OutputArray rlDest, double thresh, ThresholdTypes type) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (rlDest == null) + if (rlDest is null) throw new ArgumentNullException(nameof(rlDest)); src.ThrowIfDisposed(); rlDest.ThrowIfNotReady(); @@ -158,11 +155,11 @@ public static void Threshold(InputArray src, OutputArray rlDest, double thresh, public static void Dilate( InputArray rlSrc, OutputArray rlDest, InputArray rlKernel, Point? anchor = null) { - if (rlSrc == null) + if (rlSrc is null) throw new ArgumentNullException(nameof(rlSrc)); - if (rlDest == null) + if (rlDest is null) throw new ArgumentNullException(nameof(rlDest)); - if (rlKernel == null) + if (rlKernel is null) throw new ArgumentNullException(nameof(rlKernel)); rlSrc.ThrowIfDisposed(); rlDest.ThrowIfNotReady(); @@ -191,11 +188,11 @@ public static void Dilate( public static void Erode( InputArray rlSrc, OutputArray rlDest, InputArray rlKernel, bool bBoundaryOn = true, Point? anchor = null) { - if (rlSrc == null) + if (rlSrc is null) throw new ArgumentNullException(nameof(rlSrc)); - if (rlDest == null) + if (rlDest is null) throw new ArgumentNullException(nameof(rlDest)); - if (rlKernel == null) + if (rlKernel is null) throw new ArgumentNullException(nameof(rlKernel)); rlSrc.ThrowIfDisposed(); rlDest.ThrowIfNotReady(); @@ -233,9 +230,9 @@ public static Mat GetStructuringElement(MorphShapes shape, Size ksize) /// all foreground pixel of the binary image are set to this value public static void Paint(InputOutputArray image, InputArray rlSrc, Scalar value) { - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); - if (rlSrc == null) + if (rlSrc is null) throw new ArgumentNullException(nameof(rlSrc)); image.ThrowIfNotReady(); rlSrc.ThrowIfDisposed(); @@ -248,14 +245,14 @@ public static void Paint(InputOutputArray image, InputArray rlSrc, Scalar value) } /// - /// Check whether a custom made structuring element can be used with run length morphological operations. + /// Check whether a custom-made structuring element can be used with run length morphological operations. /// (It must consist of a continuous array of single runs per row) /// /// /// public static bool IsRLMorphologyPossible(InputArray rlStructuringElement) { - if (rlStructuringElement == null) + if (rlStructuringElement is null) throw new ArgumentNullException(nameof(rlStructuringElement)); NativeMethods.HandleException( @@ -275,7 +272,7 @@ public static bool IsRLMorphologyPossible(InputArray rlStructuringElement) /// means that the size is computed from the extension of the input) public static void CreateRLEImage(IEnumerable runs, OutputArray res, Size? size = null) { - if (res == null) + if (res is null) throw new ArgumentNullException(nameof(res)); res.ThrowIfNotReady(); @@ -302,11 +299,11 @@ public static void MorphologyEx( InputArray rlSrc, OutputArray rlDest, MorphTypes op, InputArray rlKernel, bool bBoundaryOnForErosion = true, Point? anchor = null) { - if (rlSrc == null) + if (rlSrc is null) throw new ArgumentNullException(nameof(rlSrc)); - if (rlDest == null) + if (rlDest is null) throw new ArgumentNullException(nameof(rlDest)); - if (rlKernel == null) + if (rlKernel is null) throw new ArgumentNullException(nameof(rlKernel)); rlSrc.ThrowIfDisposed(); rlDest.ThrowIfNotReady(); @@ -359,9 +356,9 @@ public static void NiblackThreshold( LocalBinarizationMethods binarizationMethod = LocalBinarizationMethods.Niblack, double r = 128) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -385,9 +382,9 @@ public static void Thinning( InputArray src, OutputArray dst, ThinningTypes thinningType = ThinningTypes.ZHANGSUEN) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -410,9 +407,9 @@ public static void Thinning( /// The number of iterations public static void AnisotropicDiffusion(InputArray src, OutputArray dst, float alpha, float k, int niters) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -436,9 +433,9 @@ public static void AnisotropicDiffusion(InputArray src, OutputArray dst, float a /// public static void BrightEdges(Mat original, Mat edgeView, int contrast = 1, int shortRange = 3, int longRange = 9) { - if (original == null) + if (original is null) throw new ArgumentNullException(nameof(original)); - if (edgeView == null) + if (edgeView is null) throw new ArgumentNullException(nameof(edgeView)); original.ThrowIfDisposed(); edgeView.ThrowIfDisposed(); @@ -461,9 +458,9 @@ public static void BrightEdges(Mat original, Mat edgeView, int contrast = 1, int /// result CV_64FC4 a quaternion image( 4 chanels zero channel and B,G,R). public static void CreateQuaternionImage(InputArray img, OutputArray qimg) { - if (img == null) + if (img is null) throw new ArgumentNullException(nameof(img)); - if (qimg == null) + if (qimg is null) throw new ArgumentNullException(nameof(qimg)); img.ThrowIfDisposed(); qimg.ThrowIfNotReady(); @@ -482,9 +479,9 @@ public static void CreateQuaternionImage(InputArray img, OutputArray qimg) /// conjugate of qimg public static void QConj(InputArray qimg, OutputArray qcimg) { - if (qimg == null) + if (qimg is null) throw new ArgumentNullException(nameof(qimg)); - if (qcimg == null) + if (qcimg is null) throw new ArgumentNullException(nameof(qcimg)); qimg.ThrowIfDisposed(); qcimg.ThrowIfNotReady(); @@ -503,9 +500,9 @@ public static void QConj(InputArray qimg, OutputArray qcimg) /// conjugate of qimg public static void QUnitary(InputArray qimg, OutputArray qnimg) { - if (qimg == null) + if (qimg is null) throw new ArgumentNullException(nameof(qimg)); - if (qnimg == null) + if (qnimg is null) throw new ArgumentNullException(nameof(qnimg)); qimg.ThrowIfDisposed(); qnimg.ThrowIfNotReady(); @@ -525,11 +522,11 @@ public static void QUnitary(InputArray qimg, OutputArray qnimg) /// product dst(I)=src1(I) . src2(I) public static void QMultiply(InputArray src1, InputArray src2, OutputArray dst) { - if (src1 == null) + if (src1 is null) throw new ArgumentNullException(nameof(src1)); - if (src2 == null) + if (src2 is null) throw new ArgumentNullException(nameof(src2)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src1.ThrowIfDisposed(); src2.ThrowIfDisposed(); @@ -552,9 +549,9 @@ public static void QMultiply(InputArray src1, InputArray src2, OutputArray dst) /// true the hypercomplex exponential is to be multiplied on the left (false on the right ). public static void QDft(InputArray img, OutputArray qimg, DftFlags flags, bool sideLeft) { - if (img == null) + if (img is null) throw new ArgumentNullException(nameof(img)); - if (qimg == null) + if (qimg is null) throw new ArgumentNullException(nameof(qimg)); img.ThrowIfDisposed(); qimg.ThrowIfNotReady(); @@ -574,12 +571,12 @@ public static void QDft(InputArray img, OutputArray qimg, DftFlags flags, bool s /// Map of comparison results. It must be single-channel 64-bit floating-point public static void ColorMatchTemplate(InputArray img, InputArray templ, OutputArray result) { - if (img == null) + if (img is null) throw new ArgumentNullException(nameof(img)); - if (templ == null) + if (templ is null) throw new ArgumentNullException(nameof(templ)); - if (result == null) - throw new ArgumentNullException(nameof(img)); + if (result is null) + throw new ArgumentNullException(nameof(result)); img.ThrowIfDisposed(); templ.ThrowIfDisposed(); result.ThrowIfNotReady(); @@ -605,9 +602,9 @@ public static void ColorMatchTemplate(InputArray img, InputArray templ, OutputAr /// double see paper public static void GradientDericheY(InputArray op, OutputArray dst, double alpha, double omega) { - if (op == null) + if (op is null) throw new ArgumentNullException(nameof(op)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); op.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -628,9 +625,9 @@ public static void GradientDericheY(InputArray op, OutputArray dst, double alpha /// double see paper public static void GradientDericheX(InputArray op, OutputArray dst, double alpha, double omega) { - if (op == null) + if (op is null) throw new ArgumentNullException(nameof(op)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); op.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -725,11 +722,11 @@ public static DTFilter CreateDTFilter( public static void DTFilter(InputArray guide, InputArray src, OutputArray dst, double sigmaSpatial, double sigmaColor, EdgeAwareFiltersList mode = EdgeAwareFiltersList.DTF_NC, int numIters = 3) { - if (guide == null) + if (guide is null) throw new ArgumentNullException(nameof(guide)); - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); guide.ThrowIfDisposed(); src.ThrowIfDisposed(); @@ -776,11 +773,11 @@ public static void GuidedFilter( InputArray guide, InputArray src, OutputArray dst, int radius, double eps, int dDepth = -1) { - if (guide == null) + if (guide is null) throw new ArgumentNullException(nameof(guide)); - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); guide.ThrowIfDisposed(); src.ThrowIfDisposed(); @@ -826,11 +823,11 @@ public static void AMFilter( InputArray joint, InputArray src, OutputArray dst, double sigmaS, double sigmaR, bool adjustOutliers = false) { - if (joint == null) + if (joint is null) throw new ArgumentNullException(nameof(joint)); - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); joint.ThrowIfDisposed(); src.ThrowIfDisposed(); @@ -864,11 +861,11 @@ public static void JointBilateralFilter( InputArray joint, InputArray src, OutputArray dst, int d, double sigmaColor, double sigmaSpace, BorderTypes borderType = BorderTypes.Default) { - if (joint == null) + if (joint is null) throw new ArgumentNullException(nameof(joint)); - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); joint.ThrowIfDisposed(); src.ThrowIfDisposed(); @@ -898,9 +895,9 @@ public static void JointBilateralFilter( public static void BilateralTextureFilter( InputArray src, OutputArray dst, int fr = 3, int numIter = 1, double sigmaAlpha = -1.0, double sigmaAvg = -1.0) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -933,9 +930,9 @@ public static void RollingGuidanceFilter( InputArray src, OutputArray dst, int d = -1, double sigmaColor = 25, double sigmaSpace = 3, int numOfIter = 4, BorderTypes borderType = BorderTypes.Default) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -967,13 +964,13 @@ public static void FastBilateralSolverFilter( OutputArray dst, double sigmaSpatial = 8, double sigmaLuma = 8, double sigmaChroma = 8, double lambda = 128.0, int numIter = 25, double maxTol = 1e-5) { - if (guide == null) + if (guide is null) throw new ArgumentNullException(nameof(guide)); - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (confidence == null) + if (confidence is null) throw new ArgumentNullException(nameof(confidence)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); guide.ThrowIfDisposed(); src.ThrowIfDisposed(); @@ -1022,11 +1019,11 @@ public static void FastGlobalSmootherFilter( InputArray guide, InputArray src, OutputArray dst, double lambda, double sigmaColor, double lambdaAttenuation = 0.25, int numIter = 3) { - if (guide == null) + if (guide is null) throw new ArgumentNullException(nameof(guide)); - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); guide.ThrowIfDisposed(); src.ThrowIfDisposed(); @@ -1050,9 +1047,9 @@ public static void FastGlobalSmootherFilter( /// parameter defining the increasing factor of the weight of the gradient data term. public static void L0Smooth(InputArray src, OutputArray dst, double lambda = 0.02, double kappa = 2.0) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -1078,9 +1075,9 @@ public static void L0Smooth(InputArray src, OutputArray dst, double lambda = 0.0 /// Threshold, which distinguishes between noise, outliers, and data. public static void EdgePreservingFilter(InputArray src, OutputArray dst, int d, double threshold) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -1113,9 +1110,9 @@ public static void EdgePreservingFilter(InputArray src, OutputArray dst, int d, /// The number of cols in the window. public static void CovarianceEstimation(InputArray src, OutputArray dst, int windowRows, int windowCols) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -1149,9 +1146,9 @@ public static void FastHoughTransform( HoughOP op = HoughOP.FHT_ADD, HoughDeskewOption makeSkew = HoughDeskewOption.DESKEW) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -1185,7 +1182,7 @@ public static Vec4i HoughPoint2Line( HoughDeskewOption makeSkew = HoughDeskewOption.DESKEW, RulesOption rules = RulesOption.IGNORE_BORDERS) { - if (srcImgInfo == null) + if (srcImgInfo is null) throw new ArgumentNullException(nameof(srcImgInfo)); srcImgInfo.ThrowIfDisposed(); @@ -1254,9 +1251,9 @@ public static SuperpixelLSC CreateSuperpixelLSC(InputArray image, int regionSize /// double see paper public static void GradientPaillouY(InputArray op, OutputArray dst, double alpha, double omega) { - if (op == null) + if (op is null) throw new ArgumentNullException(nameof(op)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); op.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -1278,9 +1275,9 @@ public static void GradientPaillouY(InputArray op, OutputArray dst, double alpha /// double see paper public static void GradientPaillouX(InputArray op, OutputArray dst, double alpha, double omega) { - if (op == null) + if (op is null) throw new ArgumentNullException(nameof(op)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); op.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -1304,7 +1301,7 @@ public static void GradientPaillouX(InputArray op, OutputArray dst, double alpha /// Transformation matrix corresponding to inversed image transformation public static double[,] PeiLinNormalization(InputArray i) { - if (i == null) + if (i is null) throw new ArgumentNullException(nameof(i)); i.ThrowIfDisposed(); @@ -1329,9 +1326,9 @@ public static void GradientPaillouX(InputArray op, OutputArray dst, double alpha /// Inversed image transformation. public static void PeiLinNormalization(InputArray i, OutputArray t) { - if (i == null) + if (i is null) throw new ArgumentNullException(nameof(i)); - if (t == null) + if (t is null) throw new ArgumentNullException(nameof(t)); i.ThrowIfDisposed(); t.ThrowIfNotReady(); @@ -1433,11 +1430,11 @@ public static void WeightedMedianFilter( InputArray joint, InputArray src, OutputArray dst, int r, double sigma = 25.5, WMFWeightType weightType = WMFWeightType.EXP, Mat? mask = null) { - if (joint == null) + if (joint is null) throw new ArgumentNullException(nameof(joint)); - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); joint.ThrowIfDisposed(); src.ThrowIfDisposed(); diff --git a/src/OpenCvSharp/Modules/ximgproc/EdgeBoxes.cs b/src/OpenCvSharp/Modules/ximgproc/EdgeBoxes.cs index e3414c861..3622ca242 100644 --- a/src/OpenCvSharp/Modules/ximgproc/EdgeBoxes.cs +++ b/src/OpenCvSharp/Modules/ximgproc/EdgeBoxes.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; using OpenCvSharp.Internal.Vectors; // ReSharper disable UnusedMember.Global @@ -342,9 +341,9 @@ public virtual float Kappa public virtual void GetBoundingBoxes(InputArray edgeMap, InputArray orientationMap, out Rect[] boxes) { ThrowIfDisposed(); - if (edgeMap == null) + if (edgeMap is null) throw new ArgumentNullException(nameof(edgeMap)); - if (orientationMap == null) + if (orientationMap is null) throw new ArgumentNullException(nameof(orientationMap)); edgeMap.ThrowIfDisposed(); orientationMap.ThrowIfDisposed(); @@ -360,12 +359,8 @@ public virtual void GetBoundingBoxes(InputArray edgeMap, InputArray orientationM GC.KeepAlive(orientationMap); } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/ximgproc/EdgeFilter/AdaptiveManifoldFilter.cs b/src/OpenCvSharp/Modules/ximgproc/EdgeFilter/AdaptiveManifoldFilter.cs index ba8bce881..249b911cc 100644 --- a/src/OpenCvSharp/Modules/ximgproc/EdgeFilter/AdaptiveManifoldFilter.cs +++ b/src/OpenCvSharp/Modules/ximgproc/EdgeFilter/AdaptiveManifoldFilter.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; // ReSharper disable once CheckNamespace namespace OpenCvSharp.XImgProc; @@ -209,9 +208,9 @@ public bool UseRNG public virtual void Filter(InputArray src, OutputArray dst, InputArray? joint = null) { ThrowIfDisposed(); - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -227,12 +226,8 @@ public virtual void Filter(InputArray src, OutputArray dst, InputArray? joint = GC.KeepAlive(joint); } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/ximgproc/EdgeFilter/DTFilter.cs b/src/OpenCvSharp/Modules/ximgproc/EdgeFilter/DTFilter.cs index 08a171286..43fb8d2ad 100644 --- a/src/OpenCvSharp/Modules/ximgproc/EdgeFilter/DTFilter.cs +++ b/src/OpenCvSharp/Modules/ximgproc/EdgeFilter/DTFilter.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; // ReSharper disable once CheckNamespace namespace OpenCvSharp.XImgProc; @@ -48,7 +47,7 @@ public static DTFilter Create( InputArray guide, double sigmaSpatial, double sigmaColor, EdgeAwareFiltersList mode = EdgeAwareFiltersList.DTF_NC, int numIters = 3) { - if (guide == null) + if (guide is null) throw new ArgumentNullException(nameof(guide)); guide.ThrowIfDisposed(); @@ -70,9 +69,9 @@ public static DTFilter Create( public virtual void Filter(InputArray src, OutputArray dst, int dDepth = -1) { ThrowIfDisposed(); - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -86,12 +85,8 @@ public virtual void Filter(InputArray src, OutputArray dst, int dDepth = -1) dst.Fix(); } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/ximgproc/EdgeFilter/FastBilateralSolverFilter.cs b/src/OpenCvSharp/Modules/ximgproc/EdgeFilter/FastBilateralSolverFilter.cs index 2857ad6f2..17f56eba8 100644 --- a/src/OpenCvSharp/Modules/ximgproc/EdgeFilter/FastBilateralSolverFilter.cs +++ b/src/OpenCvSharp/Modules/ximgproc/EdgeFilter/FastBilateralSolverFilter.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; // ReSharper disable once CheckNamespace namespace OpenCvSharp.XImgProc; @@ -46,7 +45,7 @@ public static FastBilateralSolverFilter Create( InputArray guide, double sigmaSpatial, double sigmaLuma, double sigmaChroma, double lambda = 128.0, int numIter = 25, double maxTol = 1e-5) { - if (guide == null) + if (guide is null) throw new ArgumentNullException(nameof(guide)); guide.ThrowIfDisposed(); @@ -67,11 +66,11 @@ public static FastBilateralSolverFilter Create( public virtual void Filter(InputArray src, InputArray confidence, OutputArray dst) { ThrowIfDisposed(); - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (confidence == null) + if (confidence is null) throw new ArgumentNullException(nameof(confidence)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); confidence.ThrowIfDisposed(); @@ -87,12 +86,8 @@ public virtual void Filter(InputArray src, InputArray confidence, OutputArray ds dst.Fix(); } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/ximgproc/EdgeFilter/FastGlobalSmootherFilter.cs b/src/OpenCvSharp/Modules/ximgproc/EdgeFilter/FastGlobalSmootherFilter.cs index 4c86567fb..1438174fe 100644 --- a/src/OpenCvSharp/Modules/ximgproc/EdgeFilter/FastGlobalSmootherFilter.cs +++ b/src/OpenCvSharp/Modules/ximgproc/EdgeFilter/FastGlobalSmootherFilter.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; // ReSharper disable once CheckNamespace namespace OpenCvSharp.XImgProc; @@ -44,7 +43,7 @@ protected override void DisposeManaged() public static FastGlobalSmootherFilter Create( InputArray guide, double lambda, double sigmaColor, double lambdaAttenuation = 0.25, int numIter = 3) { - if (guide == null) + if (guide is null) throw new ArgumentNullException(nameof(guide)); guide.ThrowIfDisposed(); @@ -64,9 +63,9 @@ public static FastGlobalSmootherFilter Create( public virtual void Filter(InputArray src, OutputArray dst) { ThrowIfDisposed(); - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -80,12 +79,8 @@ public virtual void Filter(InputArray src, OutputArray dst) dst.Fix(); } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/ximgproc/EdgeFilter/GuidedFilter.cs b/src/OpenCvSharp/Modules/ximgproc/EdgeFilter/GuidedFilter.cs index 4e7f9110d..1bace46dc 100644 --- a/src/OpenCvSharp/Modules/ximgproc/EdgeFilter/GuidedFilter.cs +++ b/src/OpenCvSharp/Modules/ximgproc/EdgeFilter/GuidedFilter.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; // ReSharper disable once CheckNamespace namespace OpenCvSharp.XImgProc; @@ -43,7 +42,7 @@ protected override void DisposeManaged() public static GuidedFilter Create( InputArray guide, int radius, double eps) { - if (guide == null) + if (guide is null) throw new ArgumentNullException(nameof(guide)); guide.ThrowIfDisposed(); @@ -64,9 +63,9 @@ public static GuidedFilter Create( public virtual void Filter(InputArray src, OutputArray dst, int dDepth = -1) { ThrowIfDisposed(); - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -80,12 +79,8 @@ public virtual void Filter(InputArray src, OutputArray dst, int dDepth = -1) dst.Fix(); } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/ximgproc/FastLineDetector.cs b/src/OpenCvSharp/Modules/ximgproc/FastLineDetector.cs index 1a319e562..7a3f8f99e 100644 --- a/src/OpenCvSharp/Modules/ximgproc/FastLineDetector.cs +++ b/src/OpenCvSharp/Modules/ximgproc/FastLineDetector.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Generic; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; using OpenCvSharp.Internal.Vectors; namespace OpenCvSharp.XImgProc; @@ -67,9 +65,9 @@ public static FastLineDetector Create( public virtual void Detect(InputArray image, OutputArray lines) { ThrowIfDisposed(); - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); - if (lines == null) + if (lines is null) throw new ArgumentNullException(nameof(lines)); image.ThrowIfDisposed(); lines.ThrowIfNotReady(); @@ -96,7 +94,7 @@ public virtual void Detect(InputArray image, OutputArray lines) public virtual Vec4f[] Detect(InputArray image) { ThrowIfDisposed(); - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); image.ThrowIfDisposed(); @@ -118,9 +116,9 @@ public virtual void DrawSegments(InputOutputArray image, InputArray lines, bool drawArrow = false) { ThrowIfDisposed(); - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); - if (lines == null) + if (lines is null) throw new ArgumentNullException(nameof(lines)); NativeMethods.HandleException( @@ -140,9 +138,9 @@ public virtual void DrawSegments(InputOutputArray image, InputArray lines, public virtual void DrawSegments(InputOutputArray image, IEnumerable lines, bool drawArrow = false) { ThrowIfDisposed(); - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); - if (lines == null) + if (lines is null) throw new ArgumentNullException(nameof(lines)); using var linesVec = new VectorOfVec4f(lines); @@ -155,12 +153,8 @@ public virtual void DrawSegments(InputOutputArray image, IEnumerable line image.Fix(); } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/ximgproc/RFFeatureGetter.cs b/src/OpenCvSharp/Modules/ximgproc/RFFeatureGetter.cs index be9e68966..763d1ca03 100644 --- a/src/OpenCvSharp/Modules/ximgproc/RFFeatureGetter.cs +++ b/src/OpenCvSharp/Modules/ximgproc/RFFeatureGetter.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; // ReSharper disable UnusedMember.Global @@ -64,9 +63,9 @@ public virtual void GetFeatures( int gradNum) { ThrowIfDisposed(); - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (features == null) + if (features is null) throw new ArgumentNullException(nameof(features)); src.ThrowIfDisposed(); features.ThrowIfDisposed(); @@ -80,12 +79,8 @@ public virtual void GetFeatures( GC.KeepAlive(features); } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/ximgproc/RidgeDetectionFilter.cs b/src/OpenCvSharp/Modules/ximgproc/RidgeDetectionFilter.cs index 6fe7941bb..d9e980985 100644 --- a/src/OpenCvSharp/Modules/ximgproc/RidgeDetectionFilter.cs +++ b/src/OpenCvSharp/Modules/ximgproc/RidgeDetectionFilter.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp; @@ -84,12 +83,8 @@ public virtual void GetRidgeFilteredImage(InputArray src, OutputArray dst) GC.KeepAlive(this); } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/ximgproc/Segmentation/GraphSegmentation.cs b/src/OpenCvSharp/Modules/ximgproc/Segmentation/GraphSegmentation.cs index ca1cb481b..9ef1d4492 100644 --- a/src/OpenCvSharp/Modules/ximgproc/Segmentation/GraphSegmentation.cs +++ b/src/OpenCvSharp/Modules/ximgproc/Segmentation/GraphSegmentation.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; namespace OpenCvSharp.XImgProc.Segmentation; @@ -118,9 +117,9 @@ public virtual int MinSize public virtual void ProcessImage(InputArray src, OutputArray dst) { ThrowIfDisposed(); - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfDisposed(); @@ -133,12 +132,8 @@ public virtual void ProcessImage(InputArray src, OutputArray dst) GC.KeepAlive(dst); } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/ximgproc/Segmentation/SelectiveSearchSegmentation.cs b/src/OpenCvSharp/Modules/ximgproc/Segmentation/SelectiveSearchSegmentation.cs index 2c3b6eed6..edea8c39b 100644 --- a/src/OpenCvSharp/Modules/ximgproc/Segmentation/SelectiveSearchSegmentation.cs +++ b/src/OpenCvSharp/Modules/ximgproc/Segmentation/SelectiveSearchSegmentation.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; using OpenCvSharp.Internal.Vectors; // ReSharper disable UnusedMember.Global @@ -51,7 +50,7 @@ public static SelectiveSearchSegmentation Create() public virtual void SetBaseImage(InputArray img) { ThrowIfDisposed(); - if (img == null) + if (img is null) throw new ArgumentNullException(nameof(img)); img.ThrowIfDisposed(); @@ -110,7 +109,7 @@ public virtual void SwitchToSelectiveSearchQuality(int baseK = 150, int incK = 1 public virtual void AddImage(InputArray img) { ThrowIfDisposed(); - if (img == null) + if (img is null) throw new ArgumentNullException(nameof(img)); img.ThrowIfDisposed(); @@ -133,18 +132,18 @@ public virtual void ClearImages() } /// - /// Add a new graph segmentation in the list of graph segementations to process. + /// Add a new graph segmentation in the list of graph segmentations to process. /// /// The graph segmentation public virtual void AddGraphSegmentation(GraphSegmentation g) { ThrowIfDisposed(); - if (g == null) + if (g is null) throw new ArgumentNullException(nameof(g)); g.ThrowIfDisposed(); - if (g.PtrObj == null) - throw new ArgumentException("g.PtrObj = null"); + if (g.PtrObj is null) + throw new ArgumentException("PtrObj = null", nameof(g)); NativeMethods.HandleException( NativeMethods.ximgproc_segmentation_SelectiveSearchSegmentation_addGraphSegmentation(ptr, g.PtrObj.CvPtr)); @@ -171,11 +170,11 @@ public virtual void ClearGraphSegmentations() public virtual void AddStrategy(SelectiveSearchSegmentationStrategy s) { ThrowIfDisposed(); - if (s == null) + if (s is null) throw new ArgumentNullException(nameof(s)); s.ThrowIfDisposed(); - if (s.PtrObj == null) - throw new ArgumentException("s.PtrObj == null"); + if (s.PtrObj is null) + throw new ArgumentException("s.PtrObj is null"); NativeMethods.HandleException( NativeMethods.ximgproc_segmentation_SelectiveSearchSegmentation_addStrategy(ptr, s.PtrObj.CvPtr)); @@ -211,12 +210,8 @@ public virtual void Process(out Rect[] rects) GC.KeepAlive(this); } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/ximgproc/Segmentation/SelectiveSearchSegmentationStrategy.cs b/src/OpenCvSharp/Modules/ximgproc/Segmentation/SelectiveSearchSegmentationStrategy.cs index 5451f85f2..eb9723ec6 100644 --- a/src/OpenCvSharp/Modules/ximgproc/Segmentation/SelectiveSearchSegmentationStrategy.cs +++ b/src/OpenCvSharp/Modules/ximgproc/Segmentation/SelectiveSearchSegmentationStrategy.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.CodeAnalysis; using OpenCvSharp.Internal; namespace OpenCvSharp.XImgProc.Segmentation; @@ -45,11 +44,11 @@ protected override void DisposeManaged() public virtual void SetImage(InputArray img, InputArray regions, InputArray sizes, int imageId = -1) { ThrowIfDisposed(); - if (img == null) + if (img is null) throw new ArgumentNullException(nameof(img)); - if (regions == null) + if (regions is null) throw new ArgumentNullException(nameof(regions)); - if (sizes == null) + if (sizes is null) throw new ArgumentNullException(nameof(sizes)); img.ThrowIfDisposed(); regions.ThrowIfDisposed(); @@ -121,12 +120,8 @@ public static SelectiveSearchSegmentationStrategyColor Create() return new SelectiveSearchSegmentationStrategyColor(p); } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( @@ -171,12 +166,8 @@ public static SelectiveSearchSegmentationStrategySize Create() return new SelectiveSearchSegmentationStrategySize(p); } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( @@ -219,12 +210,8 @@ public static SelectiveSearchSegmentationStrategyTexture Create() return new SelectiveSearchSegmentationStrategyTexture(p); } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( @@ -267,12 +254,8 @@ public static SelectiveSearchSegmentationStrategyFill Create() return new SelectiveSearchSegmentationStrategyFill(p); } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/ximgproc/Segmentation/SelectiveSearchSegmentationStrategyMultiple.cs b/src/OpenCvSharp/Modules/ximgproc/Segmentation/SelectiveSearchSegmentationStrategyMultiple.cs index 846e70ace..a7ed8e8a8 100644 --- a/src/OpenCvSharp/Modules/ximgproc/Segmentation/SelectiveSearchSegmentationStrategyMultiple.cs +++ b/src/OpenCvSharp/Modules/ximgproc/Segmentation/SelectiveSearchSegmentationStrategyMultiple.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.CodeAnalysis; using OpenCvSharp.Internal; namespace OpenCvSharp.XImgProc.Segmentation; @@ -28,11 +27,11 @@ protected SelectiveSearchSegmentationStrategyMultiple(IntPtr p) public new virtual void SetImage(InputArray img, InputArray regions, InputArray sizes, int imageId = -1) { ThrowIfDisposed(); - if (img == null) + if (img is null) throw new ArgumentNullException(nameof(img)); - if (regions == null) + if (regions is null) throw new ArgumentNullException(nameof(regions)); - if (sizes == null) + if (sizes is null) throw new ArgumentNullException(nameof(sizes)); img.ThrowIfDisposed(); regions.ThrowIfDisposed(); @@ -95,7 +94,7 @@ public static SelectiveSearchSegmentationStrategyMultiple Create() public static SelectiveSearchSegmentationStrategyMultiple Create( SelectiveSearchSegmentationStrategy s1) { - if (s1 == null) + if (s1 is null) throw new ArgumentNullException(nameof(s1)); NativeMethods.HandleException( NativeMethods.ximgproc_segmentation_createSelectiveSearchSegmentationStrategyMultiple1(s1.CvPtr, out var p)); @@ -111,9 +110,9 @@ public static SelectiveSearchSegmentationStrategyMultiple Create( public static SelectiveSearchSegmentationStrategyMultiple Create( SelectiveSearchSegmentationStrategy s1, SelectiveSearchSegmentationStrategy s2) { - if (s1 == null) + if (s1 is null) throw new ArgumentNullException(nameof(s1)); - if (s2 == null) + if (s2 is null) throw new ArgumentNullException(nameof(s2)); NativeMethods.HandleException( NativeMethods.ximgproc_segmentation_createSelectiveSearchSegmentationStrategyMultiple2(s1.CvPtr, s2.CvPtr, out var p)); @@ -130,11 +129,11 @@ public static SelectiveSearchSegmentationStrategyMultiple Create( public static SelectiveSearchSegmentationStrategyMultiple Create( SelectiveSearchSegmentationStrategy s1, SelectiveSearchSegmentationStrategy s2, SelectiveSearchSegmentationStrategy s3) { - if (s1 == null) + if (s1 is null) throw new ArgumentNullException(nameof(s1)); - if (s2 == null) + if (s2 is null) throw new ArgumentNullException(nameof(s2)); - if (s3 == null) + if (s3 is null) throw new ArgumentNullException(nameof(s3)); NativeMethods.HandleException( NativeMethods.ximgproc_segmentation_createSelectiveSearchSegmentationStrategyMultiple3(s1.CvPtr, s2.CvPtr, s3.CvPtr, out var p)); @@ -152,25 +151,21 @@ public static SelectiveSearchSegmentationStrategyMultiple Create( public static SelectiveSearchSegmentationStrategyMultiple Create( SelectiveSearchSegmentationStrategy s1, SelectiveSearchSegmentationStrategy s2, SelectiveSearchSegmentationStrategy s3, SelectiveSearchSegmentationStrategy s4) { - if (s1 == null) + if (s1 is null) throw new ArgumentNullException(nameof(s1)); - if (s2 == null) + if (s2 is null) throw new ArgumentNullException(nameof(s2)); - if (s3 == null) + if (s3 is null) throw new ArgumentNullException(nameof(s3)); - if (s4 == null) + if (s4 is null) throw new ArgumentNullException(nameof(s4)); NativeMethods.HandleException( NativeMethods.ximgproc_segmentation_createSelectiveSearchSegmentationStrategyMultiple4(s1.CvPtr, s2.CvPtr, s3.CvPtr, s4.CvPtr, out var p)); return new SelectiveSearchSegmentationStrategyMultiple(p); } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/ximgproc/StructuredEdgeDetection.cs b/src/OpenCvSharp/Modules/ximgproc/StructuredEdgeDetection.cs index 2cd64fa98..f7c7943ef 100644 --- a/src/OpenCvSharp/Modules/ximgproc/StructuredEdgeDetection.cs +++ b/src/OpenCvSharp/Modules/ximgproc/StructuredEdgeDetection.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; using OpenCvSharp.Internal.Vectors; // ReSharper disable UnusedMember.Global @@ -57,9 +56,9 @@ public static StructuredEdgeDetection Create(string model, RFFeatureGetter? howT public virtual void GetBoundingBoxes(InputArray edgeMap, InputArray orientationMap, out Rect[] boxes) { ThrowIfDisposed(); - if (edgeMap == null) + if (edgeMap is null) throw new ArgumentNullException(nameof(edgeMap)); - if (orientationMap == null) + if (orientationMap is null) throw new ArgumentNullException(nameof(orientationMap)); edgeMap.ThrowIfDisposed(); orientationMap.ThrowIfDisposed(); @@ -83,9 +82,9 @@ public virtual void GetBoundingBoxes(InputArray edgeMap, InputArray orientationM public virtual void DetectEdges(InputArray src, OutputArray dst) { ThrowIfDisposed(); - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -106,9 +105,9 @@ public virtual void DetectEdges(InputArray src, OutputArray dst) public virtual void ComputeOrientation(InputArray src, OutputArray dst) { ThrowIfDisposed(); - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -135,11 +134,11 @@ public virtual void EdgesNms(InputArray edgeImage, InputArray orientationImage, int r = 2, int s = 0, float m = 1, bool isParallel = true) { ThrowIfDisposed(); - if (edgeImage == null) + if (edgeImage is null) throw new ArgumentNullException(nameof(edgeImage)); - if (orientationImage == null) + if (orientationImage is null) throw new ArgumentNullException(nameof(orientationImage)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); edgeImage.ThrowIfDisposed(); orientationImage.ThrowIfDisposed(); @@ -155,12 +154,8 @@ public virtual void EdgesNms(InputArray edgeImage, InputArray orientationImage, dst.Fix(); } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/ximgproc/Superpixel/SuperpixelLSC.cs b/src/OpenCvSharp/Modules/ximgproc/Superpixel/SuperpixelLSC.cs index 01eb599d9..705730729 100644 --- a/src/OpenCvSharp/Modules/ximgproc/Superpixel/SuperpixelLSC.cs +++ b/src/OpenCvSharp/Modules/ximgproc/Superpixel/SuperpixelLSC.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; // ReSharper disable once CheckNamespace namespace OpenCvSharp.XImgProc; @@ -54,7 +53,7 @@ protected override void DisposeManaged() public static SuperpixelLSC Create( InputArray image, int regionSize = 10, float ratio = 0.075f) { - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); image.ThrowIfDisposed(); @@ -114,7 +113,7 @@ public virtual void Iterate(int numIterations = 10) public virtual void GetLabels(OutputArray labelsOut) { ThrowIfDisposed(); - if (labelsOut == null) + if (labelsOut is null) throw new ArgumentNullException(nameof(labelsOut)); labelsOut.ThrowIfNotReady(); @@ -134,7 +133,7 @@ public virtual void GetLabels(OutputArray labelsOut) public virtual void GetLabelContourMask(OutputArray image, bool thickLine = true) { ThrowIfDisposed(); - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); image.ThrowIfNotReady(); @@ -162,12 +161,8 @@ public virtual void EnforceLabelConnectivity(int minElementSize = 20) GC.KeepAlive(this); } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/ximgproc/Superpixel/SuperpixelSEEDS.cs b/src/OpenCvSharp/Modules/ximgproc/Superpixel/SuperpixelSEEDS.cs index 4b1625ac2..e80b4a819 100644 --- a/src/OpenCvSharp/Modules/ximgproc/Superpixel/SuperpixelSEEDS.cs +++ b/src/OpenCvSharp/Modules/ximgproc/Superpixel/SuperpixelSEEDS.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; // ReSharper disable once CheckNamespace namespace OpenCvSharp.XImgProc; @@ -109,7 +108,7 @@ public virtual int GetNumberOfSuperpixels() public virtual void Iterate(InputArray img, int numIterations = 10) { ThrowIfDisposed(); - if (img == null) + if (img is null) throw new ArgumentNullException(nameof(img)); img.ThrowIfDisposed(); @@ -133,7 +132,7 @@ public virtual void Iterate(InputArray img, int numIterations = 10) public virtual void GetLabels(OutputArray labelsOut) { ThrowIfDisposed(); - if (labelsOut == null) + if (labelsOut is null) throw new ArgumentNullException(nameof(labelsOut)); labelsOut.ThrowIfNotReady(); @@ -153,7 +152,7 @@ public virtual void GetLabels(OutputArray labelsOut) public virtual void GetLabelContourMask(OutputArray image, bool thickLine = true) { ThrowIfDisposed(); - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); image.ThrowIfNotReady(); @@ -164,12 +163,8 @@ public virtual void GetLabelContourMask(OutputArray image, bool thickLine = true image.Fix(); } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/ximgproc/Superpixel/SuperpixelSLIC.cs b/src/OpenCvSharp/Modules/ximgproc/Superpixel/SuperpixelSLIC.cs index 7f6fd3c56..75c656829 100644 --- a/src/OpenCvSharp/Modules/ximgproc/Superpixel/SuperpixelSLIC.cs +++ b/src/OpenCvSharp/Modules/ximgproc/Superpixel/SuperpixelSLIC.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; // ReSharper disable once CheckNamespace namespace OpenCvSharp.XImgProc; @@ -55,7 +54,7 @@ public static SuperpixelSLIC Create( int regionSize = 10, float ruler = 10.0f) { - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); image.ThrowIfDisposed(); @@ -115,7 +114,7 @@ public virtual void Iterate(int numIterations = 10) public virtual void GetLabels(OutputArray labelsOut) { ThrowIfDisposed(); - if (labelsOut == null) + if (labelsOut is null) throw new ArgumentNullException(nameof(labelsOut)); labelsOut.ThrowIfNotReady(); @@ -135,7 +134,7 @@ public virtual void GetLabels(OutputArray labelsOut) public virtual void GetLabelContourMask(OutputArray image, bool thickLine = true) { ThrowIfDisposed(); - if (image == null) + if (image is null) throw new ArgumentNullException(nameof(image)); image.ThrowIfNotReady(); @@ -164,12 +163,8 @@ public virtual void EnforceLabelConnectivity(int minElementSize = 20) GC.KeepAlive(this); } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/xphoto/CvXPhoto.cs b/src/OpenCvSharp/Modules/xphoto/CvXPhoto.cs index fc706707b..7094b615f 100644 --- a/src/OpenCvSharp/Modules/xphoto/CvXPhoto.cs +++ b/src/OpenCvSharp/Modules/xphoto/CvXPhoto.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; // ReSharper disable UnusedMember.Global @@ -55,11 +54,11 @@ public static void Bm3dDenoising( Bm3dSteps step = Bm3dSteps.STEPALL, TransformTypes transformType = TransformTypes.HAAR) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dstStep1 == null) + if (dstStep1 is null) throw new ArgumentNullException(nameof(dstStep1)); - if (dstStep2 == null) + if (dstStep2 is null) throw new ArgumentNullException(nameof(dstStep2)); src.ThrowIfDisposed(); @@ -116,9 +115,9 @@ public static void Bm3dDenoising( Bm3dSteps step = Bm3dSteps.STEPALL, TransformTypes transformType = TransformTypes.HAAR) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -149,9 +148,9 @@ public static void Bm3dDenoising( /// size of block side where dct is computed public static void DctDenoising(Mat src, Mat dst, double sigma, int psize = 16) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfDisposed(); @@ -176,11 +175,11 @@ public static void DctDenoising(Mat src, Mat dst, double sigma, int psize = 16) /// see OpenCvSharp.XPhoto.InpaintTypes public static void Inpaint(Mat src, Mat mask, Mat dst, InpaintTypes algorithm) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (mask == null) + if (mask is null) throw new ArgumentNullException(nameof(mask)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); mask.ThrowIfDisposed(); @@ -211,9 +210,9 @@ public static void OilPainting( InputArray src, OutputArray dst, int size, int dynRatio, ColorConversionCodes? code = null) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -242,9 +241,9 @@ public static void OilPainting( /// gain for the R channel public static void ApplyChannelGains(InputArray src, OutputArray dst, float gainB, float gainG, float gainR) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); diff --git a/src/OpenCvSharp/Modules/xphoto/GrayworldWB.cs b/src/OpenCvSharp/Modules/xphoto/GrayworldWB.cs index fc43d5d2c..b358d40d1 100644 --- a/src/OpenCvSharp/Modules/xphoto/GrayworldWB.cs +++ b/src/OpenCvSharp/Modules/xphoto/GrayworldWB.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; // ReSharper disable IdentifierTypo // ReSharper disable InconsistentNaming @@ -71,9 +70,9 @@ public float SaturationThreshold /// White balancing result public override void BalanceWhite(InputArray src, OutputArray dst) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -87,13 +86,8 @@ public override void BalanceWhite(InputArray src, OutputArray dst) dst.Fix(); } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) - : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/xphoto/LearningBasedWB.cs b/src/OpenCvSharp/Modules/xphoto/LearningBasedWB.cs index 3b7a9ad39..233b8c4ae 100644 --- a/src/OpenCvSharp/Modules/xphoto/LearningBasedWB.cs +++ b/src/OpenCvSharp/Modules/xphoto/LearningBasedWB.cs @@ -1,4 +1,3 @@ -using System; using OpenCvSharp.Internal; namespace OpenCvSharp.XPhoto; @@ -113,9 +112,9 @@ public float SaturationThreshold /// White balancing result public override void BalanceWhite(InputArray src, OutputArray dst) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -136,9 +135,9 @@ public override void BalanceWhite(InputArray src, OutputArray dst) /// An array of four (r,g) chromaticity tuples corresponding to the features listed above. public void ExtractSimpleFeatures(InputArray src, OutputArray dst) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -152,13 +151,8 @@ public void ExtractSimpleFeatures(InputArray src, OutputArray dst) dst.Fix(); } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) - : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/xphoto/SimpleWB.cs b/src/OpenCvSharp/Modules/xphoto/SimpleWB.cs index b740446c7..48cf66ff7 100644 --- a/src/OpenCvSharp/Modules/xphoto/SimpleWB.cs +++ b/src/OpenCvSharp/Modules/xphoto/SimpleWB.cs @@ -1,4 +1,3 @@ -using System; using OpenCvSharp.Internal; // ReSharper disable InconsistentNaming @@ -159,9 +158,9 @@ public float P /// White balancing result public override void BalanceWhite(InputArray src, OutputArray dst) { - if (src == null) + if (src is null) throw new ArgumentNullException(nameof(src)); - if (dst == null) + if (dst is null) throw new ArgumentNullException(nameof(dst)); src.ThrowIfDisposed(); dst.ThrowIfNotReady(); @@ -175,13 +174,8 @@ public override void BalanceWhite(InputArray src, OutputArray dst) dst.Fix(); } - internal class Ptr : OpenCvSharp.Ptr + internal class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) - : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/Modules/xphoto/TonemapDurand.cs b/src/OpenCvSharp/Modules/xphoto/TonemapDurand.cs index 9cfa2fa3a..aad6c857d 100644 --- a/src/OpenCvSharp/Modules/xphoto/TonemapDurand.cs +++ b/src/OpenCvSharp/Modules/xphoto/TonemapDurand.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; // ReSharper disable UnusedMember.Global @@ -153,12 +152,8 @@ public float SigmaColor } } - private class Ptr : OpenCvSharp.Ptr + private class Ptr(IntPtr ptr) : OpenCvSharp.Ptr(ptr) { - public Ptr(IntPtr ptr) : base(ptr) - { - } - public override IntPtr Get() { NativeMethods.HandleException( diff --git a/src/OpenCvSharp/OpenCvSharp.csproj b/src/OpenCvSharp/OpenCvSharp.csproj index df718f7e3..9f75ea387 100644 --- a/src/OpenCvSharp/OpenCvSharp.csproj +++ b/src/OpenCvSharp/OpenCvSharp.csproj @@ -1,7 +1,7 @@  - netstandard2.0;netstandard2.1;netcoreapp3.1;net48;net6.0; + netstandard2.0;netstandard2.1;net48;net6.0; true true OpenCvSharp @@ -13,7 +13,8 @@ false false Debug;Release;Release-JP - 10 + 12 + enable enable true true @@ -23,16 +24,17 @@ AllEnabledByDefault - - - + + + + - + @@ -46,7 +48,7 @@ - + @@ -66,7 +68,7 @@ - 1701;1702;CA1303;CA1707;CA1814;CA1401;CA1720; + 1701;1702;CA1303;CA1707;CA1814;CA1401;CA1720;CA2213; diff --git a/src/OpenCvSharpExtern/CMakeLists.txt b/src/OpenCvSharpExtern/CMakeLists.txt index 2287bdbea..4371d2f63 100644 --- a/src/OpenCvSharpExtern/CMakeLists.txt +++ b/src/OpenCvSharpExtern/CMakeLists.txt @@ -13,7 +13,15 @@ file(GLOB OPENCVSHARP_FILES *.cpp) find_package(OpenCV REQUIRED) -find_package(Iconv REQUIRED) +# iconv support isn't automatic on some systems +if(CMAKE_VERSION VERSION_GREATER "3.11") + find_package(Iconv QUIET) + if(Iconv_FOUND) + ocv_target_link_libraries(${the_module} Iconv::Iconv) + else() + ocv_target_compile_definitions(${the_module} PRIVATE "NO_ICONV=1") + endif() +endif() if(OpenCV_FOUND) include_directories(${OpenCV_INCLUDE_DIRS}) @@ -39,4 +47,4 @@ if(OpenCV_FOUND) LIBRARY DESTINATION lib ARCHIVE DESTINATION lib/static ) -endif(OpenCV_FOUND) \ No newline at end of file +endif(OpenCV_FOUND) diff --git a/src/OpenCvSharpExtern/OpenCvSharpExtern.vcxproj b/src/OpenCvSharpExtern/OpenCvSharpExtern.vcxproj index 294b9e65e..9644d3992 100644 --- a/src/OpenCvSharpExtern/OpenCvSharpExtern.vcxproj +++ b/src/OpenCvSharpExtern/OpenCvSharpExtern.vcxproj @@ -79,14 +79,14 @@ $(SolutionDir)src\$(Configuration)\$(PlatformName)\ src\$(Platform)\$(Configuration)\ false - $(SolutionDir)\opencv_files\opencv460_win_x64\include;$(IncludePath) - $(SolutionDir)\opencv_files\opencv460_win_x64\include;$(IncludePath) - $(SolutionDir)\opencv_files\opencv460_win_x64\x64\vc16\staticlib;$(LibraryPath) - $(SolutionDir)\opencv_files\opencv460_win_x64\x64\vc17\staticlib;$(SolutionDir)\tesseract_files\tesseract_vcpkg\installed\x64-windows-static\lib;$(LibraryPath) - $(SolutionDir)\opencv_files\opencv460_win_x86\include;$(IncludePath) - $(SolutionDir)\opencv_files\opencv460_win_x86\include;$(IncludePath) - $(SolutionDir)\opencv_files\opencv460_win_x86\x86\vc17\staticlib;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib;$(SolutionDir)\tesseract_files\tesseract_vcpkg\installed\x86-windows-static\lib;$(LibraryPath) - $(SolutionDir)\opencv_files\opencv460_win_x86\x86\vc16\staticlib;$(LibraryPath) + $(SolutionDir)\opencv_files\opencv_win_x64\include;$(IncludePath) + $(SolutionDir)\opencv_files\opencv_win_x64\include;$(IncludePath) + $(SolutionDir)\opencv_files\opencv_win_x64\x64\vc16\staticlib;$(LibraryPath) + $(SolutionDir)\opencv_files\opencv_win_x64\x64\vc17\staticlib;$(SolutionDir)\tesseract_files\tesseract_vcpkg\x64-windows-static\lib;$(LibraryPath) + $(SolutionDir)\opencv_files\opencv_win_x86\include;$(IncludePath) + $(SolutionDir)\opencv_files\opencv_win_x86\include;$(IncludePath) + $(SolutionDir)\opencv_files\opencv_win_x86\x86\vc17\staticlib;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib;$(SolutionDir)\tesseract_files\tesseract_vcpkg\x86-windows-static\lib;$(LibraryPath) + $(SolutionDir)\opencv_files\opencv_win_x86\x86\vc16\staticlib;$(LibraryPath) @@ -164,7 +164,7 @@ true - IlmImf.lib;ippicvmt.lib;ippiw.lib;ittnotify.lib;libjpeg-turbo.lib;libopenjp2.lib;libpng.lib;libprotobuf.lib;libtiff.lib;libwebp.lib;opencv_aruco460.lib;opencv_bgsegm460.lib;opencv_bioinspired460.lib;opencv_calib3d460.lib;opencv_ccalib460.lib;opencv_core460.lib;opencv_dnn460.lib;opencv_dnn_superres460.lib;opencv_dnn_objdetect460.lib;opencv_dpm460.lib;opencv_face460.lib;opencv_features2d460.lib;opencv_flann460.lib;opencv_fuzzy460.lib;opencv_hfs460.lib;opencv_highgui460.lib;opencv_imgcodecs460.lib;opencv_imgproc460.lib;opencv_img_hash460.lib;opencv_line_descriptor460.lib;opencv_ml460.lib;opencv_objdetect460.lib;opencv_optflow460.lib;opencv_phase_unwrapping460.lib;opencv_photo460.lib;opencv_plot460.lib;opencv_quality460.lib;opencv_reg460.lib;opencv_rgbd460.lib;opencv_saliency460.lib;opencv_shape460.lib;opencv_stereo460.lib;opencv_stitching460.lib;opencv_structured_light460.lib;opencv_superres460.lib;opencv_surface_matching460.lib;opencv_text460.lib;opencv_tracking460.lib;opencv_video460.lib;opencv_videoio460.lib;opencv_videostab460.lib;opencv_wechat_qrcode460.lib;opencv_xfeatures2d460.lib;opencv_ximgproc460.lib;opencv_xobjdetect460.lib;opencv_xphoto460.lib;quirc.lib;zlib.lib;ws2_32.lib;tesseract41.lib;leptonica-1.81.1.lib;gif.lib;jpeg.lib;libpng16.lib;libwebpmux.lib;lzma.lib;tiff.lib;turbojpeg.lib;webp.lib;webpdecoder.lib;webpdemux.lib;%(AdditionalDependencies) + IlmImf.lib;ippicvmt.lib;ippiw.lib;ittnotify.lib;libjpeg-turbo.lib;libopenjp2.lib;libpng.lib;libprotobuf.lib;libtiff.lib;libwebp.lib;opencv_aruco4110.lib;opencv_bgsegm4110.lib;opencv_bioinspired4110.lib;opencv_calib3d4110.lib;opencv_ccalib4110.lib;opencv_core4110.lib;opencv_dnn4110.lib;opencv_dnn_objdetect4110.lib;opencv_dnn_superres4110.lib;opencv_dpm4110.lib;opencv_face4110.lib;opencv_features2d4110.lib;opencv_flann4110.lib;opencv_fuzzy4110.lib;opencv_hfs4110.lib;opencv_highgui4110.lib;opencv_imgcodecs4110.lib;opencv_imgproc4110.lib;opencv_img_hash4110.lib;opencv_intensity_transform4110.lib;opencv_line_descriptor4110.lib;opencv_mcc4110.lib;opencv_ml4110.lib;opencv_objdetect4110.lib;opencv_optflow4110.lib;opencv_phase_unwrapping4110.lib;opencv_photo4110.lib;opencv_plot4110.lib;opencv_quality4110.lib;opencv_rapid4110.lib;opencv_reg4110.lib;opencv_rgbd4110.lib;opencv_saliency4110.lib;opencv_shape4110.lib;opencv_stereo4110.lib;opencv_stitching4110.lib;opencv_structured_light4110.lib;opencv_superres4110.lib;opencv_surface_matching4110.lib;opencv_text4110.lib;opencv_tracking4110.lib;opencv_video4110.lib;opencv_videoio4110.lib;opencv_videostab4110.lib;opencv_wechat_qrcode4110.lib;opencv_xfeatures2d4110.lib;opencv_ximgproc4110.lib;opencv_xobjdetect4110.lib;opencv_xphoto4110.lib;zlib.lib;ws2_32.lib;tesseract53.lib;leptonica-1.83.1.lib;archive.lib;bz2.lib;charset.lib;gif.lib;iconv.lib;libcrypto.lib;libcurl.lib;libpng16.lib;libsharpyuv.lib;libssl.lib;libxml2.lib;lz4.lib;lzma.lib;tiff.lib;zstd.lib;crypt32.lib;%(AdditionalDependencies) %(IgnoreSpecificDefaultLibraries) true NotSet @@ -179,8 +179,8 @@ copy "$(LocalDebuggerCommand)" "$(SolutionDir)test\OpenCvSharp.Tests\dll\x86\$(TargetFileName)" copy "$(LocalDebuggerCommand)" "$(SolutionDir)test\OpenCvSharp.Tests\$(TargetFileName)" -copy "$(SolutionDir)opencv_files\opencv460_win_x86\x86\vc17\bin\opencv_videoio_ffmpeg460.dll" "$(SolutionDir)test\OpenCvSharp.Tests\dll\x86\opencv_videoio_ffmpeg460.dll" -copy "$(SolutionDir)opencv_files\opencv460_win_x86\x86\vc17\bin\opencv_videoio_ffmpeg460.dll" "$(SolutionDir)test\OpenCvSharp.Tests\opencv_videoio_ffmpeg460.dll" +copy "$(SolutionDir)opencv_files\opencv_win_x86\x86\vc17\bin\opencv_videoio_ffmpeg4110.dll" "$(SolutionDir)test\OpenCvSharp.Tests\dll\x86\opencv_videoio_ffmpeg4110.dll" +copy "$(SolutionDir)opencv_files\opencv_win_x86\x86\vc17\bin\opencv_videoio_ffmpeg4110.dll" "$(SolutionDir)test\OpenCvSharp.Tests\opencv_videoio_ffmpeg4110.dll" @@ -207,7 +207,7 @@ copy "$(SolutionDir)opencv_files\opencv460_win_x86\x86\vc17\bin\opencv_videoio_f true - IlmImf.lib;ippicvmt.lib;ippiw.lib;ittnotify.lib;libopenjp2.lib;libjpeg-turbo.lib;libpng.lib;libprotobuf.lib;libtiff.lib;libwebp.lib;opencv_aruco460.lib;opencv_bgsegm460.lib;opencv_bioinspired460.lib;opencv_calib3d460.lib;opencv_ccalib460.lib;opencv_core460.lib;opencv_dnn460.lib;opencv_dnn_superres460.lib;opencv_dnn_objdetect460.lib;opencv_dpm460.lib;opencv_face460.lib;opencv_features2d460.lib;opencv_flann460.lib;opencv_fuzzy460.lib;opencv_hfs460.lib;opencv_highgui460.lib;opencv_imgcodecs460.lib;opencv_imgproc460.lib;opencv_img_hash460.lib;opencv_line_descriptor460.lib;opencv_ml460.lib;opencv_objdetect460.lib;opencv_optflow460.lib;opencv_phase_unwrapping460.lib;opencv_photo460.lib;opencv_plot460.lib;opencv_quality460.lib;opencv_reg460.lib;opencv_rgbd460.lib;opencv_saliency460.lib;opencv_shape460.lib;opencv_stereo460.lib;opencv_stitching460.lib;opencv_structured_light460.lib;opencv_superres460.lib;opencv_surface_matching460.lib;opencv_text460.lib;opencv_tracking460.lib;opencv_video460.lib;opencv_videoio460.lib;opencv_videostab460.lib;opencv_wechat_qrcode460.lib;opencv_xfeatures2d460.lib;opencv_ximgproc460.lib;opencv_xobjdetect460.lib;opencv_xphoto460.lib;quirc.lib;zlib.lib;ws2_32.lib;tesseract41.lib;leptonica-1.81.1.lib;gif.lib;jpeg.lib;libpng16.lib;libwebpmux.lib;lzma.lib;tiff.lib;turbojpeg.lib;webp.lib;webpdecoder.lib;webpdemux.lib;%(AdditionalDependencies) + IlmImf.lib;ippicvmt.lib;ippiw.lib;ittnotify.lib;libopenjp2.lib;libjpeg-turbo.lib;libpng.lib;libprotobuf.lib;libtiff.lib;libwebp.lib;opencv_aruco4110.lib;opencv_bgsegm4110.lib;opencv_bioinspired4110.lib;opencv_calib3d4110.lib;opencv_ccalib4110.lib;opencv_core4110.lib;opencv_dnn4110.lib;opencv_dnn_objdetect4110.lib;opencv_dnn_superres4110.lib;opencv_dpm4110.lib;opencv_face4110.lib;opencv_features2d4110.lib;opencv_flann4110.lib;opencv_fuzzy4110.lib;opencv_hfs4110.lib;opencv_highgui4110.lib;opencv_imgcodecs4110.lib;opencv_imgproc4110.lib;opencv_img_hash4110.lib;opencv_intensity_transform4110.lib;opencv_line_descriptor4110.lib;opencv_mcc4110.lib;opencv_ml4110.lib;opencv_objdetect4110.lib;opencv_optflow4110.lib;opencv_phase_unwrapping4110.lib;opencv_photo4110.lib;opencv_plot4110.lib;opencv_quality4110.lib;opencv_rapid4110.lib;opencv_reg4110.lib;opencv_rgbd4110.lib;opencv_saliency4110.lib;opencv_shape4110.lib;opencv_stereo4110.lib;opencv_stitching4110.lib;opencv_structured_light4110.lib;opencv_superres4110.lib;opencv_surface_matching4110.lib;opencv_text4110.lib;opencv_tracking4110.lib;opencv_video4110.lib;opencv_videoio4110.lib;opencv_videostab4110.lib;opencv_wechat_qrcode4110.lib;opencv_xfeatures2d4110.lib;opencv_ximgproc4110.lib;opencv_xobjdetect4110.lib;opencv_xphoto4110.lib;zlib.lib;ws2_32.lib;tesseract53.lib;leptonica-1.83.1.lib;archive.lib;bz2.lib;charset.lib;gif.lib;iconv.lib;libcrypto.lib;libcurl.lib;libpng16.lib;libsharpyuv.lib;libssl.lib;libxml2.lib;lz4.lib;lzma.lib;tiff.lib;zstd.lib;crypt32.lib;%(AdditionalDependencies) %(IgnoreSpecificDefaultLibraries) true NotSet @@ -222,8 +222,8 @@ copy "$(SolutionDir)opencv_files\opencv460_win_x86\x86\vc17\bin\opencv_videoio_f copy "$(LocalDebuggerCommand)" "$(SolutionDir)test\OpenCvSharp.Tests\dll\x64\$(TargetFileName)" copy "$(LocalDebuggerCommand)" "$(SolutionDir)test\OpenCvSharp.Tests\$(TargetFileName)" -copy "$(SolutionDir)opencv_files\opencv460_win_x64\x64\vc17\bin\opencv_videoio_ffmpeg460_64.dll" "$(SolutionDir)test\OpenCvSharp.Tests\opencv_videoio_ffmpeg460_64.dll" -copy "$(SolutionDir)opencv_files\opencv460_win_x64\x64\vc17\bin\opencv_videoio_ffmpeg460_64.dll" "$(SolutionDir)test\OpenCvSharp.Tests\dll\x64\opencv_videoio_ffmpeg460_64.dll" +copy "$(SolutionDir)opencv_files\opencv_win_x64\x64\vc17\bin\opencv_videoio_ffmpeg4110_64.dll" "$(SolutionDir)test\OpenCvSharp.Tests\opencv_videoio_ffmpeg4110_64.dll" +copy "$(SolutionDir)opencv_files\opencv_win_x64\x64\vc17\bin\opencv_videoio_ffmpeg4110_64.dll" "$(SolutionDir)test\OpenCvSharp.Tests\dll\x64\opencv_videoio_ffmpeg4110_64.dll" @@ -294,6 +294,7 @@ copy "$(SolutionDir)opencv_files\opencv460_win_x64\x64\vc17\bin\opencv_videoio_f + diff --git a/src/OpenCvSharpExtern/OpenCvSharpExtern.vcxproj.filters b/src/OpenCvSharpExtern/OpenCvSharpExtern.vcxproj.filters index c8aa110c7..b9c96c843 100644 --- a/src/OpenCvSharpExtern/OpenCvSharpExtern.vcxproj.filters +++ b/src/OpenCvSharpExtern/OpenCvSharpExtern.vcxproj.filters @@ -375,6 +375,9 @@ Header Files + + Header Files\imgproc + diff --git a/src/OpenCvSharpExtern/aruco.h b/src/OpenCvSharpExtern/aruco.h index 2e58da558..2660116cb 100644 --- a/src/OpenCvSharpExtern/aruco.h +++ b/src/OpenCvSharpExtern/aruco.h @@ -6,270 +6,298 @@ // ReSharper disable CppInconsistentNaming // ReSharper disable CppNonInlineFunctionDefinitionInHeaderFile -extern "C" +extern "C" { - struct aruco_DetectorParameters - { - int adaptiveThreshWinSizeMin; - int adaptiveThreshWinSizeMax; - int adaptiveThreshWinSizeStep; - double adaptiveThreshConstant; - double minMarkerPerimeterRate; - double maxMarkerPerimeterRate; - double polygonalApproxAccuracyRate; - double minCornerDistanceRate; - int minDistanceToBorder; - double minMarkerDistanceRate; - int cornerRefinementMethod; - int cornerRefinementWinSize; - int cornerRefinementMaxIterations; - double cornerRefinementMinAccuracy; - int markerBorderBits; - int perspectiveRemovePixelPerCell; - double perspectiveRemoveIgnoredMarginPerCell; - double maxErroneousBitsInBorderRate; - double minOtsuStdDev; - double errorCorrectionRate; - float aprilTagQuadDecimate; - float aprilTagQuadSigma; - int aprilTagMinClusterPixels; - int aprilTagMaxNmaxima; - float aprilTagCriticalRad; - float aprilTagMaxLineFitMse; - int aprilTagDeglitch; - int aprilTagMinWhiteBlackDiff; - bool detectInvertedMarker; - }; + struct aruco_DetectorParameters + { + int adaptiveThreshWinSizeMin; + int adaptiveThreshWinSizeMax; + int adaptiveThreshWinSizeStep; + double adaptiveThreshConstant; + double minMarkerPerimeterRate; + double maxMarkerPerimeterRate; + double polygonalApproxAccuracyRate; + double minCornerDistanceRate; + int minDistanceToBorder; + double minMarkerDistanceRate; + int cornerRefinementMethod; + int cornerRefinementWinSize; + int cornerRefinementMaxIterations; + double cornerRefinementMinAccuracy; + int markerBorderBits; + int perspectiveRemovePixelPerCell; + double perspectiveRemoveIgnoredMarginPerCell; + double maxErroneousBitsInBorderRate; + double minOtsuStdDev; + double errorCorrectionRate; + float aprilTagQuadDecimate; + float aprilTagQuadSigma; + int aprilTagMinClusterPixels; + int aprilTagMaxNmaxima; + float aprilTagCriticalRad; + float aprilTagMaxLineFitMse; + int aprilTagMinWhiteBlackDiff; + int aprilTagDeglitch; + bool detectInvertedMarker; + bool useAruco3Detection; + int minSideLengthCanonicalImg; + float minMarkerLengthRatioOriginalImg; + }; } -static cv::Ptr cpp(const aruco_DetectorParameters &p) +static cv::aruco::DetectorParameters cpp(const aruco_DetectorParameters& p) { - auto pp = cv::aruco::DetectorParameters::create(); - pp->adaptiveThreshWinSizeMin = p.adaptiveThreshWinSizeMin; - pp->adaptiveThreshWinSizeMax = p.adaptiveThreshWinSizeMax; - pp->adaptiveThreshWinSizeStep = p.adaptiveThreshWinSizeStep; - pp->adaptiveThreshConstant = p.adaptiveThreshConstant; - pp->minMarkerPerimeterRate = p.minMarkerPerimeterRate; - pp->maxMarkerPerimeterRate = p.maxMarkerPerimeterRate; - pp->polygonalApproxAccuracyRate = p.polygonalApproxAccuracyRate; - pp->minCornerDistanceRate = p.minCornerDistanceRate; - pp->minDistanceToBorder = p.minDistanceToBorder; - pp->minMarkerDistanceRate = p.minMarkerDistanceRate; - pp->cornerRefinementMethod = p.cornerRefinementMethod; - pp->cornerRefinementWinSize = p.cornerRefinementWinSize; - pp->cornerRefinementMaxIterations = p.cornerRefinementMaxIterations; - pp->cornerRefinementMinAccuracy = p.cornerRefinementMinAccuracy; - pp->markerBorderBits = p.markerBorderBits; - pp->perspectiveRemovePixelPerCell = p.perspectiveRemovePixelPerCell; - pp->perspectiveRemoveIgnoredMarginPerCell = p.perspectiveRemoveIgnoredMarginPerCell; - pp->maxErroneousBitsInBorderRate = p.maxErroneousBitsInBorderRate; - pp->minOtsuStdDev = p.minOtsuStdDev; - pp->errorCorrectionRate = p.errorCorrectionRate; - pp->aprilTagQuadDecimate = p.aprilTagQuadDecimate; - pp->aprilTagQuadSigma = p.aprilTagQuadSigma; - pp->aprilTagMinClusterPixels = p.aprilTagMinClusterPixels; - pp->aprilTagMaxNmaxima = p.aprilTagMaxNmaxima; - pp->aprilTagCriticalRad = p.aprilTagCriticalRad; - pp->aprilTagMaxLineFitMse = p.aprilTagMaxLineFitMse; - pp->aprilTagDeglitch = p.aprilTagDeglitch; - pp->aprilTagMinWhiteBlackDiff = p.aprilTagMinWhiteBlackDiff; - pp->detectInvertedMarker = p.detectInvertedMarker; - return pp; -} -static aruco_DetectorParameters c(const cv::Ptr p) -{ - aruco_DetectorParameters pp{}; - pp.adaptiveThreshWinSizeMin = p->adaptiveThreshWinSizeMin; - pp.adaptiveThreshWinSizeMax = p->adaptiveThreshWinSizeMax; - pp.adaptiveThreshWinSizeStep = p->adaptiveThreshWinSizeStep; - pp.adaptiveThreshConstant = p->adaptiveThreshConstant; - pp.minMarkerPerimeterRate = p->minMarkerPerimeterRate; - pp.maxMarkerPerimeterRate = p->maxMarkerPerimeterRate; - pp.polygonalApproxAccuracyRate = p->polygonalApproxAccuracyRate; - pp.minCornerDistanceRate = p->minCornerDistanceRate; - pp.minDistanceToBorder = p->minDistanceToBorder; - pp.minMarkerDistanceRate = p->minMarkerDistanceRate; - pp.cornerRefinementMethod = p->cornerRefinementMethod; - pp.cornerRefinementWinSize = p->cornerRefinementWinSize; - pp.cornerRefinementMaxIterations = p->cornerRefinementMaxIterations; - pp.cornerRefinementMinAccuracy = p->cornerRefinementMinAccuracy; - pp.markerBorderBits = p->markerBorderBits; - pp.perspectiveRemovePixelPerCell = p->perspectiveRemovePixelPerCell; - pp.perspectiveRemoveIgnoredMarginPerCell = p->perspectiveRemoveIgnoredMarginPerCell; - pp.maxErroneousBitsInBorderRate = p->maxErroneousBitsInBorderRate; - pp.minOtsuStdDev = p->minOtsuStdDev; - pp.errorCorrectionRate = p->errorCorrectionRate; - pp.aprilTagQuadDecimate = p->aprilTagQuadDecimate; - pp.aprilTagQuadSigma = p->aprilTagQuadSigma; - pp.aprilTagMinClusterPixels = p->aprilTagMinClusterPixels; - pp.aprilTagMaxNmaxima = p->aprilTagMaxNmaxima; - pp.aprilTagCriticalRad = p->aprilTagCriticalRad; - pp.aprilTagMaxLineFitMse = p->aprilTagMaxLineFitMse; - pp.aprilTagDeglitch = p->aprilTagDeglitch; - pp.aprilTagMinWhiteBlackDiff = p->aprilTagMinWhiteBlackDiff; - pp.detectInvertedMarker = p->detectInvertedMarker; - return pp; -} - -CVAPI(ExceptionStatus) aruco_DetectorParameters_create(aruco_DetectorParameters *returnValue) -{ - BEGIN_WRAP - const auto p = cv::aruco::DetectorParameters::create(); - *returnValue = c(p); - END_WRAP + cv::aruco::DetectorParameters pp; + pp.adaptiveThreshWinSizeMin = p.adaptiveThreshWinSizeMin; + pp.adaptiveThreshWinSizeMax = p.adaptiveThreshWinSizeMax; + pp.adaptiveThreshWinSizeStep = p.adaptiveThreshWinSizeStep; + pp.adaptiveThreshConstant = p.adaptiveThreshConstant; + pp.minMarkerPerimeterRate = p.minMarkerPerimeterRate; + pp.maxMarkerPerimeterRate = p.maxMarkerPerimeterRate; + pp.polygonalApproxAccuracyRate = p.polygonalApproxAccuracyRate; + pp.minCornerDistanceRate = p.minCornerDistanceRate; + pp.minDistanceToBorder = p.minDistanceToBorder; + pp.minMarkerDistanceRate = p.minMarkerDistanceRate; + pp.cornerRefinementMethod = static_cast(p.cornerRefinementMethod); + pp.cornerRefinementWinSize = p.cornerRefinementWinSize; + pp.cornerRefinementMaxIterations = p.cornerRefinementMaxIterations; + pp.cornerRefinementMinAccuracy = p.cornerRefinementMinAccuracy; + pp.markerBorderBits = p.markerBorderBits; + pp.perspectiveRemovePixelPerCell = p.perspectiveRemovePixelPerCell; + pp.perspectiveRemoveIgnoredMarginPerCell = p.perspectiveRemoveIgnoredMarginPerCell; + pp.maxErroneousBitsInBorderRate = p.maxErroneousBitsInBorderRate; + pp.minOtsuStdDev = p.minOtsuStdDev; + pp.errorCorrectionRate = p.errorCorrectionRate; + pp.aprilTagQuadDecimate = p.aprilTagQuadDecimate; + pp.aprilTagQuadSigma = p.aprilTagQuadSigma; + pp.aprilTagMinClusterPixels = p.aprilTagMinClusterPixels; + pp.aprilTagMaxNmaxima = p.aprilTagMaxNmaxima; + pp.aprilTagCriticalRad = p.aprilTagCriticalRad; + pp.aprilTagMaxLineFitMse = p.aprilTagMaxLineFitMse; + pp.aprilTagDeglitch = p.aprilTagDeglitch; + pp.aprilTagMinWhiteBlackDiff = p.aprilTagMinWhiteBlackDiff; + pp.detectInvertedMarker = p.detectInvertedMarker; + pp.useAruco3Detection = p.useAruco3Detection; + pp.minSideLengthCanonicalImg = p.minSideLengthCanonicalImg; + pp.minMarkerLengthRatioOriginalImg = p.minMarkerLengthRatioOriginalImg; + return pp; } CVAPI(ExceptionStatus) aruco_drawDetectedMarkers( - cv::_InputOutputArray *image, - cv::Point2f **corners, - int cornerSize1, - int *cornerSize2, - int *idx, int idxCount, MyCvScalar borderColor) + cv::_InputOutputArray* image, + cv::Point2f** corners, + int cornerSize1, + int* cornerSize2, + int* idx, int idxCount, + MyCvScalar borderColor) { - BEGIN_WRAP - std::vector< std::vector > cornerVec(cornerSize1); - std::vector idxVec; - - for (int i = 0; i < cornerSize1; i++) - cornerVec[i] = std::vector(corners[i], corners[i] + cornerSize2[i]); - if (idx != nullptr) - idxVec = std::vector(idx, idx + idxCount); + BEGIN_WRAP + std::vector< std::vector > cornerVec(cornerSize1); + std::vector idxVec; - cv::aruco::drawDetectedMarkers(*image, cornerVec, idxVec, cpp(borderColor)); - END_WRAP -} + for (int i = 0; i < cornerSize1; i++) + cornerVec[i] = std::vector(corners[i], corners[i] + cornerSize2[i]); + if (idx != nullptr) + idxVec = std::vector(idx, idx + idxCount); -CVAPI(ExceptionStatus) aruco_drawMarker( - cv::Ptr *dictionary, int id, int sidePixels, cv::_OutputArray *img, int borderBits) -{ - BEGIN_WRAP - cv::aruco::drawMarker(*dictionary, id, sidePixels, *img, borderBits); - END_WRAP + cv::aruco::drawDetectedMarkers(*image, cornerVec, idxVec, cpp(borderColor)); + END_WRAP } CVAPI(ExceptionStatus) aruco_detectMarkers( - cv::_InputArray *image, - cv::Ptr *dictionary, - std::vector< std::vector > *corners, - std::vector *ids, - aruco_DetectorParameters *parameters, - std::vector< std::vector > *rejectedImgPoints) + cv::_InputArray* image, + cv::aruco::Dictionary* dictionary, + std::vector< std::vector >* corners, + std::vector* ids, + aruco_DetectorParameters* parameters, + std::vector< std::vector >* rejectedImgPoints) { - BEGIN_WRAP - const auto p = cpp(*parameters); - cv::aruco::detectMarkers(*image, *dictionary, *corners, *ids, p, *rejectedImgPoints); - END_WRAP + BEGIN_WRAP + const auto p = cpp(*parameters); + const auto pp = cv::makePtr(p); + const auto d = cv::makePtr(*dictionary); + cv::aruco::detectMarkers(*image, d, *corners, *ids, pp, *rejectedImgPoints); + END_WRAP } CVAPI(ExceptionStatus) aruco_estimatePoseSingleMarkers( - cv::Point2f **corners, int cornersLength1, - int *cornersLengths2, float markerLength, - cv::_InputArray *cameraMatrix, - cv::_InputArray *distCoeffs, - cv::_OutputArray *rvecs, - cv::_OutputArray *tvecs, - cv::_OutputArray *objPoints) + cv::Point2f** corners, int cornersLength1, + int* cornersLengths2, float markerLength, + cv::_InputArray* cameraMatrix, + cv::_InputArray* distCoeffs, + cv::_OutputArray* rvecs, + cv::_OutputArray* tvecs, + cv::_OutputArray* objPoints) { - BEGIN_WRAP - std::vector > cornersVec(cornersLength1); - for (int i = 0; i < cornersLength1; i++) - cornersVec[i] = std::vector(corners[i], corners[i] + cornersLengths2[i]); + BEGIN_WRAP + std::vector > cornersVec(cornersLength1); + for (int i = 0; i < cornersLength1; i++) + cornersVec[i] = std::vector(corners[i], corners[i] + cornersLengths2[i]); - cv::aruco::estimatePoseSingleMarkers(cornersVec, markerLength, *cameraMatrix, *distCoeffs, *rvecs, *tvecs, entity(objPoints)); - END_WRAP + cv::aruco::estimatePoseSingleMarkers(cornersVec, markerLength, *cameraMatrix, *distCoeffs, *rvecs, *tvecs, entity(objPoints)); + END_WRAP } -CVAPI(ExceptionStatus) aruco_getPredefinedDictionary(int name, cv::Ptr** returnValue) +CVAPI(ExceptionStatus) aruco_getPredefinedDictionary(int name, cv::aruco::Dictionary** returnValue) { - BEGIN_WRAP - const auto dictionary = cv::aruco::getPredefinedDictionary(static_cast(name)); - *returnValue = new cv::Ptr(dictionary); - END_WRAP + BEGIN_WRAP + const auto dictionary = cv::aruco::getPredefinedDictionary(name); + *returnValue = new cv::aruco::Dictionary(dictionary); + END_WRAP } +CVAPI(ExceptionStatus) aruco_readDictionary(const char* dictionaryFile, cv::aruco::Dictionary** returnValue) +{ + BEGIN_WRAP + + auto readMode = cv::FileStorage::READ | cv::FileStorage::FORMAT_YAML; + cv::FileStorage storeage(dictionaryFile, readMode); + cv::FileNode rootNode = storeage.root(); + + cv::aruco::Dictionary dictionary; + auto result = dictionary.readDictionary(rootNode); + + storeage.release(); + + *returnValue = new cv::aruco::Dictionary(dictionary); + + END_WRAP +} -CVAPI(ExceptionStatus) aruco_Ptr_Dictionary_delete(cv::Ptr *ptr) +CVAPI(ExceptionStatus) aruco_Dictionary_delete(cv::aruco::Dictionary* ptr) { - BEGIN_WRAP - delete ptr; - END_WRAP + BEGIN_WRAP + delete ptr; + END_WRAP } -CVAPI(ExceptionStatus) aruco_Ptr_Dictionary_get(cv::Ptr *ptr, cv::aruco::Dictionary **returnValue) +CVAPI(ExceptionStatus) aruco_Dictionary_setMarkerSize(cv::aruco::Dictionary* obj, int value) { - BEGIN_WRAP - *returnValue = ptr->get(); - END_WRAP + BEGIN_WRAP + obj->markerSize = value; + END_WRAP } -CVAPI(ExceptionStatus) aruco_Dictionary_setMarkerSize(cv::aruco::Dictionary *obj, int value) +CVAPI(ExceptionStatus) aruco_Dictionary_setMaxCorrectionBits(cv::aruco::Dictionary* obj, int value) { - BEGIN_WRAP - obj->markerSize = value; - END_WRAP + BEGIN_WRAP + obj->maxCorrectionBits = value; + END_WRAP } -CVAPI(ExceptionStatus) aruco_Dictionary_setMaxCorrectionBits(cv::aruco::Dictionary *obj, int value) +CVAPI(ExceptionStatus) aruco_Dictionary_getBytesList(cv::aruco::Dictionary* obj, cv::Mat** returnValue) { - BEGIN_WRAP - obj->maxCorrectionBits = value; - END_WRAP + BEGIN_WRAP + * returnValue = new cv::Mat(obj->bytesList); + END_WRAP } -CVAPI(ExceptionStatus) aruco_Dictionary_getBytesList(cv::aruco::Dictionary *obj, cv::Mat** returnValue) +CVAPI(ExceptionStatus) aruco_Dictionary_getMarkerSize(cv::aruco::Dictionary* obj, int* returnValue) { - BEGIN_WRAP - *returnValue = new cv::Mat(obj->bytesList); - END_WRAP + BEGIN_WRAP + *returnValue = obj->markerSize; + END_WRAP } -CVAPI(ExceptionStatus) aruco_Dictionary_getMarkerSize(cv::aruco::Dictionary *obj, int *returnValue) +CVAPI(ExceptionStatus) aruco_Dictionary_getMaxCorrectionBits(cv::aruco::Dictionary* obj, int* returnValue) { - BEGIN_WRAP - *returnValue = obj->markerSize; - END_WRAP + BEGIN_WRAP + *returnValue = obj->maxCorrectionBits; + END_WRAP } -CVAPI(ExceptionStatus) aruco_Dictionary_getMaxCorrectionBits(cv::aruco::Dictionary *obj, int *returnValue) + +CVAPI(ExceptionStatus) aruco_Dictionary_identify( + cv::aruco::Dictionary* obj, + cv::Mat *onlyBits, + int *idx, + int *rotation, + double maxCorrectionRate, + int* returnValue) +{ + BEGIN_WRAP + *returnValue = obj->identify(*onlyBits, *idx, *rotation, maxCorrectionRate) != 0; + END_WRAP +} + +CVAPI(ExceptionStatus) aruco_Dictionary_getDistanceToId( + cv::aruco::Dictionary* obj, + cv::_InputArray *bits, + int id, + int allRotations, + int* returnValue) +{ + BEGIN_WRAP + *returnValue = obj->getDistanceToId(*bits, id, allRotations != 0); + END_WRAP +} + +CVAPI(ExceptionStatus) aruco_Dictionary_generateImageMarker( + cv::aruco::Dictionary* obj, + int id, + int sidePixels, + cv::_OutputArray *img, + int borderBits) +{ + BEGIN_WRAP + obj->generateImageMarker(id, sidePixels, *img, borderBits); + END_WRAP +} + +CVAPI(ExceptionStatus) aruco_Dictionary_getByteListFromBits( + cv::Mat *bits, + cv::Mat* returnValue) +{ + BEGIN_WRAP + const auto result = cv::aruco::Dictionary::getByteListFromBits(*bits); + result.copyTo(*returnValue); + END_WRAP +} + +CVAPI(ExceptionStatus) aruco_Dictionary_getBitsFromByteList( + cv::Mat *byteList, + int markerSize, + cv::Mat* returnValue) { - BEGIN_WRAP - *returnValue = obj->maxCorrectionBits; - END_WRAP + BEGIN_WRAP + const auto result = cv::aruco::Dictionary::getBitsFromByteList(*byteList, markerSize); + result.copyTo(*returnValue); + END_WRAP } CVAPI(ExceptionStatus) aruco_detectCharucoDiamond( - cv::_InputArray *image, - cv::Point2f **markerCorners, - int markerCornersSize1, - int *markerCornersSize2, - std::vector *markerIds, - float squareMarkerLengthRate, - std::vector< std::vector > *diamondCorners, - std::vector *diamondIds, - cv::_InputArray *cameraMatrix, cv::_InputArray *distCoeffs) + cv::_InputArray* image, + cv::Point2f** markerCorners, + int markerCornersSize1, + int* markerCornersSize2, + std::vector* markerIds, + float squareMarkerLengthRate, + std::vector< std::vector >* diamondCorners, + std::vector* diamondIds, + cv::_InputArray* cameraMatrix, cv::_InputArray* distCoeffs) { - BEGIN_WRAP - std::vector< std::vector > markerCornerVec(markerCornersSize1); - for (int i = 0; i < markerCornersSize1; i++) - markerCornerVec[i] = std::vector(markerCorners[i], markerCorners[i] + markerCornersSize2[i]); + BEGIN_WRAP + std::vector< std::vector > markerCornerVec(markerCornersSize1); + for (int i = 0; i < markerCornersSize1; i++) + markerCornerVec[i] = std::vector(markerCorners[i], markerCorners[i] + markerCornersSize2[i]); - cv::aruco::detectCharucoDiamond(*image, markerCornerVec, *markerIds, squareMarkerLengthRate, - *diamondCorners, *diamondIds, entity(cameraMatrix), entity(distCoeffs)); - END_WRAP + cv::aruco::detectCharucoDiamond(*image, markerCornerVec, *markerIds, squareMarkerLengthRate, + *diamondCorners, *diamondIds, entity(cameraMatrix), entity(distCoeffs)); + END_WRAP } CVAPI(ExceptionStatus) aruco_drawDetectedDiamonds( - cv::_InputOutputArray *image, - cv::Point2f **corners, - int cornerSize1, - int *cornerSize2, - std::vector *ids, - MyCvScalar borderColor) + cv::_InputOutputArray* image, + cv::Point2f** corners, + int cornerSize1, + int* cornerSize2, + std::vector* ids, + MyCvScalar borderColor) { - BEGIN_WRAP - std::vector< std::vector > cornerVec(cornerSize1); + BEGIN_WRAP + std::vector< std::vector > cornerVec(cornerSize1); - for (int i = 0; i < cornerSize1; i++) - cornerVec[i] = std::vector(corners[i], corners[i] + cornerSize2[i]); + for (int i = 0; i < cornerSize1; i++) + cornerVec[i] = std::vector(corners[i], corners[i] + cornerSize2[i]); - const cv::_InputArray idArray = (ids != nullptr) ? *ids : static_cast(cv::noArray()); + const cv::_InputArray idArray = (ids != nullptr) ? *ids : static_cast(cv::noArray()); - cv::aruco::drawDetectedDiamonds(*image, cornerVec, idArray, cpp(borderColor)); - END_WRAP + cv::aruco::drawDetectedDiamonds(*image, cornerVec, idArray, cpp(borderColor)); + END_WRAP } diff --git a/src/OpenCvSharpExtern/calib3d.h b/src/OpenCvSharpExtern/calib3d.h index 818607482..a1d7767ec 100644 --- a/src/OpenCvSharpExtern/calib3d.h +++ b/src/OpenCvSharpExtern/calib3d.h @@ -204,7 +204,7 @@ CVAPI(ExceptionStatus) calib3d_solvePnP_vector(cv::Point3f *objectPoints, int ob distCoeffsMat = cv::Mat(distCoeffsLength, 1, CV_64FC1, distCoeffs); const cv::Matx cameraMatrixMat(cameraMatrix); - cv::Matx rvecMat, tvecMat; + cv::Matx rvecMat(rvec), tvecMat(tvec); cv::solvePnP(objectPointsMat, imagePointsMat, cameraMatrixMat, distCoeffsMat, rvecMat, tvecMat, useExtrinsicGuess != 0, flags); memcpy(rvec, rvecMat.val, sizeof(double) * 3); memcpy(tvec, tvecMat.val, sizeof(double) * 3); diff --git a/src/OpenCvSharpExtern/core.h b/src/OpenCvSharpExtern/core.h index dcd923ef6..152c76810 100644 --- a/src/OpenCvSharpExtern/core.h +++ b/src/OpenCvSharpExtern/core.h @@ -8,6 +8,14 @@ #pragma region core.hpp + +CVAPI(MyCvBox2D) core_RotatedRect_byThreeVertexPoints( + MyCvPoint2D32f p1, MyCvPoint2D32f p2, MyCvPoint2D32f p3) +{ + return c( + cv::RotatedRect(cpp(p1), cpp(p2), cpp(p3))); +} + CVAPI(ExceptionStatus) core_borderInterpolate(int p, int len, int borderType, int* returnValue) { BEGIN_WRAP @@ -156,18 +164,20 @@ CVAPI(ExceptionStatus) core_meanStdDev_Scalar( END_WRAP } -CVAPI(ExceptionStatus) core_norm1(cv::_InputArray* src1, int normType, cv::_InputArray* mask, double *returnValue) +CVAPI(ExceptionStatus) core_norm1( + cv::_InputArray* src1, int normType, cv::_InputArray* mask, double *returnValue) { - BEGIN_WRAP + BEGIN_WRAP; *returnValue = cv::norm(*src1, normType, entity(mask)); END_WRAP } -CVAPI(ExceptionStatus) core_norm2(cv::_InputArray* src1, cv::_InputArray* src2, +CVAPI(ExceptionStatus) core_norm2( + cv::_InputArray* src1, cv::_InputArray* src2, int normType, cv::_InputArray* mask, double* returnValue) { - BEGIN_WRAP + BEGIN_WRAP; *returnValue = cv::norm(*src1, *src2, normType, entity(mask)); - END_WRAP + END_WRAP; } CVAPI(ExceptionStatus) core_PSNR(cv::_InputArray* src1, cv::_InputArray* src2, double R, double* returnValue) @@ -198,6 +208,20 @@ CVAPI(ExceptionStatus) core_normalize( END_WRAP } +CVAPI(ExceptionStatus) core_reduceArgMax(cv::_InputArray* src, cv::_OutputArray* dst, int axis, bool lastIndex) +{ + BEGIN_WRAP + cv::reduceArgMax(*src, *dst, axis, lastIndex); + END_WRAP +} + +CVAPI(ExceptionStatus) core_reduceArgMin(cv::_InputArray* src, cv::_OutputArray* dst, int axis, bool lastIndex) +{ + BEGIN_WRAP + cv::reduceArgMin(*src, *dst, axis, lastIndex); + END_WRAP +} + CVAPI(ExceptionStatus) core_minMaxLoc1(cv::_InputArray* src, double* minVal, double* maxVal) { BEGIN_WRAP @@ -910,13 +934,6 @@ CVAPI(cv::ErrorCallback) redirectError(cv::ErrorCallback errCallback, void* user return cv::redirectError(errCallback, userdata, prevUserdata); } -CVAPI(ExceptionStatus) core_glob(const char *pattern, std::vector *result, int recursive) -{ - BEGIN_WRAP - cv::glob(pattern, *result, recursive != 0); - END_WRAP -} - CVAPI(ExceptionStatus) core_setNumThreads(int nthreads) { BEGIN_WRAP @@ -1051,6 +1068,24 @@ CVAPI(ExceptionStatus) core_format(cv::_InputArray *mtx, int fmt, std::string *b #pragma endregion +#pragma region logger.hpp + +CVAPI(ExceptionStatus) core_logger_setLogLevel(cv::utils::logging::LogLevel logLevel, cv::utils::logging::LogLevel* returnValue) +{ + BEGIN_WRAP + *returnValue = cv::utils::logging::setLogLevel(logLevel); + END_WRAP +} + +CVAPI(ExceptionStatus) core_logger_getLogLevel(cv::utils::logging::LogLevel *returnValue) +{ + BEGIN_WRAP + *returnValue = cv::utils::logging::getLogLevel(); + END_WRAP +} + +#pragma endregion + #pragma region RNG CVAPI(ExceptionStatus) core_RNG_fill(uint64 *state, cv::_InputOutputArray *mat, int distType, cv::_InputArray *a, cv::_InputArray *b, int saturateRange) diff --git a/src/OpenCvSharpExtern/imgproc.cpp b/src/OpenCvSharpExtern/imgproc.cpp index 82175174a..83c2fdac6 100644 --- a/src/OpenCvSharpExtern/imgproc.cpp +++ b/src/OpenCvSharpExtern/imgproc.cpp @@ -5,3 +5,4 @@ #include "imgproc_LineIterator.h" #include "imgproc_GeneralizedHough.h" #include "imgproc_Segmentation.h" +#include "imgproc_LineSegmentDetector.h" diff --git a/src/OpenCvSharpExtern/imgproc.h b/src/OpenCvSharpExtern/imgproc.h index 12f8d28e2..266fc6b1b 100644 --- a/src/OpenCvSharpExtern/imgproc.h +++ b/src/OpenCvSharpExtern/imgproc.h @@ -484,6 +484,13 @@ CVAPI(ExceptionStatus) imgproc_pyrUp(cv::_InputArray *src, cv::_OutputArray *dst END_WRAP } +CVAPI(ExceptionStatus) imgproc_buildPyramid(cv::_InputArray *src, std::vector *dst,int maxlevel, int borderType) +{ + BEGIN_WRAP + cv::buildPyramid(*src, *dst, maxlevel, borderType); + END_WRAP +} + CVAPI(ExceptionStatus) imgproc_calcHist(cv::Mat **images, int nimages, const int* channels, cv::_InputArray *mask, cv::_OutputArray *hist, int dims, const int* histSize, diff --git a/src/OpenCvSharpExtern/imgproc_LineSegmentDetector.h b/src/OpenCvSharpExtern/imgproc_LineSegmentDetector.h new file mode 100644 index 000000000..18cc3f014 --- /dev/null +++ b/src/OpenCvSharpExtern/imgproc_LineSegmentDetector.h @@ -0,0 +1,49 @@ +#pragma once + +// ReSharper disable IdentifierTypo +// ReSharper disable CppInconsistentNaming +// ReSharper disable CppNonInlineFunctionDefinitionInHeaderFile + +#include "include_opencv.h" + +CVAPI(void) imgproc_LineSegmentDetector_detect_OutputArray(cv::LineSegmentDetector *obj, cv::_InputArray *image, cv::_OutputArray *lines, + cv::_OutputArray *width, cv::_OutputArray *prec, cv::_OutputArray *nfa) +{ + obj->detect(*image, *lines, entity(width), entity(prec), entity(nfa)); +} + +CVAPI(void) imgproc_LineSegmentDetector_detect_vector(cv::LineSegmentDetector *obj, cv::_InputArray *image, std::vector *lines, + std::vector *width, std::vector *prec, std::vector *nfa) +{ + obj->detect(*image, *lines, *width, *prec, *nfa); +} + +CVAPI(void) imgproc_LineSegmentDetector_drawSegments(cv::LineSegmentDetector *obj, cv::_InputOutputArray *image, cv::_InputArray *lines) +{ + obj->drawSegments(*image, *lines); +} + +CVAPI(int) imgproc_LineSegmentDetector_compareSegments(cv::LineSegmentDetector *obj, MyCvSize size, + cv::_InputArray *lines1, cv::_InputArray *lines2, cv::_InputOutputArray *image) +{ + return obj->compareSegments(cpp(size), *lines1, *lines2, entity(image)); +} + + +CVAPI(cv::Ptr*) imgproc_createLineSegmentDetector( + int refine, double scale, double sigma_scale, double quant, double ang_th, + double log_eps, double density_th, int n_bins) +{ + return clone( cv::createLineSegmentDetector( + refine, scale, sigma_scale, quant, ang_th, log_eps, density_th, n_bins)); +} + +CVAPI(void) imgproc_Ptr_LineSegmentDetector_delete(cv::Ptr *obj) +{ + delete obj; +} + +CVAPI(cv::LineSegmentDetector*) imgproc_Ptr_LineSegmentDetector_get(cv::Ptr *obj) +{ + return obj->get(); +} diff --git a/src/OpenCvSharpExtern/include_opencv.h b/src/OpenCvSharpExtern/include_opencv.h index 610b70edf..d65eb67e5 100644 --- a/src/OpenCvSharpExtern/include_opencv.h +++ b/src/OpenCvSharpExtern/include_opencv.h @@ -38,6 +38,7 @@ #ifdef _WINRT_DLL #include #endif +#include #include #include #include diff --git a/src/OpenCvSharpExtern/photo.h b/src/OpenCvSharpExtern/photo.h index 439160967..c9b48780d 100644 --- a/src/OpenCvSharpExtern/photo.h +++ b/src/OpenCvSharpExtern/photo.h @@ -37,7 +37,7 @@ CVAPI(ExceptionStatus) photo_fastNlMeansDenoisingMulti(cv::Mat **srcImgs, int sr { BEGIN_WRAP - std::vector srcImgsVec; + std::vector srcImgsVec(srcImgsLength); for (int i = 0; i < srcImgsLength; i++) srcImgsVec[i] = *srcImgs[i]; diff --git a/src/OpenCvSharpExtern/videoio.h b/src/OpenCvSharpExtern/videoio.h index e41b40b8e..05de8c2f8 100644 --- a/src/OpenCvSharpExtern/videoio.h +++ b/src/OpenCvSharpExtern/videoio.h @@ -31,9 +31,10 @@ CVAPI(ExceptionStatus) videoio_VideoCapture_new3(int device, int apiPreference, CVAPI(ExceptionStatus) videoio_VideoCapture_new4(const char* filename, int apiPreference, int* params, int paramsLength, cv::VideoCapture** returnValue) { BEGIN_WRAP + std::string filenameStr(filename); std::vector paramsVec; paramsVec.assign(params, params + paramsLength); - * returnValue = new cv::VideoCapture(filename, apiPreference, paramsVec); + * returnValue = new cv::VideoCapture(filenameStr, apiPreference, paramsVec); END_WRAP } CVAPI(ExceptionStatus) videoio_VideoCapture_new5(int device, int apiPreference, int* params, int paramsLength, cv::VideoCapture** returnValue) diff --git a/src/uwpOpenCvSharpExtern/uwpOpenCvSharpExtern.vcxproj b/src/uwpOpenCvSharpExtern/uwpOpenCvSharpExtern.vcxproj index f267af1de..3a1286c38 100644 --- a/src/uwpOpenCvSharpExtern/uwpOpenCvSharpExtern.vcxproj +++ b/src/uwpOpenCvSharpExtern/uwpOpenCvSharpExtern.vcxproj @@ -103,42 +103,42 @@ $(SolutionDir)src\$(Configuration)\$(MSBuildProjectName)\$(Platform)\ $(Platform)\$(Configuration)\ OpenCvSharpExtern - $(SolutionDir)\opencv_files\opencv460_uwp_x86\include;$(IncludePath) - $(SolutionDir)\opencv_files\opencv460_uwp_x86\x86\vc16\lib;$(LibraryPath) + $(SolutionDir)\opencv_files\opencv480_uwp_x86\include;$(IncludePath) + $(SolutionDir)\opencv_files\opencv480_uwp_x86\x86\vc16\lib;$(LibraryPath) false $(SolutionDir)src\$(Configuration)\$(MSBuildProjectName)\$(Platform)\ $(Platform)\$(Configuration)\ OpenCvSharpExtern - $(SolutionDir)\opencv_files\opencv460_uwp_x86\include;$(IncludePath) - $(SolutionDir)\opencv_files\opencv460_uwp_x86\x86\vc17\lib;$(LibraryPath) + $(SolutionDir)\opencv_files\opencv480_uwp_x86\include;$(IncludePath) + $(SolutionDir)\opencv_files\opencv480_uwp_x86\x86\vc17\lib;$(LibraryPath) false OpenCvSharpExtern - $(SolutionDir)\opencv_files\opencv460_uwp_ARM\include;$(IncludePath) - $(SolutionDir)\opencv_files\opencv460_uwp_ARM\x86\vc16\lib;$(LibraryPath) + $(SolutionDir)\opencv_files\opencv480_uwp_ARM\include;$(IncludePath) + $(SolutionDir)\opencv_files\opencv480_uwp_ARM\x86\vc16\lib;$(LibraryPath) false OpenCvSharpExtern - $(SolutionDir)\opencv_files\opencv460_uwp_ARM\include;$(IncludePath) - $(SolutionDir)\opencv_files\opencv460_uwp_ARM\x86\vc17\lib;$(LibraryPath) + $(SolutionDir)\opencv_files\opencv480_uwp_ARM\include;$(IncludePath) + $(SolutionDir)\opencv_files\opencv480_uwp_ARM\x86\vc17\lib;$(LibraryPath) $(SolutionDir)src\$(Configuration)\$(MSBuildProjectName)\$(Platform)\ false OpenCvSharpExtern - $(SolutionDir)\opencv_files\opencv460_uwp_x64\include;$(IncludePath) - $(SolutionDir)\opencv_files\opencv460_uwp_x64\x64\vc16\lib;$(LibraryPath) + $(SolutionDir)\opencv_files\opencv480_uwp_x64\include;$(IncludePath) + $(SolutionDir)\opencv_files\opencv480_uwp_x64\x64\vc16\lib;$(LibraryPath) $(SolutionDir)src\$(Configuration)\$(MSBuildProjectName)\$(Platform)\ false OpenCvSharpExtern - $(SolutionDir)\opencv_files\opencv460_uwp_x64\include;$(IncludePath) - $(SolutionDir)\opencv_files\opencv460_uwp_x64\x64\vc17\lib;$(LibraryPath) + $(SolutionDir)\opencv_files\opencv480_uwp_x64\include;$(IncludePath) + $(SolutionDir)\opencv_files\opencv480_uwp_x64\x64\vc17\lib;$(LibraryPath) $(SolutionDir)src\$(Configuration)\$(MSBuildProjectName)\$(Platform)\ @@ -174,7 +174,7 @@ Console false D:\Samples\vcpkg\packages\opencv4_x86-uwp\lib; - opencv_world460.lib;opencv_img_hash460.lib;WindowsApp.lib;%(AdditionalDependencies) + opencv_world480.lib;opencv_img_hash480.lib;WindowsApp.lib;%(AdditionalDependencies) @@ -207,7 +207,7 @@ Console false - opencv_world460.lib;opencv_img_hash460.lib;%(AdditionalDependencies) + opencv_world480.lib;opencv_img_hash480.lib;%(AdditionalDependencies) @@ -240,7 +240,7 @@ Console false - opencv_world460.lib;opencv_img_hash460.lib;WindowsApp.lib;%(AdditionalDependencies) + opencv_world480.lib;opencv_img_hash480.lib;WindowsApp.lib;%(AdditionalDependencies) diff --git a/test/OpenCvSharp.DebuggerVisualizers.Tester/Program.cs b/test/OpenCvSharp.DebuggerVisualizers.Tester/Program.cs index 74916e407..af27f1029 100644 --- a/test/OpenCvSharp.DebuggerVisualizers.Tester/Program.cs +++ b/test/OpenCvSharp.DebuggerVisualizers.Tester/Program.cs @@ -1,7 +1,4 @@ using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; using System.Windows.Forms; namespace OpenCvSharp.DebuggerVisualizers.Tester diff --git a/test/OpenCvSharp.DebuggerVisualizers.Tester/Properties/AssemblyInfo.cs b/test/OpenCvSharp.DebuggerVisualizers.Tester/Properties/AssemblyInfo.cs index cc2b249e2..9f1d777cc 100644 --- a/test/OpenCvSharp.DebuggerVisualizers.Tester/Properties/AssemblyInfo.cs +++ b/test/OpenCvSharp.DebuggerVisualizers.Tester/Properties/AssemblyInfo.cs @@ -1,5 +1,4 @@ using System.Reflection; -using System.Runtime.CompilerServices; using System.Runtime.InteropServices; // 有关程序集的一般信息由以下 diff --git a/test/OpenCvSharp.Tests/extensions/BitmapConverterTest.cs b/test/OpenCvSharp.Tests.Windows/BitmapConverterTest.cs similarity index 99% rename from test/OpenCvSharp.Tests/extensions/BitmapConverterTest.cs rename to test/OpenCvSharp.Tests.Windows/BitmapConverterTest.cs index cae2eb9e4..b35b199fb 100644 --- a/test/OpenCvSharp.Tests/extensions/BitmapConverterTest.cs +++ b/test/OpenCvSharp.Tests.Windows/BitmapConverterTest.cs @@ -1,5 +1,4 @@ -using System; -using System.Drawing; +using System.Drawing; using System.Drawing.Imaging; using System.Runtime.InteropServices; using OpenCvSharp.Extensions; diff --git a/test/OpenCvSharp.Tests.Windows/BitmapSourceConverterTest.cs b/test/OpenCvSharp.Tests.Windows/BitmapSourceConverterTest.cs index f4dc3bc0e..fd02da0f8 100644 --- a/test/OpenCvSharp.Tests.Windows/BitmapSourceConverterTest.cs +++ b/test/OpenCvSharp.Tests.Windows/BitmapSourceConverterTest.cs @@ -1,5 +1,4 @@ -using System; -using System.Globalization; +using System.Globalization; using System.Runtime.InteropServices; using System.Windows; using System.Windows.Controls; diff --git a/test/OpenCvSharp.Tests.Windows/OpenCvSharp.Tests.Windows.csproj b/test/OpenCvSharp.Tests.Windows/OpenCvSharp.Tests.Windows.csproj index 6246030e6..d5f0cf966 100644 --- a/test/OpenCvSharp.Tests.Windows/OpenCvSharp.Tests.Windows.csproj +++ b/test/OpenCvSharp.Tests.Windows/OpenCvSharp.Tests.Windows.csproj @@ -1,11 +1,12 @@  - net6.0-windows;net48 + net8.0-windows;net48 true true - 10 + 12 enable + enable @@ -31,12 +32,12 @@ - - - - + + + + all - runtime; build; native; contentfiles; analyzers + runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/test/OpenCvSharp.Tests.Windows/WriteableBitmapConverterTest.cs b/test/OpenCvSharp.Tests.Windows/WriteableBitmapConverterTest.cs index 8f326f1ea..98e7dda9b 100644 --- a/test/OpenCvSharp.Tests.Windows/WriteableBitmapConverterTest.cs +++ b/test/OpenCvSharp.Tests.Windows/WriteableBitmapConverterTest.cs @@ -1,5 +1,4 @@ -using System; -using System.Windows; +using System.Windows; using System.Windows.Media; using System.Windows.Media.Imaging; using OpenCvSharp.WpfExtensions; @@ -13,7 +12,7 @@ public class WriteableBitmapConverterTest public void ToWriteableBitmap() { var expected = new byte[] {1, 2, 3, 4, 5, 6}; - using (var mat = new Mat(3, 2, MatType.CV_8UC1, expected)) + using (var mat = Mat.FromPixelData(3, 2, MatType.CV_8UC1, expected)) { var wb = mat.ToWriteableBitmap(); @@ -32,7 +31,7 @@ public void ToWriteableBitmap() public void ToWriteableBitmapSubmat() { var expected = new byte[] {1, 2, 3, 4, 5, 6}; - using (var mat = new Mat(3, 2, MatType.CV_8UC1, expected)) + using (var mat = Mat.FromPixelData(3, 2, MatType.CV_8UC1, expected)) using (var submat = mat[0, 2, 0, 2]) { var wb = submat.ToWriteableBitmap(); diff --git a/test/OpenCvSharp.Tests/ArchitectureSpecificFactAttribute.cs b/test/OpenCvSharp.Tests/ArchitectureSpecificFactAttribute.cs index c0d21ac61..d88002424 100644 --- a/test/OpenCvSharp.Tests/ArchitectureSpecificFactAttribute.cs +++ b/test/OpenCvSharp.Tests/ArchitectureSpecificFactAttribute.cs @@ -1,5 +1,4 @@ -using System.Linq; -using System.Runtime.InteropServices; +using System.Runtime.InteropServices; using Xunit; namespace OpenCvSharp.Tests; diff --git a/test/OpenCvSharp.Tests/DoubleEqualityComparer.cs b/test/OpenCvSharp.Tests/DoubleEqualityComparer.cs index cc952a208..7d76229d2 100644 --- a/test/OpenCvSharp.Tests/DoubleEqualityComparer.cs +++ b/test/OpenCvSharp.Tests/DoubleEqualityComparer.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; - -namespace OpenCvSharp.Tests; +namespace OpenCvSharp.Tests; public class DoubleEqualityComparer : IEqualityComparer { diff --git a/test/OpenCvSharp.Tests/FileDownloader.cs b/test/OpenCvSharp.Tests/FileDownloader.cs index 65281aac6..a5130904b 100644 --- a/test/OpenCvSharp.Tests/FileDownloader.cs +++ b/test/OpenCvSharp.Tests/FileDownloader.cs @@ -1,6 +1,4 @@ -using System; -using System.IO; -#if NET48 +#if NET48 using System.Net; #else using System.Net.Http; diff --git a/test/OpenCvSharp.Tests/OpenCvSharp.Tests.csproj b/test/OpenCvSharp.Tests/OpenCvSharp.Tests.csproj index 0f2c9f2dc..269f16bc7 100644 --- a/test/OpenCvSharp.Tests/OpenCvSharp.Tests.csproj +++ b/test/OpenCvSharp.Tests/OpenCvSharp.Tests.csproj @@ -1,7 +1,7 @@  - net6.0;net48 + net8.0;net48 true OpenCvSharp.Tests Library @@ -10,8 +10,9 @@ false false false - 10 + 12 enable + enable @@ -36,11 +37,12 @@ - - - - - + + + + + + all runtime; build; native; contentfiles; analyzers diff --git a/test/OpenCvSharp.Tests/PlatformSpecificFactAttribute.cs b/test/OpenCvSharp.Tests/PlatformSpecificFactAttribute.cs index bdac71f09..5f8d2ac05 100644 --- a/test/OpenCvSharp.Tests/PlatformSpecificFactAttribute.cs +++ b/test/OpenCvSharp.Tests/PlatformSpecificFactAttribute.cs @@ -1,6 +1,4 @@ -using System; -using System.Linq; -using System.Reflection; +using System.Reflection; using System.Runtime.InteropServices; using Xunit; @@ -73,7 +71,7 @@ internal static class OSPlatformExtensions public static OSPlatform FromString(string platformName) { var properties = typeof(OSPlatform).GetProperties(BindingFlags.Public | BindingFlags.Static); - var property = properties.FirstOrDefault(p => p.Name == platformName); + var property = properties.FirstOrDefault(p => p.Name.Equals(platformName, StringComparison.OrdinalIgnoreCase)); var value = (OSPlatform)(property?.GetValue(null) ?? throw new InvalidOperationException()); return value; } diff --git a/test/OpenCvSharp.Tests/TestBase.cs b/test/OpenCvSharp.Tests/TestBase.cs index 77fb5589e..3c9a8e7fd 100644 --- a/test/OpenCvSharp.Tests/TestBase.cs +++ b/test/OpenCvSharp.Tests/TestBase.cs @@ -1,11 +1,5 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.IO; +using System.Diagnostics; using System.Net; -using System.Net.Http; -using System.Threading; -using System.Threading.Tasks; using Xunit; [assembly: CollectionBehavior(/*MaxParallelThreads = 2, */DisableTestParallelization = true)] @@ -17,38 +11,22 @@ namespace OpenCvSharp.Tests; public abstract class TestBase { - private static readonly HttpClient httpClient; - static TestBase() { - ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => true; - #pragma warning disable CA5364 #pragma warning disable CA5386 + ServicePointManager.ServerCertificateValidationCallback = (_, _, _, _) => true; ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12; #pragma warning restore CA5364 #pragma warning restore CA5386 - -#pragma warning disable CA2000 - var handler = new HttpClientHandler - { - ServerCertificateCustomValidationCallback = delegate { return true; } - }; -#pragma warning restore CA2000 - httpClient = new HttpClient(handler) - { - Timeout = TimeSpan.FromMinutes(5) - }; } - protected static Mat Image(string fileName, ImreadModes modes = ImreadModes.Color) - { - return new Mat(Path.Combine("_data", "image", fileName), modes); - } + protected static Mat LoadImage(string fileName, ImreadModes modes = ImreadModes.Color) + => new(Path.Combine("_data", "image", fileName), modes); protected static void ImageEquals(Mat img1, Mat img2) { - if (img1 == null && img2 == null) + if (img1 is null && img2 is null) return; Assert.NotNull(img1); Assert.NotNull(img2); diff --git a/test/OpenCvSharp.Tests/_data/aruco/Dict6X6_1000.yaml b/test/OpenCvSharp.Tests/_data/aruco/Dict6X6_1000.yaml new file mode 100644 index 000000000..fcaf89492 --- /dev/null +++ b/test/OpenCvSharp.Tests/_data/aruco/Dict6X6_1000.yaml @@ -0,0 +1,1005 @@ +%YAML:1.0 +--- +nmarkers: 1000 +markersize: 6 +maxCorrectionBits: 4 +marker_0: "000111100011110111011000001010100110" +marker_1: "000011101111101110100011100010010001" +marker_2: "000101011001000001111110101011001101" +marker_3: "110010010001101100110000011010011110" +marker_4: "110101100000011111010110111000010101" +marker_5: "110110001110100011100000111001101000" +marker_6: "010000100110100010110100000111110101" +marker_7: "100010001010010100001111001010011010" +marker_8: "001100000111110101010010010011111101" +marker_9: "001111000010111100110100101100111100" +marker_10: "010001011101111111000111010011100011" +marker_11: "010010001101100001011011001001010111" +marker_12: "011100010000010101011000111111000110" +marker_13: "100001101101110011111010110100000111" +marker_14: "100011010111001010101001001111110110" +marker_15: "101000101011100010011101110011011110" +marker_16: "000010011111110100011110100111000100" +marker_17: "000101010100110110111101000110001111" +marker_18: "001100000000101000110001000011100010" +marker_19: "010010000000011111101111101011111101" +marker_20: "010101101101111100010001110110110110" +marker_21: "011001101000100000110010011101001100" +marker_22: "011101101110100011001011011110000001" +marker_23: "100110100101001111011001110011110011" +marker_24: "101010011100101110000100000000100100" +marker_25: "110001100111010101001001010010010000" +marker_26: "110000011101001010001000100101000001" +marker_27: "111001110100100000001000010100101011" +marker_28: "111010100010111111001010100001001000" +marker_29: "111010010110001110110111011110110001" +marker_30: "111110100011011001100101001010101111" +marker_31: "000001100101101111111111011110111101" +marker_32: "000001010100000111010111001011010110" +marker_33: "000011001111011100100100011010100010" +marker_34: "000100110011100010100011100111101011" +marker_35: "000101011010100010010011111001110100" +marker_36: "001110100100000101111110111010011110" +marker_37: "010011110001000111100010011011000000" +marker_38: "010100110000110110110110110100100000" +marker_39: "010110001001101111111010111000110100" +marker_40: "011001000000100111101000101000001011" +marker_41: "011000000101001101111010100010010001" +marker_42: "011000010101100100000110100110111010" +marker_43: "011010111111111101111000110101111011" +marker_44: "011100001010110110010110101001001111" +marker_45: "011101011000010001101111011100011010" +marker_46: "011110101001010100011001001011111100" +marker_47: "100001100000100101110110000010101010" +marker_48: "100010100010110101000100110000111111" +marker_49: "100100111110101101111000101100010100" +marker_50: "100110001000110110101000010011010100" +marker_51: "100111101101111000101011001111001000" +marker_52: "101001010010100111100000011110111000" +marker_53: "101101011001001110111000010101011111" +marker_54: "101101111111100011100100001001101111" +marker_55: "101111000010000001010010001001011110" +marker_56: "110000000100010010000111011101100101" +marker_57: "110001001100001100100100001001011001" +marker_58: "110001011010100100011011110110001101" +marker_59: "110011100111001111100110101100101100" +marker_60: "110011010000110010100110001001110010" +marker_61: "110010010100001101011101010001001101" +marker_62: "110011111011111010000000111100110100" +marker_63: "111001010111110100010101100001110111" +marker_64: "111011111100011010000101100011101001" +marker_65: "111101110111111011110011011101110010" +marker_66: "001011001110010000111111001001010100" +marker_67: "001010111101110011111111010010110011" +marker_68: "001101111100011111011101101111011010" +marker_69: "101000011010001001010100111000001111" +marker_70: "101010011000001011000001101110110101" +marker_71: "110110000001101101001001101100001000" +marker_72: "000000110101100000101001111110000110" +marker_73: "000001111100010000001001010111111100" +marker_74: "000011111110001001100110000101111011" +marker_75: "000101000100100000110110010001000001" +marker_76: "000100001010110101011111111110110111" +marker_77: "000100101000001010010101010100111111" +marker_78: "000101101110000100110001100001001100" +marker_79: "000110000111101001001001011010110000" +marker_80: "000110101110100010000110000100010010" +marker_81: "000110010001001110101110000010100001" +marker_82: "000110110110011110110101101000010111" +marker_83: "001001011101110010010101111100001011" +marker_84: "001010001000100101100001111101110110" +marker_85: "001100110101010000010100011010101010" +marker_86: "001100011100000101101100000111110111" +marker_87: "001100111100101100011000110001100110" +marker_88: "001111101100111111100100100100001111" +marker_89: "010001100100010100011000101000111111" +marker_90: "010001001011101001110000101101100111" +marker_91: "010000011001110001100010001111101000" +marker_92: "010010001101000110010001010010100001" +marker_93: "010101001111010010011001111101101101" +marker_94: "010101110101101010011100100000010011" +marker_95: "010101011000001101010101101100101100" +marker_96: "010101111011011101110110000100001111" +marker_97: "010111000011010000110110111111100100" +marker_98: "010111000100100011111100011101111110" +marker_99: "010111100110111011101111010000000010" +marker_100: "010111110010001100111011011011111111" +marker_101: "010110110111010000101010011000110010" +marker_102: "011001010000111110100011001110101110" +marker_103: "011001011101001100010111010111001100" +marker_104: "011010101001110000100100010110101110" +marker_105: "011010011100010111110011000001000010" +marker_106: "011010011101001001001000010011101010" +marker_107: "011101000111100111100010110111100110" +marker_108: "011100101100111100100011111010101011" +marker_109: "011101111011000111011100010000010100" +marker_110: "011111100000110000000111001000010111" +marker_111: "011110100110100101110000011001000111" +marker_112: "011110001011001011011000011100000111" +marker_113: "011110011100010110000101011110010100" +marker_114: "100001100110111101011001111111000110" +marker_115: "100000101111011001110010011111110101" +marker_116: "100001010100111000101111010000010100" +marker_117: "100110100001000110000101100100110100" +marker_118: "100111000111000101100000110010010111" +marker_119: "100111011101000110010100111111011000" +marker_120: "101000100001111000010010111000111000" +marker_121: "101011100111000000011100100000101100" +marker_122: "101011010000000100100001100111000001" +marker_123: "101100000011010100011111100111101110" +marker_124: "101101100100101011011000000011010100" +marker_125: "101101010011011100110001010010110100" +marker_126: "101111101010101011000111111000111011" +marker_127: "101110110110100000111101101111001111" +marker_128: "110001100111001011110111001011000001" +marker_129: "110000011110011101001101101110101011" +marker_130: "110010110101010111101110010110011101" +marker_131: "110010111010000001010011011100100100" +marker_132: "110100000000100100001111110011110001" +marker_133: "110100000110110000111010110101010100" +marker_134: "110100111111000100100000010101110100" +marker_135: "111001101110001100111011000110100111" +marker_136: "111000110101001100111110101001001010" +marker_137: "111010000000011010001110101100010100" +marker_138: "111011000000011111000000010110010111" +marker_139: "111010101111001110000000001111011010" +marker_140: "111101100011101100100111110110001000" +marker_141: "111100110000011110011000001101111001" +marker_142: "111111100100101110111010100110111001" +marker_143: "101010111010010101111101100001101011" +marker_144: "110000001101000101100010010110101011" +marker_145: "000100111100111001111011101011100111" +marker_146: "010011101000000111111101011000010111" +marker_147: "010101101110000001110110001100100000" +marker_148: "011010100111000010001010010101000000" +marker_149: "011100101010100010011000101000011000" +marker_150: "100000010101110101000010111110000000" +marker_151: "110011110100110011000011110101011111" +marker_152: "110101101011101101100101100001100100" +marker_153: "111011001101001100010011101000110001" +marker_154: "111101010010000111110101001000000111" +marker_155: "111110010001111110100101110111110111" +marker_156: "000000000010010011110100011110100111" +marker_157: "000000000000100001001101100010000010" +marker_158: "000001000011110011000010111100101001" +marker_159: "000001000111101101010000001000010001" +marker_160: "000001100111101011100100110000011101" +marker_161: "000000001010101010010110100010100011" +marker_162: "000001001101000100111000111010010100" +marker_163: "000001010001000010101000000011011010" +marker_164: "000000010100000010110000000000000111" +marker_165: "000000011001110110011100111011100001" +marker_166: "000010000001000001010111111000111011" +marker_167: "000010000110101110010111101101100110" +marker_168: "000011101110100010111000011000001010" +marker_169: "000010110110110001110110101110011011" +marker_170: "000011111101110010111001100011001011" +marker_171: "000011111100101011001111001110100000" +marker_172: "000101000010010010011111110110011000" +marker_173: "000101000000011100100000000111111101" +marker_174: "000101010000100100010000110101010111" +marker_175: "000100110101110011010111001100000111" +marker_176: "000100010100011110011010101110110110" +marker_177: "000111001011100110101001001000111000" +marker_178: "000111001101110100000111011101100110" +marker_179: "000111110010111001111100001001001011" +marker_180: "000110010110011001000010010001110111" +marker_181: "000110010101011111010100110010000100" +marker_182: "000111111010100011110100111100000100" +marker_183: "000110111000001001000110111011011000" +marker_184: "000110111010111011100001000011111110" +marker_185: "001000101010010010110110001111001010" +marker_186: "001000101011111110010000000100101111" +marker_187: "001000110010110000010101101101000000" +marker_188: "001001010101101010101001011001101100" +marker_189: "001001111010010110101111101010010111" +marker_190: "001001011111010000001110010000100101" +marker_191: "001010000110011001010101110011011110" +marker_192: "001011000100001001111110000011100000" +marker_193: "001010101011100101111100101111010000" +marker_194: "001010010100011011100001110100100011" +marker_195: "001011011010011000101000010000010000" +marker_196: "001010111111101100100000100110100110" +marker_197: "001101101000110011010110011010111100" +marker_198: "001101001000011101110111011111000111" +marker_199: "001101001101110111101011100001000000" +marker_200: "001101111001000111110111011011110001" +marker_201: "001110100010001010001110000101110101" +marker_202: "001111100001001110111101010000001000" +marker_203: "001111001001100001000011110010100010" +marker_204: "001110010101100010011101000101111001" +marker_205: "001110010111010011011010111011101011" +marker_206: "001111110110110110111100011100110001" +marker_207: "001111010110101111000000010100001100" +marker_208: "001110011010101100100111010010010111" +marker_209: "010001100000001001001110001001011110" +marker_210: "010001101000001010111010000010111100" +marker_211: "010000101110100111001101010110101110" +marker_212: "010001001100100110110111101100111111" +marker_213: "010000001100011111010100000111101001" +marker_214: "010001101101001010110100110011001110" +marker_215: "010000110001100101010011010101101011" +marker_216: "010000010010001011100110110111011001" +marker_217: "010001110101001110100101100110101011" +marker_218: "010011100001111011110001111000001000" +marker_219: "010011100100101011000000100101100000" +marker_220: "010011100101111110101010000001101111" +marker_221: "010010101000110100110010100101000011" +marker_222: "010010010001010110010100101100111001" +marker_223: "010011010100110111011011011000100001" +marker_224: "010010111010011101100001111010000001" +marker_225: "010010011101010010000011110110001110" +marker_226: "010101100010100100001110111101101100" +marker_227: "010100110111111011010101111111111100" +marker_228: "010101011111010110100111101011111010" +marker_229: "010101011101010111101010011001001111" +marker_230: "010110000001101110101011000111011010" +marker_231: "010111101011111010010010011011011101" +marker_232: "010111110001000011111001100110110101" +marker_233: "010111010001111011011111101001011100" +marker_234: "010111110111000110001101111100000010" +marker_235: "010111011110000100011110010001101000" +marker_236: "011000000011001110111011001001000111" +marker_237: "011001000101100000011010111111100001" +marker_238: "011000111100100011011101101001110110" +marker_239: "011000011101101000111101100011111101" +marker_240: "011011100011101000100010101011111010" +marker_241: "011011100110000100000101101101110001" +marker_242: "011010101000100110101001111010001100" +marker_243: "011010101001011100100010010011110101" +marker_244: "011010110001001011000011100000000001" +marker_245: "011010110110100001001011001000101010" +marker_246: "011011111001010011000001010101111001" +marker_247: "011011011010011011111110101000001101" +marker_248: "011011111110101011001010010001010111" +marker_249: "011100000011110100111000101001100000" +marker_250: "011101100110110000110101111001111000" +marker_251: "011100000100101000001101111111110110" +marker_252: "011101010111100010101001110010000000" +marker_253: "011100010100101001110000000100111000" +marker_254: "011101010111111110001100101110111001" +marker_255: "011111000010001101101000001100110001" +marker_256: "011111001011010110100111110100110001" +marker_257: "011111001111100000101100111011011110" +marker_258: "011111110010010011100010001101001111" +marker_259: "011111110100011100101001100011011000" +marker_260: "100001101101100000000011110100011001" +marker_261: "100000111000101100011011101000010011" +marker_262: "100001111010001001111001110001011001" +marker_263: "100010100100001101100100100011001110" +marker_264: "100010001001001100111011010011001000" +marker_265: "100011110010000111011111010011100011" +marker_266: "100011011000010000110101011100101001" +marker_267: "100011011000100011010111000111111101" +marker_268: "100010011001111101111000111111001101" +marker_269: "100100100110101100010110011110011100" +marker_270: "100101001000111000100010111100010010" +marker_271: "100100001110010111100110001100010111" +marker_272: "100101101101100010000101001010100001" +marker_273: "100101010011100100111011101001000110" +marker_274: "100101010011110011111011010011011101" +marker_275: "100100010011111010101010000100100110" +marker_276: "100101110110111101011010101011111001" +marker_277: "100100011011001000101001111111011010" +marker_278: "100100011101001111111010011101100001" +marker_279: "100110100111000010000110110010001000" +marker_280: "100110001000111011001101000000110001" +marker_281: "100110001100011100010000100101111010" +marker_282: "100111011100101111101011010001100110" +marker_283: "101001000010100011110101101101101110" +marker_284: "101000110011011111110001011110010011" +marker_285: "101000110100010001000000111101011010" +marker_286: "101000010111111110101101100001011000" +marker_287: "101001111101001010010110001000111101" +marker_288: "101010000100010101110000001010111011" +marker_289: "101011100100100001111111101000001001" +marker_290: "101011000100111110110110110101101000" +marker_291: "101010001010100011010011100001010011" +marker_292: "101010011000101100001010110010111000" +marker_293: "101011011111111010001100110111100010" +marker_294: "101101001110111100101110001011101110" +marker_295: "101101111001100110001001110001110000" +marker_296: "101111100000110010100010000011101100" +marker_297: "101111000111000000100010011110101001" +marker_298: "101111101011110000101111100100011010" +marker_299: "101110001110100100001010100110000011" +marker_300: "101111010000101000110000111011001000" +marker_301: "110000100000001011100000111100110001" +marker_302: "110000100110101100110010111000110111" +marker_303: "110001101100101001000010011010101000" +marker_304: "110001110001111011101110011010001110" +marker_305: "110001110111110100101110100100010011" +marker_306: "110011100011110000100000011101000010" +marker_307: "110011000100101010111001110001010111" +marker_308: "110011101111011101100011110111001101" +marker_309: "110011010100001100100010110010100010" +marker_310: "110011111011011111001100000111010000" +marker_311: "110010011100111011001000001101011010" +marker_312: "110011111111001101001011011100010011" +marker_313: "110101100010111001111011011100001101" +marker_314: "110101000001011101001011001110110100" +marker_315: "110101111000110111111010100101111110" +marker_316: "110100011101100011110101010101010001" +marker_317: "110101011100111111100001110100111001" +marker_318: "110110100001011010101000110011001001" +marker_319: "110110000100110001000100100001011001" +marker_320: "110111001101100101110010100011101101" +marker_321: "110111110110011100010001011111101000" +marker_322: "110110111001100101111101111001100111" +marker_323: "110111011010101110001110001100011110" +marker_324: "111000000001100100001000010011001101" +marker_325: "111001100011011011011010010100100001" +marker_326: "111000101010110011000111100110110000" +marker_327: "111001001000110100100001011000100000" +marker_328: "111000101111111011010000110001010001" +marker_329: "111000010011101001111101000000101010" +marker_330: "111001111101000001011011100011100101" +marker_331: "111011000011000010011100011010110101" +marker_332: "111011001010101001001001110100100000" +marker_333: "111011101011001101111010110001000110" +marker_334: "111010001110000001100111001011100010" +marker_335: "111010101110010111010101001001001100" +marker_336: "111011010110101100011100001011000010" +marker_337: "111010111100100010101111000111010110" +marker_338: "111100100000010101100010110101000101" +marker_339: "111101100001100110111100111110110010" +marker_340: "111101101010001101011100011011011011" +marker_341: "111101001111000110111101000011110000" +marker_342: "111100010110101010011011010000110101" +marker_343: "111100011011001010010001001010011110" +marker_344: "111110100101010001011011111100110101" +marker_345: "111111100110111010000110011111000110" +marker_346: "111110010000110110111001010000110010" +marker_347: "111110010110100101100110001010111101" +marker_348: "111110110100000111001011010010000100" +marker_349: "111111010101011110111111100110000101" +marker_350: "111110111001100010010000011111100110" +marker_351: "111111111110101000100001110001100011" +marker_352: "101000111010010101101111010001010000" +marker_353: "101000011001100001101000001100000010" +marker_354: "000011110011011110000011001010110000" +marker_355: "001001101110110001001000001001110010" +marker_356: "010000011001100010111000101010001111" +marker_357: "010011101011010101000011100010100100" +marker_358: "011000111100010111100011011110111010" +marker_359: "011011100101100111011101111001101100" +marker_360: "100000001101010001011001111100001000" +marker_361: "100110000000100010001000100111111101" +marker_362: "101000110000011001100111101001101111" +marker_363: "000000100001100110100110000101000111" +marker_364: "000000100001010111001010010011100010" +marker_365: "000000000110100011001100001110011001" +marker_366: "000000001010000100010011111111101000" +marker_367: "000000101011100101010110011101010101" +marker_368: "000000101100011010111011010100110010" +marker_369: "000000101111001100011111000111011001" +marker_370: "000001110010101011000001011111100011" +marker_371: "000001110011011110001101100101110010" +marker_372: "000000010110111100011111111001110101" +marker_373: "000000010111011100110000000101010101" +marker_374: "000001111001010101110010010000011010" +marker_375: "000001111100100010100011100001101110" +marker_376: "000001011111111011111011111101111001" +marker_377: "000011000001010111110011000100000001" +marker_378: "000010100100010001100010111000101110" +marker_379: "000010000101111000110111111011101001" +marker_380: "000010000101001011011110000100101101" +marker_381: "000011000110011010001000000000111001" +marker_382: "000010001000110010111010010001111111" +marker_383: "000011001010110000100111000111100101" +marker_384: "000010001011001100111000000010111111" +marker_385: "000011001010001010100101110110010100" +marker_386: "000010001110001101010010110000000001" +marker_387: "000011101111111101000100111101011110" +marker_388: "000011101111111101011101111010101011" +marker_389: "000010110011010001101101110010011110" +marker_390: "000011010000100111111110101110110011" +marker_391: "000011110001000010101010100100100110" +marker_392: "000011010001111101100101101001111110" +marker_393: "000011111011000101011111101000000000" +marker_394: "000011011010001000000101001000110011" +marker_395: "000011011010111100100011110110111011" +marker_396: "000010111111000010100101111011100100" +marker_397: "000011011100100010011001111110111110" +marker_398: "000011111111110100110000001001110111" +marker_399: "000010111100011101011101010101100010" +marker_400: "000100100010111110100011000000011101" +marker_401: "000100100111010101001000011100100101" +marker_402: "000100000100111110101110011000100111" +marker_403: "000100001000110010001010111010001011" +marker_404: "000100001111001111110100001011101110" +marker_405: "000100110011011111101110011100000010" +marker_406: "000101110000101100100011111010110000" +marker_407: "000101010000001001101111000110111011" +marker_408: "000100011010000110101011110010110010" +marker_409: "000100111010011001001010110010001101" +marker_410: "000101111000111000110101110011010011" +marker_411: "000101011000101111100101100111011100" +marker_412: "000101111010011011111001011111010100" +marker_413: "000101011101110010100100101101000100" +marker_414: "000100011101111100000101010000111100" +marker_415: "000101011101001000000001100100110101" +marker_416: "000110000001111110101101111110101010" +marker_417: "000111000100000000001110101010111101" +marker_418: "000111100100110001011101001111010010" +marker_419: "000110000110111111110110011111111001" +marker_420: "000110000101011100110100101110001111" +marker_421: "000111100101011010001001111000110100" +marker_422: "000110101001010111010001100001000101" +marker_423: "000110001010011111111111000000101010" +marker_424: "000110001001111010110001110010011110" +marker_425: "000111001011001000001010011000001010" +marker_426: "000111001001001000110101100010000001" +marker_427: "000111001001001110110111110101101101" +marker_428: "000110101100101010111100010110000001" +marker_429: "000111001110001010101100101101011000" +marker_430: "000110110111100111101101000001100100" +marker_431: "000111110110101000111001000100110010" +marker_432: "000111011001100000111000011101010000" +marker_433: "001000000000110111000001000000111111" +marker_434: "001001100011010111010100111010000000" +marker_435: "001001100111010100101100001011111000" +marker_436: "001000000101001110000101100011110110" +marker_437: "001000101000100000011111011110100011" +marker_438: "001001110010110011111010111001010101" +marker_439: "001000010110101101001100010000111011" +marker_440: "001001011011110001100111000010111010" +marker_441: "001000011010001111101001101100001110" +marker_442: "001000011001011011110010100100011111" +marker_443: "001001111010001000101011100011001010" +marker_444: "001001111001111101001000001100101000" +marker_445: "001000111110001010111100110010010111" +marker_446: "001000011100001001010111111101000001" +marker_447: "001001111100111110111010111110001011" +marker_448: "001010100010111110111101111001001011" +marker_449: "001010100101010000111010100011001100" +marker_450: "001010101101000110111011100101111111" +marker_451: "001010001111111100111010011000110001" +marker_452: "001010110101010011000101101110011000" +marker_453: "001011010110000110101111000110101010" +marker_454: "001010111011110011011011001111100110" +marker_455: "001011011001111110011010000011010010" +marker_456: "001011111011101101110010011010100011" +marker_457: "001010111101100111001100111111110111" +marker_458: "001010011100011011011111100011101100" +marker_459: "001101000000110000111111110000110101" +marker_460: "001100000000001100011011001010001110" +marker_461: "001100000111000100011101111011000011" +marker_462: "001101000100110011011110101000101010" +marker_463: "001100100111101010001010100010111100" +marker_464: "001101100101011101100011110101110010" +marker_465: "001101001000110100110010101010100110" +marker_466: "001101101000000111111010101100010001" +marker_467: "001101101001100101101111000101011101" +marker_468: "001100101100110001101100001100011110" +marker_469: "001101101110000000000111010011010100" +marker_470: "001100110100000010001101100111000101" +marker_471: "001100110111110110101110101101101010" +marker_472: "001100010101111011111111001111010001" +marker_473: "001101011010010011111001001010001011" +marker_474: "001100111000011010100001110001100100" +marker_475: "001101011110100000011010100111101100" +marker_476: "001101111101100001011000101110100011" +marker_477: "001110000001010100110011010110011100" +marker_478: "001110000001101101100010011010101100" +marker_479: "001110100011011001010000110110111010" +marker_480: "001110001000100011010001111100101001" +marker_481: "001110101100110010001101110010000010" +marker_482: "001111001111110011111001000001111011" +marker_483: "001111001111011010001001001110011100" +marker_484: "001110110000111110101110110001111001" +marker_485: "001111010000101101011111111101010110" +marker_486: "001110010100100110000011101010100110" +marker_487: "001111010101110010101111111001010110" +marker_488: "001110110110111111010001111111100010" +marker_489: "001111010111001011100101110011100111" +marker_490: "001110111010010100011000001100000100" +marker_491: "001110111101011111010111011101001110" +marker_492: "010000100001010100000111100001100001" +marker_493: "010001000010101000110011110011000101" +marker_494: "010000000110100100111110001000001100" +marker_495: "010001000100110001010100111100011100" +marker_496: "010000000100111011001111000001010101" +marker_497: "010000001101111101001010110001000110" +marker_498: "010001101101101001100111000110101110" +marker_499: "010000110010000011101111101100101101" +marker_500: "010000010110001101111001111100100111" +marker_501: "010001110111111110101001001011001010" +marker_502: "010000111010100000100100011100111010" +marker_503: "010001011010111000000010101001100001" +marker_504: "010010000001110101111101011010110110" +marker_505: "010010000100010000101001000011100100" +marker_506: "010011000101110110110000111100100110" +marker_507: "010010000100111110100110010011000000" +marker_508: "010010001000000111110010001011011011" +marker_509: "010010001000110001101001100110101011" +marker_510: "010011001110011000100111110001010010" +marker_511: "010011110011110110100011110011010111" +marker_512: "010010010100100111111101101110001000" +marker_513: "010011010101100101101111000110010111" +marker_514: "010011110100111111010101001001111011" +marker_515: "010010111001010001100100111001001011" +marker_516: "010011011010000001101010101010011110" +marker_517: "010010111001001011010001111110110010" +marker_518: "010011111110110110000000101111101011" +marker_519: "010010011111101001101110101011110011" +marker_520: "010101000010000010101100101001110111" +marker_521: "010101000001100110100100100011101000" +marker_522: "010101100111010011011010000111111000" +marker_523: "010100100100011001000101110101001011" +marker_524: "010100001001100101110000110000000011" +marker_525: "010100101010001011000100011010100101" +marker_526: "010100001110100010101010010000100100" +marker_527: "010100101111001010101101010110011000" +marker_528: "010100101101101011101011111101101010" +marker_529: "010101010010111011111000111000100010" +marker_530: "010100010100000101100000101101100010" +marker_531: "010101010110100000000110000101011000" +marker_532: "010100110100101001111110010010111101" +marker_533: "010100110110101111010011111000001011" +marker_534: "010101110111001010000010110100100111" +marker_535: "010101111000000111010101010110000010" +marker_536: "010101111010010011000011010010101000" +marker_537: "010100011001011110101111100101001000" +marker_538: "010101111000111100010111011100111011" +marker_539: "010101011100001011100000110011110000" +marker_540: "010101111111011010100100111001010001" +marker_541: "010111000000010101011110000000100101" +marker_542: "010111100011100011001100010011010000" +marker_543: "010111100110010101100110000111110101" +marker_544: "010110101010010111101011011110110101" +marker_545: "010111101010110101010001111000001101" +marker_546: "010110001011001110000101111111000001" +marker_547: "010110101100010111111000011011100000" +marker_548: "010110001111000101101011011000000000" +marker_549: "010110110011000010110001001000001000" +marker_550: "010111110011010011101111111001111011" +marker_551: "010110010100000001110011011001101001" +marker_552: "010111010110100100010011101011010001" +marker_553: "010110010101001010111001111000111011" +marker_554: "010111010100011011110100101011000010" +marker_555: "010111111000000010011101001011101000" +marker_556: "010111111110000011111011010100001110" +marker_557: "010111111110101111010011110101110000" +marker_558: "011001000110100110000110011100110101" +marker_559: "011000001011110011101000110011011000" +marker_560: "011001001001111011100011000001010110" +marker_561: "011000101101010010100101001001011101" +marker_562: "011000101111011010001111100011100011" +marker_563: "011001010110000001001000001001000111" +marker_564: "011000111011010000001100100100011000" +marker_565: "011000111001111111101001100110011101" +marker_566: "011001011110110111100101100111000111" +marker_567: "011001111110101111100111011100000100" +marker_568: "011010100000000111001000100111010100" +marker_569: "011010000011110111110010000010110000" +marker_570: "011010000001100001100110011111011101" +marker_571: "011011000101010001100001010100001111" +marker_572: "011010000100101100011000111101011101" +marker_573: "011010000100111100010101100000010000" +marker_574: "011011100110111011110100010110010000" +marker_575: "011011101001100010000000001001100101" +marker_576: "011011101001000001100011001100110011" +marker_577: "011011101111000111100100000010100111" +marker_578: "011011001100001100100100111111000000" +marker_579: "011010010000000001010001010110111111" +marker_580: "011010110100000000001110111110101100" +marker_581: "011010110111110010110101010001000111" +marker_582: "011010011010110011110101110010100010" +marker_583: "011010011010011101100110111101111100" +marker_584: "011011011110101100110010100011001011" +marker_585: "011101000001011111111100011011101100" +marker_586: "011100000110000110101010101110010100" +marker_587: "011101000100001100010001010100100001" +marker_588: "011100001011100110111011100010101001" +marker_589: "011101101001010000111110111001010100" +marker_590: "011101101011110001100000000100101001" +marker_591: "011100001001101100000111101001010100" +marker_592: "011101001000101110111111000000010011" +marker_593: "011100101111100001011101010011111011" +marker_594: "011101101101001111011010101001111111" +marker_595: "011101010010010011010000111110011001" +marker_596: "011101010011110010111100001100000110" +marker_597: "011101110000001111001001110101011111" +marker_598: "011100010100010100111011001010100101" +marker_599: "011100110110110000011001110111110001" +marker_600: "011100010100100011101110001011001010" +marker_601: "011100110110111100100010011111000000" +marker_602: "011100111001000101100011101011101110" +marker_603: "011101011000001110011110100011101001" +marker_604: "011101111011111101100100011110110110" +marker_605: "011100111110010110111101000100101010" +marker_606: "011100111100111101101000100000000011" +marker_607: "011100011111011101001010000010100000" +marker_608: "011110000010110111001111001001110110" +marker_609: "011111000000001000111010100111010111" +marker_610: "011110100101110011001110001110100100" +marker_611: "011110100111001000010000000001110111" +marker_612: "011111101011001000100100110100001011" +marker_613: "011110001111110111000101110101010010" +marker_614: "011111101110100001110101100111101001" +marker_615: "011110110001110000101011010001001110" +marker_616: "011111110000010010100000111110100010" +marker_617: "011110110010011101001110111010110011" +marker_618: "011111010010011001111111011110100001" +marker_619: "011111110011001010101001010111101010" +marker_620: "011110011011010010101010101010100111" +marker_621: "011111011011000011010111001001010011" +marker_622: "011111111001001101001111000011000010" +marker_623: "011111011111110000010000010000100010" +marker_624: "011111011101010111011000110100111111" +marker_625: "100000000011100000100000011001111011" +marker_626: "100001000001000110111001110101100011" +marker_627: "100000000000001111111100011001001010" +marker_628: "100000100011101100001111101110111010" +marker_629: "100001100010101010100111011101011010" +marker_630: "100001000001101101011001010010110111" +marker_631: "100000100100010000110001110010001010" +marker_632: "100000100101100111011000011101010011" +marker_633: "100001000100100000011111110111001110" +marker_634: "100000101011010111100101011010110100" +marker_635: "100000001011011100001010101101110000" +marker_636: "100001101011001001010000000110011010" +marker_637: "100000001100110000101111011110111000" +marker_638: "100001101111110110110110011001001000" +marker_639: "100000010111100100111100001111101001" +marker_640: "100001010110000010000100100001011011" +marker_641: "100000110110001000010110100100100101" +marker_642: "100000111000000011100101110111011111" +marker_643: "100001111010000001001100110010110010" +marker_644: "100001111011100010001010101101001101" +marker_645: "100011100000001000000110001110000100" +marker_646: "100011000011011001111101101011000111" +marker_647: "100011000100000111101001001011000010" +marker_648: "100011001001100000111011101011111100" +marker_649: "100010001111010001101011010011111011" +marker_650: "100011110010110011000101110011000100" +marker_651: "100011010011011101111110011100110011" +marker_652: "100010110100010101001111001111110111" +marker_653: "100011010101011000100101100101100000" +marker_654: "100010111011111100011000001110010010" +marker_655: "100011011010011001000011000010010100" +marker_656: "100011011101000011001010101001101000" +marker_657: "100010111111011010011000010011110100" +marker_658: "100100000001001010011001101001010100" +marker_659: "100101100010111000000100100001110101" +marker_660: "100100100101110010100011110101000000" +marker_661: "100100101000010110001111011101111010" +marker_662: "100101001010100100111101010001011010" +marker_663: "100100010010000011110011001100110010" +marker_664: "100100010010011101101101010011110011" +marker_665: "100101110011001111111101111010011010" +marker_666: "100101110100100011110011100000010011" +marker_667: "100101111001111110100000000001101001" +marker_668: "100100111101000000111111110101111100" +marker_669: "100101011111110011010000011011100000" +marker_670: "100100111100001110110010000010110001" +marker_671: "100100011100001101000010000000011110" +marker_672: "100111100000101011010100110100001001" +marker_673: "100111100011111000011000010001101000" +marker_674: "100110100110000101111010110111001001" +marker_675: "100110001100100010000111011001011101" +marker_676: "100110001100000111011111001100001001" +marker_677: "100111101111100100101000111110101100" +marker_678: "100111101111000010101011000101100001" +marker_679: "100110001111101101110101000010011101" +marker_680: "100111110010000000000001001101010100" +marker_681: "100110010001001001111000000001111100" +marker_682: "100110111000001111110101011111101011" +marker_683: "100110011111100111001000101011010101" +marker_684: "100111011110010000101110111011000010" +marker_685: "100110111101101110010000110100100011" +marker_686: "100111111111111010000100100110011111" +marker_687: "101000100100001010001100110101111001" +marker_688: "101001001100110100011001001101010111" +marker_689: "101001101101010110100010000110010000" +marker_690: "101000001101111111000000101100000110" +marker_691: "101000110011000110110100100100000100" +marker_692: "101001110010000010000110001110101111" +marker_693: "101001110011100000101101001010001101" +marker_694: "101000110011111111001100110111001110" +marker_695: "101001010011111010110011100001001011" +marker_696: "101000010111000000011010101111010111" +marker_697: "101001110110011101100101001101111001" +marker_698: "101001010111101101100110101011100100" +marker_699: "101000011101010100011101100100110010" +marker_700: "101000111111100011101001100110111110" +marker_701: "101001011101001110000011110110100011" +marker_702: "101001011101011011101011101111000110" +marker_703: "101010100010011011100011100101111001" +marker_704: "101011100001111011001001001111111100" +marker_705: "101011000111011110111000111011010010" +marker_706: "101010101010100111101110010011011111" +marker_707: "101010101000000001111001101010100110" +marker_708: "101011101100001001100000110010100001" +marker_709: "101010010011101010011000011000101011" +marker_710: "101010110001001001010001110010001100" +marker_711: "101011010110011011011011110110001101" +marker_712: "101011010101001011011101010010100001" +marker_713: "101010011011011001110001000100001000" +marker_714: "101011011011101011100010001101010000" +marker_715: "101011011001011101000001110111111100" +marker_716: "101010111111001110110110001011000111" +marker_717: "101101100010001001101100011100011100" +marker_718: "101101000001111000100101011110100111" +marker_719: "101101100011011111000011100010100011" +marker_720: "101100000100110011010100001101110000" +marker_721: "101100100111111110001011000001010011" +marker_722: "101100001010110111011000001000100101" +marker_723: "101101001001101110000010001010111011" +marker_724: "101100001101001101001110110000100011" +marker_725: "101100010011110101111110110000111110" +marker_726: "101100010000011010100100011000111110" +marker_727: "101100110010101101110100001111111110" +marker_728: "101101110001111111010110010001101111" +marker_729: "101100010110111011110001111101000101" +marker_730: "101100010111111001010011100010101110" +marker_731: "101101110110001011011111001101110111" +marker_732: "101100011010100111111000100101001001" +marker_733: "101100111011011111011001110100100100" +marker_734: "101100111110111010111011010011000110" +marker_735: "101110000010110010100101010100100100" +marker_736: "101110000001010000001101111010111111" +marker_737: "101111000001100111011100110001110111" +marker_738: "101111000101010000100110101110010110" +marker_739: "101111100110011100110111110001000101" +marker_740: "101110001111101011101000110100110101" +marker_741: "101111101100001000011010001101111000" +marker_742: "101110110001100011001111101001001011" +marker_743: "101111010000000101111110111101101101" +marker_744: "101111010010001000101111110100100111" +marker_745: "101111010000001001010101100001010101" +marker_746: "101110010111001001001110011000000101" +marker_747: "101111010111011101011100000101101111" +marker_748: "101110011000100010101100001011100001" +marker_749: "101111111010000000100110011001110101" +marker_750: "101110011000001010010110101010000110" +marker_751: "101111011000011100010111000110001010" +marker_752: "101111111011111011101111001011010111" +marker_753: "101111011111101010011111000000000111" +marker_754: "110000100111000000110101101110111000" +marker_755: "110001000110110000000101101011001101" +marker_756: "110001000111100101010100110111000011" +marker_757: "110000100110101001010001000011011000" +marker_758: "110001101010010010011111011010000100" +marker_759: "110000001001111000101100111010110100" +marker_760: "110001101001001000100001010010011101" +marker_761: "110001001011101010000011110011111000" +marker_762: "110001101110011110000101010000111011" +marker_763: "110001101101011110101111010001100100" +marker_764: "110001010011011001010101010011011011" +marker_765: "110000111001001111111111000011010111" +marker_766: "110000011111010101110000101001011010" +marker_767: "110011000011100101110001110001010000" +marker_768: "110010000000001010001001010010010010" +marker_769: "110010000111110001100100010010100101" +marker_770: "110010100110011111100001000011010111" +marker_771: "110010001001100111100111010000100010" +marker_772: "110010001010101010110010000100000101" +marker_773: "110011001010011011010101100111110011" +marker_774: "110010101110010110000110111110111110" +marker_775: "110010101101100101111100001100011111" +marker_776: "110011101110010011001010000011100110" +marker_777: "110010110010110110100100001100101100" +marker_778: "110010110101011111010110100000100010" +marker_779: "110010011001000000100001101100010000" +marker_780: "110010011000001001011111101100001010" +marker_781: "110010111001111011010100001001000111" +marker_782: "110011011000011010101011100111011101" +marker_783: "110010011100100110110000011101110101" +marker_784: "110010011111101000011111011000110010" +marker_785: "110010111111011101000000000001101001" +marker_786: "110011011101101000001101000111001111" +marker_787: "110100000000101110000010010100111111" +marker_788: "110101000011101111001111110101101111" +marker_789: "110101100110001010101011110100011011" +marker_790: "110101000110011011001000001110101111" +marker_791: "110100010010000000011100011110001010" +marker_792: "110100110011100101000001110000111001" +marker_793: "110100010000011110100000111111010100" +marker_794: "110100011001010100111010000011100010" +marker_795: "110101111011110101000010000111011101" +marker_796: "110101111100000010100110010100001101" +marker_797: "110101111110010110001101111101011100" +marker_798: "110101111100010101010011111101100111" +marker_799: "110101011111111001110000101110001000" +marker_800: "110110000000110010111001101111100110" +marker_801: "110111100011010010111010001001010110" +marker_802: "110111000000111011000110100010111110" +marker_803: "110111100000001111110111101001001011" +marker_804: "110110100101110100001011100010100010" +marker_805: "110110000111000111111001011111111111" +marker_806: "110111001011110110000010111001110010" +marker_807: "110111001011000001011010111001010101" +marker_808: "110110101001001111011110010100000000" +marker_809: "110110101011011111110001101111111000" +marker_810: "110111101001111100000010001100101110" +marker_811: "110110101100010000001101010101010000" +marker_812: "110111001100010110101011100000001110" +marker_813: "110110101100001010110010001110101010" +marker_814: "110110101101101001011000111111010000" +marker_815: "110110010010010110001110101010000001" +marker_816: "110111010000010101110110001110111110" +marker_817: "110111010010111010011001000010001100" +marker_818: "110110010101010101101000110001110101" +marker_819: "110110110101000001101101010011000011" +marker_820: "110111110110100010101010001110001000" +marker_821: "110110110100001010000111101001110101" +marker_822: "110110111000000100101000101100111101" +marker_823: "110110011010001111000010111110101101" +marker_824: "110111011011001100111000110100111000" +marker_825: "110110011100101001111011100110110001" +marker_826: "110110111111011010011110101100000111" +marker_827: "111000100000100001101100101011111000" +marker_828: "111000000001101110101011100101100100" +marker_829: "111000000100100001110011111100110000" +marker_830: "111001000111010110101001010110111110" +marker_831: "111001101000000011101100011101001001" +marker_832: "111000101010111101110110010010000111" +marker_833: "111000001010001011001000000100011101" +marker_834: "111000101100101101110001010100001100" +marker_835: "111000001101001001001001110001011111" +marker_836: "111000010000110011000010100000101001" +marker_837: "111000010111111101000100001101000011" +marker_838: "111001111010110101000101101100011110" +marker_839: "111000011011011001011010100111111001" +marker_840: "111001111111110000100000010000011100" +marker_841: "111011100011001101000001001110000001" +marker_842: "111011100111110000110110001100110100" +marker_843: "111011000111000001111011111110001010" +marker_844: "111010000111101100111011111001101110" +marker_845: "111010001001010111101000001110010001" +marker_846: "111011101010110000001001011111010101" +marker_847: "111011001010000111001001001101110100" +marker_848: "111010001001011110111101110001010101" +marker_849: "111010001100110000010010000111010000" +marker_850: "111011101100000100011101011010011000" +marker_851: "111011010000011111111111110110111010" +marker_852: "111011010110100111110011001101101011" +marker_853: "111011010111011000010100101101011100" +marker_854: "111011111000010000100001110100010111" +marker_855: "111010111111010111011010011110000010" +marker_856: "111010011111100111100101110101101101" +marker_857: "111010111101001100001111100100011001" +marker_858: "111010011101101111110001001000001001" +marker_859: "111101000010100110001011011011011000" +marker_860: "111101100000101000110100001000100101" +marker_861: "111101000101100001010101100110110001" +marker_862: "111100100111011000110111011000010011" +marker_863: "111101000100101100001010111000000110" +marker_864: "111101100110111010000001010010111100" +marker_865: "111101100100001100011101010011000110" +marker_866: "111101000101011100100010111011100001" +marker_867: "111101001001100101010011111001011011" +marker_868: "111100001111110000101111000110110101" +marker_869: "111101110000100100011110000010011100" +marker_870: "111101110010011001010111110000100000" +marker_871: "111100011000010100011011110001101101" +marker_872: "111100111000100001100010111010000001" +marker_873: "111101111010100110110111111010100110" +marker_874: "111101111000101010001010010111000010" +marker_875: "111100111110110111000010000101010010" +marker_876: "111101011111010110010100111100100100" +marker_877: "111110000000111100111110000011110100" +marker_878: "111111001011111001100011011111011110" +marker_879: "111110001110110100100001010010011011" +marker_880: "111110101101100011000010100000001110" +marker_881: "111111101110010100000101100111000110" +marker_882: "111111101100010011111101000110111000" +marker_883: "111110101101001011100001000111110100" +marker_884: "111111001100001111100110011100110010" +marker_885: "111110010011111110100010011011101011" +marker_886: "111110110101011011000010010111100011" +marker_887: "111111110100111010001100101000101111" +marker_888: "111111110100111101110000111000100100" +marker_889: "111110011011000100101010001101001001" +marker_890: "111111111000011110010010011110000001" +marker_891: "111110011100001110111100000010011010" +marker_892: "111111111100101000011001110100011100" +marker_893: "111111111110111100010111101001011010" +marker_894: "111111011111111011011010100011000001" +marker_895: "000001100100001011101001000010010111" +marker_896: "000000110010010000100100010001101101" +marker_897: "000001110101111001011100100001111100" +marker_898: "000001111000100001000010111110100110" +marker_899: "000010100000011110110010000110111011" +marker_900: "000100001001010011011100111100011110" +marker_901: "000101101010001001011010101100001111" +marker_902: "000100001111110111001011011011011110" +marker_903: "000100010011010010101100101000101100" +marker_904: "000100011010011000111110000100000001" +marker_905: "000111100101100000101100111000100010" +marker_906: "000110000110001100111010100010110000" +marker_907: "000110100110001100000001001011111101" +marker_908: "000110101111000101000111110011101111" +marker_909: "000110010110110010110001100010110001" +marker_910: "000111011001010111001111010111001100" +marker_911: "000110011001111000111000100100100010" +marker_912: "000111111111110001010110001000111010" +marker_913: "001001000001101100101001101100110011" +marker_914: "001001101110011110001000100001010000" +marker_915: "001000010000011100110110101111000001" +marker_916: "001010000100110101000110010101101010" +marker_917: "001011101110110011100011010001011000" +marker_918: "001011010100111111100001010011010100" +marker_919: "001011011000101000101000001111000111" +marker_920: "001101001111100000111110001101110001" +marker_921: "001110000110001101011101011111011000" +marker_922: "001111111010001000011100110001001100" +marker_923: "010000101101110110010111101011101110" +marker_924: "010001001101111100010010110101101011" +marker_925: "010000010011101011001101111011001000" +marker_926: "010000011100000011011011010010010100" +marker_927: "010011001011010000000000110010001101" +marker_928: "010010010010001101001000100101010010" +marker_929: "010100100011011110111001010111000110" +marker_930: "010100100101000100111000110111011010" +marker_931: "010111100111000110010010010000010011" +marker_932: "010111001011001001110001111010111101" +marker_933: "010110111110111000110111001101100110" +marker_934: "011000000000010110000100000101010010" +marker_935: "011001000000100010000000001100111000" +marker_936: "011011100010100010000111100011000011" +marker_937: "011011000101010101010100101101010111" +marker_938: "011010001011101011111110010001100001" +marker_939: "011010001011001101010101110010100111" +marker_940: "011101011001110010011011011001101001" +marker_941: "011111000000101111001000000010100000" +marker_942: "011111100101100101101000110001001001" +marker_943: "011110000110111100111101001101000101" +marker_944: "011110001100000110111111111111111010" +marker_945: "011110101101101010111001010001011010" +marker_946: "100000000011110001111011100111000000" +marker_947: "100001110001010001011000111110010111" +marker_948: "100000110001101100000101101001011101" +marker_949: "100010000011101110110100011001110100" +marker_950: "100011001010100110001000100111000000" +marker_951: "100011101011000100000011000110101011" +marker_952: "100011110010011110111111001101100100" +marker_953: "100011110001011010110011110010100000" +marker_954: "100101000001100011011110010010100000" +marker_955: "100100110100010100100100110001010000" +marker_956: "100111001111110110011100110110000101" +marker_957: "100110110010001000110111011110001101" +marker_958: "100110011111101010100011110100010110" +marker_959: "101000101001111100011100010101000011" +marker_960: "101011000100111101011011000110101011" +marker_961: "101011001011111101101101001101100110" +marker_962: "101010011011100101001100010000001000" +marker_963: "101101100010100011101001000000101100" +marker_964: "101101000110110111011010110111100000" +marker_965: "101100100110111011110110000010100001" +marker_966: "101100110010010110011001011010011110" +marker_967: "101100110101000000101000000100010101" +marker_968: "101111100001110000011011001110110110" +marker_969: "101111000111111101010101011000111110" +marker_970: "101111001010111111100110100011010101" +marker_971: "101111010010010110010010100011000100" +marker_972: "110001000001101111010110101101110001" +marker_973: "110001100110001110111110111111001110" +marker_974: "110001100101011010000010000100111101" +marker_975: "110001101000101101001001001001001010" +marker_976: "110000010011110111001110101111100010" +marker_977: "110001010001100101101101011011010001" +marker_978: "110001110100110100111101111011111011" +marker_979: "110000010101101000101011110111001001" +marker_980: "110010100010001101110010001000011100" +marker_981: "110011111100011111110100110101011001" +marker_982: "110100000011000100100111111000100110" +marker_983: "110101000111011101010100000011100000" +marker_984: "110100011000011000110001010110100010" +marker_985: "110110110100110001100100011110101011" +marker_986: "110110111000010010000111100100001000" +marker_987: "110111111101111000000110011100000000" +marker_988: "111000100010100110111010011000000000" +marker_989: "111000010100000011100000100011010110" +marker_990: "111000011001101010010000101001010010" +marker_991: "111001111111001011000000111110101001" +marker_992: "111011101010110110111110100000111000" +marker_993: "111100000001110011110010011111000001" +marker_994: "111101110110010110101000001001100100" +marker_995: "111101111110110011000011101001001101" +marker_996: "111110000010110101010100011100010100" +marker_997: "111111101000010110001111110011011011" +marker_998: "111110001110001101011011000010110110" +marker_999: "111111101101011000111110000111111111" diff --git a/test/OpenCvSharp.Tests/aruco/ArucoTest.cs b/test/OpenCvSharp.Tests/aruco/ArucoTest.cs index 25cf2ab93..660161667 100644 --- a/test/OpenCvSharp.Tests/aruco/ArucoTest.cs +++ b/test/OpenCvSharp.Tests/aruco/ArucoTest.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics; +using System.Diagnostics; using OpenCvSharp.Aruco; using Xunit; @@ -11,7 +10,7 @@ public class ArucoTest : TestBase [Fact] public void CreateDetectorParameters() { - var param = DetectorParameters.Create(); + var param = new DetectorParameters(); Assert.Equal(3, param.AdaptiveThreshWinSizeMin); Assert.Equal(23, param.AdaptiveThreshWinSizeMax); Assert.Equal(10, param.AdaptiveThreshWinSizeStep); @@ -32,83 +31,20 @@ public void CreateDetectorParameters() Assert.Equal(0.35, param.MaxErroneousBitsInBorderRate, 3); Assert.Equal(5.0, param.MinOtsuStdDev, 3); Assert.Equal(0.6, param.ErrorCorrectionRate, 3); - Assert.Equal(0f, param.AprilTagQuadDecimate, 3); - Assert.Equal(0f, param.AprilTagQuadSigma, 3); + Assert.Equal(0f, param.AprilTagQuadDecimate, 1e-3); + Assert.Equal(0f, param.AprilTagQuadSigma, 1e-3); Assert.Equal(5, param.AprilTagMinClusterPixels); Assert.Equal(10, param.AprilTagMaxNmaxima); - Assert.Equal(0.175f, param.AprilTagCriticalRad, 3); - Assert.Equal(10f, param.AprilTagMaxLineFitMse, 3); - Assert.False(param.AprilTagDeglitch); + Assert.Equal(0.175f, param.AprilTagCriticalRad, 1e-3); + Assert.Equal(10f, param.AprilTagMaxLineFitMse, 1e-3); + Assert.Equal(0, param.AprilTagDeglitch); Assert.Equal(5, param.AprilTagMinWhiteBlackDiff); Assert.False(param.DetectInvertedMarker); + Assert.False(param.UseAruco3Detection); + Assert.Equal(32, param.MinSideLengthCanonicalImg); + Assert.Equal(0, param.MinMarkerLengthRatioOriginalImg); } - - [Fact] - public void DetectorParametersProperties() - { - var param = DetectorParameters.Create(); - - const int intValue = 100; - const double doubleValue = 1000d; - const float floatValue = -5f; - - param.AdaptiveThreshConstant = doubleValue; - param.CornerRefinementMinAccuracy = doubleValue; - param.ErrorCorrectionRate = doubleValue; - param.MaxErroneousBitsInBorderRate = doubleValue; - param.MaxMarkerPerimeterRate = doubleValue; - param.MinCornerDistanceRate = doubleValue; - param.MinMarkerDistanceRate = doubleValue; - param.MinMarkerPerimeterRate = doubleValue; - param.MinOtsuStdDev = doubleValue; - param.PerspectiveRemoveIgnoredMarginPerCell = doubleValue; - param.PolygonalApproxAccuracyRate = doubleValue; - - param.AdaptiveThreshWinSizeMax = intValue; - param.AdaptiveThreshWinSizeStep = intValue; - param.CornerRefinementMaxIterations = intValue; - param.CornerRefinementWinSize = intValue; - param.MarkerBorderBits = intValue; - param.MinDistanceToBorder = intValue; - param.PerspectiveRemovePixelPerCell = intValue; - param.AdaptiveThreshWinSizeMin = intValue; - - param.AprilTagQuadDecimate = floatValue; - param.AprilTagQuadSigma = floatValue; - param.AprilTagMinClusterPixels = intValue; - param.AprilTagMaxNmaxima = intValue; - param.AprilTagCriticalRad = floatValue; - param.AprilTagMaxLineFitMse = floatValue; - param.AprilTagDeglitch = true; - param.AprilTagMinWhiteBlackDiff = intValue; - param.DetectInvertedMarker = true; - - param.CornerRefinementMethod = CornerRefineMethod.Contour; - - Assert.Equal(doubleValue, param.AdaptiveThreshConstant); - Assert.Equal(doubleValue, param.CornerRefinementMinAccuracy); - Assert.Equal(doubleValue, param.ErrorCorrectionRate); - Assert.Equal(doubleValue, param.MaxErroneousBitsInBorderRate); - Assert.Equal(doubleValue, param.MaxMarkerPerimeterRate); - Assert.Equal(doubleValue, param.MinCornerDistanceRate); - Assert.Equal(doubleValue, param.MinMarkerDistanceRate); - Assert.Equal(doubleValue, param.MinMarkerPerimeterRate); - Assert.Equal(doubleValue, param.MinOtsuStdDev); - Assert.Equal(doubleValue, param.PerspectiveRemoveIgnoredMarginPerCell); - Assert.Equal(doubleValue, param.PolygonalApproxAccuracyRate); - - Assert.Equal(intValue, param.AdaptiveThreshWinSizeMax); - Assert.Equal(intValue, param.AdaptiveThreshWinSizeStep); - Assert.Equal(intValue, param.CornerRefinementMaxIterations); - Assert.Equal(intValue, param.CornerRefinementWinSize); - Assert.Equal(intValue, param.MarkerBorderBits); - Assert.Equal(intValue, param.MinDistanceToBorder); - Assert.Equal(intValue, param.PerspectiveRemovePixelPerCell); - Assert.Equal(intValue, param.AdaptiveThreshWinSizeMin); - - Assert.Equal(CornerRefineMethod.Contour, param.CornerRefinementMethod); - } - + [Fact] public void GetPredefinedDictionary() { @@ -121,13 +57,35 @@ public void GetPredefinedDictionary() } } + [Fact] + public void ReadDictionaryFromFile() + { + var dictionaryFile = Path.Combine("_data", "aruco", "Dict6X6_1000.yaml"); + var toCompareWith = CvAruco.GetPredefinedDictionary(PredefinedDictionaryName.Dict6X6_1000); + var dict = CvAruco.ReadDictionary(dictionaryFile); + + Assert.Equal(toCompareWith.BytesList.Rows, dict.BytesList.Rows); + Assert.Equal(toCompareWith.BytesList.Cols, dict.BytesList.Cols); + Assert.Equal(toCompareWith.MarkerSize, dict.MarkerSize); + Assert.Equal(toCompareWith.MaxCorrectionBits, dict.MaxCorrectionBits); + + var dictData = dict.BytesList.ToBytes(); + var refData = toCompareWith.BytesList.ToBytes(); + + for (int idx = 0; idx < dictData.Length; idx++) + Assert.Equal(refData[idx], dictData[idx]); + + toCompareWith.Dispose(); + dict.Dispose(); + } + [Fact] public void DetectMarkers() { - using var image = Image("markers_6x6_250.png", ImreadModes.Grayscale); + using var image = LoadImage("markers_6x6_250.png", ImreadModes.Grayscale); using var dict = CvAruco.GetPredefinedDictionary(PredefinedDictionaryName.Dict6X6_250); - var param = DetectorParameters.Create(); + var param = new DetectorParameters(); CvAruco.DetectMarkers(image, dict, out _, out _, param, out _); } @@ -145,54 +103,14 @@ public void DictionaryProperties() Assert.Equal(4, dict.MarkerSize); Assert.Equal(50, dict.MaxCorrectionBits); } - - [Fact] - public void DrawMarker() - { - const int markerSidePixels = 128; - const int columns = 4; - const int rows = 5; - const int margin = 20; - - const int width = columns * markerSidePixels + margin * (columns + 1); - const int height = rows * markerSidePixels + margin * (rows + 1); - - var id = 0; - var roi = new Rect(0, 0, markerSidePixels, markerSidePixels); - using var outputImage = new Mat(new Size(width, height), MatType.CV_8UC1, Scalar.White); - - for (var y = 0; y < rows; y++) - { - roi.Top = y * markerSidePixels + margin * (y + 1); - - for (var x = 0; x < columns; x++) - { - roi.Left = x * markerSidePixels + margin * (x + 1); - - using var roiMat = new Mat(outputImage, roi); - using var markerImage = new Mat(); - using var dict = CvAruco.GetPredefinedDictionary(PredefinedDictionaryName.Dict6X6_250); - CvAruco.DrawMarker(dict, id++, markerSidePixels, markerImage); - markerImage.CopyTo(roiMat); - } - } - - if (Debugger.IsAttached) - { - // If you want to save markers image, you must change the following values. - const string path = "C:\\markers_6x6_250.png"; - Cv2.ImWrite(path, outputImage); - Process.Start(path); - } - } - + [Fact] public void DrawDetectedMarker() { - using var image = Image("markers_6x6_250.png", ImreadModes.Grayscale); + using var image = LoadImage("markers_6x6_250.png", ImreadModes.Grayscale); using var outputImage = image.CvtColor(ColorConversionCodes.GRAY2RGB); using var dict = CvAruco.GetPredefinedDictionary(PredefinedDictionaryName.Dict6X6_250); - var param = DetectorParameters.Create(); + var param = new DetectorParameters(); CvAruco.DetectMarkers(image, dict, out var corners, out var ids, param, out var rejectedImgPoints); CvAruco.DrawDetectedMarkers(outputImage, corners, ids, new Scalar(255, 0, 0)); @@ -210,9 +128,9 @@ public void DrawDetectedMarker() [Fact] public void EstimatePoseSingleMarkers() { - using var image = Image("markers_6x6_250.png", ImreadModes.Grayscale); + using var image = LoadImage("markers_6x6_250.png", ImreadModes.Grayscale); using var dict = CvAruco.GetPredefinedDictionary(PredefinedDictionaryName.Dict6X6_250); - var param = DetectorParameters.Create(); + var param = new DetectorParameters(); CvAruco.DetectMarkers(image, dict, out var corners, out _, param, out _); using var cameraMatrix = Mat.Eye(3, 3, MatType.CV_64FC1); diff --git a/test/OpenCvSharp.Tests/calib3d/Calib3dTest.cs b/test/OpenCvSharp.Tests/calib3d/Calib3dTest.cs index bdbb64b98..d7e04fe8a 100644 --- a/test/OpenCvSharp.Tests/calib3d/Calib3dTest.cs +++ b/test/OpenCvSharp.Tests/calib3d/Calib3dTest.cs @@ -1,8 +1,5 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics; +using System.Diagnostics; using System.Diagnostics.CodeAnalysis; -using System.Linq; using Xunit; using Xunit.Abstractions; @@ -12,21 +9,14 @@ namespace OpenCvSharp.Tests.Calib3D; -public class Calib3DTest : TestBase +public class Calib3DTest(ITestOutputHelper output) : TestBase { - private readonly ITestOutputHelper output; - - public Calib3DTest(ITestOutputHelper output) - { - this.output = output; - } - [Fact] public void Rodrigues() { const double angle = 45; - double cos = Math.Cos(angle * Math.PI / 180); - double sin = Math.Sin(angle * Math.PI / 180); + var cos = Math.Cos(angle * Math.PI / 180); + var sin = Math.Sin(angle * Math.PI / 180); var matrix = new double[3, 3] { {cos, -sin, 0}, @@ -61,8 +51,8 @@ public void CheckChessboard() { var patternSize = new Size(10, 7); - using var image1 = Image("calibration/00.jpg", ImreadModes.Grayscale); - using var image2 = Image("lenna.png", ImreadModes.Grayscale); + using var image1 = LoadImage("calibration/00.jpg", ImreadModes.Grayscale); + using var image2 = LoadImage("lenna.png", ImreadModes.Grayscale); Assert.True(Cv2.CheckChessboard(image1, patternSize)); Assert.False(Cv2.CheckChessboard(image2, patternSize)); } @@ -72,9 +62,9 @@ public void FindChessboardCorners() { var patternSize = new Size(10, 7); - using var image = Image("calibration/00.jpg"); + using var image = LoadImage("calibration/00.jpg"); using var corners = new Mat(); - bool found = Cv2.FindChessboardCorners(image, patternSize, corners); + var found = Cv2.FindChessboardCorners(image, patternSize, corners); if (Debugger.IsAttached) { @@ -92,9 +82,9 @@ public void FindChessboardCornersSB() { var patternSize = new Size(10, 7); - using var image = Image("calibration/00.jpg"); + using var image = LoadImage("calibration/00.jpg"); using var corners = new Mat(); - bool found = Cv2.FindChessboardCornersSB(image, patternSize, corners); + var found = Cv2.FindChessboardCornersSB(image, patternSize, corners); if (Debugger.IsAttached) { @@ -120,7 +110,7 @@ public void CalibrateCameraByArray() { var patternSize = new Size(10, 7); - using var image = Image("calibration/00.jpg"); + using var image = LoadImage("calibration/00.jpg"); using var corners = new Mat(); Cv2.FindChessboardCorners(image, patternSize, corners); @@ -129,7 +119,7 @@ public void CalibrateCameraByArray() var cameraMatrix = new double[,] { { 1, 0, 0 }, { 0, 1, 0 }, { 0, 0, 1 } }; var distCoeffs = new double[5]; - var rms = Cv2.CalibrateCamera(new[] { objectPoints }, new[] { imagePoints }, image.Size(), cameraMatrix, + var rms = Cv2.CalibrateCamera([objectPoints], [imagePoints], image.Size(), cameraMatrix, distCoeffs, out var rotationVectors, out var translationVectors, CalibrationFlags.UseIntrinsicGuess | CalibrationFlags.FixK5); @@ -142,7 +132,7 @@ public void CalibrateCameraByMat() { var patternSize = new Size(10, 7); - using var image = Image("calibration/00.jpg"); + using var image = LoadImage("calibration/00.jpg"); using var corners = new Mat(); Cv2.FindChessboardCorners(image, patternSize, corners); @@ -153,7 +143,7 @@ public void CalibrateCameraByMat() using var imagePoints = Mat.FromArray(imagePointsArray); using var cameraMatrix = new Mat(Mat.Eye(3, 3, MatType.CV_64FC1)); using var distCoeffs = new Mat(); - var rms = Cv2.CalibrateCamera(new[] { objectPoints }, new[] { imagePoints }, image.Size(), cameraMatrix, + var rms = Cv2.CalibrateCamera([objectPoints], [imagePoints], image.Size(), cameraMatrix, distCoeffs, out var rotationVectors, out var translationVectors, CalibrationFlags.UseIntrinsicGuess | CalibrationFlags.FixK5); @@ -167,7 +157,7 @@ public void FishEyeCalibrate() { var patternSize = new Size(10, 7); - using var image = Image("calibration/00.jpg"); + using var image = LoadImage("calibration/00.jpg"); using var corners = new Mat(); Cv2.FindChessboardCorners(image, patternSize, corners); @@ -178,11 +168,12 @@ public void FishEyeCalibrate() using var imagePoints = Mat.FromArray(imagePointsArray); using var cameraMatrix = new Mat(Mat.Eye(3, 3, MatType.CV_64FC1)); using var distCoeffs = new Mat(); - var rms = Cv2.FishEye.Calibrate(new[] { objectPoints }, new[] { imagePoints }, image.Size(), cameraMatrix, + var rms = Cv2.FishEye.Calibrate([objectPoints], [imagePoints], image.Size(), cameraMatrix, distCoeffs, out var rotationVectors, out var translationVectors); var distCoeffValues = distCoeffs.ToArray(); - Assert.Equal(55.15, rms, 2); + //Assert.Equal(109.35, rms, 2); + Assert.True(rms > 10, $"rms = {rms}"); Assert.Contains(distCoeffValues, d => Math.Abs(d) > 1e-20); Assert.NotEmpty(rotationVectors); Assert.NotEmpty(translationVectors); @@ -196,7 +187,7 @@ public void FishEyeCalibrate() public void ProjectPoints() { var objectPointsArray = Generate3DPoints().ToArray(); - using var objectPoints = new Mat(objectPointsArray.Length, 1, MatType.CV_64FC3, objectPointsArray); + using var objectPoints = Mat.FromPixelData(objectPointsArray.Length, 1, MatType.CV_64FC3, objectPointsArray); using var intrinsicMat = new Mat(3, 3, MatType.CV_64FC1); intrinsicMat.Set(0, 0, 1.6415318549788924e+003); @@ -242,7 +233,7 @@ public void ProjectPoints() public void FishEyeProjectPoints() { var objectPointsArray = Generate3DPoints().ToArray(); - using var objectPoints = new Mat(objectPointsArray.Length, 1, MatType.CV_64FC3, objectPointsArray); + using var objectPoints = Mat.FromPixelData(objectPointsArray.Length, 1, MatType.CV_64FC3, objectPointsArray); using var intrisicMat = new Mat(3, 3, MatType.CV_64FC1); intrisicMat.Set(0, 0, 1.6415318549788924e+003); @@ -280,11 +271,13 @@ public void FishEyeProjectPoints() Cv2.FishEye.ProjectPoints(objectPoints, imagePoints, rVec, tVec, intrisicMat, distCoeffs, 0, jacobian); } - [Fact] - public void SolvePnPTestByArray() + [Theory] + [InlineData(false)] + [InlineData(true)] + public void SolvePnPTestByArray(bool useExtrinsicGuess) { - var rvec = new double[] { 0, 0, 0 }; - var tvec = new double[] { 0, 0, 0 }; + var rvec = new double[] { 3, 0, 0 }; + var tvec = new double[] { 0, 0, -10 }; var cameraMatrix = new double[,] { { 1, 0, 0 }, @@ -305,7 +298,7 @@ public void SolvePnPTestByArray() Cv2.ProjectPoints(objPts, rvec, tvec, cameraMatrix, dist, out var imgPts, out var jacobian); - Cv2.SolvePnP(objPts, imgPts, cameraMatrix, dist, ref rvec, ref tvec); + Cv2.SolvePnP(objPts, imgPts, cameraMatrix, dist, ref rvec, ref tvec, useExtrinsicGuess: useExtrinsicGuess); } [Fact] @@ -333,8 +326,8 @@ public void SolvePnPTestByMat() Cv2.ProjectPoints(objPts, rvec, tvec, cameraMatrix, dist, out var imgPts, out var jacobian); - using var objPtsMat = new Mat(objPts.Length, 1, MatType.CV_32FC3, objPts); - using var imgPtsMat = new Mat(imgPts.Length, 1, MatType.CV_32FC2, imgPts); + using var objPtsMat = Mat.FromPixelData(objPts.Length, 1, MatType.CV_32FC3, objPts); + using var imgPtsMat = Mat.FromPixelData(imgPts.Length, 1, MatType.CV_32FC2, imgPts); using var cameraMatrixMat = Mat.Eye(3, 3, MatType.CV_64FC1); using var distMat = Mat.Zeros(5, 0, MatType.CV_64FC1); using var rvecMat = new Mat(); @@ -368,7 +361,7 @@ public void FindFundamentalMat() new Point2d(1550.9714, 1744), }; - using Mat f = Cv2.FindFundamentalMat(imgPt1, imgPt2, FundamentalMatMethods.Point8); + using var f = Cv2.FindFundamentalMat(imgPt1, imgPt2, FundamentalMatMethods.Point8); Assert.True(f.Empty()); // TODO } @@ -491,9 +484,9 @@ public void FindHomographyUsac() private static IEnumerable Create3DChessboardCorners(Size boardSize, float squareSize) { - for (int y = 0; y < boardSize.Height; y++) + for (var y = 0; y < boardSize.Height; y++) { - for (int x = 0; x < boardSize.Width; x++) + for (var x = 0; x < boardSize.Width; x++) { yield return new Point3f(x * squareSize, y * squareSize, 0); } diff --git a/test/OpenCvSharp.Tests/calib3d/StereoBMTest.cs b/test/OpenCvSharp.Tests/calib3d/StereoBMTest.cs index e581e8484..b77d1de63 100644 --- a/test/OpenCvSharp.Tests/calib3d/StereoBMTest.cs +++ b/test/OpenCvSharp.Tests/calib3d/StereoBMTest.cs @@ -8,8 +8,8 @@ public class StereoBMTest : TestBase [Fact] public void SimpleCompute() { - var left = Image("tsukuba_left.png", ImreadModes.Grayscale); - var right = Image("tsukuba_right.png", ImreadModes.Grayscale); + var left = LoadImage("tsukuba_left.png", ImreadModes.Grayscale); + var right = LoadImage("tsukuba_right.png", ImreadModes.Grayscale); using var sbm = StereoBM.Create(); var disparity = new Mat(); diff --git a/test/OpenCvSharp.Tests/calib3d/StereoSGBMTest.cs b/test/OpenCvSharp.Tests/calib3d/StereoSGBMTest.cs index a246a52c5..f2d4edeed 100644 --- a/test/OpenCvSharp.Tests/calib3d/StereoSGBMTest.cs +++ b/test/OpenCvSharp.Tests/calib3d/StereoSGBMTest.cs @@ -8,8 +8,8 @@ public class StereoSGBMTest : TestBase [Fact] public void SimpleCompute() { - var left = Image("tsukuba_left.png", ImreadModes.Grayscale); - var right = Image("tsukuba_right.png", ImreadModes.Grayscale); + var left = LoadImage("tsukuba_left.png", ImreadModes.Grayscale); + var right = LoadImage("tsukuba_right.png", ImreadModes.Grayscale); using var sbm = StereoSGBM.Create(0, 32, 5); var disparity = new Mat(); diff --git a/test/OpenCvSharp.Tests/core/CoreTest.cs b/test/OpenCvSharp.Tests/core/CoreTest.cs index db1e26149..b87e3d3e8 100644 --- a/test/OpenCvSharp.Tests/core/CoreTest.cs +++ b/test/OpenCvSharp.Tests/core/CoreTest.cs @@ -1,6 +1,4 @@ -using System; -using System.Diagnostics; -using System.Linq; +using System.Diagnostics; using Xunit; #pragma warning disable CA5394 // Do not use insecure randomness @@ -13,8 +11,8 @@ public class CoreTest : TestBase [Fact] public void Add() { - using var src1 = new Mat(2, 2, MatType.CV_8UC1, new byte[] { 1, 2, 3, 4 }); - using var src2 = new Mat(2, 2, MatType.CV_8UC1, new byte[] { 1, 2, 3, 4 }); + using var src1 = Mat.FromPixelData(2, 2, MatType.CV_8UC1, new byte[] { 1, 2, 3, 4 }); + using var src2 = Mat.FromPixelData(2, 2, MatType.CV_8UC1, new byte[] { 1, 2, 3, 4 }); using var dst = new Mat(); Cv2.Add(src1, src2, dst); @@ -31,7 +29,7 @@ public void Add() [Fact] public void AddScalar() { - using var src = new Mat(2, 2, MatType.CV_8UC1, new byte[] { 1, 2, 3, 4 }); + using var src = Mat.FromPixelData(2, 2, MatType.CV_8UC1, new byte[] { 1, 2, 3, 4 }); using var dst = new Mat(); Cv2.Add(new Scalar(10), src, dst); @@ -61,7 +59,7 @@ public void AddScalar() [Fact] public void Subtract() { - using Mat image = Image("lenna.png"); + using Mat image = LoadImage("lenna.png"); using Mat dst1 = new (); using Mat dst2 = new Scalar(255) - image; Cv2.Subtract(new Scalar(255), image, dst1); @@ -74,7 +72,7 @@ public void Subtract() [Fact] public void SubtractScalar() { - using var src = new Mat(3, 1, MatType.CV_16SC1, new short[]{1, 2, 3}); + using var src = Mat.FromPixelData(3, 1, MatType.CV_16SC1, new short[]{1, 2, 3}); using var dst = new Mat(); Cv2.Subtract(src, 1, dst); Assert.Equal(0, dst.Get(0)); @@ -91,7 +89,7 @@ public void SubtractScalar() public void ScalarOperations() { var values = new[] { -1f }; - using var mat = new Mat(1, 1, MatType.CV_32FC1, values); + using var mat = Mat.FromPixelData(1, 1, MatType.CV_32FC1, values); Assert.Equal(values[0], mat.Get(0, 0)); Cv2.Subtract(mat, 1, mat); @@ -111,10 +109,10 @@ public void ScalarOperations() public void MatExprSubtractWithScalar() { // MatExpr - Scalar - using (var src = new Mat(3, 1, MatType.CV_16SC1, new short[] { 1, 2, 3 })) + using (var src = Mat.FromPixelData(3, 1, MatType.CV_16SC1, new short[] { 1, 2, 3 })) { using MatExpr srcExpr = src; - using MatExpr dstExpr = srcExpr - 1; + using MatExpr dstExpr = srcExpr - new Scalar(1); using Mat dst = dstExpr; Assert.Equal(0, dst.Get(0)); Assert.Equal(1, dst.Get(1)); @@ -122,10 +120,10 @@ public void MatExprSubtractWithScalar() } // Scalar - MatExpr - using (var src = new Mat(3, 1, MatType.CV_16SC1, new short[] { 1, 2, 3 })) + using (var src = Mat.FromPixelData(3, 1, MatType.CV_16SC1, new short[] { 1, 2, 3 })) { using MatExpr srcExpr = src; - using MatExpr dstExpr = 1 - srcExpr; + using MatExpr dstExpr = new Scalar(1) - srcExpr; using Mat dst = dstExpr; Assert.Equal(0, dst.Get(0)); Assert.Equal(-1, dst.Get(1)); @@ -144,8 +142,8 @@ public void Sum() [Fact] public void Divide() { - using var mat1 = new Mat(3, 1, MatType.CV_8UC1, new byte[] { 64, 128, 192 }); - using var mat2 = new Mat(3, 1, MatType.CV_8UC1, new byte[] { 2, 4, 8 }); + using var mat1 = Mat.FromPixelData(3, 1, MatType.CV_8UC1, new byte[] { 64, 128, 192 }); + using var mat2 = Mat.FromPixelData(3, 1, MatType.CV_8UC1, new byte[] { 2, 4, 8 }); using var dst = new Mat(); // default Cv2.Divide(mat1, mat2, dst, 1, -1); @@ -191,16 +189,16 @@ public void BorderInterpolate() [Fact] public void CopyMakeBorder() { - using var src = new Mat(10, 10, MatType.CV_8UC1, 0); + using var src = new Mat(10, 10, MatType.CV_8UC1, Scalar.All(0)); using var dst = new Mat(); const int top = 1, bottom = 2, left = 3, right = 4; - Cv2.CopyMakeBorder(src, dst, top, bottom, left, right, BorderTypes.Constant, 255); + Cv2.CopyMakeBorder(src, dst, top, bottom, left, right, BorderTypes.Constant, Scalar.All(255)); - using var expected = new Mat(src.Rows + top + bottom, src.Cols + left + right, src.Type(), 0); - Cv2.Rectangle(expected, new Point(0, 0), new Point(expected.Cols, top - 1), 255, -1); - Cv2.Rectangle(expected, new Point(0, expected.Rows - bottom), new Point(expected.Cols, expected.Rows), 255, -1); - Cv2.Rectangle(expected, new Point(0, 0), new Point(left - 1, expected.Rows), 255, -1); - Cv2.Rectangle(expected, new Point(expected.Cols - right, 0), new Point(expected.Cols, expected.Rows), 255, -1); + using var expected = new Mat(src.Rows + top + bottom, src.Cols + left + right, src.Type(), Scalar.All(0)); + Cv2.Rectangle(expected, new Point(0, 0), new Point(expected.Cols, top - 1), Scalar.All(255), -1); + Cv2.Rectangle(expected, new Point(0, expected.Rows - bottom), new Point(expected.Cols, expected.Rows), Scalar.All(255), -1); + Cv2.Rectangle(expected, new Point(0, 0), new Point(left - 1, expected.Rows), Scalar.All(255), -1); + Cv2.Rectangle(expected, new Point(expected.Cols - right, 0), new Point(expected.Cols, expected.Rows), Scalar.All(255), -1); if (Debugger.IsAttached) { @@ -214,7 +212,7 @@ public void CopyMakeBorder() // ReSharper disable once InconsistentNaming public void PSNR() { - using var img1 = Image("lenna.png"); + using var img1 = LoadImage("lenna.png"); using var img2 = new Mat(); Cv2.GaussianBlur(img1, img2, new Size(5, 5), 10); @@ -251,14 +249,14 @@ public void MinMaxIdx() Assert.Equal(0, minVal); Assert.Equal(2, maxVal); - Assert.Equal(new [] {1, 2}, minIdx); - Assert.Equal(new [] {3, 4}, maxIdx); + Assert.Equal(new[] { 1, 2 }, minIdx); + Assert.Equal(new[] { 3, 4 }, maxIdx); } [Fact] public void MergeAndSplit() { - using var img = Image("lenna.png"); + using var img = LoadImage("lenna.png"); Mat[]? planes = null; try @@ -273,7 +271,7 @@ public void MergeAndSplit() } finally { - if (planes != null) + if (planes is not null) { foreach (var plane in planes) { @@ -287,7 +285,7 @@ public void MergeAndSplit() public void Compare() { var bytes = new byte[] { 1, 2, 3, 4, 5, 6 }; - using var src = new Mat(bytes.Length, 1, MatType.CV_8UC1, bytes); + using var src = Mat.FromPixelData(bytes.Length, 1, MatType.CV_8UC1, bytes); using var dst = new Mat(); Cv2.Compare(src, 3, dst, CmpType.LE); @@ -302,7 +300,7 @@ public void Compare() [Fact] public void Rotate() { - using var src = Image("lenna.png"); + using var src = LoadImage("lenna.png"); using var img90 = new Mat(); Cv2.Rotate(src, img90, RotateFlags.Rotate90Clockwise); @@ -321,12 +319,12 @@ public void Rotate() [Fact] public void Concat() { - using var src = Image("lenna.png"); + using var src = LoadImage("lenna.png"); using var hconcat = new Mat(); using var vconcat = new Mat(); - Cv2.HConcat(new[] {src, src, src}, hconcat); - Cv2.VConcat(new[] {src, src, src}, vconcat); + Cv2.HConcat([src, src, src], hconcat); + Cv2.VConcat([src, src, src], vconcat); Assert.Equal(src.Cols * 3, hconcat.Cols); Assert.Equal(src.Rows, hconcat.Rows); @@ -343,8 +341,8 @@ public void Bitwise() var array1 = Enumerable.Range(0, count).Select(i => (byte)i).OrderBy(_ => random.Next()).ToArray(); var array2 = Enumerable.Range(0, count).Select(i => (byte)i).OrderBy(_ => random.Next()).ToArray(); - using var mat1 = new Mat(count, 1, MatType.CV_8UC1, array1); - using var mat2 = new Mat(count, 1, MatType.CV_8UC1, array2); + using var mat1 = Mat.FromPixelData(count, 1, MatType.CV_8UC1, array1); + using var mat2 = Mat.FromPixelData(count, 1, MatType.CV_8UC1, array2); using var and = new Mat(); using var or = new Mat(); using var xor = new Mat(); @@ -366,7 +364,7 @@ public void Bitwise() [Fact] public void CopyTo() { - using var src = Image("lenna.png"); + using var src = LoadImage("lenna.png"); var dst = new Mat(); Cv2.CopyTo(src, dst); @@ -379,8 +377,8 @@ public void SolveLP() { // https://qiita.com/peisuke/items/4cbc0d0bf388492ad2a5 - using var a = new Mat(3, 1, MatType.CV_64FC1, new double[] { 3, 1, 2 }); - using var b = new Mat(3, 4, MatType.CV_64FC1, new double[] { 1, 1, 3, 30, 2, 2, 5, 24, 4, 1, 2, 36 }); + using var a = Mat.FromPixelData(3, 1, MatType.CV_64FC1, new double[] { 3, 1, 2 }); + using var b = Mat.FromPixelData(3, 4, MatType.CV_64FC1, new double[] { 1, 1, 3, 30, 2, 2, 5, 24, 4, 1, 2, 36 }); using var z = new Mat(); Cv2.SolveLP(a, b, z); @@ -399,7 +397,7 @@ public void Partition() int nClasses = Cv2.Partition(array, out var labels, (a, b) => a == b); Assert.Equal(3, nClasses); - Assert.Equal(new[] {0, 1, 2, 2, 0, 1, 1}, labels); + Assert.Equal(new[] { 0, 1, 2, 2, 0, 1, 1 }, labels); } [Fact] @@ -437,4 +435,36 @@ public void NormVecd() var norm = Cv2.Norm(vec, NormTypes.L1); Assert.Equal(3.3333, norm, 9); } + + [Fact] + public void ReduceArgMax() + { + using var src = Mat.FromPixelData(2, 2, MatType.CV_8UC1, new byte[] { 1, 2, 1, 4 }); + using var dst = new Mat(); + + Cv2.ReduceArgMax(src, dst, axis: 0, lastIndex: true); + + Assert.Equal(MatType.CV_32SC1, dst.Type()); + Assert.Equal(1, dst.Rows); + Assert.Equal(2, dst.Cols); + + Assert.Equal(1, dst.At(0, 0)); // max along 1st column [1; 1], taking the last occurence + Assert.Equal(1, dst.At(0, 1)); // max along 2nd column [2; 4] + } + + [Fact] + public void ReduceArgMin() + { + using var src = Mat.FromPixelData(2, 2, MatType.CV_8UC1, new byte[] { 2, 1, 4, 4 }); + using var dst = new Mat(); + + Cv2.ReduceArgMin(src, dst, axis: 1, lastIndex: false); + + Assert.Equal(MatType.CV_32SC1, dst.Type()); + Assert.Equal(2, dst.Rows); + Assert.Equal(1, dst.Cols); + + Assert.Equal(1, dst.At(0, 0)); // min along 1st row [2, 1] + Assert.Equal(0, dst.At(1, 0)); // min along 2nd row [4, 4], taking the first occurence + } } diff --git a/test/OpenCvSharp.Tests/core/FileStorageTest.cs b/test/OpenCvSharp.Tests/core/FileStorageTest.cs index 9a9f5c6b7..8d26e70fb 100644 --- a/test/OpenCvSharp.Tests/core/FileStorageTest.cs +++ b/test/OpenCvSharp.Tests/core/FileStorageTest.cs @@ -1,8 +1,4 @@ -#nullable enable -using System; -using System.IO; -using System.Linq; -using Xunit; +using Xunit; using Xunit.Abstractions; namespace OpenCvSharp.Tests.Core; @@ -64,7 +60,7 @@ public void ReadAndWrite() using (Mat r = Mat.Eye(3, 3, MatType.CV_64FC1)) using (Mat t = Mat.Ones(3, 1, MatType.CV_64FC1)) - using (Mat lenna = Image("lenna.png")) + using (Mat lenna = LoadImage("lenna.png")) { fs.Write("R", r); fs.Write("T", t); @@ -166,7 +162,7 @@ public void ReadAndWrite() } using (var storedLenna = fs["lenna"]?.ReadMat()) - using (var lenna = Image("lenna.png")) + using (var lenna = LoadImage("lenna.png")) { Assert.NotNull(storedLenna); #pragma warning disable CS8604 @@ -226,7 +222,7 @@ public void ReadAndWriteInMemory() using (Mat r = Mat.Eye(3, 3, MatType.CV_64FC1)) using (Mat t = Mat.Ones(3, 1, MatType.CV_64FC1)) - using (Mat lenna = Image("lenna.png")) + using (Mat lenna = LoadImage("lenna.png")) { fs.Write("R", r); fs.Write("T", t); @@ -334,7 +330,7 @@ public void ReadAndWriteInMemory() } using (var storedLenna = fs["lenna"]?.ReadMat()) - using (var lenna = Image("lenna.png")) + using (var lenna = LoadImage("lenna.png")) { Assert.NotNull(storedLenna); ImageEquals(storedLenna, lenna); diff --git a/test/OpenCvSharp.Tests/core/LDATest.cs b/test/OpenCvSharp.Tests/core/LDATest.cs index d58fffd77..fb0bacabf 100644 --- a/test/OpenCvSharp.Tests/core/LDATest.cs +++ b/test/OpenCvSharp.Tests/core/LDATest.cs @@ -1,5 +1,4 @@ -using System; -using Xunit; +using Xunit; namespace OpenCvSharp.Tests.Core; @@ -21,10 +20,10 @@ public void CreateAndDispose() public void LDASample() { double[,] d = {{2.95,6.63},{2.53,7.79},{3.57,5.65},{3.16,5.47},{2.58,4.46},{2.16,6.22},{3.27,3.52}}; - int[] c = { 0, 0, 0, 0, 1, 1, 1 }; + int[] c = [0, 0, 0, 0, 1, 1, 1]; - using (var data = new Mat(d.GetLength(0), d.GetLength(1), MatType.CV_64FC1, d)) - using (var classes = new Mat(c.Length, 1, MatType.CV_32SC1, c)) + using (var data = Mat.FromPixelData(d.GetLength(0), d.GetLength(1), MatType.CV_64FC1, d)) + using (var classes = Mat.FromPixelData(c.Length, 1, MatType.CV_32SC1, c)) using (var lda = new LDA(data, classes)) { using (var eigenvectors = lda.Eigenvectors()) diff --git a/test/OpenCvSharp.Tests/core/MatTest.cs b/test/OpenCvSharp.Tests/core/MatTest.cs index 8a1c4b01f..584d10d78 100644 --- a/test/OpenCvSharp.Tests/core/MatTest.cs +++ b/test/OpenCvSharp.Tests/core/MatTest.cs @@ -1,5 +1,4 @@ -using System; -using Xunit; +using Xunit; using Xunit.Abstractions; // ReSharper disable ReturnValueOfPureMethodIsNotUsed @@ -110,9 +109,9 @@ public void GetSet() Assert.Equal(new Vec3b(64, 128, 192), mat8UC3.Get(2, 0)); using var mat32FC1 = new Mat(3, 3, MatType.CV_32FC1, new Scalar(3.14159)); - Assert.Equal(3.14159f, mat32FC1.Get(0, 0), 6); - Assert.Equal(3.14159f, mat32FC1.Get(1, 1), 6); - Assert.Equal(3.14159f, mat32FC1.Get(2, 2), 6); + Assert.Equal(3.14159f, mat32FC1.Get(0, 0), 1e-6); + Assert.Equal(3.14159f, mat32FC1.Get(1, 1), 1e-6); + Assert.Equal(3.14159f, mat32FC1.Get(2, 2), 1e-6); mat32FC1.Set(0, 1, 55.5555f); mat32FC1.Set(1, 2, 55.5555f); mat32FC1.Set(2, 0, 55.5555f); @@ -147,9 +146,9 @@ public void At() Assert.Equal(new Vec3b(7, 8, 9), mat8UC3.At(2, 0)); using var mat32FC1 = new Mat(3, 3, MatType.CV_32FC1, new Scalar(3.14159)); - Assert.Equal(3.14159f, mat32FC1.At(0, 0), 6); - Assert.Equal(3.14159f, mat32FC1.At(1, 1), 6); - Assert.Equal(3.14159f, mat32FC1.At(2, 2), 6); + Assert.Equal(3.14159f, mat32FC1.At(0, 0), 1e-6); + Assert.Equal(3.14159f, mat32FC1.At(1, 1), 1e-6); + Assert.Equal(3.14159f, mat32FC1.At(2, 2), 1e-6); mat32FC1.At(0, 1) = 33.3333f; mat32FC1.At(1, 2) = 44.4444f; mat32FC1.At(2, 0) = 55.5555f; @@ -162,7 +161,7 @@ public void At() public void Diag() { var data = new byte[] { 1, 10, 100 }; - using var mat = new Mat(3, 1, MatType.CV_8UC1, data); + using var mat = Mat.FromPixelData(3, 1, MatType.CV_8UC1, data); using var diag = Mat.Diag(mat); Assert.Equal(3, diag.Rows); Assert.Equal(3, diag.Cols); @@ -182,7 +181,7 @@ public void Diag() [Fact] public void CopyTo() { - using var src = Image("mandrill.png", ImreadModes.Grayscale); + using var src = LoadImage("mandrill.png", ImreadModes.Grayscale); using var dst = new Mat(); using var mask = src.GreaterThan(128); src.CopyTo(dst, mask); @@ -194,7 +193,7 @@ public void CopyTo() [Fact] public void SetTo() { - using var graySrc = Image("mandrill.png", ImreadModes.Grayscale); + using var graySrc = LoadImage("mandrill.png", ImreadModes.Grayscale); using var resultImage = graySrc.Clone(); using var mask = graySrc.InRange(100, 200); var ret = resultImage.SetTo(0, mask); @@ -221,7 +220,7 @@ public void RowRange() using var subMat = mat.RowRange(1..); Assert.Equal(new Size(3, 2), subMat.Size()); Assert.True(subMat.GetArray(out byte[] subMatArray)); - Assert.Equal(new byte[] { 4, 5, 6, 7, 8, 9 }, subMatArray); + Assert.Equal([4, 5, 6, 7, 8, 9], subMatArray); // out of range Assert.Throws(() => @@ -248,7 +247,7 @@ public void ColRange() using var subMat = mat.ColRange(..2); Assert.Equal(new Size(2, 3), subMat.Size()); Assert.True(subMat.GetArray(out byte[] subMatArray)); - Assert.Equal(new byte[] { 1, 2, 4, 5, 7, 8 }, subMatArray); + Assert.Equal([1, 2, 4, 5, 7, 8], subMatArray); // out of range Assert.Throws(() => @@ -265,22 +264,22 @@ public void ColRange() public void SubMatRange() { var values = new byte[,] { - {1, 2, 3}, - {4, 5, 6}, - {7, 8, 9}}; + {1, 2, 3, 4}, + {5, 6, 7, 8}, + {9, 10,11,12}}; using var mat = Mat.FromArray(values); - Assert.Equal(new Size(3, 3), mat.Size()); + Assert.Equal(new Size(4, 3), mat.Size()); // OK - using var subMat1 = mat.SubMat(0..2, 1..3); - Assert.Equal(new Size(2, 2), subMat1.Size()); + using var subMat1 = mat.SubMat(0..2, 1..4); + Assert.Equal(new Size(3, 2), subMat1.Size()); Assert.True(subMat1.GetArray(out byte[] subMat1Array)); - Assert.Equal(new byte[] { 2, 3, 5, 6 }, subMat1Array); + Assert.Equal([2, 3,4, 6,7,8], subMat1Array); using var subMat2 = mat[1..2, ..]; - Assert.Equal(new Size(3, 1), subMat2.Size()); + Assert.Equal(new Size(4, 1), subMat2.Size()); Assert.True(subMat2.GetArray(out byte[] subMat2Array)); - Assert.Equal(new byte[] { 4, 5, 6 }, subMat2Array); + Assert.Equal([5, 6,7,8], subMat2Array); // out of range Assert.Throws(() => @@ -306,7 +305,7 @@ public void SubMatRange() public void T() { var data = new byte[] { 1, 10, 100 }; - using var mat = new Mat(3, 1, MatType.CV_8UC1, data); + using var mat = Mat.FromPixelData(3, 1, MatType.CV_8UC1, data); using var tExpr = mat.T(); using var t = tExpr.ToMat(); @@ -323,7 +322,7 @@ public void T() public void Inv() { var data = new double[] { 1, 2, 3, 4 }; - using var mat = new Mat(2, 2, MatType.CV_64FC1, data); + using var mat = Mat.FromPixelData(2, 2, MatType.CV_64FC1, data); using var invExpr = mat.Inv(); using var inv = invExpr.ToMat(); @@ -342,8 +341,8 @@ public void Dot() { var data1 = new double[] { 1, 2 }; var data2 = new double[] { 3, 4 }; - using var mat1 = new Mat(2, 1, MatType.CV_64FC1, data1); - using var mat2 = new Mat(2, 1, MatType.CV_64FC1, data2); + using var mat1 = Mat.FromPixelData(2, 1, MatType.CV_64FC1, data1); + using var mat2 = Mat.FromPixelData(2, 1, MatType.CV_64FC1, data2); var dot = mat1.Dot(mat2); Assert.Equal(data1[0] * data2[0] + data1[1] * data2[1], dot); @@ -477,8 +476,8 @@ public void MatOfFloatFromArray() var indexer = m.GetIndexer(); for (int i = 0; i < array.Length; i++) { - Assert.Equal(array[i], m.Get(i), 6); - Assert.Equal(array[i], indexer[i], 6); + Assert.Equal(array[i], m.Get(i), 1e-6); + Assert.Equal(array[i], indexer[i], 1e-6); } } @@ -493,8 +492,8 @@ public void MatOfFloatFromRectangularArray() { for (int j = 0; j < array.GetLength(1); j++) { - Assert.Equal(array[i, j], m.Get(i, j), 6); - Assert.Equal(array[i, j], indexer[i, j], 6); + Assert.Equal(array[i, j], m.Get(i, j), 1e-6); + Assert.Equal(array[i, j], indexer[i, j], 1e-6); } } } @@ -516,7 +515,7 @@ public void MatOfIntFromArray() [Fact] public void MatOfIntFromRectangularArray() { - var array = new[,] { { 1, 2 }, { 3, 4 } }; + var array = new[,] { { 1, 2 }, { 3, 4 },{ 5,6} }; using var m = Mat.FromArray(array); var indexer = m.GetIndexer(); @@ -628,7 +627,7 @@ public void GetArrayByte() { var data = new byte[] { 0, 128, 255, 1 }; - using var mat = new Mat(2, 2, MatType.CV_8UC1, data); + using var mat = Mat.FromPixelData(2, 2, MatType.CV_8UC1, data); bool success = mat.GetArray(out byte[] data2); Assert.True(success); @@ -640,7 +639,7 @@ public void GetArrayFailure() { var data = new byte[] { 0, 128, 255, 1 }; - using var mat = new Mat(2, 2, MatType.CV_64FC4, data); + using var mat = Mat.FromPixelData(2, 2, MatType.CV_64FC4, data); Assert.Throws(() => { mat.GetArray(out byte[] _); @@ -656,7 +655,7 @@ public void GetRectangularArrayByte() {255, 1} }; - using var mat = new Mat(2, 2, MatType.CV_8UC1, data); + using var mat = Mat.FromPixelData(2, 2, MatType.CV_8UC1, data); bool success = mat.GetRectangularArray(out byte[,] data2); Assert.True(success); @@ -668,7 +667,7 @@ public void GetArrayInt16() { var data = new short[] { 3, short.MaxValue, short.MinValue, 10000 }; - using var mat = new Mat(2, 2, MatType.CV_16SC1, data); + using var mat = Mat.FromPixelData(2, 2, MatType.CV_16SC1, data); bool success = mat.GetArray(out short[] data2); Assert.True(success); @@ -681,7 +680,7 @@ public void GetArrayInt32() // ReSharper disable once RedundantExplicitArrayCreation var data = new int[] { 3, int.MaxValue, int.MinValue, 65536 }; - using var mat = new Mat(2, 2, MatType.CV_32SC1, data); + using var mat = Mat.FromPixelData(2, 2, MatType.CV_32SC1, data); bool success = mat.GetArray(out int[] data2); Assert.True(success); @@ -694,7 +693,7 @@ public void GetArraySingle() // ReSharper disable once RedundantExplicitArrayCreation var data = new float[] { 3.14f, float.MaxValue, float.MinValue, 12345.6789f }; - using var mat = new Mat(2, 2, MatType.CV_32FC1, data); + using var mat = Mat.FromPixelData(2, 2, MatType.CV_32FC1, data); bool success = mat.GetArray(out float[] data2); Assert.True(success); @@ -707,7 +706,7 @@ public void GetArrayDouble() // ReSharper disable once RedundantExplicitArrayCreation var data = new double[] { 3.14, double.MaxValue, double.MinValue, double.Epsilon }; - using var mat = new Mat(2, 2, MatType.CV_64FC1, data); + using var mat = Mat.FromPixelData(2, 2, MatType.CV_64FC1, data); bool success = mat.GetArray(out double[] data2); Assert.True(success); @@ -725,7 +724,7 @@ public void GetArrayPoint() new Point(7, 8), }; - using var mat = new Mat(2, 2, MatType.CV_32SC2, data); + using var mat = Mat.FromPixelData(2, 2, MatType.CV_32SC2, data); bool success = mat.GetArray(out Point[] data2); Assert.True(success); @@ -743,7 +742,7 @@ public void GetArrayRect() new Rect(13, 14, 15, 16), }; - using var mat = new Mat(2, 2, MatType.CV_32SC4, data); + using var mat = Mat.FromPixelData(2, 2, MatType.CV_32SC4, data); bool success = mat.GetArray(out Rect[] data2); Assert.True(success); @@ -805,7 +804,7 @@ public void GetArrayVec3b() new Vec3b(10, 11, 12), }; - using var mat = new Mat(2, 2, MatType.CV_8UC3, data); + using var mat = Mat.FromPixelData(2, 2, MatType.CV_8UC3, data); bool success = mat.GetArray(out Vec3b[] data2); Assert.True(success); @@ -1005,12 +1004,12 @@ public void GetSubMat() using var mat = new Mat(10, 10, MatType.CV_8UC1, Scalar.All(0)); - var rect = new Rect(2, 2, 5, 5); + var rect = new Rect(2, 2, 7, 5); mat.Rectangle(rect, new Scalar(expectedValue), -1); using var subMat = mat.SubMat(rect); - Assert.Equal(rect.Width, subMat.Rows); - Assert.Equal(rect.Height, subMat.Cols); + Assert.Equal(rect.Width, subMat.Cols); + Assert.Equal(rect.Height, subMat.Rows); for (int r = 0; r < subMat.Rows; r++) { @@ -1028,12 +1027,12 @@ public void GetSubMatByIndexer() using var mat = new Mat(10, 10, MatType.CV_8UC1, Scalar.All(0)); - var rect = new Rect(2, 2, 5, 5); + var rect = new Rect(2, 2, 7, 5); mat.Rectangle(rect, new Scalar(expectedValue), -1); using var subMat = mat[rect]; - Assert.Equal(rect.Width, subMat.Rows); - Assert.Equal(rect.Height, subMat.Cols); + Assert.Equal(rect.Width, subMat.Cols); + Assert.Equal(rect.Height, subMat.Rows); for (int r = 0; r < subMat.Rows; r++) { @@ -1051,12 +1050,12 @@ public void SetSubMat() using var mat = new Mat(10, 10, MatType.CV_8UC1, Scalar.All(0)); - var rect = new Rect(2, 2, 5, 5); + var rect = new Rect(2, 2, 7, 5); mat[rect].SetTo(expectedValue); - for (int r = rect.Left; r < rect.Right; r++) + for (int r = rect.Top; r < rect.Bottom; r++) { - for (int c = rect.Top; c < rect.Bottom; c++) + for (int c = rect.Left; c < rect.Right; c++) { Assert.Equal(expectedValue, mat.Get(r, c)); } @@ -1085,7 +1084,7 @@ public void RowMat() [Fact] public void RowMatCopyTo() { - using var lenna = Image("lenna.png", ImreadModes.Grayscale); + using var lenna = LoadImage("lenna.png", ImreadModes.Grayscale); using var mat = new Mat(lenna.Rows, lenna.Cols, MatType.CV_8UC1, Scalar.All(0)); using var lenna10 = lenna.Row(10); @@ -1116,7 +1115,7 @@ public void Issue349() System.Runtime.InteropServices.GCHandle.Alloc(array, System.Runtime.InteropServices.GCHandleType.Pinned); var ptr = handle.AddrOfPinnedObject(); - using var mat1 = new Mat(8, 8, MatType.CV_32FC1, ptr); + using var mat1 = Mat.FromPixelData(8, 8, MatType.CV_32FC1, ptr); for (long i = 0; i < 1000000; i++) { using var mat2 = mat1.Idct(); @@ -1136,7 +1135,7 @@ public void TestStreamWriting() m.Randn(Scalar.RandomColor(), new Scalar(7)); using var stream = new System.IO.MemoryStream(); - stream.Write(new byte[] { 1, 2, 3, 4 }, 0, 4); + stream.Write([1, 2, 3, 4], 0, 4); m.WriteToStream(stream); stream.Position = 4; @@ -1210,7 +1209,7 @@ public void TypeOfMatDoubleClone(int size) [Fact] public void CreateMultiDimensional() { - using var m = new Mat(new int[] { 10, 20, 30 }, MatType.CV_8UC1); + using var m = new Mat([10, 20, 30], MatType.CV_8UC1); Assert.False(m.Empty()); Assert.Equal(3, m.Dims); @@ -1228,7 +1227,7 @@ public void CreateMultiDimensional() [Fact] public void SubmatOfMultiDimensionalMat() { - using var m = new Mat(new int[] { 5, 6, 7 }, MatType.CV_8UC1); + using var m = new Mat([5, 6, 7], MatType.CV_8UC1); for (int i = 0; i < 5; i++) { for (int j = 0; j < 6; j++) diff --git a/test/OpenCvSharp.Tests/core/MatTypeTest.cs b/test/OpenCvSharp.Tests/core/MatTypeTest.cs index e0593fe07..4c62535ee 100644 --- a/test/OpenCvSharp.Tests/core/MatTypeTest.cs +++ b/test/OpenCvSharp.Tests/core/MatTypeTest.cs @@ -1,5 +1,4 @@ -using System; -using Xunit; +using Xunit; // ReSharper disable ReturnValueOfPureMethodIsNotUsed diff --git a/test/OpenCvSharp.Tests/core/Rect2dTest.cs b/test/OpenCvSharp.Tests/core/Rect2dTest.cs index d308d9ec5..4d6200eb7 100644 --- a/test/OpenCvSharp.Tests/core/Rect2dTest.cs +++ b/test/OpenCvSharp.Tests/core/Rect2dTest.cs @@ -1,17 +1,9 @@ using Xunit; -using Xunit.Abstractions; namespace OpenCvSharp.Tests.Core; public class Rect2dTest { - private readonly ITestOutputHelper testOutputHelper; - - public Rect2dTest(ITestOutputHelper testOutputHelper) - { - this.testOutputHelper = testOutputHelper; - } - [Fact] public void TopLeft() { diff --git a/test/OpenCvSharp.Tests/core/Rect2fTest.cs b/test/OpenCvSharp.Tests/core/Rect2fTest.cs index b3ee5882c..cb223f91e 100644 --- a/test/OpenCvSharp.Tests/core/Rect2fTest.cs +++ b/test/OpenCvSharp.Tests/core/Rect2fTest.cs @@ -1,17 +1,10 @@ using Xunit; -using Xunit.Abstractions; namespace OpenCvSharp.Tests.Core; +// ReSharper disable once InconsistentNaming public class Rect2fTest { - private readonly ITestOutputHelper testOutputHelper; - - public Rect2fTest(ITestOutputHelper testOutputHelper) - { - this.testOutputHelper = testOutputHelper; - } - [Fact] public void TopLeft() { diff --git a/test/OpenCvSharp.Tests/core/RectTest.cs b/test/OpenCvSharp.Tests/core/RectTest.cs index 6a90f04a2..b545197c1 100644 --- a/test/OpenCvSharp.Tests/core/RectTest.cs +++ b/test/OpenCvSharp.Tests/core/RectTest.cs @@ -1,15 +1,14 @@ -using Xunit; -using Xunit.Abstractions; +using System.Runtime.InteropServices; +using Xunit; namespace OpenCvSharp.Tests.Core; public class RectTest { - private readonly ITestOutputHelper testOutputHelper; - - public RectTest(ITestOutputHelper testOutputHelper) + [Fact] + public void SizeOf() { - this.testOutputHelper = testOutputHelper; + Assert.Equal(sizeof(int)*4, Marshal.SizeOf()); } [Fact] diff --git a/test/OpenCvSharp.Tests/core/RotatedRectTest.cs b/test/OpenCvSharp.Tests/core/RotatedRectTest.cs new file mode 100644 index 000000000..ebc56b50a --- /dev/null +++ b/test/OpenCvSharp.Tests/core/RotatedRectTest.cs @@ -0,0 +1,47 @@ +using System.Globalization; +using Xunit; + +namespace OpenCvSharp.Tests.Core; + +public class RotatedRectTest +{ + [Fact] + public void FromThreeVertexPoints() + { + for (int angle = -360; angle <= +360; angle++) + { + var rt1 = new RotatedRect( + center: new(50.5f, 50.5f), + size: new(100.5f, 100.5f), + angle: angle); + var p = rt1.Points(); + var rt2 = new RotatedRect(p[0], p[1], p[2]); + + var rt2Native = RotatedRect.FromThreeVertexPoints(p[0], p[1], p[2]); + + // same as native result + Assert.Equal(rt2.Angle, rt2Native.Angle, 1e-4); + Assert.Equal(rt2.Center.X, rt2Native.Center.X, 1e-4); + Assert.Equal(rt2.Center.Y, rt2Native.Center.Y, 1e-4); + Assert.Equal(rt2.Size.Width, rt2Native.Size.Width, 1e-4); + Assert.Equal(rt2.Size.Height, rt2Native.Size.Height, 1e-4); + + const double tolerance = 0.0001; + var angleDiff = Math.Abs(rt2.Angle - rt1.Angle) % 90; + Assert.True( + (angleDiff < tolerance || angleDiff > 90 - tolerance) + && Math.Abs(rt2.Center.X - rt1.Center.X) < tolerance + && Math.Abs(rt2.Center.Y - rt1.Center.Y) < tolerance + && Math.Abs(rt2.Size.Width - rt1.Size.Width) < tolerance + && Math.Abs(rt2.Size.Height - rt1.Size.Height) < tolerance, + string.Format( + CultureInfo.InvariantCulture, + $"angle={angle}\n" + + $"angleDiff = {angleDiff}" + + "1 rtAngle={0} rtCenterX={1} rtCenterY={2} rtWidth={3} rtHeight={4}\n" + + "2 rtAngle={5} rtCenterX={6} rtCenterY={7} rtWidth={8} rtHeight={9}\n", + rt1.Angle, rt1.Center.X, rt1.Center.Y, rt1.Size.Width, rt1.Size.Height, + rt2.Angle, rt2.Center.X, rt2.Center.Y, rt2.Size.Width, rt2.Size.Height)); + } + } +} diff --git a/test/OpenCvSharp.Tests/core/ScalarTest.cs b/test/OpenCvSharp.Tests/core/ScalarTest.cs new file mode 100644 index 000000000..a681aa67c --- /dev/null +++ b/test/OpenCvSharp.Tests/core/ScalarTest.cs @@ -0,0 +1,13 @@ +using System.Runtime.InteropServices; +using Xunit; + +namespace OpenCvSharp.Tests.Core; + +public class ScalarTest +{ + [Fact] + public void SizeOf() + { + Assert.Equal(sizeof(double)*4, Marshal.SizeOf()); + } +} diff --git a/test/OpenCvSharp.Tests/core/SizeTest.cs b/test/OpenCvSharp.Tests/core/SizeTest.cs index eb45a3f9a..5d6effb13 100644 --- a/test/OpenCvSharp.Tests/core/SizeTest.cs +++ b/test/OpenCvSharp.Tests/core/SizeTest.cs @@ -5,6 +5,7 @@ namespace OpenCvSharp.Tests.Core; public class SizeTest { [Fact] + // ReSharper disable once InconsistentNaming public void Size2f() { var obj = new Size2f(0.5, 0.5); @@ -12,7 +13,7 @@ public void Size2f() Assert.Equal(0.5, obj.Height, 6); obj = new Size2f(0.5f, 0.5f); - Assert.Equal(0.5f, obj.Width, 6); - Assert.Equal(0.5f, obj.Height, 6); + Assert.Equal(0.5f, obj.Width, 1e-6); + Assert.Equal(0.5f, obj.Height, 1e-6); } } diff --git a/test/OpenCvSharp.Tests/core/SolveEquationTest.cs b/test/OpenCvSharp.Tests/core/SolveEquationTest.cs index 0e5e45570..ec59047e7 100644 --- a/test/OpenCvSharp.Tests/core/SolveEquationTest.cs +++ b/test/OpenCvSharp.Tests/core/SolveEquationTest.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Generic; -using Xunit; +using Xunit; using Xunit.Abstractions; // ReSharper disable RedundantArgumentDefaultValue @@ -23,13 +21,14 @@ public void ByMat() // 2x + 3y = 26 // (x=4, y=6) - double[,] av = {{1, 1}, + double[,] av = { + {1, 1}, {2, 3}}; - double[] yv = { 10, 26 }; + double[] yv = [10, 26]; - Mat a = new Mat(2, 2, MatType.CV_64FC1, av); - Mat y = new Mat(2, 1, MatType.CV_64FC1, yv); - Mat x = new Mat(); + using var a = Mat.FromPixelData(2, 2, MatType.CV_64FC1, av); + using var y = Mat.FromPixelData(2, 1, MatType.CV_64FC1, yv); + using var x = new Mat(); Cv2.Solve(a, y, x, DecompTypes.LU); @@ -45,9 +44,10 @@ public void ByNormalArray() // 2x + 3y = 26 // (x=4, y=6) - double[,] a = {{1, 1}, + double[,] a = { + {1, 1}, {2, 3}}; - double[] y = { 10, 26 }; + double[] y = [10, 26]; var x = new List(); diff --git a/test/OpenCvSharp.Tests/core/SparseMatTest.cs b/test/OpenCvSharp.Tests/core/SparseMatTest.cs index 960d9cf0c..39bfe00d0 100644 --- a/test/OpenCvSharp.Tests/core/SparseMatTest.cs +++ b/test/OpenCvSharp.Tests/core/SparseMatTest.cs @@ -1,5 +1,4 @@ -using System; -using Xunit; +using Xunit; namespace OpenCvSharp.Tests.Core; @@ -8,7 +7,7 @@ public class SparseMatTest : TestBase [Fact] public void CreateAndDispose() { - using (var sm = new SparseMat(new[] { 10, 20 }, MatType.CV_64FC1)) + using (var sm = new SparseMat([10, 20], MatType.CV_64FC1)) { GC.KeepAlive(sm); } @@ -17,7 +16,7 @@ public void CreateAndDispose() [Fact] public void Dims() { - using (var sm = new SparseMat(new[] { 10, 20 }, MatType.CV_16SC1)) + using (var sm = new SparseMat([10, 20], MatType.CV_16SC1)) { Assert.Equal(2, sm.Dims()); } @@ -26,11 +25,11 @@ public void Dims() [Fact] public void Channels() { - using (var sm = new SparseMat(new[] { 10, 20 }, MatType.CV_32FC4)) + using (var sm = new SparseMat([10, 20], MatType.CV_32FC4)) { Assert.Equal(4, sm.Channels()); } - using (var sm = new SparseMat(new[] { 10, 20 }, MatType.CV_16SC2)) + using (var sm = new SparseMat([10, 20], MatType.CV_16SC2)) { Assert.Equal(2, sm.Channels()); } @@ -39,7 +38,7 @@ public void Channels() [Fact] public void ConvertToMat() { - using (var sm = new SparseMat(new[] { 10, 20 }, MatType.CV_8UC1)) + using (var sm = new SparseMat([10, 20], MatType.CV_8UC1)) using (var m = new Mat()) { sm.ConvertTo(m, MatType.CV_8UC1); diff --git a/test/OpenCvSharp.Tests/core/UMatTest.cs b/test/OpenCvSharp.Tests/core/UMatTest.cs index 50dd8dcd6..d205ebb76 100644 --- a/test/OpenCvSharp.Tests/core/UMatTest.cs +++ b/test/OpenCvSharp.Tests/core/UMatTest.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Generic; -using Xunit; +using Xunit; namespace OpenCvSharp.Tests.Core; @@ -176,8 +174,8 @@ public void SetTo() [Fact] public void Dot() { - using var mat1 = new Mat(2, 1, MatType.CV_32SC1, new[] {1, 2}); - using var mat2 = new Mat(2, 1, MatType.CV_32SC1, new[] {3, 4}); + using var mat1 = Mat.FromPixelData(2, 1, MatType.CV_32SC1, new[] { 1, 2 }); + using var mat2 = Mat.FromPixelData(2, 1, MatType.CV_32SC1, new[] { 3, 4 }); using var umat1 = new UMat(2, 1, MatType.CV_32SC1); using var umat2 = new UMat(2, 1, MatType.CV_32SC1); diff --git a/test/OpenCvSharp.Tests/core/UtilityTest.cs b/test/OpenCvSharp.Tests/core/UtilityTest.cs index ba2c56cc8..f28c8d8c5 100644 --- a/test/OpenCvSharp.Tests/core/UtilityTest.cs +++ b/test/OpenCvSharp.Tests/core/UtilityTest.cs @@ -1,5 +1,4 @@ -using System; -using Xunit; +using Xunit; using Xunit.Abstractions; namespace OpenCvSharp.Tests.Core; @@ -20,7 +19,7 @@ public void GetAndSetNumThreads() // https://docs.opencv.org/3.4/db/de0/group__core__utils.html#gae78625c3c2aa9e0b83ed31b73c6549c0 if(!System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform(System.Runtime.InteropServices.OSPlatform.OSX)) { - int threads = Cv2.GetNumThreads(); + var threads = Cv2.GetNumThreads(); Cv2.SetNumThreads(threads + 1); Assert.Equal(threads + 1, Cv2.GetNumThreads()); @@ -31,10 +30,7 @@ public void GetAndSetNumThreads() } [Fact] - public void GetThreadNum() - { - testOutputHelper.WriteLine("GetThreadNum: {0}", Cv2.GetThreadNum()); - } + public void GetThreadNum() => testOutputHelper.WriteLine("GetThreadNum: {0}", Cv2.GetThreadNum()); [Fact] public void GetBuildInformation() @@ -46,45 +42,35 @@ public void GetBuildInformation() [Fact] public void GetVersionString() { - Assert.NotEmpty(Cv2.GetVersionString()); - testOutputHelper.WriteLine("GetVersionString: {0}", Cv2.GetVersionString()); + var v = Cv2.GetVersionString(); + Assert.NotNull(v); + Assert.NotEmpty(v); + testOutputHelper.WriteLine("GetVersionString: {0}", v); } [Fact] - public void GetVersionMajor() - { - testOutputHelper.WriteLine("GetVersionMajor: {0}", Cv2.GetVersionMajor()); - } + public void GetVersionMajor() + => testOutputHelper.WriteLine("GetVersionMajor: {0}", Cv2.GetVersionMajor()); [Fact] - public void GetVersionMinor() - { - testOutputHelper.WriteLine("GetVersionMinor: {0}", Cv2.GetVersionMinor()); - } + public void GetVersionMinor() + => testOutputHelper.WriteLine("GetVersionMinor: {0}", Cv2.GetVersionMinor()); [Fact] - public void GetVersionRevision() - { - testOutputHelper.WriteLine("GetVersionRevision: {0}", Cv2.GetVersionRevision()); - } + public void GetVersionRevision() + => testOutputHelper.WriteLine("GetVersionRevision: {0}", Cv2.GetVersionRevision()); [Fact] - public void GetTickCount() - { - testOutputHelper.WriteLine("GetTickCount: {0}", Cv2.GetTickCount()); - } + public void GetTickCount() + => testOutputHelper.WriteLine("GetTickCount: {0}", Cv2.GetTickCount()); [Fact] - public void GetTickFrequency() - { - testOutputHelper.WriteLine("GetTickFrequency: {0}", Cv2.GetTickFrequency()); - } + public void GetTickFrequency() + => testOutputHelper.WriteLine("GetTickFrequency: {0}", Cv2.GetTickFrequency()); [Fact] - public void GetCpuTickCount() - { - testOutputHelper.WriteLine("GetCpuTickCount: {0}", Cv2.GetCpuTickCount()); - } + public void GetCpuTickCount() + => testOutputHelper.WriteLine("GetCpuTickCount: {0}", Cv2.GetCpuTickCount()); [Fact] public void CheckHardwareSupport() @@ -98,10 +84,7 @@ public void CheckHardwareSupport() } [Fact] - public void GetHardwareFeatureName() - { - testOutputHelper.WriteLine(Cv2.GetHardwareFeatureName(0)); - } + public void GetHardwareFeatureName() => testOutputHelper.WriteLine(Cv2.GetHardwareFeatureName(0)); [Fact] public void GetCpuFeaturesLine() @@ -112,10 +95,7 @@ public void GetCpuFeaturesLine() [Fact] // ReSharper disable once IdentifierTypo - public void GetNumberOfCpus() - { - Assert.True(1 <= Cv2.GetNumberOfCpus()); - } + public void GetNumberOfCpus() => Assert.True(1 <= Cv2.GetNumberOfCpus()); [Theory] [InlineData(FormatType.Default)] @@ -126,7 +106,7 @@ public void GetNumberOfCpus() [InlineData(FormatType.C)] public void Format(FormatType format) { - using var mat = new Mat(3, 3, MatType.CV_8UC1, new byte[] {1, 2, 3, 4, 5, 6, 7, 8, 9}); + using var mat = Mat.FromPixelData(3, 3, MatType.CV_8UC1, new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 }); var result = Cv2.Format(mat, format); Assert.NotEmpty(result); testOutputHelper.WriteLine("Format: {0}", format); @@ -142,7 +122,7 @@ public void Format(FormatType format) [InlineData(FormatType.C)] public void Dump(FormatType format) { - using var mat = new Mat(3, 3, MatType.CV_8UC1, new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 }); + using var mat = Mat.FromPixelData(3, 3, MatType.CV_8UC1, new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 }); var result = mat.Dump(format); Assert.NotEmpty(result); Assert.Equal(Cv2.Format(mat, format), result); diff --git a/test/OpenCvSharp.Tests/core/VecTest.cs b/test/OpenCvSharp.Tests/core/VecTest.cs index c52ff6869..794cf6e44 100644 --- a/test/OpenCvSharp.Tests/core/VecTest.cs +++ b/test/OpenCvSharp.Tests/core/VecTest.cs @@ -1,6 +1,4 @@ -using System; -using System.Linq; -using System.Reflection; +using System.Reflection; using Xunit; #pragma warning disable CA5394 // Do not use insecure randomness @@ -167,10 +165,10 @@ static void CheckByType(int channels) .First(pp => pp.GetIndexParameters() .Select(pr => pr.ParameterType) - .SequenceEqual(new []{typeof(int)})); + .SequenceEqual([typeof(int)])); var value = GetRandomValue(rand); - pi.SetValue(obj, value, new object[]{i}); + pi.SetValue(obj, value, [i]); Assert.Equal(value, (T)pi.GetValue(obj, new object[]{i})!); } } diff --git a/test/OpenCvSharp.Tests/dnn/CaffeTest.cs b/test/OpenCvSharp.Tests/dnn/CaffeTest.cs index e4b41410b..3c9275316 100644 --- a/test/OpenCvSharp.Tests/dnn/CaffeTest.cs +++ b/test/OpenCvSharp.Tests/dnn/CaffeTest.cs @@ -1,7 +1,4 @@ -using System; -using System.IO; -using System.Linq; -using OpenCvSharp.Dnn; +using OpenCvSharp.Dnn; using Xunit; using Xunit.Abstractions; @@ -16,7 +13,7 @@ public class CaffeTest : TestBase, IClassFixture public CaffeTest(ITestOutputHelper testOutputHelper, DnnDataFixture fixture) { - if (fixture == null) + if (fixture is null) throw new ArgumentNullException(nameof(fixture)); this.testOutputHelper = testOutputHelper; caffe = fixture.Caffe.Value; @@ -35,7 +32,7 @@ public void LoadCaffeModel() Assert.Equal(1, net.GetLayerId(layerName!)); // Convert Mat to batch of images - using var img = Image(@"space_shuttle.jpg"); + using var img = LoadImage(@"space_shuttle.jpg"); using var inputBlob = CvDnn.BlobFromImage(img, 1, new Size(224, 224), new Scalar(104, 117, 123)); net.SetInput(inputBlob, "data"); using var prob = net.Forward("prob"); diff --git a/test/OpenCvSharp.Tests/dnn/DnnDataFixture.cs b/test/OpenCvSharp.Tests/dnn/DnnDataFixture.cs index e9b7665fd..0d52c7642 100644 --- a/test/OpenCvSharp.Tests/dnn/DnnDataFixture.cs +++ b/test/OpenCvSharp.Tests/dnn/DnnDataFixture.cs @@ -1,10 +1,5 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using OpenCvSharp.Dnn; +using OpenCvSharp.Dnn; using Xunit; -using Xunit.Abstractions; namespace OpenCvSharp.Tests.Dnn; diff --git a/test/OpenCvSharp.Tests/dnn/EastTextDetectionTest.cs b/test/OpenCvSharp.Tests/dnn/EastTextDetectionTest.cs index 0029c5033..fc0206d93 100644 --- a/test/OpenCvSharp.Tests/dnn/EastTextDetectionTest.cs +++ b/test/OpenCvSharp.Tests/dnn/EastTextDetectionTest.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Net; -using System.Runtime.InteropServices; +using System.Runtime.InteropServices; using System.Text; using ICSharpCode.SharpZipLib.GZip; using ICSharpCode.SharpZipLib.Tar; @@ -190,8 +185,8 @@ private static unsafe void Decode(Mat scores, Mat geometry, float confThreshold, boxes = new List(); confidences = new List(); - if ((scores == null || scores.Dims != 4 || scores.Size(0) != 1 || scores.Size(1) != 1) || - (geometry == null || geometry.Dims != 4 || geometry.Size(0) != 1 || geometry.Size(1) != 5) || + if ((scores is null || scores.Dims != 4 || scores.Size(0) != 1 || scores.Size(1) != 1) || + (geometry is null || geometry.Dims != 4 || geometry.Size(0) != 1 || geometry.Size(1) != 5) || (scores.Size(2) != geometry.Size(2) || scores.Size(3) != geometry.Size(3))) { return; diff --git a/test/OpenCvSharp.Tests/dnn/ModelDownloader.cs b/test/OpenCvSharp.Tests/dnn/ModelDownloader.cs index c09f99f22..4b300f644 100644 --- a/test/OpenCvSharp.Tests/dnn/ModelDownloader.cs +++ b/test/OpenCvSharp.Tests/dnn/ModelDownloader.cs @@ -1,7 +1,4 @@ -using System; -using System.IO; - -namespace OpenCvSharp.Tests.Dnn; +namespace OpenCvSharp.Tests.Dnn; internal static class ModelDownloader { diff --git a/test/OpenCvSharp.Tests/dnn/NetTest.cs b/test/OpenCvSharp.Tests/dnn/NetTest.cs index 061a6c1c5..76d47762e 100644 --- a/test/OpenCvSharp.Tests/dnn/NetTest.cs +++ b/test/OpenCvSharp.Tests/dnn/NetTest.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Dnn; +using OpenCvSharp.Dnn; using Xunit; using Xunit.Abstractions; @@ -12,7 +11,7 @@ public class NetTest : TestBase, IClassFixture public NetTest(ITestOutputHelper testOutputHelper, DnnDataFixture fixture) { - if (fixture == null) + if (fixture is null) throw new ArgumentNullException(nameof(fixture)); this.testOutputHelper = testOutputHelper; caffeData = fixture.Caffe.Value; diff --git a/test/OpenCvSharp.Tests/dnn/TensorflowTest.cs b/test/OpenCvSharp.Tests/dnn/TensorflowTest.cs index 02898ffcd..d68279d7f 100644 --- a/test/OpenCvSharp.Tests/dnn/TensorflowTest.cs +++ b/test/OpenCvSharp.Tests/dnn/TensorflowTest.cs @@ -1,8 +1,4 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Text; -using OpenCvSharp.Dnn; +using OpenCvSharp.Dnn; using Xunit; #pragma warning disable CA1707 @@ -11,13 +7,13 @@ namespace OpenCvSharp.Tests.Dnn; public class TensorflowTest : TestBase { - [Fact] + [PlatformSpecificFact("Windows", "Linux")] // ReSharper disable once IdentifierTypo public void LoadMnistTrainingDataFromFile_NetRecognizesAnImageOfA9Correctly() { - using var img_of_9 = Image(Path.Combine("Dnn","MNIST_9.png"), ImreadModes.Grayscale); + using var imgOf9 = LoadImage(Path.Combine("Dnn","MNIST_9.png"), ImreadModes.Grayscale); - var img9DataBlob = CvDnn.BlobFromImage(img_of_9, 1f / 255.0f); + var img9DataBlob = CvDnn.BlobFromImage(imgOf9, 1f / 255.0f); var modelPath = Path.Combine("_data", "model", "MNISTTest_tensorflow.pb"); var res = -1; @@ -32,14 +28,14 @@ public void LoadMnistTrainingDataFromFile_NetRecognizesAnImageOfA9Correctly() Assert.Equal(9, res); } - - [Fact] + + [PlatformSpecificFact("Windows", "Linux")] // ReSharper disable once IdentifierTypo public void LoadMnistTrainingDataFromStream_NetRecognizesAnImageOfA5Correctly() { - using var img_of_5 = Image(Path.Combine("Dnn", "MNIST_5.png"), ImreadModes.Grayscale); + using var imgOf5 = LoadImage(Path.Combine("Dnn", "MNIST_5.png"), ImreadModes.Grayscale); - var img5DataBlob = CvDnn.BlobFromImage(img_of_5, 1f / 255.0f); + var img5DataBlob = CvDnn.BlobFromImage(imgOf5, 1f / 255.0f); var modelPath = Path.Combine("_data", "model", "MNISTTest_tensorflow.pb"); var res = -1; diff --git a/test/OpenCvSharp.Tests/dnn/YoloTest.cs b/test/OpenCvSharp.Tests/dnn/YoloTest.cs index e8eeba531..fc95d882b 100644 --- a/test/OpenCvSharp.Tests/dnn/YoloTest.cs +++ b/test/OpenCvSharp.Tests/dnn/YoloTest.cs @@ -1,7 +1,4 @@ -using System; -using System.IO; -using System.Linq; -using OpenCvSharp.Dnn; +using OpenCvSharp.Dnn; using Xunit; using Xunit.Abstractions; @@ -40,7 +37,7 @@ public void LoadYoloV2Model() Assert.False(net!.Empty()); // Convert Mat to batch of images - using var img = Image(@"space_shuttle.jpg"); + using var img = LoadImage(@"space_shuttle.jpg"); using var inputBlob = CvDnn.BlobFromImage(img, 1, new Size(224, 224), new Scalar(104, 117, 123)); // Set input blob net.SetInput(inputBlob, "data"); @@ -70,14 +67,14 @@ public void LoadYoloV3Model() RunGC(); using (var net = CvDnn.ReadNetFromDarknet(cfgFile, darknetModel)) - using (var img = Image(@"space_shuttle.jpg")) + using (var img = LoadImage(@"space_shuttle.jpg")) { Assert.NotNull(net); Assert.False(net!.Empty()); var outNames = net.GetUnconnectedOutLayersNames(); Assert.NotEmpty(outNames); - Assert.DoesNotContain(outNames, elem => elem == null); + Assert.DoesNotContain(outNames, elem => elem is null); testOutputHelper.WriteLine("UnconnectedOutLayersNames: {0}", string.Join(",", outNames)); // Convert Mat to batch of images diff --git a/test/OpenCvSharp.Tests/dnn_superres/DnnSuperResImplTest.cs b/test/OpenCvSharp.Tests/dnn_superres/DnnSuperResImplTest.cs index 37fd69d7f..6d38edbb7 100644 --- a/test/OpenCvSharp.Tests/dnn_superres/DnnSuperResImplTest.cs +++ b/test/OpenCvSharp.Tests/dnn_superres/DnnSuperResImplTest.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Text; -using OpenCvSharp.DnnSuperres; +using OpenCvSharp.DnnSuperres; using Xunit; namespace OpenCvSharp.Tests.DnnSuperres; diff --git a/test/OpenCvSharp.Tests/face/FacemarkAAMTest.cs b/test/OpenCvSharp.Tests/face/FacemarkAAMTest.cs index 316c59ac4..b31e9e8f8 100644 --- a/test/OpenCvSharp.Tests/face/FacemarkAAMTest.cs +++ b/test/OpenCvSharp.Tests/face/FacemarkAAMTest.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Face; +using OpenCvSharp.Face; using Xunit; namespace OpenCvSharp.Tests.Face; @@ -41,7 +40,7 @@ public void GetFaces() parameter.Scales = new float[] {2, 4}; using (var facemark = FacemarkAAM.Create(parameter)) - using (var img = Image("lenna.png")) + using (var img = LoadImage("lenna.png")) { bool ret = facemark.GetFaces(img, out var faces); Assert.True(ret); @@ -110,7 +109,7 @@ public void ParameterNIter() [Fact] public void ParameterScales() { - float[] value = { 1, 2, 3 }; + float[] value = [1, 2, 3]; using (var parameter = new FacemarkAAM.Params()) { diff --git a/test/OpenCvSharp.Tests/face/FacemarkLBFTest.cs b/test/OpenCvSharp.Tests/face/FacemarkLBFTest.cs index 72b803439..97c64911c 100644 --- a/test/OpenCvSharp.Tests/face/FacemarkLBFTest.cs +++ b/test/OpenCvSharp.Tests/face/FacemarkLBFTest.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Face; +using OpenCvSharp.Face; using Xunit; namespace OpenCvSharp.Tests.Face; @@ -66,7 +65,7 @@ public void ParameterDetectROI() [Fact] public void ParameterFeatsM() { - int[] value = {9, 8, 7, 6, 5}; + int[] value = [9, 8, 7, 6, 5]; using (var parameter = new FacemarkLBF.Params()) { @@ -114,7 +113,7 @@ public void ParameterNLandmarks() [Fact] public void ParameterPupils0() { - int[] value = { 9, 8, 7, 6, 5 }; + int[] value = [9, 8, 7, 6, 5]; using (var parameter = new FacemarkLBF.Params()) { @@ -126,7 +125,7 @@ public void ParameterPupils0() [Fact] public void ParameterPupils1() { - int[] value = { 9, 8, 7, 6, 5 }; + int[] value = [9, 8, 7, 6, 5]; using (var parameter = new FacemarkLBF.Params()) { @@ -138,7 +137,7 @@ public void ParameterPupils1() [Fact] public void ParameterRadiusM() { - double[] value = { 1, 2, 3 }; + double[] value = [1, 2, 3]; using (var parameter = new FacemarkLBF.Params()) { diff --git a/test/OpenCvSharp.Tests/face/LBPHFaceRecognizerTest.cs b/test/OpenCvSharp.Tests/face/LBPHFaceRecognizerTest.cs index e96866f47..488d40ef6 100644 --- a/test/OpenCvSharp.Tests/face/LBPHFaceRecognizerTest.cs +++ b/test/OpenCvSharp.Tests/face/LBPHFaceRecognizerTest.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Face; +using OpenCvSharp.Face; using Xunit; using Xunit.Abstractions; @@ -25,14 +24,14 @@ public void CreateAndDispose() [Fact] public void TrainAndPredict() { - using var image = Image("lenna.png"); + using var image = LoadImage("lenna.png"); using var grayImage = image.CvtColor(ColorConversionCodes.BGR2GRAY); using var model = LBPHFaceRecognizer.Create(); using var cascade = new CascadeClassifier("_data/text/haarcascade_frontalface_default.xml"); var rects = cascade.DetectMultiScale(image); - model.Train(new[] { grayImage }, new[] { 1 }); + model.Train([grayImage], [1]); foreach (Rect rect in rects) { diff --git a/test/OpenCvSharp.Tests/features2d/BOWImgDescriptorExtractorTest.cs b/test/OpenCvSharp.Tests/features2d/BOWImgDescriptorExtractorTest.cs index e371a4c18..8a44fb602 100644 --- a/test/OpenCvSharp.Tests/features2d/BOWImgDescriptorExtractorTest.cs +++ b/test/OpenCvSharp.Tests/features2d/BOWImgDescriptorExtractorTest.cs @@ -80,7 +80,7 @@ public void RunTest() { using var descriptorExtractor = SIFT.Create(500); using var descriptorMatcher = new BFMatcher(); - using var img = Image("lenna.png"); + using var img = LoadImage("lenna.png"); KeyPoint[] keypoints; Mat dictionary; var tc = new TermCriteria(CriteriaTypes.MaxIter, 100, 0.001d); diff --git a/test/OpenCvSharp.Tests/features2d/FastFeatureDetectorTest.cs b/test/OpenCvSharp.Tests/features2d/FastFeatureDetectorTest.cs index a381d0353..161aaa19b 100644 --- a/test/OpenCvSharp.Tests/features2d/FastFeatureDetectorTest.cs +++ b/test/OpenCvSharp.Tests/features2d/FastFeatureDetectorTest.cs @@ -24,7 +24,7 @@ public void CreateAndDispose() public void Detect() { KeyPoint[] keyPoints; - using (var gray = Image("lenna.png", 0)) + using (var gray = LoadImage("lenna.png", 0)) using (var orb = FastFeatureDetector.Create()) keyPoints = orb.Detect(gray); diff --git a/test/OpenCvSharp.Tests/features2d/FlannBasedMatcherTest.cs b/test/OpenCvSharp.Tests/features2d/FlannBasedMatcherTest.cs index a0c191a81..abaaa4367 100644 --- a/test/OpenCvSharp.Tests/features2d/FlannBasedMatcherTest.cs +++ b/test/OpenCvSharp.Tests/features2d/FlannBasedMatcherTest.cs @@ -9,8 +9,8 @@ public class FlannBasedMatcherTest : TestBase [Fact] public void Mathing() { - using var img1 = Image("tsukuba_left.png", ImreadModes.Grayscale); - using var img2 = Image("tsukuba_right.png", ImreadModes.Grayscale); + using var img1 = LoadImage("tsukuba_left.png", ImreadModes.Grayscale); + using var img2 = LoadImage("tsukuba_right.png", ImreadModes.Grayscale); using var orb = ORB.Create(500); using var descriptor1 = new Mat(); using var descriptor2 = new Mat(); @@ -41,8 +41,8 @@ public void Mathing() [Fact] public void MathingWithKDTreeIndexParams() { - using var img1 = Image("tsukuba_left.png", ImreadModes.Grayscale); - using var img2 = Image("tsukuba_right.png", ImreadModes.Grayscale); + using var img1 = LoadImage("tsukuba_left.png", ImreadModes.Grayscale); + using var img2 = LoadImage("tsukuba_right.png", ImreadModes.Grayscale); using var orb = ORB.Create(500); using var descriptor1 = new Mat(); using var descriptor2 = new Mat(); @@ -75,8 +75,8 @@ public void MathingWithKDTreeIndexParams() [Fact] public void MathingWithLshIndexParams() { - using var img1 = Image("tsukuba_left.png", ImreadModes.Grayscale); - using var img2 = Image("tsukuba_right.png", ImreadModes.Grayscale); + using var img1 = LoadImage("tsukuba_left.png", ImreadModes.Grayscale); + using var img2 = LoadImage("tsukuba_right.png", ImreadModes.Grayscale); using var orb = ORB.Create(500); using var descriptor1 = new Mat(); using var descriptor2 = new Mat(); diff --git a/test/OpenCvSharp.Tests/features2d/ORBTest.cs b/test/OpenCvSharp.Tests/features2d/ORBTest.cs index ee24d60e1..c325c5fb7 100644 --- a/test/OpenCvSharp.Tests/features2d/ORBTest.cs +++ b/test/OpenCvSharp.Tests/features2d/ORBTest.cs @@ -24,7 +24,7 @@ public void CreateAndDispose() public void Detect() { // This parameter should introduce same result of http://opencv.jp/wordpress/wp-content/uploads/lenna_SURF-150x150.png - using var gray = Image("lenna.png", 0); + using var gray = LoadImage("lenna.png", 0); using var orb = ORB.Create(500); var keyPoints = orb.Detect(gray); @@ -34,7 +34,7 @@ public void Detect() [Fact] public void DetectAndCompute() { - using (var gray = Image("lenna.png", ImreadModes.Grayscale)) + using (var gray = LoadImage("lenna.png", ImreadModes.Grayscale)) using (var orb = ORB.Create(500)) using (Mat descriptor = new Mat()) { diff --git a/test/OpenCvSharp.Tests/features2d/SIFTTest.cs b/test/OpenCvSharp.Tests/features2d/SIFTTest.cs index 67c3388a8..a1e3865e1 100644 --- a/test/OpenCvSharp.Tests/features2d/SIFTTest.cs +++ b/test/OpenCvSharp.Tests/features2d/SIFTTest.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Features2D; +using OpenCvSharp.Features2D; using Xunit; using Xunit.Abstractions; @@ -26,7 +25,7 @@ public void CreateAndDispose() public void Detect() { KeyPoint[] keyPoints; - using (var gray = Image("lenna.png", 0)) + using (var gray = LoadImage("lenna.png", 0)) using (var alg = SIFT.Create(500)) keyPoints = alg.Detect(gray); diff --git a/test/OpenCvSharp.Tests/highgui/HighGuiTest.cs b/test/OpenCvSharp.Tests/highgui/HighGuiTest.cs index 9c9d92a0b..58607672f 100644 --- a/test/OpenCvSharp.Tests/highgui/HighGuiTest.cs +++ b/test/OpenCvSharp.Tests/highgui/HighGuiTest.cs @@ -1,5 +1,4 @@ -using System; -using Xunit; +using Xunit; namespace OpenCvSharp.Tests.HighGui; diff --git a/test/OpenCvSharp.Tests/highgui/TrackbarTest.cs b/test/OpenCvSharp.Tests/highgui/TrackbarTest.cs index b95750632..b0815dd21 100644 --- a/test/OpenCvSharp.Tests/highgui/TrackbarTest.cs +++ b/test/OpenCvSharp.Tests/highgui/TrackbarTest.cs @@ -11,7 +11,7 @@ public class TrackbarTest : TestBase //[Apartment(ApartmentState.STA)] public void RunTest() { - using var src = Image(@"lenna.png", ImreadModes.AnyDepth | ImreadModes.AnyColor); + using var src = LoadImage(@"lenna.png", ImreadModes.AnyDepth | ImreadModes.AnyColor); using var dst = new Mat(); src.CopyTo(dst); diff --git a/test/OpenCvSharp.Tests/img_hash/AverageHashTest.cs b/test/OpenCvSharp.Tests/img_hash/AverageHashTest.cs index 918c02981..f6bde51a9 100644 --- a/test/OpenCvSharp.Tests/img_hash/AverageHashTest.cs +++ b/test/OpenCvSharp.Tests/img_hash/AverageHashTest.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.ImgHash; +using OpenCvSharp.ImgHash; using Xunit; namespace OpenCvSharp.Tests.ImgHash; @@ -19,7 +18,7 @@ public void CreateAndDispose() public void Compute() { using (var model = AverageHash.Create()) - using (var img = Image("lenna.png")) + using (var img = LoadImage("lenna.png")) using (var hash = new Mat()) { model.Compute(img, hash); @@ -43,7 +42,7 @@ public void Compute() public void CompareSameImage() { using (var model = AverageHash.Create()) - using (var img1 = Image("lenna.png", ImreadModes.Grayscale)) + using (var img1 = LoadImage("lenna.png", ImreadModes.Grayscale)) { double hash = model.Compare(img1, img1); Assert.Equal(0, hash, 6); @@ -54,8 +53,8 @@ public void CompareSameImage() public void CompareDifferentImage() { using (var model = AverageHash.Create()) - using (var img1 = Image("lenna.png", ImreadModes.Grayscale)) - using (var img2 = Image("building.jpg", ImreadModes.Grayscale)) + using (var img1 = LoadImage("lenna.png", ImreadModes.Grayscale)) + using (var img2 = LoadImage("building.jpg", ImreadModes.Grayscale)) { var size = new Size(256, 256); using (var scaledImg1 = img1.Resize(size)) diff --git a/test/OpenCvSharp.Tests/img_hash/BlockMeanHashTest.cs b/test/OpenCvSharp.Tests/img_hash/BlockMeanHashTest.cs index 42b435728..da77c69d5 100644 --- a/test/OpenCvSharp.Tests/img_hash/BlockMeanHashTest.cs +++ b/test/OpenCvSharp.Tests/img_hash/BlockMeanHashTest.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.ImgHash; +using OpenCvSharp.ImgHash; using Xunit; namespace OpenCvSharp.Tests.ImgHash; @@ -23,7 +22,7 @@ public void CreateAndDispose() public void ComputeMode0() { using (var model = BlockMeanHash.Create(BlockMeanHashMode.Mode0)) - using (var img = Image("lenna.png")) + using (var img = LoadImage("lenna.png")) using (var hash = new Mat()) { model.Compute(img, hash); @@ -33,7 +32,7 @@ public void ComputeMode0() var hashArray = hash.ToArray(); Assert.Equal( - new byte[]{ 243, 61, 243, 61, 195, 63, 226, 151, 226, 159, 250, 223, 50, 206, 18, 231, 130, 226, 130, 227, 130, 243, 130, 243, 2, 243, 2, 87, 2, 127, 2, 47 }, + [243, 61, 243, 61, 195, 63, 226, 151, 226, 159, 250, 223, 50, 206, 18, 231, 130, 226, 130, 227, 130, 243, 130, 243, 2, 243, 2, 87, 2, 127, 2, 47], hashArray); } } @@ -42,7 +41,7 @@ public void ComputeMode0() public void ComputeMode1() { using (var model = BlockMeanHash.Create(BlockMeanHashMode.Mode1)) - using (var img = Image("lenna.png")) + using (var img = LoadImage("lenna.png")) using (var hash = new Mat()) { model.Compute(img, hash); @@ -52,15 +51,14 @@ public void ComputeMode1() var hashArray = hash.ToArray(); Assert.Equal( - new byte[] - { + [ 135, 255, 243, 135, 131, 255, 249, 199, 193, 255, 252, 227, 224, 127, 254, 113, 128, 127, 127, 48, 192, 191, 25, 24, 240, 255, 4, 13, 248, 127, 135, 134, 252, 255, 99, 67, 254, 255, 184, 113, 255, 127, 220, 240, 195, 31, 111, 120, 224, 135, 55, 12, 248, 192, 27, 6, 126, 240, 13, 128, 63, 248, 6, 64, 14, 126, 3, 48, 7, 191, 3, 248, 131, 159, 1, 248, 193, 207, 0, 252, 240, 103, 0, 126, 248, 59, 0, 63, 254, 29, 0, 15, 255, 14, 0, 135, 127, 6, 128, 131, 63, 3, 224, 103, 206, 0, 240, 247, 99, 0, 248, 255, 49, 0, 252, 255, 24, 0, 254, 49, 0 - }, + ], hashArray); } } @@ -71,7 +69,7 @@ public void ComputeMode1() public void CompareSameImage(BlockMeanHashMode mode) { using (var model = BlockMeanHash.Create(mode)) - using (var img1 = Image("lenna.png", ImreadModes.Grayscale)) + using (var img1 = LoadImage("lenna.png", ImreadModes.Grayscale)) { double hash = model.Compare(img1, img1); Assert.Equal(0, hash, 6); @@ -84,8 +82,8 @@ public void CompareSameImage(BlockMeanHashMode mode) public void CompareDifferentImage(BlockMeanHashMode mode) { using (var model = BlockMeanHash.Create(mode)) - using (var img1 = Image("lenna.png", ImreadModes.Grayscale)) - using (var img2 = Image("building.jpg", ImreadModes.Grayscale)) + using (var img1 = LoadImage("lenna.png", ImreadModes.Grayscale)) + using (var img2 = LoadImage("building.jpg", ImreadModes.Grayscale)) { var size = new Size(256, 256); using (var scaledImg1 = img1.Resize(size)) diff --git a/test/OpenCvSharp.Tests/img_hash/ColorMomentHashTest.cs b/test/OpenCvSharp.Tests/img_hash/ColorMomentHashTest.cs index 0efe52470..985c7b778 100644 --- a/test/OpenCvSharp.Tests/img_hash/ColorMomentHashTest.cs +++ b/test/OpenCvSharp.Tests/img_hash/ColorMomentHashTest.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.ImgHash; +using OpenCvSharp.ImgHash; using Xunit; namespace OpenCvSharp.Tests.ImgHash; @@ -19,7 +18,7 @@ public void CreateAndDispose() public void Compute() { using (var model = ColorMomentHash.Create()) - using (var img = Image("lenna.png")) + using (var img = LoadImage("lenna.png")) using (var hash = new Mat()) { model.Compute(img, hash); @@ -29,8 +28,7 @@ public void Compute() var hashArray = hash.ToArray(); Assert.Equal( - new [] - { + [ 0.00168799895166844, 9.73548985026306E-09, 7.12008515499876E-12, 1.58206172228354E-10, 5.28813826840171E-21, 1.29337857065483E-14, 4.79075399951684E-22, 0.00128609224067447, 9.52599959124291E-10, 3.93698021400622E-12, 7.14400696815386E-12, 3.78255159833954E-23, @@ -42,7 +40,7 @@ public void Compute() -2.7254690880086E-26, 1.04487497633728E-18, -3.47059704207128E-27, 0.00139981947147226, 2.27201044977745E-09, 4.41887540236722E-13, 7.28673251542401E-13, -4.09431968883588E-25, 3.10909057900972E-17, -5.77204894690052E-26 - }, + ], hashArray, new DoubleEqualityComparer(1E-12)); } } @@ -51,7 +49,7 @@ public void Compute() public void CompareSameImage() { using (var model = ColorMomentHash.Create()) - using (var img1 = Image("lenna.png", ImreadModes.Grayscale)) + using (var img1 = LoadImage("lenna.png", ImreadModes.Grayscale)) { double hash = model.Compare(img1, img1); Assert.Equal(0, hash, 6); @@ -62,8 +60,8 @@ public void CompareSameImage() public void CompareDifferentImage() { using (var model = ColorMomentHash.Create()) - using (var img1 = Image("lenna.png", ImreadModes.Grayscale)) - using (var img2 = Image("building.jpg", ImreadModes.Grayscale)) + using (var img1 = LoadImage("lenna.png", ImreadModes.Grayscale)) + using (var img2 = LoadImage("building.jpg", ImreadModes.Grayscale)) { var size = new Size(256, 256); using (var scaledImg1 = img1.Resize(size)) diff --git a/test/OpenCvSharp.Tests/img_hash/MarrHildrethHashTest.cs b/test/OpenCvSharp.Tests/img_hash/MarrHildrethHashTest.cs index 1bd96cc3d..4ee2d7f07 100644 --- a/test/OpenCvSharp.Tests/img_hash/MarrHildrethHashTest.cs +++ b/test/OpenCvSharp.Tests/img_hash/MarrHildrethHashTest.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.ImgHash; +using OpenCvSharp.ImgHash; using Xunit; namespace OpenCvSharp.Tests.ImgHash; @@ -19,7 +18,7 @@ public void CreateAndDispose() public void Compute() { using (var model = MarrHildrethHash.Create()) - using (var img = Image("lenna.png")) + using (var img = LoadImage("lenna.png")) using (var hash = new Mat()) { model.Compute(img, hash); @@ -29,9 +28,9 @@ public void Compute() var hashArray = hash.ToArray(); Assert.Equal( - new byte[]{ 208, 54, 63, 31, 143, 199, 227, 241, 192, 124, 126, 39, 3, 205, 192, 124, 126, 63, 228, 150, 199, 194, + [ 208, 54, 63, 31, 143, 199, 227, 241, 192, 124, 126, 39, 3, 205, 192, 124, 126, 63, 228, 150, 199, 194, 242, 254, 208, 143, 201, 105, 118, 57, 5, 191, 3, 99, 177, 224, 15, 137, 153, 58, 5, 129, 63, 193, 216, 228, - 112, 100, 129, 176, 248, 255, 110, 7, 230, 16, 193, 231, 207, 135, 0, 150, 120, 5, 191, 60, 18, 114, 119, 131, 150, 31 }, + 112, 100, 129, 176, 248, 255, 110, 7, 230, 16, 193, 231, 207, 135, 0, 150, 120, 5, 191, 60, 18, 114, 119, 131, 150, 31 ], hashArray); } } @@ -40,7 +39,7 @@ public void Compute() public void CompareSameImage() { using (var model = MarrHildrethHash.Create()) - using (var img1 = Image("lenna.png", ImreadModes.Grayscale)) + using (var img1 = LoadImage("lenna.png", ImreadModes.Grayscale)) { double hash = model.Compare(img1, img1); Assert.Equal(0, hash, 6); @@ -51,8 +50,8 @@ public void CompareSameImage() public void CompareDifferentImage() { using (var model = MarrHildrethHash.Create()) - using (var img1 = Image("lenna.png", ImreadModes.Grayscale)) - using (var img2 = Image("building.jpg", ImreadModes.Grayscale)) + using (var img1 = LoadImage("lenna.png", ImreadModes.Grayscale)) + using (var img2 = LoadImage("building.jpg", ImreadModes.Grayscale)) { var size = new Size(256, 256); using (var scaledImg1 = img1.Resize(size)) diff --git a/test/OpenCvSharp.Tests/img_hash/PHashTest.cs b/test/OpenCvSharp.Tests/img_hash/PHashTest.cs index 05ac3af21..a8abc7f48 100644 --- a/test/OpenCvSharp.Tests/img_hash/PHashTest.cs +++ b/test/OpenCvSharp.Tests/img_hash/PHashTest.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.ImgHash; +using OpenCvSharp.ImgHash; using Xunit; namespace OpenCvSharp.Tests.ImgHash; @@ -19,7 +18,7 @@ public void CreateAndDispose() public void Compute() { using (var model = PHash.Create()) - using (var img = Image("lenna.png")) + using (var img = LoadImage("lenna.png")) using (var hash = new Mat()) { model.Compute(img, hash); @@ -43,7 +42,7 @@ public void Compute() public void CompareSameImage() { using (var model = PHash.Create()) - using (var img1 = Image("lenna.png", ImreadModes.Grayscale)) + using (var img1 = LoadImage("lenna.png", ImreadModes.Grayscale)) { double hash = model.Compare(img1, img1); Assert.Equal(0, hash, 6); @@ -54,8 +53,8 @@ public void CompareSameImage() public void CompareDifferentImage() { using (var model = PHash.Create()) - using (var img1 = Image("lenna.png", ImreadModes.Grayscale)) - using (var img2 = Image("building.jpg", ImreadModes.Grayscale)) + using (var img1 = LoadImage("lenna.png", ImreadModes.Grayscale)) + using (var img2 = LoadImage("building.jpg", ImreadModes.Grayscale)) { var size = new Size(256, 256); using (var scaledImg1 = img1.Resize(size)) diff --git a/test/OpenCvSharp.Tests/img_hash/RadialVarianceHashTest.cs b/test/OpenCvSharp.Tests/img_hash/RadialVarianceHashTest.cs index f49961c37..17513c086 100644 --- a/test/OpenCvSharp.Tests/img_hash/RadialVarianceHashTest.cs +++ b/test/OpenCvSharp.Tests/img_hash/RadialVarianceHashTest.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.ImgHash; +using OpenCvSharp.ImgHash; using Xunit; namespace OpenCvSharp.Tests.ImgHash; @@ -19,7 +18,7 @@ public void CreateAndDispose() public void Compute() { using (var model = RadialVarianceHash.Create()) - using (var img = Image("lenna.png")) + using (var img = LoadImage("lenna.png")) using (var hash = new Mat()) { model.Compute(img, hash); @@ -29,8 +28,8 @@ public void Compute() var hashArray = hash.ToArray(); Assert.Equal( - new byte[]{ 142, 0, 209, 255, 100, 131, 131, 190, 107, 68, 192, 159, 136, 135, 131, 159, 129, 184, 140, 134, - 145, 120, 162, 157, 136, 142, 139, 134, 149, 146, 134, 151, 137, 139, 148, 144, 140, 135, 144, 144 }, + [ 142, 0, 209, 255, 100, 131, 131, 190, 107, 68, 192, 159, 136, 135, 131, 159, 129, 184, 140, 134, + 145, 120, 162, 157, 136, 142, 139, 134, 149, 146, 134, 151, 137, 139, 148, 144, 140, 135, 144, 144 ], hashArray); } } @@ -39,7 +38,7 @@ public void Compute() public void CompareSameImage() { using (var model = RadialVarianceHash.Create()) - using (var img1 = Image("lenna.png", ImreadModes.Grayscale)) + using (var img1 = LoadImage("lenna.png", ImreadModes.Grayscale)) { var size = new Size(40, 40); using (var scaledImg1 = img1.Resize(size)) @@ -55,8 +54,8 @@ public void CompareSameImage() public void CompareDifferentImage() { using (var model = RadialVarianceHash.Create()) - using (var img1 = Image("lenna.png", ImreadModes.Grayscale)) - using (var img2 = Image("building.jpg", ImreadModes.Grayscale)) + using (var img1 = LoadImage("lenna.png", ImreadModes.Grayscale)) + using (var img2 = LoadImage("building.jpg", ImreadModes.Grayscale)) { var size = new Size(40, 40); using (var scaledImg1 = img1.Resize(size)) diff --git a/test/OpenCvSharp.Tests/imgcodecs/ImgCodecsTest.cs b/test/OpenCvSharp.Tests/imgcodecs/ImgCodecsTest.cs index 7799b2704..0a1e4e5ce 100644 --- a/test/OpenCvSharp.Tests/imgcodecs/ImgCodecsTest.cs +++ b/test/OpenCvSharp.Tests/imgcodecs/ImgCodecsTest.cs @@ -1,15 +1,17 @@ -#nullable enable -using System; -using System.Drawing; -using System.Drawing.Imaging; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Reflection; -using System.Runtime.InteropServices; -using System.Threading; +using System.Runtime.InteropServices; +using SixLabors.ImageSharp; +using SixLabors.ImageSharp.Drawing.Processing; +using SixLabors.ImageSharp.Formats; +using SixLabors.ImageSharp.Formats.Bmp; +using SixLabors.ImageSharp.Formats.Jpeg; +using SixLabors.ImageSharp.Formats.Png; +using SixLabors.ImageSharp.Formats.Tiff; +using SixLabors.ImageSharp.PixelFormats; +using SixLabors.ImageSharp.Processing; using Xunit; using Xunit.Abstractions; +using Color = SixLabors.ImageSharp.Color; +using Image = SixLabors.ImageSharp.Image; #pragma warning disable CA1031 @@ -23,22 +25,23 @@ public ImgCodecsTest(ITestOutputHelper testOutputHelper) { this.testOutputHelper = testOutputHelper; } - + [Theory] [InlineData("building.jpg")] [InlineData("lenna.png")] [InlineData("building_mask.bmp")] public void ImReadSuccess(string fileName) { - using (var image = Image(fileName, ImreadModes.Grayscale)) + using (var image = LoadImage(fileName, ImreadModes.Grayscale)) { Assert.False(image.Empty()); } - using (var image = Image(fileName, ImreadModes.Color)) + // ReSharper disable once RedundantArgumentDefaultValue + using (var image = LoadImage(fileName, ImreadModes.Color)) { Assert.False(image.Empty()); } - using (var image = Image(fileName, ImreadModes.AnyColor | ImreadModes.AnyDepth)) + using (var image = LoadImage(fileName, ImreadModes.AnyColor | ImreadModes.AnyDepth)) { Assert.False(image.Empty()); } @@ -79,17 +82,19 @@ public void ImReadJapaneseFileName() // Create test data { - using var bitmap = new Bitmap(10, 10, PixelFormat.Format24bppRgb); - using var graphics = Graphics.FromImage(bitmap); - graphics.Clear(Color.Red); - bitmap.Save(fileName, ImageFormat.Png); + using var image = new Image(10, 10); + image.Mutate(x => + { + x.Fill(Color.Red); + }); + image.SaveAsPng(fileName); } Assert.True(File.Exists(fileName), $"File '{fileName}' not found"); - using var image = Cv2.ImRead(fileName, ImreadModes.Color); - Assert.NotNull(image); - Assert.False(image.Empty()); + using var mat = Cv2.ImRead(fileName); + Assert.NotNull(mat); + Assert.False(mat.Empty()); } // TODO Windows not supported? @@ -109,14 +114,14 @@ public void ImReadUnicodeFileName() // at System.Runtime.InteropServices.Marshal.StringToAnsiString(String s, Byte * buffer, Int32 bufferLength, Boolean bestFit, Boolean throwOnUnmappableChar) Assert.Throws(() => { - using var image = Cv2.ImRead(fileName, ImreadModes.Color); + using var image = Cv2.ImRead(fileName); //Assert.NotNull(image); //Assert.False(image.Empty()); }); } else { - using var image = Cv2.ImRead(fileName, ImreadModes.Color); + using var image = Cv2.ImRead(fileName); Assert.NotNull(image); Assert.False(image.Empty()); } @@ -129,16 +134,16 @@ public void ImReadUnicodeFileName() [InlineData(".tif")] public void ImWrite(string ext) { - string fileName = $"test_imwrite{ext}"; + var fileName = $"test_imwrite{ext}"; using (var mat = new Mat(10, 20, MatType.CV_8UC3, Scalar.Blue)) { Cv2.ImWrite(fileName, mat); } - using var bitmap = new Bitmap(fileName); - Assert.Equal(10, bitmap.Height); - Assert.Equal(20, bitmap.Width); + var imageInfo = Image.Identify(fileName); + Assert.Equal(10, imageInfo.Height); + Assert.Equal(20, imageInfo.Width); } //[LinuxOnlyFact] @@ -163,9 +168,9 @@ public void ImWriteJapaneseFileName() Assert.True(File.Exists(fileName), $"File '{fileName}' not found"); - using var bitmap = new Bitmap(fileName); - Assert.Equal(10, bitmap.Height); - Assert.Equal(20, bitmap.Width); + var imageInfo = Image.Identify(fileName); + Assert.Equal(10, imageInfo.Height); + Assert.Equal(20, imageInfo.Width); } // TODO @@ -187,10 +192,7 @@ public void ImWriteUnicodeFileName() // TODO // Cannot marshal: Encountered unmappable character. // at System.Runtime.InteropServices.Marshal.StringToAnsiString(String s, Byte * buffer, Int32 bufferLength, Boolean bestFit, Boolean throwOnUnmappableChar) - Assert.Throws(() => - { - Cv2.ImWrite(fileName, mat); - }); + Assert.Throws(() => { Cv2.ImWrite(fileName, mat); }); return; } else @@ -198,19 +200,17 @@ public void ImWriteUnicodeFileName() Cv2.ImWrite(fileName, mat); } } - - // TODO fail + var file = new FileInfo(fileName); Assert.True(file.Exists, $"File '{fileName}' not found"); Assert.True(file.Length > 0, $"File size of '{fileName}' == 0"); const string asciiFileName = "_data/image/imwrite_unicode_test.png"; File.Move(fileName, asciiFileName); - using (var bitmap = new Bitmap(asciiFileName)) - { - Assert.Equal(10, bitmap.Height); - Assert.Equal(20, bitmap.Width); - } + var imageInfo = Image.Identify(asciiFileName); + + Assert.Equal(10, imageInfo.Height); + Assert.Equal(20, imageInfo.Width); } // TODO AccessViolationException @@ -320,10 +320,8 @@ public void HaveImageReaderUnicode() [InlineData("foo.png")] [InlineData("bar.jpg")] [InlineData("baz.bmp")] - public void HaveImageWriter(string fileName) - { - Assert.True(Cv2.HaveImageWriter(fileName)); - } + public void HaveImageWriter(string fileName) + => Assert.True(Cv2.HaveImageWriter(fileName)); // TODO [Fact(Skip = "AccessViolationException")] @@ -374,17 +372,16 @@ public void HaveImageWriterUnicode() [InlineData(".bmp")] public void ImEncode(string ext) { - using var mat = Image("lenna.png", ImreadModes.Grayscale); + using var mat = LoadImage("lenna.png", ImreadModes.Grayscale); Assert.False(mat.Empty()); Cv2.ImEncode(ext, mat, out var imageData); Assert.NotNull(imageData); - // Can System.Drawing.Bitmap decode the imageData? - using var stream = new MemoryStream(imageData); - using var bitmap = new Bitmap(stream); - Assert.Equal(mat.Rows, bitmap.Height); - Assert.Equal(mat.Cols, bitmap.Width); + // Can ImageSharp decode the imageData? + using var image = Image.Load(imageData); + Assert.Equal(mat.Rows, image.Height); + Assert.Equal(mat.Cols, image.Width); } [Theory] @@ -394,23 +391,26 @@ public void ImEncode(string ext) [InlineData("Bmp")] public void ImDecode(string imageFormatName) { - var imageFormatProperty = - typeof(ImageFormat).GetProperty(imageFormatName, BindingFlags.Public | BindingFlags.Static); - Assert.NotNull(imageFormatProperty); - var imageFormat = imageFormatProperty!.GetValue(null) as ImageFormat; - Assert.NotNull(imageFormat); + IImageEncoder encoder = imageFormatName switch + { + "Png" => new PngEncoder(), + "Jpeg" => new JpegEncoder(), + "Tiff" => new TiffEncoder(), + "Bmp" => new BmpEncoder(), + _ => throw new ArgumentOutOfRangeException(nameof(imageFormatName), imageFormatName, null) + }; - using var bitmap = new Bitmap("_data/image/mandrill.png"); + using var image = Image.Load("_data/image/mandrill.png"); using var stream = new MemoryStream(); - bitmap.Save(stream, imageFormat!); + image.Save(stream, encoder); var imageData = stream.ToArray(); Assert.NotNull(imageData); using var mat = Cv2.ImDecode(imageData, ImreadModes.Color); Assert.NotNull(mat); Assert.False(mat.Empty()); - Assert.Equal(bitmap.Width, mat.Cols); - Assert.Equal(bitmap.Height, mat.Rows); + Assert.Equal(image.Width, mat.Cols); + Assert.Equal(image.Height, mat.Rows); ShowImagesWhenDebugMode(mat); } @@ -450,23 +450,23 @@ public void ImDecodeSpan() [Fact] public void WriteMultiPagesTiff() { - string[] files = { + string[] files = [ "multipage_p1.tif", "multipage_p2.tif", - }; + ]; Mat[]? pages = null; Mat[]? readPages = null; try { - pages = files.Select(f => Image(f)).ToArray(); + pages = files.Select(f => LoadImage(f)).ToArray(); Assert.True(Cv2.ImWrite("multi.tiff", pages), "imwrite failed"); Assert.True(Cv2.ImReadMulti("multi.tiff", out readPages), "imreadmulti failed"); Assert.NotEmpty(readPages); Assert.Equal(pages.Length, readPages.Length); - for (int i = 0; i < pages.Length; i++) + for (var i = 0; i < pages.Length; i++) { ImageEquals(pages[i], readPages[i]); } @@ -474,10 +474,10 @@ public void WriteMultiPagesTiff() } finally { - if (pages != null) + if (pages is not null) foreach (var page in pages) page.Dispose(); - if (readPages != null) + if (readPages is not null) foreach (var page in readPages) page.Dispose(); } @@ -485,15 +485,17 @@ public void WriteMultiPagesTiff() private static void CreateDummyImageFile(string path) { - Path.GetFullPath(path); + _ = Path.GetFullPath(path); var tempFileName = Path.GetTempFileName(); { - using var bitmap = new Bitmap(10, 10, PixelFormat.Format24bppRgb); - using var graphics = Graphics.FromImage(bitmap); - graphics.Clear(Color.Red); - // GDI+ does not support Unicode file name - bitmap.Save(tempFileName, ImageFormat.Png); + + using var image = new Image(10, 10); + image.Mutate(x => + { + x.Fill(Color.Red); + }); + image.SaveAsPng(tempFileName); } #if NET48 @@ -503,7 +505,7 @@ private static void CreateDummyImageFile(string path) } File.Move(tempFileName, path); #else - File.Move(tempFileName, path, true); + File.Move(tempFileName, path, true); #endif Assert.True(File.Exists(path), $"File '{path}' not found"); } diff --git a/test/OpenCvSharp.Tests/imgproc/CLAHETest.cs b/test/OpenCvSharp.Tests/imgproc/CLAHETest.cs index c1540a451..c8baf4865 100644 --- a/test/OpenCvSharp.Tests/imgproc/CLAHETest.cs +++ b/test/OpenCvSharp.Tests/imgproc/CLAHETest.cs @@ -8,7 +8,7 @@ public class CLAHETest : TestBase [Fact] public void Run() { - using var src = Image("lenna.png", ImreadModes.Grayscale); + using var src = LoadImage("lenna.png", ImreadModes.Grayscale); using var dst = new Mat(); using var clahe = Cv2.CreateCLAHE(); clahe.Apply(src, dst); diff --git a/test/OpenCvSharp.Tests/imgproc/ConnectedComponentsTest.cs b/test/OpenCvSharp.Tests/imgproc/ConnectedComponentsTest.cs index 8e50386ae..03c41f44f 100644 --- a/test/OpenCvSharp.Tests/imgproc/ConnectedComponentsTest.cs +++ b/test/OpenCvSharp.Tests/imgproc/ConnectedComponentsTest.cs @@ -11,7 +11,7 @@ public class ConnectedComponentsTest : TestBase [InlineData(PixelConnectivity.Connectivity8, ConnectedComponentsAlgorithmsTypes.GRANA)] public void Run(PixelConnectivity connectivity, ConnectedComponentsAlgorithmsTypes algorithmType) { - using var src = Image("alphabet.png", ImreadModes.Grayscale); + using var src = LoadImage("alphabet.png", ImreadModes.Grayscale); using var binary = new Mat(); Cv2.Threshold(src, binary, 128, 255, ThresholdTypes.BinaryInv); ShowImagesWhenDebugMode(src, binary); diff --git a/test/OpenCvSharp.Tests/imgproc/ImgProcTest.cs b/test/OpenCvSharp.Tests/imgproc/ImgProcTest.cs index 06d9b590a..1ddfdd1ad 100644 --- a/test/OpenCvSharp.Tests/imgproc/ImgProcTest.cs +++ b/test/OpenCvSharp.Tests/imgproc/ImgProcTest.cs @@ -1,18 +1,25 @@ -using System; -using System.Collections.Generic; using System.Diagnostics; using System.Globalization; -using System.Linq; +using OpenCvSharp.Internal.Vectors; using Xunit; namespace OpenCvSharp.Tests.ImgProc; public class ImgProcTest : TestBase { + [Fact] + public void BuildPyramidTest() + { + using var src = LoadImage("lenna.png"); + using var dst = new VectorOfMat(); + Cv2.BuildPyramid(src, dst, 2); + Assert.Equal(3, dst.Size); + } + [Fact] public void MorphologyExDilate() { - using var src = new Mat(100, 100, MatType.CV_8UC1, 255); + using var src = new Mat(100, 100, MatType.CV_8UC1, Scalar.All(255)); using var dst = new Mat(); Cv2.Rectangle(src, new Rect(30, 30, 40, 40), Scalar.Black, 1); Cv2.MorphologyEx(src, dst, MorphTypes.Dilate, null); @@ -65,8 +72,8 @@ public void WarpAffineBigImage() [Fact] public void BlendLinear() { - using var src1 = Image("tsukuba_left.png"); - using var src2 = Image("tsukuba_right.png"); + using var src1 = LoadImage("tsukuba_left.png"); + using var src2 = LoadImage("tsukuba_right.png"); using var weights = new Mat(src1.Size(), MatType.CV_32FC1, Scalar.All(0.5)); using var dst = new Mat(); @@ -80,7 +87,7 @@ public void BlendLinear() [Fact] public void Demosaicing() { - using var src = Image("lenna.png", ImreadModes.Grayscale); + using var src = LoadImage("lenna.png", ImreadModes.Grayscale); using var dst = new Mat(); Cv2.Demosaicing(src, dst, ColorConversionCodes.BayerBG2GRAY); @@ -125,14 +132,14 @@ public void BoxPoints() var points = Cv2.BoxPoints(rotatedRect); Assert.Equal(4, points.Length); - Assert.Equal(4.932f, points[0].X, 3); - Assert.Equal(14.931f, points[0].Y, 3); - Assert.Equal(5.069f, points[1].X, 3); - Assert.Equal(4.932f, points[1].Y, 3); - Assert.Equal(15.068f, points[2].X, 3); - Assert.Equal(5.069f, points[2].Y, 3); - Assert.Equal(14.931f, points[3].X, 3); - Assert.Equal(15.068f, points[3].Y, 3); + Assert.Equal(4.932f, points[0].X, 1e-3); + Assert.Equal(14.931f, points[0].Y, 1e-3); + Assert.Equal(5.069f, points[1].X, 1e-3); + Assert.Equal(4.932f, points[1].Y, 1e-3); + Assert.Equal(15.068f, points[2].X, 1e-3); + Assert.Equal(5.069f, points[2].Y, 1e-3); + Assert.Equal(14.931f, points[3].X, 1e-3); + Assert.Equal(15.068f, points[3].Y, 1e-3); } [Fact] @@ -141,8 +148,8 @@ public void MinEnclosingCircle() var points = new[] { new Point2f(0, 0), new Point2f(10, 0), new Point2f(10, 10), new Point2f(0, 10), }; Cv2.MinEnclosingCircle(points, out var center, out var radius); - Assert.Equal(5f, center.X, 3); - Assert.Equal(5f, center.Y, 3); + Assert.Equal(5f, center.X, 1e-3); + Assert.Equal(5f, center.Y, 1e-3); Assert.Equal(5 * Math.Sqrt(2), radius, 3); } @@ -153,12 +160,12 @@ public void MinEnclosingTriangle() var area = Cv2.MinEnclosingTriangle(points, out var triangle); Assert.Equal(3, triangle.Length); - Assert.Equal(0f, triangle[0].X, 3); - Assert.Equal(-10f, triangle[0].Y, 3); - Assert.Equal(0f, triangle[1].X, 3); - Assert.Equal(10f, triangle[1].Y, 3); - Assert.Equal(20f, triangle[2].X, 3); - Assert.Equal(10f, triangle[2].Y, 3); + Assert.Equal(0f, triangle[0].X, 1e-3); + Assert.Equal(-10f, triangle[0].Y, 1e-3); + Assert.Equal(0f, triangle[1].X, 1e-3); + Assert.Equal(10f, triangle[1].Y, 1e-3); + Assert.Equal(20f, triangle[2].X, 1e-3); + Assert.Equal(10f, triangle[2].Y, 1e-3); Assert.Equal(200f, area, 3); } @@ -280,11 +287,11 @@ public void FitEllipse() foreach (var e in ellipse) { - Assert.Equal(5f, e.Center.X, 3); - Assert.Equal(5f, e.Center.Y, 3); - Assert.Equal(11.547f, e.Size.Width, 3); - Assert.Equal(20f, e.Size.Height, 3); - Assert.Equal(0f, e.Angle, 3); + Assert.Equal(5f, e.Center.X, 1e-3); + Assert.Equal(5f, e.Center.Y, 1e-3); + Assert.Equal(11.547f, e.Size.Width, 1e-3); + Assert.Equal(20f, e.Size.Height, 1e-3); + Assert.Equal(0f, e.Angle, 1e-3); } } @@ -338,7 +345,7 @@ public void FitLineByMat() new Point(10, 10), new Point(5, 5), }; - using var src = new Mat(contour.Length, cols, matType, contour); + using var src = Mat.FromPixelData(contour.Length, cols, matType, contour); using var dst = new Mat(); Cv2.FitLine(src, dst, DistanceTypes.L2, 0, 0, 0.01); @@ -348,8 +355,8 @@ public void FitLineByMat() Assert.Equal(Math.Sqrt(2) / 2, dst.Get(0), 3); Assert.Equal(Math.Sqrt(2) / 2, dst.Get(1), 3); - Assert.Equal(5, dst.Get(2), 3); - Assert.Equal(5, dst.Get(3), 3); + Assert.Equal(5, dst.Get(2), 1e-3); + Assert.Equal(5, dst.Get(3), 1e-3); } } @@ -403,10 +410,10 @@ static Point[] ToPoints(IEnumerable enumerable) return enumerable.Select(p => new Point(p.X, p.Y)).ToArray(); } - using var img = new Mat(200, 200, MatType.CV_8UC3, 0); - img.Polylines(new[] { ToPoints(rr1.Points()) }, true, Scalar.Red); - img.Polylines(new[] { ToPoints(rr2.Points()) }, true, Scalar.Green); - img.Polylines(new[] { ToPoints(intersectingRegion) }, true, Scalar.White); + using var img = new Mat(200, 200, MatType.CV_8UC3, new Scalar(0)); + img.Polylines([ToPoints(rr1.Points())], true, Scalar.Red); + img.Polylines([ToPoints(rr2.Points())], true, Scalar.Green); + img.Polylines([ToPoints(intersectingRegion)], true, Scalar.White); Window.ShowImages(img); } @@ -476,9 +483,9 @@ public void RectangleFilled() var colorVec = color.ToVec3b(); var expected = new Vec3b[100, 100]; - for (int y = 10; y < 90; y++) + for (var y = 10; y < 90; y++) { - for (int x = 10; x < 90; x++) + for (var x = 10; x < 90; x++) { expected[y, x] = colorVec; } @@ -489,23 +496,23 @@ public void RectangleFilled() private static void TestImage(Mat img, Vec3b[,] expected) { - if (img == null) + if (img is null) throw new ArgumentNullException(nameof(img)); - if (expected == null) + if (expected is null) throw new ArgumentNullException(nameof(expected)); if (img.Type() != MatType.CV_8UC3) throw new ArgumentException("Mat.Type() != 8UC3", nameof(img)); - int height = img.Rows; - int width = img.Cols; + var height = img.Rows; + var width = img.Cols; if (height != expected.GetLength(0) || width != expected.GetLength(1)) throw new ArgumentException("size mismatch"); var indexer = img.GetGenericIndexer(); - for (int y = 0; y < height; y++) + for (var y = 0; y < height; y++) { - for (int x = 0; x < width; x++) + for (var x = 0; x < width; x++) { var expectedValue = expected[y, x]; var actualValue = indexer[y, x]; @@ -524,7 +531,7 @@ private static void TestImage(Mat img, Vec3b[,] expected) [Fact] public void ApplyColorMap() { - using var src = Image("building.jpg", ImreadModes.Color); + using var src = LoadImage("building.jpg", ImreadModes.Color); using var dst = new Mat(); Cv2.ApplyColorMap(src, dst, ColormapTypes.Cool); @@ -539,7 +546,7 @@ public void ApplyColorMap() [Fact] public void CornerHarris() { - using var src = Image("building.jpg", ImreadModes.Grayscale); + using var src = LoadImage("building.jpg", ImreadModes.Grayscale); using var corners = new Mat(); using var dst = new Mat(); Cv2.CornerHarris(src, corners, 2, 3, 0.04); @@ -555,7 +562,7 @@ public void CornerHarris() [Fact] public void CornerMinEigenVal() { - using var src = Image("building.jpg", ImreadModes.Grayscale); + using var src = LoadImage("building.jpg", ImreadModes.Grayscale); using var corners = new Mat(); using var dst = new Mat(); Cv2.CornerMinEigenVal(src, corners, 2, 3, BorderTypes.Reflect); @@ -571,7 +578,7 @@ public void CornerMinEigenVal() [Fact] public void FindContours() { - using var src = Image("markers_6x6_250.png", ImreadModes.Grayscale); + using var src = LoadImage("markers_6x6_250.png", ImreadModes.Grayscale); Cv2.BitwiseNot(src, src); Cv2.FindContours( src, @@ -603,12 +610,12 @@ public void CalcHist() using var hist = new Mat(); Cv2.CalcHist( - images: new[] { src }, - channels: new[] {0}, + images: [src], + channels: [0], mask: null, hist: hist, dims: 1, - histSize: new[] {256}, + histSize: [256], ranges: new[] { new Rangef(0, 256) }); if (Debugger.IsAttached) @@ -619,7 +626,7 @@ public void CalcHist() using var histImage = new Mat(histH, histW, MatType.CV_8UC3, Scalar.All(0)); Cv2.Normalize(hist, hist, 0, histImage.Rows, NormTypes.MinMax, -1); - for (int i = 0; i < 256; i++) + for (var i = 0; i < 256; i++) { var pt1 = new Point2d(binW * (i - 1), histH - Math.Round(hist.At(i - 1))); var pt2 = new Point2d(binW * (i), histH - Math.Round(hist.At(i))); @@ -679,10 +686,65 @@ public void HoughLinesP() Cv2.Line(view, line.P1, line.P2, Scalar.Red); } - Window.ShowImages(new[] {src, binary, view}, new[] {"src", "binary", "lines"}); + Window.ShowImages([src, binary, view], ["src", "binary", "lines"]); } } + [Fact] + public void HoughLinesPointSet() + { + Vec2f[] points = + [ + new(0.0f, 369.0f), + new(10.0f, 364.0f), + new(20.0f, 358.0f), + new(30.0f, 352.0f), + new(40.0f, 346.0f), + new(50.0f, 341.0f), + new(60.0f, 335.0f), + new(70.0f, 329.0f), + new(80.0f, 323.0f), + new(90.0f, 318.0f), + new(100.0f, 312.0f), + new(110.0f, 306.0f), + new(120.0f, 300.0f), + new(130.0f, 295.0f), + new(140.0f, 289.0f), + new(150.0f, 284.0f), + new(160.0f, 277.0f), + new(170.0f, 271.0f), + new(180.0f, 266.0f), + new(190.0f, 260.0f) + ]; + + const int + linesMax = 20, + threshold = 1; + const double + rhoMin = 0.0f, + rhoMax = 360.0f, + rhoStep = 1, + thetaMin = 0.0f, + thetaMax = Cv2.PI / 2.0f, + thetaStep = Cv2.PI / 180.0f; + + using var pointsMat = new Mat(points.Length, 1, MatType.CV_32FC2); + pointsMat.SetArray(points); + using var linesMat = new Mat(); + Cv2.HoughLinesPointSet(pointsMat, linesMat, linesMax, threshold, rhoMin, rhoMax, rhoStep, thetaMin, thetaMax, thetaStep); + + Assert.False(linesMat.Empty()); + Assert.Equal(MatType.CV_64FC3, linesMat.Type()); + + Assert.True(linesMat.GetArray(out Vec3d[] lines)); + Assert.NotEmpty(lines); + + var (votes, rho, theta) = lines[0]; + Assert.True(votes > 10); + Assert.Equal(320, rho, 6); + Assert.Equal(1.0471975803375244, theta, 6); + } + [Fact] public void Integral() { diff --git a/test/OpenCvSharp.Tests/imgproc/IntelligentScissorsMBTest.cs b/test/OpenCvSharp.Tests/imgproc/IntelligentScissorsMBTest.cs index 245d03532..272d4f311 100644 --- a/test/OpenCvSharp.Tests/imgproc/IntelligentScissorsMBTest.cs +++ b/test/OpenCvSharp.Tests/imgproc/IntelligentScissorsMBTest.cs @@ -1,6 +1,4 @@ using OpenCvSharp.Segmentation; -using System; -using System.Collections.Generic; using Xunit; namespace OpenCvSharp.Tests.ImgProc; diff --git a/test/OpenCvSharp.Tests/imgproc/LineIteratorTest.cs b/test/OpenCvSharp.Tests/imgproc/LineIteratorTest.cs index 4c337adaa..9cf418e3a 100644 --- a/test/OpenCvSharp.Tests/imgproc/LineIteratorTest.cs +++ b/test/OpenCvSharp.Tests/imgproc/LineIteratorTest.cs @@ -1,4 +1,3 @@ -using System.Linq; using Xunit; namespace OpenCvSharp.Tests.ImgProc; @@ -11,7 +10,7 @@ public void CountPixels() var p1 = new Point(0, 0); var p2 = new Point(9, 9); - using (Mat mat = Mat.Zeros(10, 10, MatType.CV_8UC1)) + using (var mat = Mat.Zeros(10, 10, MatType.CV_8UC1)) using (var lineIterator = new LineIterator(mat, p1, p2)) { #pragma warning disable CA1829 @@ -27,12 +26,10 @@ public void SumPixelsByte() var p1 = new Point(0, 0); var p2 = new Point(9, 9); - using (Mat mat = new Mat(10, 10, MatType.CV_8UC1, 2)) - using (var lineIterator = new LineIterator(mat, p1, p2)) - { - var sum = lineIterator.Sum(pixel => pixel.GetValue()); - Assert.Equal(10 * 2, sum); - } + using var mat = new Mat(10, 10, MatType.CV_8UC1, new Scalar(2)); + using var lineIterator = new LineIterator(mat, p1, p2); + var sum = lineIterator.Sum(pixel => pixel.GetValue()); + Assert.Equal(10 * 2, sum); } [Fact] @@ -41,18 +38,16 @@ public void SumPixelsVec3b() var p1 = new Point(0, 0); var p2 = new Point(9, 9); - using (Mat mat = new Mat(10, 10, MatType.CV_8UC3, new Scalar(1, 2, 3))) - using (var lineIterator = new LineIterator(mat, p1, p2)) + using var mat = new Mat(10, 10, MatType.CV_8UC3, new Scalar(1, 2, 3)); + using var lineIterator = new LineIterator(mat, p1, p2); + int b = 0, g = 0, r = 0; + foreach (var pixel in lineIterator) { - int b = 0, g = 0, r = 0; - foreach (var pixel in lineIterator) - { - var value = pixel.GetValue(); - (b, g, r) = (b + value.Item0, g + value.Item1, r + value.Item2); - } - Assert.Equal(10, b); - Assert.Equal(20, g); - Assert.Equal(30, r); + var value = pixel.GetValue(); + (b, g, r) = (b + value.Item0, g + value.Item1, r + value.Item2); } + Assert.Equal(10, b); + Assert.Equal(20, g); + Assert.Equal(30, r); } } diff --git a/test/OpenCvSharp.Tests/line_descriptor/LSDDetectorTest.cs b/test/OpenCvSharp.Tests/line_descriptor/LSDDetectorTest.cs index 8bea37b54..83eae30ea 100644 --- a/test/OpenCvSharp.Tests/line_descriptor/LSDDetectorTest.cs +++ b/test/OpenCvSharp.Tests/line_descriptor/LSDDetectorTest.cs @@ -1,9 +1,4 @@ -using System; -using System.Diagnostics; -using OpenCvSharp.LineDescriptor; -using Xunit; - -#if false +#if false namespace OpenCvSharp.Tests.LineDescriptor { diff --git a/test/OpenCvSharp.Tests/ml/ANN_MLPTest.cs b/test/OpenCvSharp.Tests/ml/ANN_MLPTest.cs index 0b62b05b0..7ef5eb492 100644 --- a/test/OpenCvSharp.Tests/ml/ANN_MLPTest.cs +++ b/test/OpenCvSharp.Tests/ml/ANN_MLPTest.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.ML; +using OpenCvSharp.ML; using Xunit; using Xunit.Abstractions; @@ -26,10 +25,10 @@ public void RunTest() {100, 0}, {100, 100}, }; - using var trainFeatures = new Mat(4, 2, MatType.CV_32F, trainFeaturesData); + using var trainFeatures = Mat.FromPixelData(4, 2, MatType.CV_32F, trainFeaturesData); - float[] trainLabelsData = { 1, 0, 1, 0 }; - using var trainLabels = new Mat(4, 1, MatType.CV_32F, trainLabelsData); + float[] trainLabelsData = [1, 0, 1, 0]; + using var trainLabels = Mat.FromPixelData(4, 1, MatType.CV_32F, trainLabelsData); using var model = ANN_MLP.Create(); model.SetActivationFunction(ANN_MLP.ActivationFunctions.SigmoidSym, 0.1, 0.1); @@ -46,8 +45,8 @@ public void RunTest() Assert.True(trainSuccess); Assert.True(model.IsTrained()); - float[] testFeatureData = { 0, 0 }; - using var testFeature = new Mat(1, 2, MatType.CV_32F, testFeatureData); + float[] testFeatureData = [0, 0]; + using var testFeature = Mat.FromPixelData(1, 2, MatType.CV_32F, testFeatureData); using var result = new Mat(); var detectedClass = model.Predict(testFeature, result); diff --git a/test/OpenCvSharp.Tests/ml/BoostTest.cs b/test/OpenCvSharp.Tests/ml/BoostTest.cs index 2eee237f0..ba10366f4 100644 --- a/test/OpenCvSharp.Tests/ml/BoostTest.cs +++ b/test/OpenCvSharp.Tests/ml/BoostTest.cs @@ -1,6 +1,4 @@ -using System; -using System.IO; -using OpenCvSharp.ML; +using OpenCvSharp.ML; using Xunit; namespace OpenCvSharp.Tests.ML; @@ -17,18 +15,18 @@ public void RunTest() {100, 0}, {100, 100}, }; - var trainFeatures = new Mat(4, 2, MatType.CV_32F, trainFeaturesData); + var trainFeatures = Mat.FromPixelData(4, 2, MatType.CV_32F, trainFeaturesData); - int[] trainLabelsData = { +1, -1, +1, -1 }; - var trainLabels = new Mat(4, 1, MatType.CV_32S, trainLabelsData); + int[] trainLabelsData = [+1, -1, +1, -1]; + var trainLabels = Mat.FromPixelData(4, 1, MatType.CV_32S, trainLabelsData); using var model = Boost.Create(); model.MaxDepth = 1; model.UseSurrogates = false; model.Train(trainFeatures, SampleTypes.RowSample, trainLabels); - float[] testFeatureData = { 90, 90 }; - var testFeature = new Mat(1, 2, MatType.CV_32F, testFeatureData); + float[] testFeatureData = [90, 90]; + var testFeature = Mat.FromPixelData(1, 2, MatType.CV_32F, testFeatureData); var detectedClass = (int)model.Predict(testFeature); @@ -45,10 +43,10 @@ public void SaveLoadTest() {100, 0}, {100, 100}, }; - var trainFeatures = new Mat(4, 2, MatType.CV_32F, trainFeaturesData); + var trainFeatures = Mat.FromPixelData(4, 2, MatType.CV_32F, trainFeaturesData); - int[] trainLabelsData = { +1, -1, +1, -1 }; - var trainLabels = new Mat(4, 1, MatType.CV_32S, trainLabelsData); + int[] trainLabelsData = [+1, -1, +1, -1]; + var trainLabels = Mat.FromPixelData(4, 1, MatType.CV_32S, trainLabelsData); const string fileName = "boost.yml"; if (File.Exists(fileName)) diff --git a/test/OpenCvSharp.Tests/ml/KNearestTest.cs b/test/OpenCvSharp.Tests/ml/KNearestTest.cs index fb8368791..959a9393f 100644 --- a/test/OpenCvSharp.Tests/ml/KNearestTest.cs +++ b/test/OpenCvSharp.Tests/ml/KNearestTest.cs @@ -1,6 +1,4 @@ -using System; -using System.IO; -using OpenCvSharp.ML; +using OpenCvSharp.ML; using Xunit; namespace OpenCvSharp.Tests.ML; @@ -11,24 +9,24 @@ public class KNearestTest : TestBase public void RunTest() { float[] trainFeaturesData = - { + [ 2,2,2,2, 3,3,3,3, 4,4,4,4, 5,5,5,5, 6,6,6,6, 7,7,7,7 - }; - var trainFeatures = new Mat(6, 4, MatType.CV_32F, trainFeaturesData); + ]; + var trainFeatures = Mat.FromPixelData(6, 4, MatType.CV_32F, trainFeaturesData); - int[] trainLabelsData = { 2, 3, 4, 5, 6, 7 }; - var trainLabels = new Mat(1, 6, MatType.CV_32S, trainLabelsData); + int[] trainLabelsData = [2, 3, 4, 5, 6, 7]; + var trainLabels = Mat.FromPixelData(1, 6, MatType.CV_32S, trainLabelsData); using var kNearest = KNearest.Create(); kNearest.Train(trainFeatures, SampleTypes.RowSample, trainLabels); - float[] testFeatureData = { 3, 3, 3, 3 }; - var testFeature = new Mat(1, 4, MatType.CV_32F, testFeatureData); + float[] testFeatureData = [3, 3, 3, 3]; + var testFeature = Mat.FromPixelData(1, 4, MatType.CV_32F, testFeatureData); const int k = 1; var results = new Mat(); @@ -43,18 +41,18 @@ public void RunTest() public void SaveLoadTest() { float[] trainFeaturesData = - { + [ 2,2,2,2, 3,3,3,3, 4,4,4,4, 5,5,5,5, 6,6,6,6, 7,7,7,7 - }; - var trainFeatures = new Mat(6, 4, MatType.CV_32F, trainFeaturesData); + ]; + var trainFeatures = Mat.FromPixelData(6, 4, MatType.CV_32F, trainFeaturesData); - int[] trainLabelsData = { 2, 3, 4, 5, 6, 7 }; - var trainLabels = new Mat(1, 6, MatType.CV_32S, trainLabelsData); + int[] trainLabelsData = [2, 3, 4, 5, 6, 7]; + var trainLabels = Mat.FromPixelData(1, 6, MatType.CV_32S, trainLabelsData); const string fileName = "knearest.yml"; if (File.Exists(fileName)) diff --git a/test/OpenCvSharp.Tests/ml/RTreesTest.cs b/test/OpenCvSharp.Tests/ml/RTreesTest.cs index b5cd583b2..b2235185f 100644 --- a/test/OpenCvSharp.Tests/ml/RTreesTest.cs +++ b/test/OpenCvSharp.Tests/ml/RTreesTest.cs @@ -1,6 +1,4 @@ -using System; -using System.IO; -using OpenCvSharp.ML; +using OpenCvSharp.ML; using Xunit; namespace OpenCvSharp.Tests.ML; @@ -17,16 +15,16 @@ public void RunTest() {100, 0}, {100, 100}, }; - var trainFeatures = new Mat(4, 2, MatType.CV_32F, trainFeaturesData); + var trainFeatures = Mat.FromPixelData(4, 2, MatType.CV_32F, trainFeaturesData); - int[] trainLabelsData = { 1, -1, 1, -1 }; - var trainLabels = new Mat(4, 1, MatType.CV_32S, trainLabelsData); + int[] trainLabelsData = [1, -1, 1, -1]; + var trainLabels = Mat.FromPixelData(4, 1, MatType.CV_32S, trainLabelsData); using var model = RTrees.Create(); model.Train(trainFeatures, SampleTypes.RowSample, trainLabels); - float[] testFeatureData = { 99, 99 }; - var testFeature = new Mat(1, 2, MatType.CV_32F, testFeatureData); + float[] testFeatureData = [99, 99]; + var testFeature = Mat.FromPixelData(1, 2, MatType.CV_32F, testFeatureData); var detectedClass = (int)model.Predict(testFeature); @@ -43,10 +41,10 @@ public void SaveLoadTest() {100, 0}, {100, 100}, }; - var trainFeatures = new Mat(4, 2, MatType.CV_32F, trainFeaturesData); + var trainFeatures = Mat.FromPixelData(4, 2, MatType.CV_32F, trainFeaturesData); - int[] trainLabelsData = { 1, -1, 1, -1 }; - var trainLabels = new Mat(4, 1, MatType.CV_32S, trainLabelsData); + int[] trainLabelsData = [1, -1, 1, -1]; + var trainLabels = Mat.FromPixelData(4, 1, MatType.CV_32S, trainLabelsData); const string fileName = "rtrees.yml"; if (File.Exists(fileName)) diff --git a/test/OpenCvSharp.Tests/ml/SVMTest.cs b/test/OpenCvSharp.Tests/ml/SVMTest.cs index 9187cf918..443299673 100644 --- a/test/OpenCvSharp.Tests/ml/SVMTest.cs +++ b/test/OpenCvSharp.Tests/ml/SVMTest.cs @@ -1,6 +1,4 @@ -using System; -using System.IO; -using OpenCvSharp.ML; +using OpenCvSharp.ML; using Xunit; namespace OpenCvSharp.Tests.ML; @@ -18,10 +16,10 @@ public void RunTest() {100, 0}, {100, 100}, }; - var trainFeatures = new Mat(4, 2, MatType.CV_32F, trainFeaturesData); + var trainFeatures = Mat.FromPixelData(4, 2, MatType.CV_32F, trainFeaturesData); - int[] trainLabelsData = { +1, -1, +1, -1 }; - var trainLabels = new Mat(4, 1, MatType.CV_32S, trainLabelsData); + int[] trainLabelsData = [+1, -1, +1, -1]; + var trainLabels = Mat.FromPixelData(4, 1, MatType.CV_32S, trainLabelsData); using (var model = SVM.Create()) { @@ -30,8 +28,8 @@ public void RunTest() model.TermCriteria = new TermCriteria(CriteriaTypes.MaxIter, 100, 1e-6); model.Train(trainFeatures, SampleTypes.RowSample, trainLabels); - float[] testFeatureData = {90, 90}; - var testFeature = new Mat(1, 2, MatType.CV_32F, testFeatureData); + float[] testFeatureData = [90, 90]; + var testFeature = Mat.FromPixelData(1, 2, MatType.CV_32F, testFeatureData); var detectedClass = (int) model.Predict(testFeature); @@ -49,10 +47,10 @@ public void SaveLoadTest() {100, 0}, {100, 100}, }; - var trainFeatures = new Mat(4, 2, MatType.CV_32F, trainFeaturesData); + var trainFeatures = Mat.FromPixelData(4, 2, MatType.CV_32F, trainFeaturesData); - int[] trainLabelsData = {+1, -1, +1, -1}; - var trainLabels = new Mat(4, 1, MatType.CV_32S, trainLabelsData); + int[] trainLabelsData = [+1, -1, +1, -1]; + var trainLabels = Mat.FromPixelData(4, 1, MatType.CV_32S, trainLabelsData); const string fileName = "svm.yml"; if (File.Exists(fileName)) diff --git a/test/OpenCvSharp.Tests/objdetect/HOGDescriptorTest.cs b/test/OpenCvSharp.Tests/objdetect/HOGDescriptorTest.cs index ee2d16f70..c29e71e83 100644 --- a/test/OpenCvSharp.Tests/objdetect/HOGDescriptorTest.cs +++ b/test/OpenCvSharp.Tests/objdetect/HOGDescriptorTest.cs @@ -9,22 +9,18 @@ public class HOGDescriptorTest : TestBase [Fact] public void PropertyCellSize() { - using (var obj = new HOGDescriptor()) - { - Size value = new Size(123, 789); - obj.CellSize = value; - Assert.Equal(value, obj.CellSize); - } + using var obj = new HOGDescriptor(); + Size value = new Size(123, 789); + obj.CellSize = value; + Assert.Equal(value, obj.CellSize); } [Fact] public void PropertyWinSize() { - using (var obj = new HOGDescriptor()) - { - Size value = new Size(123, 789); - obj.WinSize = value; - Assert.Equal(value, obj.WinSize); - } + using var obj = new HOGDescriptor(); + Size value = new Size(123, 789); + obj.WinSize = value; + Assert.Equal(value, obj.WinSize); } } diff --git a/test/OpenCvSharp.Tests/objdetect/QRCodeDetectorTest.cs b/test/OpenCvSharp.Tests/objdetect/QRCodeDetectorTest.cs index 2a23b4acb..cd54255b0 100644 --- a/test/OpenCvSharp.Tests/objdetect/QRCodeDetectorTest.cs +++ b/test/OpenCvSharp.Tests/objdetect/QRCodeDetectorTest.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using Xunit; +using Xunit; #pragma warning disable 162 @@ -26,14 +23,14 @@ public void ExplicitlyDetectAndDecode() bool detected = obj.Detect(withQr, out var points); Assert.True(detected); Assert.Equal(4, points.Length); - Assert.Equal(102, points[0].X, 6); - Assert.Equal(201, points[0].Y, 6); - Assert.Equal(199, points[1].X, 6); - Assert.Equal(201, points[1].Y, 6); - Assert.Equal(199, points[2].X, 6); - Assert.Equal(299, points[2].Y, 6); - Assert.Equal(102, points[3].X, 6); - Assert.Equal(299, points[3].Y, 6); + Assert.Equal(102, points[0].X, 1e-6); + Assert.Equal(201, points[0].Y, 1e-6); + Assert.Equal(199, points[1].X, 1e-6); + Assert.Equal(201, points[1].Y, 1e-6); + Assert.Equal(199, points[2].X, 1e-6); + Assert.Equal(299, points[2].Y, 1e-6); + Assert.Equal(102, points[3].X, 1e-6); + Assert.Equal(299, points[3].Y, 1e-6); using var straightQrCode = new Mat(); obj.Decode(withQr, points); @@ -55,14 +52,14 @@ public void DetectAndDecode() using var straightQrCode = new Mat(); var decodedString = obj.DetectAndDecode(withQr, out var points, straightQrCode); Assert.Equal(4, points.Length); - Assert.Equal(102, points[0].X, 6); - Assert.Equal(201, points[0].Y, 6); - Assert.Equal(199, points[1].X, 6); - Assert.Equal(201, points[1].Y, 6); - Assert.Equal(199, points[2].X, 6); - Assert.Equal(299, points[2].Y, 6); - Assert.Equal(102, points[3].X, 6); - Assert.Equal(299, points[3].Y, 6); + Assert.Equal(102, points[0].X, 1e-6); + Assert.Equal(201, points[0].Y, 1e-6); + Assert.Equal(199, points[1].X, 1e-6); + Assert.Equal(201, points[1].Y, 1e-6); + Assert.Equal(199, points[2].X, 1e-6); + Assert.Equal(299, points[2].Y, 1e-6); + Assert.Equal(102, points[3].X, 1e-6); + Assert.Equal(299, points[3].Y, 1e-6); Assert.False(straightQrCode.Empty()); Assert.Equal("https://github.com/opencv/opencv", decodedString); @@ -72,7 +69,7 @@ public void DetectAndDecode() public void DecodeSinglebyteString() { using var obj = new QRCodeDetector(); - using var withQr = Image("qr_singlebyte_letters.png"); + using var withQr = LoadImage("qr_singlebyte_letters.png"); var decodedString = obj.DetectAndDecode(withQr, out var points); @@ -84,7 +81,7 @@ public void DecodeSinglebyteString() public void DecodeMultibyteString() { using var obj = new QRCodeDetector(); - using var withQr = Image("qr_multibyte_letters.png"); + using var withQr = LoadImage("qr_multibyte_letters.png"); var decodedString = obj.DetectAndDecode(withQr, out var points); @@ -97,7 +94,7 @@ public void ExplicitlyDetectMulti() { using var obj = new QRCodeDetector(); - using var withQr = Image("qr_multi.png"); + using var withQr = LoadImage("qr_multi.png"); using var pointsMat = new Mat(); ShowImagesWhenDebugMode(withQr); @@ -131,7 +128,7 @@ public void ExplicitlyDecodeMulti() using var obj = new QRCodeDetector(); - using var withQr = Image("qr_multi.png"); + using var withQr = LoadImage("qr_multi.png"); using var pointsMat = new Mat(); ShowImagesWhenDebugMode(withQr); @@ -158,7 +155,7 @@ public void ExplicitlyDecodeMulti() [Fact] public void EmptyDetectMulti() { - var lenna = Image("lenna.png"); + var lenna = LoadImage("lenna.png"); using var obj = new QRCodeDetector(); @@ -169,8 +166,8 @@ public void EmptyDetectMulti() private static Mat ImageWithQrCode(int x, int y, out int qrWidth, out int qrHeight) { - var lenna = Image("lenna.png"); - using var qr = Image("qr.png"); + var lenna = LoadImage("lenna.png"); + using var qr = LoadImage("qr.png"); Assert.False(qr.Empty(), "Mat qr is empty."); qrWidth = qr.Width; qrHeight = qr.Height; @@ -193,8 +190,8 @@ private static void AreEquivalent(IEnumerable expectedPoints, IEnumerab foreach (var (p1, p2) in orderedExpectedPoints.Zip(orderedActualPoints, Tuple.Create)) { - Assert.Equal(p1.X, p2.X, 6); - Assert.Equal(p1.Y, p2.Y, 6); + Assert.Equal(p1.X, p2.X, 1e-6); + Assert.Equal(p1.Y, p2.Y, 1e-6); } } diff --git a/test/OpenCvSharp.Tests/photo/PhotoTest.cs b/test/OpenCvSharp.Tests/photo/PhotoTest.cs index 38defca77..d91bb5729 100644 --- a/test/OpenCvSharp.Tests/photo/PhotoTest.cs +++ b/test/OpenCvSharp.Tests/photo/PhotoTest.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Linq; -using System.Text; -using System.Threading.Tasks; +using System.Diagnostics; using Xunit; namespace OpenCvSharp.Tests.Photo; @@ -37,7 +32,6 @@ public void FastNlMeansDenoising() Window.ShowImages(src, dst); } - /* [Fact] public void FastNlMeansDenoisingMulti() { @@ -50,5 +44,5 @@ public void FastNlMeansDenoisingMulti() if (Debugger.IsAttached) Window.ShowImages(src1, src2, dst); - }*/ + } } diff --git a/test/OpenCvSharp.Tests/photo/TonemapDragoTest.cs b/test/OpenCvSharp.Tests/photo/TonemapDragoTest.cs index 3db421fa3..597a5585e 100644 --- a/test/OpenCvSharp.Tests/photo/TonemapDragoTest.cs +++ b/test/OpenCvSharp.Tests/photo/TonemapDragoTest.cs @@ -7,7 +7,7 @@ public class TonemapDragoTest : TestBase [Fact] public void Process() { - using var src = Image("lenna.png"); + using var src = LoadImage("lenna.png"); using var dst = new Mat(); using var tonemap = TonemapDrago.Create(); @@ -24,12 +24,12 @@ public void Process() public void Properties() { using var tonemap = TonemapDrago.Create(2.2f, 1.5f, 0.95f); - Assert.Equal(1.5f, tonemap.Saturation, 3); - Assert.Equal(0.95f, tonemap.Bias, 3); + Assert.Equal(1.5f, tonemap.Saturation, 1e-3); + Assert.Equal(0.95f, tonemap.Bias, 1e-3); tonemap.Saturation = 5.8f; tonemap.Bias = 0.5f; - Assert.Equal(5.8f, tonemap.Saturation, 3); - Assert.Equal(0.5f, tonemap.Bias, 3); + Assert.Equal(5.8f, tonemap.Saturation, 1e-3); + Assert.Equal(0.5f, tonemap.Bias, 1e-3); } } diff --git a/test/OpenCvSharp.Tests/photo/TonemapMantiukTest.cs b/test/OpenCvSharp.Tests/photo/TonemapMantiukTest.cs index dccf03d68..fa5f63984 100644 --- a/test/OpenCvSharp.Tests/photo/TonemapMantiukTest.cs +++ b/test/OpenCvSharp.Tests/photo/TonemapMantiukTest.cs @@ -7,7 +7,7 @@ public class TonemapMantiukTest : TestBase [Fact] public void Process() { - using var src = Image("lenna.png"); + using var src = LoadImage("lenna.png"); using var dst = new Mat(); using var tonemap = TonemapMantiuk.Create(); @@ -24,12 +24,12 @@ public void Process() public void Properties() { using var tonemap = TonemapMantiuk.Create(2.2f, 1.5f, 1.8f); - Assert.Equal(1.5f, tonemap.Scale, 3); - Assert.Equal(1.8f, tonemap.Saturation, 3); + Assert.Equal(1.5f, tonemap.Scale, 1e-3); + Assert.Equal(1.8f, tonemap.Saturation, 1e-3); tonemap.Scale = 0.5f; tonemap.Saturation = 0.8f; - Assert.Equal(0.5f, tonemap.Scale, 3); - Assert.Equal(0.8f, tonemap.Saturation, 3); + Assert.Equal(0.5f, tonemap.Scale, 1e-3); + Assert.Equal(0.8f, tonemap.Saturation, 1e-3); } } diff --git a/test/OpenCvSharp.Tests/photo/TonemapReinhardTest.cs b/test/OpenCvSharp.Tests/photo/TonemapReinhardTest.cs index 7dbdde245..ac1599f11 100644 --- a/test/OpenCvSharp.Tests/photo/TonemapReinhardTest.cs +++ b/test/OpenCvSharp.Tests/photo/TonemapReinhardTest.cs @@ -7,7 +7,7 @@ public class TonemapReinhardTest : TestBase [Fact] public void Process() { - using var src = Image("lenna.png"); + using var src = LoadImage("lenna.png"); using var dst = new Mat(); using var tonemap = TonemapReinhard.Create(); @@ -24,15 +24,15 @@ public void Process() public void Properties() { using var tonemap = TonemapReinhard.Create(2.2f, 1.1f, 0.8f, 0.7f); - Assert.Equal(1.1f, tonemap.Intensity, 3); - Assert.Equal(0.8f, tonemap.LightAdaptation, 3); - Assert.Equal(0.7f, tonemap.ColorAdaptation, 3); + Assert.Equal(1.1f, tonemap.Intensity, 1e-3); + Assert.Equal(0.8f, tonemap.LightAdaptation, 1e-3); + Assert.Equal(0.7f, tonemap.ColorAdaptation, 1e-3); tonemap.Intensity = 1.8f; tonemap.LightAdaptation = 0.5f; tonemap.ColorAdaptation = 0.4f; - Assert.Equal(1.8f, tonemap.Intensity, 3); - Assert.Equal(0.5f, tonemap.LightAdaptation, 3); - Assert.Equal(0.4f, tonemap.ColorAdaptation, 3); + Assert.Equal(1.8f, tonemap.Intensity, 1e-3); + Assert.Equal(0.5f, tonemap.LightAdaptation, 1e-3); + Assert.Equal(0.4f, tonemap.ColorAdaptation, 1e-3); } } diff --git a/test/OpenCvSharp.Tests/photo/TonemapTest.cs b/test/OpenCvSharp.Tests/photo/TonemapTest.cs index 5b87627e6..34b7b23f9 100644 --- a/test/OpenCvSharp.Tests/photo/TonemapTest.cs +++ b/test/OpenCvSharp.Tests/photo/TonemapTest.cs @@ -7,7 +7,7 @@ public class TonemapTest : TestBase [Fact] public void Process() { - using var src = Image("lenna.png"); + using var src = LoadImage("lenna.png"); using var dst = new Mat(); using var tonemap = Tonemap.Create(2.2f); @@ -24,9 +24,9 @@ public void Process() public void Properties() { using var tonemap = Tonemap.Create(2.2f); - Assert.Equal(2.2f, tonemap.Gamma, 3); + Assert.Equal(2.2f, tonemap.Gamma, 1e-3); tonemap.Gamma = 0.5f; - Assert.Equal(0.5f, tonemap.Gamma, 3); + Assert.Equal(0.5f, tonemap.Gamma, 1e-3); } } diff --git a/test/OpenCvSharp.Tests/quality/QualityBRISQUETest.cs b/test/OpenCvSharp.Tests/quality/QualityBRISQUETest.cs index 874bf4694..a1ba294e3 100644 --- a/test/OpenCvSharp.Tests/quality/QualityBRISQUETest.cs +++ b/test/OpenCvSharp.Tests/quality/QualityBRISQUETest.cs @@ -13,7 +13,7 @@ public class QualityBRISQUETest : TestBase [Fact] public void Compute() { - using (var refImage = Image("lenna.png")) + using (var refImage = LoadImage("lenna.png")) using (var targetImage = new Mat()) using (var psnr = QualityBRISQUE.Create(ModelFile, RangeFile)) { @@ -34,7 +34,7 @@ public void Compute() [Fact] public void StaticCompute() { - using (var refImage = Image("lenna.png")) + using (var refImage = LoadImage("lenna.png")) using (var targetImage = new Mat()) { Cv2.GaussianBlur(refImage, targetImage, new Size(5, 5), 15); diff --git a/test/OpenCvSharp.Tests/quality/QualityGMSDTest.cs b/test/OpenCvSharp.Tests/quality/QualityGMSDTest.cs index 857b42aa4..3511bf818 100644 --- a/test/OpenCvSharp.Tests/quality/QualityGMSDTest.cs +++ b/test/OpenCvSharp.Tests/quality/QualityGMSDTest.cs @@ -8,7 +8,7 @@ public class QualityGMSDTest : TestBase [Fact] public void Compute() { - using (var refImage = Image("lenna.png")) + using (var refImage = LoadImage("lenna.png")) using (var targetImage = new Mat()) using (var psnr = QualityGMSD.Create(refImage)) { @@ -24,7 +24,7 @@ public void Compute() [Fact] public void StaticCompute() { - using (var refImage = Image("lenna.png")) + using (var refImage = LoadImage("lenna.png")) using (var targetImage = new Mat()) { Cv2.GaussianBlur(refImage, targetImage, new Size(5, 5), 15); diff --git a/test/OpenCvSharp.Tests/quality/QualityMSETest.cs b/test/OpenCvSharp.Tests/quality/QualityMSETest.cs index b5000a9a9..f4f80fb77 100644 --- a/test/OpenCvSharp.Tests/quality/QualityMSETest.cs +++ b/test/OpenCvSharp.Tests/quality/QualityMSETest.cs @@ -8,7 +8,7 @@ public class QualityMSETest : TestBase [Fact] public void Compute() { - using (var refImage = Image("lenna.png")) + using (var refImage = LoadImage("lenna.png")) using (var targetImage = new Mat()) using (var psnr = QualityMSE.Create(refImage)) { @@ -24,7 +24,7 @@ public void Compute() [Fact] public void StaticCompute() { - using (var refImage = Image("lenna.png")) + using (var refImage = LoadImage("lenna.png")) using (var targetImage = new Mat()) { Cv2.GaussianBlur(refImage, targetImage, new Size(5, 5), 15); diff --git a/test/OpenCvSharp.Tests/quality/QualityPSNRTest.cs b/test/OpenCvSharp.Tests/quality/QualityPSNRTest.cs index e58692e09..d5e3ef86c 100644 --- a/test/OpenCvSharp.Tests/quality/QualityPSNRTest.cs +++ b/test/OpenCvSharp.Tests/quality/QualityPSNRTest.cs @@ -11,7 +11,7 @@ public class QualityPSNRTest : TestBase [Fact] public void Compute() { - using (var refImage = Image("lenna.png")) + using (var refImage = LoadImage("lenna.png")) using (var targetImage = new Mat()) using (var psnr = QualityPSNR.Create(refImage)) { @@ -27,7 +27,7 @@ public void Compute() [Fact] public void StaticCompute() { - using (var refImage = Image("lenna.png")) + using (var refImage = LoadImage("lenna.png")) using (var targetImage = new Mat()) { Cv2.GaussianBlur(refImage, targetImage, new Size(5, 5), 15); @@ -42,7 +42,7 @@ public void StaticCompute() [Fact] public void PropertyMaxPixelValue() { - using (var refImage = Image("lenna.png")) + using (var refImage = LoadImage("lenna.png")) using (var psnr = QualityPSNR.Create(refImage)) { const double value = 123.456; diff --git a/test/OpenCvSharp.Tests/quality/QualitySSIMTest.cs b/test/OpenCvSharp.Tests/quality/QualitySSIMTest.cs index c0bd42ef3..a9cee82c2 100644 --- a/test/OpenCvSharp.Tests/quality/QualitySSIMTest.cs +++ b/test/OpenCvSharp.Tests/quality/QualitySSIMTest.cs @@ -8,7 +8,7 @@ public class QualitySSIMTest : TestBase [Fact] public void Compute() { - using (var refImage = Image("lenna.png")) + using (var refImage = LoadImage("lenna.png")) using (var targetImage = new Mat()) using (var psnr = QualitySSIM.Create(refImage)) { @@ -24,7 +24,7 @@ public void Compute() [Fact] public void StaticCompute() { - using (var refImage = Image("lenna.png")) + using (var refImage = LoadImage("lenna.png")) using (var targetImage = new Mat()) { Cv2.GaussianBlur(refImage, targetImage, new Size(5, 5), 15); diff --git a/test/OpenCvSharp.Tests/stitching/CvDetailTest.cs b/test/OpenCvSharp.Tests/stitching/CvDetailTest.cs index e7891aef1..83ed3cef7 100644 --- a/test/OpenCvSharp.Tests/stitching/CvDetailTest.cs +++ b/test/OpenCvSharp.Tests/stitching/CvDetailTest.cs @@ -10,7 +10,7 @@ public class CvDetailTest: TestBase public void ComputeImageFeaturesTest() { using var featuresFinder = AKAZE.Create(); - using var image = Image("abbey_road.jpg", ImreadModes.Grayscale); + using var image = LoadImage("abbey_road.jpg", ImreadModes.Grayscale); using var features = CvDetail.ComputeImageFeatures(featuresFinder, image); Assert.NotNull(features); @@ -25,8 +25,8 @@ public void ComputeImageFeaturesTest() public void BestOf2NearestMatcherTest() { using var featuresFinder = AKAZE.Create(); - using var image1 = Image("tsukuba_left.png", ImreadModes.Grayscale); - using var image2 = Image("tsukuba_right.png", ImreadModes.Grayscale); + using var image1 = LoadImage("tsukuba_left.png", ImreadModes.Grayscale); + using var image2 = LoadImage("tsukuba_right.png", ImreadModes.Grayscale); using var features1 = CvDetail.ComputeImageFeatures(featuresFinder, image1); using var features2 = CvDetail.ComputeImageFeatures(featuresFinder, image2); @@ -43,8 +43,8 @@ public void BestOf2NearestMatcherTest() public void AffineBestOf2NearestMatcherTest() { using var featuresFinder = AKAZE.Create(); - using var image1 = Image("tsukuba_left.png", ImreadModes.Grayscale); - using var image2 = Image("tsukuba_right.png", ImreadModes.Grayscale); + using var image1 = LoadImage("tsukuba_left.png", ImreadModes.Grayscale); + using var image2 = LoadImage("tsukuba_right.png", ImreadModes.Grayscale); using var features1 = CvDetail.ComputeImageFeatures(featuresFinder, image1); using var features2 = CvDetail.ComputeImageFeatures(featuresFinder, image2); diff --git a/test/OpenCvSharp.Tests/stitching/StitchingTest.cs b/test/OpenCvSharp.Tests/stitching/StitchingTest.cs index 75629fcd9..b16796d4f 100644 --- a/test/OpenCvSharp.Tests/stitching/StitchingTest.cs +++ b/test/OpenCvSharp.Tests/stitching/StitchingTest.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Generic; -using OpenCvSharp.Detail; +using OpenCvSharp.Detail; using Xunit; using Xunit.Abstractions; @@ -43,7 +41,7 @@ private static Mat[] SelectStitchingImages(int width, int height, int count) { var mats = new List(); - using var source = Image(@"lenna.png"); + using var source = LoadImage(@"lenna.png"); using var result = source.Clone(); var rand = new Random(123); // constant seed for test for (int i = 0; i < count; i++) diff --git a/test/OpenCvSharp.Tests/system/AppDomainTest.cs b/test/OpenCvSharp.Tests/system/AppDomainTest.cs index cc21761c5..f2ee4db65 100644 --- a/test/OpenCvSharp.Tests/system/AppDomainTest.cs +++ b/test/OpenCvSharp.Tests/system/AppDomainTest.cs @@ -1,101 +1,94 @@ -#nullable enable - -#if NET48 -using System; +#if NET48 using System.Globalization; using System.Security.Policy; using Xunit; using Xunit.Abstractions; -namespace OpenCvSharp.Tests +namespace OpenCvSharp.Tests; + +public class MarshalByRefAction : MarshalByRefObject { - public class MarshalByRefAction : MarshalByRefObject + public Action? Action { get; set; } + public void Run() => Action?.Invoke(); +} + +[Collection(nameof(AppDomainTest))] // should not be run test in parallel +[Serializable] +public class AppDomainTest : TestBase +{ + // https://github.com/shimat/opencvsharp/issues/389 + // http://urasandesu.blogspot.com/2012/02/appdomain-how-to-use-unmanaged-code-as.html + + private readonly ITestOutputHelper testOutputHelper; + + public AppDomainTest(ITestOutputHelper testOutputHelper) { - public Action? Action { get; set; } - public void Run() - { - Action?.Invoke(); - } + this.testOutputHelper = testOutputHelper; } - [Collection(nameof(AppDomainTest))] // should not be run test in parallel - [Serializable] - public class AppDomainTest : TestBase + [ExplicitFact] + public void Test() { - // https://github.com/shimat/opencvsharp/issues/389 - // http://urasandesu.blogspot.com/2012/02/appdomain-how-to-use-unmanaged-code-as.html - - private readonly ITestOutputHelper testOutputHelper; - - public AppDomainTest(ITestOutputHelper testOutputHelper) + using (var mat1 = new Mat(@"_data\image\lenna.png")) { - this.testOutputHelper = testOutputHelper; + Assert.Throws(() => + { + Cv2.MedianBlur(mat1, mat1, 2 /*even*/); + }); } - [ExplicitFact] - public void Test() + for (int i = 0; i < 100; i++) { - using (var mat1 = new Mat(@"_data\image\lenna.png")) + RunAtIsolatedDomain(AppDomain.CurrentDomain, () => { - Assert.Throws(() => + // ITestOutputHelper cannot be serialized + // ReSharper disable once Xunit.XunitTestWithConsoleOutput + testOutputHelper.WriteLine(Cv2.GetTickCount().ToString(CultureInfo.InvariantCulture)); + using var mat2 = new Mat(@"_data\image\lenna.png"); + try { - Cv2.MedianBlur(mat1, mat1, 2 /*even*/); - }); - } - - for (int i = 0; i < 100; i++) - { - RunAtIsolatedDomain(AppDomain.CurrentDomain, () => + Cv2.MedianBlur(mat2, mat2, 2 /*even*/); + } + catch (OpenCVException ex) { - // ITestOutputHelper cannot be serialized - // ReSharper disable once Xunit.XunitTestWithConsoleOutput - testOutputHelper.WriteLine(Cv2.GetTickCount().ToString(CultureInfo.InvariantCulture)); - using var mat2 = new Mat(@"_data\image\lenna.png"); - try - { - Cv2.MedianBlur(mat2, mat2, 2 /*even*/); - } - catch (OpenCVException ex) - { - // OK - GC.KeepAlive(ex); - } - }); - } - - // avoid AppDomainUnloadedException on subsequent tests https://codeday.me/jp/qa/20190609/973822.html - System.Threading.Thread.Sleep(TimeSpan.FromSeconds(2)); + // OK + GC.KeepAlive(ex); + } + }); } - private static void RunAtIsolatedDomain(Evidence securityInfo, AppDomainSetup info, Action action) - { - //if (!action.Method.IsStatic) - // throw new ArgumentException("", nameof(action)); + // avoid AppDomainUnloadedException on subsequent tests https://codeday.me/jp/qa/20190609/973822.html + Thread.Sleep(TimeSpan.FromSeconds(2)); + } - AppDomain? domain = null; - try - { - domain = AppDomain.CreateDomain("MyDomain " + action.Method, securityInfo, info); - var type = typeof(MarshalByRefAction); - Assert.NotNull(type.FullName); - var runner = (MarshalByRefAction)domain.CreateInstanceAndUnwrap(type.Assembly.FullName, type.FullName); - runner.Action = action; - runner.Run(); - } - finally - { - if (domain != null) - AppDomain.Unload(domain); - } - } + private static void RunAtIsolatedDomain(Evidence securityInfo, AppDomainSetup info, Action action) + { + //if (!action.Method.IsStatic) + // throw new ArgumentException("", nameof(action)); - private static void RunAtIsolatedDomain(AppDomain source, Action action) + AppDomain? domain = null; + try + { + domain = AppDomain.CreateDomain("MyDomain " + action.Method, securityInfo, info); + var type = typeof(MarshalByRefAction); + Assert.NotNull(type.FullName); + var runner = (MarshalByRefAction)domain.CreateInstanceAndUnwrap(type.Assembly.FullName, type.FullName); + runner.Action = action; + runner.Run(); + } + finally { - if (source == null) - throw new ArgumentNullException(nameof(source)); - RunAtIsolatedDomain(source.Evidence, source.SetupInformation, action); + if (domain is not null) + AppDomain.Unload(domain); } } + + private static void RunAtIsolatedDomain(AppDomain source, Action action) + { + if (source is null) + throw new ArgumentNullException(nameof(source)); + RunAtIsolatedDomain(source.Evidence, source.SetupInformation, action); + } } -#endif \ No newline at end of file +#endif diff --git a/test/OpenCvSharp.Tests/system/ExceptionTest.cs b/test/OpenCvSharp.Tests/system/ExceptionTest.cs index b98a4f97d..1a27d4111 100644 --- a/test/OpenCvSharp.Tests/system/ExceptionTest.cs +++ b/test/OpenCvSharp.Tests/system/ExceptionTest.cs @@ -1,5 +1,4 @@ -using System; -using Xunit; +using Xunit; namespace OpenCvSharp.Tests; @@ -36,7 +35,7 @@ public void MatInv() for (int i = 0; i < TrialCount; i++) { var data = new byte[] {1, 10, 100}; - using var mat = new Mat(3, 1, MatType.CV_8UC1, data); + using var mat = Mat.FromPixelData(3, 1, MatType.CV_8UC1, data); var ex = Assert.Throws(() => { using var expr = mat.Inv(); @@ -92,7 +91,7 @@ public void ArucoDetectMarkers() using var image = new Mat(); using var dict = OpenCvSharp.Aruco.CvAruco.GetPredefinedDictionary(OpenCvSharp.Aruco.PredefinedDictionaryName.Dict6X6_250); - var param = OpenCvSharp.Aruco.DetectorParameters.Create(); + var param = new OpenCvSharp.Aruco.DetectorParameters(); var ex = Assert.Throws( () => { OpenCvSharp.Aruco.CvAruco.DetectMarkers(image, dict, out _, out _, param, out _); }); diff --git a/test/OpenCvSharp.Tests/system/StdStringTest.cs b/test/OpenCvSharp.Tests/system/StdStringTest.cs index f17d499ba..72056f050 100644 --- a/test/OpenCvSharp.Tests/system/StdStringTest.cs +++ b/test/OpenCvSharp.Tests/system/StdStringTest.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; using Xunit; namespace OpenCvSharp.Tests; diff --git a/test/OpenCvSharp.Tests/system/WindowsLibraryLoaderTest.cs b/test/OpenCvSharp.Tests/system/WindowsLibraryLoaderTest.cs index d4eebe35c..5d33bc2b6 100644 --- a/test/OpenCvSharp.Tests/system/WindowsLibraryLoaderTest.cs +++ b/test/OpenCvSharp.Tests/system/WindowsLibraryLoaderTest.cs @@ -1,6 +1,4 @@ -#nullable enable - -using OpenCvSharp.Internal; +using OpenCvSharp.Internal; using Xunit; namespace OpenCvSharp.Tests; diff --git a/test/OpenCvSharp.Tests/text/OCRTesseractTest.cs b/test/OpenCvSharp.Tests/text/OCRTesseractTest.cs index ce1a717cc..4cb590b9b 100644 --- a/test/OpenCvSharp.Tests/text/OCRTesseractTest.cs +++ b/test/OpenCvSharp.Tests/text/OCRTesseractTest.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Text; +using OpenCvSharp.Text; using Xunit; using Xunit.Abstractions; @@ -30,7 +29,7 @@ public void Create() [Fact] public void Run() { - using (var image = Image("alphabet.png")) + using (var image = LoadImage("alphabet.png")) using (var tesseract = OCRTesseract.Create(TessData, "eng")) { tesseract.Run(image, diff --git a/test/OpenCvSharp.Tests/text/TextDetectorTest.cs b/test/OpenCvSharp.Tests/text/TextDetectorTest.cs index c52296f3e..ee9703aff 100644 --- a/test/OpenCvSharp.Tests/text/TextDetectorTest.cs +++ b/test/OpenCvSharp.Tests/text/TextDetectorTest.cs @@ -1,6 +1,4 @@ -using System; -using System.Diagnostics; -using System.IO; +using System.Diagnostics; using System.Net.Http; using Xunit; @@ -45,7 +43,7 @@ public void Create() public void Detect() { using var detector = TextDetectorCNN.Create(ModelArch, ModelWeights); - using var image = Image("imageTextR.png", ImreadModes.Color); + using var image = LoadImage("imageTextR.png", ImreadModes.Color); detector.Detect(image, out var boxes, out var confidences); Assert.NotEmpty(boxes); diff --git a/test/OpenCvSharp.Tests/tracking/TrackerCSRTTest.cs b/test/OpenCvSharp.Tests/tracking/TrackerCSRTTest.cs index 68163bb54..d97459d68 100644 --- a/test/OpenCvSharp.Tests/tracking/TrackerCSRTTest.cs +++ b/test/OpenCvSharp.Tests/tracking/TrackerCSRTTest.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Tracking; +using OpenCvSharp.Tracking; using Xunit; namespace OpenCvSharp.Tests.Tracking; diff --git a/test/OpenCvSharp.Tests/tracking/TrackerGOTURNTest.cs b/test/OpenCvSharp.Tests/tracking/TrackerGOTURNTest.cs index 684c1277f..1641d5a0d 100644 --- a/test/OpenCvSharp.Tests/tracking/TrackerGOTURNTest.cs +++ b/test/OpenCvSharp.Tests/tracking/TrackerGOTURNTest.cs @@ -1,5 +1,4 @@ -using OpenCvSharp.Tracking; -using Xunit; +using Xunit; namespace OpenCvSharp.Tests.Tracking; diff --git a/test/OpenCvSharp.Tests/tracking/TrackerKCFTest.cs b/test/OpenCvSharp.Tests/tracking/TrackerKCFTest.cs index c76edcaf8..c80a3c4dc 100644 --- a/test/OpenCvSharp.Tests/tracking/TrackerKCFTest.cs +++ b/test/OpenCvSharp.Tests/tracking/TrackerKCFTest.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.Tracking; +using OpenCvSharp.Tracking; using Xunit; namespace OpenCvSharp.Tests.Tracking; diff --git a/test/OpenCvSharp.Tests/tracking/TrackerMILTest.cs b/test/OpenCvSharp.Tests/tracking/TrackerMILTest.cs index 610e0cbfe..a99faef51 100644 --- a/test/OpenCvSharp.Tests/tracking/TrackerMILTest.cs +++ b/test/OpenCvSharp.Tests/tracking/TrackerMILTest.cs @@ -1,5 +1,4 @@ -using OpenCvSharp.Tracking; -using Xunit; +using Xunit; namespace OpenCvSharp.Tests.Tracking; diff --git a/test/OpenCvSharp.Tests/tracking/TrackerTestBase.cs b/test/OpenCvSharp.Tests/tracking/TrackerTestBase.cs index 9b5832753..e397b8136 100644 --- a/test/OpenCvSharp.Tests/tracking/TrackerTestBase.cs +++ b/test/OpenCvSharp.Tests/tracking/TrackerTestBase.cs @@ -1,9 +1,4 @@ -using System; -using System.Diagnostics; -using System.IO; -using System.Linq; -using OpenCvSharp.Tracking; -using Xunit; +using System.Diagnostics; namespace OpenCvSharp.Tests.Tracking; @@ -11,10 +6,10 @@ public abstract class TrackerTestBase : TestBase { protected static void InitBase(Tracker tracker) { - if (tracker == null) + if (tracker is null) throw new ArgumentNullException(nameof(tracker)); - using var vc = Image("lenna.png"); + using var vc = LoadImage("lenna.png"); tracker.Init(vc, new Rect(220, 60, 200, 220)); } diff --git a/test/OpenCvSharp.Tests/video/BackgroundSubtractorKNNTest.cs b/test/OpenCvSharp.Tests/video/BackgroundSubtractorKNNTest.cs index 24903f37f..c3b7ea2ad 100644 --- a/test/OpenCvSharp.Tests/video/BackgroundSubtractorKNNTest.cs +++ b/test/OpenCvSharp.Tests/video/BackgroundSubtractorKNNTest.cs @@ -24,7 +24,7 @@ public void CheckProperties() public void Apply() { using (var knn = BackgroundSubtractorKNN.Create()) - using (var src = Image("lenna.png")) + using (var src = LoadImage("lenna.png")) using (var dst = new Mat()) { knn.Apply(src, dst); diff --git a/test/OpenCvSharp.Tests/video/BackgroundSubtractorMOG2Test.cs b/test/OpenCvSharp.Tests/video/BackgroundSubtractorMOG2Test.cs index 80b4b0f06..1b7e578f4 100644 --- a/test/OpenCvSharp.Tests/video/BackgroundSubtractorMOG2Test.cs +++ b/test/OpenCvSharp.Tests/video/BackgroundSubtractorMOG2Test.cs @@ -29,7 +29,7 @@ public void CheckProperties() public void Apply() { using (var mog = BackgroundSubtractorMOG2.Create()) - using (var src = Image("lenna.png")) + using (var src = LoadImage("lenna.png")) using (var dst = new Mat()) { mog.Apply(src, dst); diff --git a/test/OpenCvSharp.Tests/video/KalmanTest.cs b/test/OpenCvSharp.Tests/video/KalmanTest.cs index 98edf6f1a..545e51e75 100644 --- a/test/OpenCvSharp.Tests/video/KalmanTest.cs +++ b/test/OpenCvSharp.Tests/video/KalmanTest.cs @@ -12,7 +12,7 @@ public void StatePre() Assert.NotNull(propValue); Assert.True(propValue.Empty()); - using var mat = new Mat(2, 2, MatType.CV_8U, new byte[,] + using var mat = Mat.FromPixelData(2, 2, MatType.CV_8U, new byte[,] { { 1, 1 }, { 0, 1 } @@ -29,7 +29,7 @@ public void StatePost() Assert.NotNull(propValue); Assert.True(propValue.Empty()); - using var mat = new Mat(2, 2, MatType.CV_8U, new byte[,] + using var mat = Mat.FromPixelData(2, 2, MatType.CV_8U, new byte[,] { { 1, 1 }, { 0, 1 } @@ -46,7 +46,7 @@ public void TransitionMatrix() Assert.NotNull(propValue); Assert.True(propValue.Empty()); - using var mat = new Mat(2, 2, MatType.CV_8U, new byte[,] + using var mat = Mat.FromPixelData(2, 2, MatType.CV_8U, new byte[,] { { 1, 1 }, { 0, 1 } @@ -63,7 +63,7 @@ public void ControlMatrix() Assert.NotNull(propValue); Assert.True(propValue.Empty()); - using var mat = new Mat(2, 2, MatType.CV_8U, new byte[,] + using var mat = Mat.FromPixelData(2, 2, MatType.CV_8U, new byte[,] { { 1, 1 }, { 0, 1 } @@ -80,7 +80,7 @@ public void MeasurementMatrix() Assert.NotNull(propValue); Assert.True(propValue.Empty()); - using var mat = new Mat(2, 2, MatType.CV_8U, new byte[,] + using var mat = Mat.FromPixelData(2, 2, MatType.CV_8U, new byte[,] { { 1, 1 }, { 0, 1 } @@ -97,7 +97,7 @@ public void ProcessNoiseCov() Assert.NotNull(propValue); Assert.True(propValue.Empty()); - using var mat = new Mat(2, 2, MatType.CV_8U, new byte[,] + using var mat = Mat.FromPixelData(2, 2, MatType.CV_8U, new byte[,] { { 1, 1 }, { 0, 1 } @@ -114,7 +114,7 @@ public void MeasurementNoiseCov() Assert.NotNull(propValue); Assert.True(propValue.Empty()); - using var mat = new Mat(2, 2, MatType.CV_8U, new byte[,] + using var mat = Mat.FromPixelData(2, 2, MatType.CV_8U, new byte[,] { { 1, 1 }, { 0, 1 } @@ -131,7 +131,7 @@ public void ErrorCovPre() Assert.NotNull(propValue); Assert.True(propValue.Empty()); - using var mat = new Mat(2, 2, MatType.CV_8U, new byte[,] + using var mat = Mat.FromPixelData(2, 2, MatType.CV_8U, new byte[,] { { 1, 1 }, { 0, 1 } @@ -148,7 +148,7 @@ public void Gain() Assert.NotNull(propValue); Assert.True(propValue.Empty()); - using var mat = new Mat(2, 2, MatType.CV_8U, new byte[,] + using var mat = Mat.FromPixelData(2, 2, MatType.CV_8U, new byte[,] { { 1, 1 }, { 0, 1 } @@ -165,7 +165,7 @@ public void ErrorCovPost() Assert.NotNull(propValue); Assert.True(propValue.Empty()); - using var mat = new Mat(2, 2, MatType.CV_8U, new byte[,] + using var mat = Mat.FromPixelData(2, 2, MatType.CV_8U, new byte[,] { { 1, 1 }, { 0, 1 } diff --git a/test/OpenCvSharp.Tests/videoio/VideoWriterTest.cs b/test/OpenCvSharp.Tests/videoio/VideoWriterTest.cs index 522241af1..fea0d4280 100644 --- a/test/OpenCvSharp.Tests/videoio/VideoWriterTest.cs +++ b/test/OpenCvSharp.Tests/videoio/VideoWriterTest.cs @@ -1,6 +1,4 @@ -using System; -using System.IO; -using System.Runtime.CompilerServices; +using System.Runtime.CompilerServices; using Xunit; using Xunit.Abstractions; @@ -21,7 +19,7 @@ public void WriteAndCapture() const string fileName = "dummy1.avi"; try { - using var image = Image("lenna.png"); + using var image = LoadImage("lenna.png"); { using var writer = new VideoWriter(fileName, VideoCaptureAPIs.OPENCV_MJPEG, FourCC.MJPG, 10, image.Size()); diff --git a/test/OpenCvSharp.Tests/wechat_qrcode/WeChatQRCodeTest.cs b/test/OpenCvSharp.Tests/wechat_qrcode/WeChatQRCodeTest.cs index 59a94a01d..fe4e94981 100644 --- a/test/OpenCvSharp.Tests/wechat_qrcode/WeChatQRCodeTest.cs +++ b/test/OpenCvSharp.Tests/wechat_qrcode/WeChatQRCodeTest.cs @@ -1,34 +1,26 @@ -using System.IO; -using Xunit; +using Xunit; using Xunit.Abstractions; namespace OpenCvSharp.Tests.WeChatQRCode; -public class WeChatQRCodeTest : TestBase +public class WeChatQRCodeTest(ITestOutputHelper testOutputHelper) : TestBase { - const string _wechat_QCODE_detector_prototxt_path = "_data/wechat_qrcode/detect.prototxt"; - const string _wechat_QCODE_detector_caffe_model_path = "_data/wechat_qrcode/detect.caffemodel"; - const string _wechat_QCODE_super_resolution_prototxt_path = "_data/wechat_qrcode/sr.prototxt"; - const string _wechat_QCODE_super_resolution_caffe_model_path = "_data/wechat_qrcode/sr.caffemodel"; - - private readonly ITestOutputHelper _testOutputHelper; - - public WeChatQRCodeTest(ITestOutputHelper testOutputHelper) - { - _testOutputHelper = testOutputHelper; - } + private const string WechatQcodeDetectorPrototxtPath = "_data/wechat_qrcode/detect.prototxt"; + private const string WechatQcodeDetectorCaffeModelPath = "_data/wechat_qrcode/detect.caffemodel"; + private const string WechatQcodeSuperResolutionPrototxtPath = "_data/wechat_qrcode/sr.prototxt"; + private const string WechatQcodeSuperResolutionCaffeModelPath = "_data/wechat_qrcode/sr.caffemodel"; [Fact] public void WechatQrcodeDecodeRun() { - Assert.True(File.Exists(_wechat_QCODE_detector_prototxt_path), $"DetectorPrototxt '{_wechat_QCODE_detector_prototxt_path}' not found"); - Assert.True(File.Exists(_wechat_QCODE_detector_caffe_model_path), $"DetectorcaffeModel '{_wechat_QCODE_detector_caffe_model_path}' not found"); - Assert.True(File.Exists(_wechat_QCODE_super_resolution_prototxt_path), $"SuperResolutionprototxt '{_wechat_QCODE_super_resolution_prototxt_path}' not found"); - Assert.True(File.Exists(_wechat_QCODE_super_resolution_caffe_model_path), $"SuperResolutionCaffe_model '{_wechat_QCODE_super_resolution_caffe_model_path}' not found"); + Assert.True(File.Exists(WechatQcodeDetectorPrototxtPath), $"DetectorPrototxt '{WechatQcodeDetectorPrototxtPath}' not found"); + Assert.True(File.Exists(WechatQcodeDetectorCaffeModelPath), $"DetectorcaffeModel '{WechatQcodeDetectorCaffeModelPath}' not found"); + Assert.True(File.Exists(WechatQcodeSuperResolutionPrototxtPath), $"SuperResolutionprototxt '{WechatQcodeSuperResolutionPrototxtPath}' not found"); + Assert.True(File.Exists(WechatQcodeSuperResolutionCaffeModelPath), $"SuperResolutionCaffe_model '{WechatQcodeSuperResolutionCaffeModelPath}' not found"); using var wechatQrcode = OpenCvSharp.WeChatQRCode.Create( - _wechat_QCODE_detector_prototxt_path, _wechat_QCODE_detector_caffe_model_path, - _wechat_QCODE_super_resolution_prototxt_path, _wechat_QCODE_super_resolution_caffe_model_path); + WechatQcodeDetectorPrototxtPath, WechatQcodeDetectorCaffeModelPath, + WechatQcodeSuperResolutionPrototxtPath, WechatQcodeSuperResolutionCaffeModelPath); using var src = Cv2.ImRead(@"_data/image/qr_multi.png", ImreadModes.Grayscale); wechatQrcode.DetectAndDecode(src, out var rects, out var texts); @@ -36,7 +28,7 @@ public void WechatQrcodeDecodeRun() Assert.Equal(2, texts.Length); foreach (var item in texts) { - _testOutputHelper.WriteLine(item); + testOutputHelper.WriteLine(item); Assert.NotEmpty(item); } } diff --git a/test/OpenCvSharp.Tests/xfeatures2d/LATCHTest.cs b/test/OpenCvSharp.Tests/xfeatures2d/LATCHTest.cs index c790742fb..1f46fdc39 100644 --- a/test/OpenCvSharp.Tests/xfeatures2d/LATCHTest.cs +++ b/test/OpenCvSharp.Tests/xfeatures2d/LATCHTest.cs @@ -16,8 +16,8 @@ public void CreateAndDispose() [Fact] public void Compute() { - using (var color = Image("lenna.png", ImreadModes.Color)) - using (var gray = Image("lenna.png", ImreadModes.Grayscale)) + using (var color = LoadImage("lenna.png", ImreadModes.Color)) + using (var gray = LoadImage("lenna.png", ImreadModes.Grayscale)) using (var descriptors = new Mat()) using (var latch = LATCH.Create()) using (var surf = SURF.Create(500)) diff --git a/test/OpenCvSharp.Tests/xfeatures2d/LUCIDTest.cs b/test/OpenCvSharp.Tests/xfeatures2d/LUCIDTest.cs index 6b44807f4..e56f73566 100644 --- a/test/OpenCvSharp.Tests/xfeatures2d/LUCIDTest.cs +++ b/test/OpenCvSharp.Tests/xfeatures2d/LUCIDTest.cs @@ -16,8 +16,8 @@ public void CreateAndDispose() [Fact] public void Compute() { - using (var color = Image("lenna.png", ImreadModes.Color)) - using (var gray = Image("lenna.png", ImreadModes.Grayscale)) + using (var color = LoadImage("lenna.png", ImreadModes.Color)) + using (var gray = LoadImage("lenna.png", ImreadModes.Grayscale)) using (var descriptors = new Mat()) using (var lucid = LUCID.Create()) using (var surf = SURF.Create(500)) diff --git a/test/OpenCvSharp.Tests/xfeatures2d/SURFTest.cs b/test/OpenCvSharp.Tests/xfeatures2d/SURFTest.cs index ffe407b42..010bf4676 100644 --- a/test/OpenCvSharp.Tests/xfeatures2d/SURFTest.cs +++ b/test/OpenCvSharp.Tests/xfeatures2d/SURFTest.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.XFeatures2D; +using OpenCvSharp.XFeatures2D; using Xunit; using Xunit.Abstractions; @@ -26,7 +25,7 @@ public void CreateAndDispose() public void Detect() { // This parameter should introduce same result of http://opencv.jp/wordpress/wp-content/uploads/lenna_SURF-150x150.png - using var gray = Image("lenna.png", 0); + using var gray = LoadImage("lenna.png", 0); using var surf = SURF.Create(500, 4, 2, true); var keyPoints = surf.Detect(gray); @@ -36,7 +35,7 @@ public void Detect() [Fact] public void DetectAndCompute() { - using (var gray = Image("lenna.png", ImreadModes.Grayscale)) + using (var gray = LoadImage("lenna.png", ImreadModes.Grayscale)) using (var surf = SURF.Create(500)) using (Mat descriptor = new Mat()) { diff --git a/test/OpenCvSharp.Tests/ximgproc/EdgeBoxesTest.cs b/test/OpenCvSharp.Tests/ximgproc/EdgeBoxesTest.cs index a9823ac8c..84d30f000 100644 --- a/test/OpenCvSharp.Tests/ximgproc/EdgeBoxesTest.cs +++ b/test/OpenCvSharp.Tests/ximgproc/EdgeBoxesTest.cs @@ -1,5 +1,4 @@ -using System; -using OpenCvSharp.XImgProc; +using OpenCvSharp.XImgProc; using Xunit; namespace OpenCvSharp.Tests.XImgProc; diff --git a/test/OpenCvSharp.Tests/ximgproc/EdgeFilterTest.cs b/test/OpenCvSharp.Tests/ximgproc/EdgeFilterTest.cs index c6055f748..d3c9a317e 100644 --- a/test/OpenCvSharp.Tests/ximgproc/EdgeFilterTest.cs +++ b/test/OpenCvSharp.Tests/ximgproc/EdgeFilterTest.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics; +using System.Diagnostics; using OpenCvSharp.XImgProc; using Xunit; @@ -10,7 +9,7 @@ public class EdgeFilterTest : TestBase [Fact] public void EnhanceByGuidedFilter() { - using var image = Image("lenna.png", ImreadModes.Color); + using var image = LoadImage("lenna.png", ImreadModes.Color); image.ConvertTo(image, MatType.CV_32F, 1.0 / 255.0); using var gf = GuidedFilter.Create(image, 16, 0.01); diff --git a/test/OpenCvSharp.Tests/ximgproc/FastHoughTransformTest.cs b/test/OpenCvSharp.Tests/ximgproc/FastHoughTransformTest.cs index 1f3e2b3ad..61a5e7835 100644 --- a/test/OpenCvSharp.Tests/ximgproc/FastHoughTransformTest.cs +++ b/test/OpenCvSharp.Tests/ximgproc/FastHoughTransformTest.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using OpenCvSharp.XImgProc; +using OpenCvSharp.XImgProc; using Xunit; // ReSharper disable RedundantArgumentDefaultValue @@ -17,7 +14,7 @@ public class FastHoughTransformTest : TestBase [Fact] public void FastHoughTransform() { - using (var image = Image("building.jpg", ImreadModes.Grayscale)) + using (var image = LoadImage("building.jpg", ImreadModes.Grayscale)) using (var fht = new Mat()) { CvXImgProc.FastHoughTransform(image, fht, MatType.CV_32SC1); diff --git a/test/OpenCvSharp.Tests/ximgproc/FastLineDetectorTest.cs b/test/OpenCvSharp.Tests/ximgproc/FastLineDetectorTest.cs index 5b7d95789..19840b22e 100644 --- a/test/OpenCvSharp.Tests/ximgproc/FastLineDetectorTest.cs +++ b/test/OpenCvSharp.Tests/ximgproc/FastLineDetectorTest.cs @@ -23,7 +23,7 @@ public void New2() public void DetectUsingOutputArray() { using var fld = FastLineDetector.Create(); - using var image = Image("building.jpg", ImreadModes.Grayscale); + using var image = LoadImage("building.jpg", ImreadModes.Grayscale); using var lines = new Mat(); fld.Detect(image, lines); Assert.False(lines.Empty()); @@ -35,7 +35,7 @@ public void DetectUsingOutputArray() public void DetectUsingVector() { using var fld = FastLineDetector.Create(); - using var image = Image("building.jpg", ImreadModes.Grayscale); + using var image = LoadImage("building.jpg", ImreadModes.Grayscale); Vec4f[] lines = fld.Detect(image); Assert.NotNull(lines); Assert.True(lines.Length > 0); @@ -45,7 +45,7 @@ public void DetectUsingVector() public void DrawSegmentsUsingInputArray() { using var fld = FastLineDetector.Create(); - using var image = Image("building.jpg", ImreadModes.Grayscale); + using var image = LoadImage("building.jpg", ImreadModes.Grayscale); using var view = image.Clone(); using var lines = new Mat(); fld.Detect(image, lines); @@ -57,7 +57,7 @@ public void DrawSegmentsUsingInputArray() public void DrawSegmentsUsingVector() { using var fld = FastLineDetector.Create(); - using var image = Image("building.jpg", ImreadModes.Grayscale); + using var image = LoadImage("building.jpg", ImreadModes.Grayscale); using var view = image.Clone(); Vec4f[] lines = fld.Detect(image); fld.DrawSegments(view, lines, true); diff --git a/test/OpenCvSharp.Tests/ximgproc/StructuredEdgeDetectionTest.cs b/test/OpenCvSharp.Tests/ximgproc/StructuredEdgeDetectionTest.cs index f2f33eda4..448e1be65 100644 --- a/test/OpenCvSharp.Tests/ximgproc/StructuredEdgeDetectionTest.cs +++ b/test/OpenCvSharp.Tests/ximgproc/StructuredEdgeDetectionTest.cs @@ -1,6 +1,4 @@ -using System; -using System.IO; -using System.IO.Compression; +using System.IO.Compression; using OpenCvSharp.XImgProc; using Xunit; @@ -45,7 +43,7 @@ public void DetectEdges() Assert.True(File.Exists(Model), $"Failed to download {ModelUrl}"); using (var obj = StructuredEdgeDetection.Create(Model)) - using (var image = Image("blob/shapes1.png", ImreadModes.Color)) + using (var image = LoadImage("blob/shapes1.png", ImreadModes.Color)) using (var image32F = new Mat()) using (var edges = new Mat()) using (var orientation = new Mat()) @@ -67,7 +65,7 @@ public void GetBoundingBoxes() Assert.True(File.Exists(Model), $"Failed to download {ModelUrl}"); using (var obj = StructuredEdgeDetection.Create(Model)) - using (var image = Image("blob/shapes1.png", ImreadModes.Color)) + using (var image = LoadImage("blob/shapes1.png", ImreadModes.Color)) using (var image32F = new Mat()) using (var edges = new Mat()) using (var orientation = new Mat()) diff --git a/test/OpenCvSharp.Tests/ximgproc/SuperpixelTest.cs b/test/OpenCvSharp.Tests/ximgproc/SuperpixelTest.cs index 0ed167051..cc2b99ce4 100644 --- a/test/OpenCvSharp.Tests/ximgproc/SuperpixelTest.cs +++ b/test/OpenCvSharp.Tests/ximgproc/SuperpixelTest.cs @@ -1,6 +1,4 @@ -using System; -using System.Runtime.InteropServices; -using OpenCvSharp.XImgProc; +using OpenCvSharp.XImgProc; using Xunit; namespace OpenCvSharp.Tests.XImgProc; @@ -10,7 +8,7 @@ public class SuperpixelTest : TestBase [Fact] public void LscNew() { - using var image = Image("building.jpg", ImreadModes.Grayscale); + using var image = LoadImage("building.jpg", ImreadModes.Grayscale); using var lsc = SuperpixelLSC.Create(image); GC.KeepAlive(lsc); } @@ -18,7 +16,7 @@ public void LscNew() [Fact] public void SlicNew() { - using var image = Image("building.jpg", ImreadModes.Grayscale); + using var image = LoadImage("building.jpg", ImreadModes.Grayscale); using var slic = SuperpixelSLIC.Create(image); GC.KeepAlive(slic); } @@ -26,7 +24,7 @@ public void SlicNew() [Fact] public void SeedsNew() { - using var image = Image("building.jpg", ImreadModes.Grayscale); + using var image = LoadImage("building.jpg", ImreadModes.Grayscale); using var seeds = SuperpixelSEEDS.Create( image.Width, image.Height, @@ -39,7 +37,7 @@ public void SeedsNew() [Fact] public void LscSimple() { - using var image = Image("building.jpg", ImreadModes.Grayscale); + using var image = LoadImage("building.jpg", ImreadModes.Grayscale); using var lsc = SuperpixelLSC.Create(image); lsc.Iterate(10); @@ -66,7 +64,7 @@ public void LscSimple() [Fact] public void SlicSimple() { - using var image = Image("building.jpg", ImreadModes.Grayscale); + using var image = LoadImage("building.jpg", ImreadModes.Grayscale); using var slic = SuperpixelSLIC.Create(image); slic.Iterate(10); @@ -96,7 +94,7 @@ public void SlicSimple() [PlatformSpecificFact("Windows")] public void SeedsSimple() { - using var image = Image("building.jpg", ImreadModes.Grayscale); + using var image = LoadImage("building.jpg", ImreadModes.Grayscale); using var seeds = SuperpixelSEEDS.Create( image.Width, image.Height, diff --git a/test/OpenCvSharp.Tests/ximgproc/XimgProcTest.cs b/test/OpenCvSharp.Tests/ximgproc/XimgProcTest.cs index d54a864ac..094a6a758 100644 --- a/test/OpenCvSharp.Tests/ximgproc/XimgProcTest.cs +++ b/test/OpenCvSharp.Tests/ximgproc/XimgProcTest.cs @@ -15,7 +15,7 @@ public class XImgProcTest : TestBase [InlineData(LocalBinarizationMethods.Nick)] public void Niblack(LocalBinarizationMethods method) { - using var src = Image("mandrill.png", ImreadModes.Grayscale); + using var src = LoadImage("mandrill.png", ImreadModes.Grayscale); using var dst = new Mat(); CvXImgProc.NiblackThreshold(src, dst, 255, ThresholdTypes.Binary, 5, 0.5, method); ShowImagesWhenDebugMode(dst); @@ -26,7 +26,7 @@ public void Sauvola() { foreach (var r in new double[]{16, 32, 64, 128}) { - using var src = Image("mandrill.png", ImreadModes.Grayscale); + using var src = LoadImage("mandrill.png", ImreadModes.Grayscale); using var dst = new Mat(); CvXImgProc.NiblackThreshold( src, dst, @@ -35,14 +35,14 @@ public void Sauvola() 5, 0.5, LocalBinarizationMethods.Sauvola, r); - ShowImagesWhenDebugMode(new[] { dst }, new[] { $"r={r}" }); + ShowImagesWhenDebugMode([dst], [$"r={r}"]); } } [Fact] public void Thinning() { - using var src = Image("blob/shapes2.png", ImreadModes.Grayscale); + using var src = LoadImage("blob/shapes2.png", ImreadModes.Grayscale); using var dst = new Mat(); CvXImgProc.Thinning(src, dst, ThinningTypes.ZHANGSUEN); ShowImagesWhenDebugMode(src, dst); @@ -51,7 +51,7 @@ public void Thinning() [Fact] public void AnisotropicDiffusion() { - using var src = Image("blob/shapes2.png", ImreadModes.Color); + using var src = LoadImage("blob/shapes2.png", ImreadModes.Color); using var dst = new Mat(); CvXImgProc.AnisotropicDiffusion(src, dst, 1, 1, 1); ShowImagesWhenDebugMode(src, dst); @@ -60,7 +60,7 @@ public void AnisotropicDiffusion() [Fact] public void WeightedMedianFilter() { - using var src = Image("lenna.png", ImreadModes.Grayscale); + using var src = LoadImage("lenna.png", ImreadModes.Grayscale); using var dst = new Mat(); CvXImgProc.WeightedMedianFilter(src, src, dst, 7); ShowImagesWhenDebugMode(dst); @@ -70,7 +70,7 @@ public void WeightedMedianFilter() public void CovarianceEstimation() { const int windowSize = 7; - using var src = Image("lenna.png", ImreadModes.Grayscale); + using var src = LoadImage("lenna.png", ImreadModes.Grayscale); using var dst = new Mat(); CvXImgProc.CovarianceEstimation(src, dst, windowSize, windowSize); // TODO @@ -84,7 +84,7 @@ public void CovarianceEstimation() [Fact] public void BrightEdges() { - using var src = Image("lenna.png", ImreadModes.Color); + using var src = LoadImage("lenna.png", ImreadModes.Color); using var dst = new Mat(); CvXImgProc.BrightEdges(src, dst); ShowImagesWhenDebugMode(src, dst); @@ -95,7 +95,7 @@ public void BrightEdges() [Fact] public void ColorMatchTemplate() { - using var src = Image("lenna.png", ImreadModes.Color); + using var src = LoadImage("lenna.png", ImreadModes.Color); using var template = src[new Rect(200, 230, 150, 150)]; using var dst = new Mat(); @@ -115,7 +115,7 @@ public void ColorMatchTemplate() [Fact] public void GradientDeriche() { - using var src = Image("lenna.png", ImreadModes.Color); + using var src = LoadImage("lenna.png", ImreadModes.Color); using var dstX = new Mat(); using var dstY = new Mat(); CvXImgProc.GradientDericheX(src, dstX, 10.0, 10.0); @@ -128,7 +128,7 @@ public void GradientDeriche() [Fact] public void EdgePreservingFilter() { - using var src = Image("lenna.png", ImreadModes.Color); + using var src = LoadImage("lenna.png", ImreadModes.Color); using var dst = new Mat(); CvXImgProc.EdgePreservingFilter(src, dst, 7, 10.0); ShowImagesWhenDebugMode(src, dst); @@ -139,7 +139,7 @@ public void EdgePreservingFilter() [Fact] public void RLThreshold() { - using var src = Image("mandrill.png", ImreadModes.Grayscale); + using var src = LoadImage("mandrill.png", ImreadModes.Grayscale); using var dst = new Mat(); CvXImgProc.RL.Threshold(src, dst, 128, ThresholdTypes.Binary); @@ -161,7 +161,7 @@ public void RLGetStructuringElement() [Fact] public void RLDilateErode() { - using var src = Image("mandrill.png", ImreadModes.Grayscale); + using var src = LoadImage("mandrill.png", ImreadModes.Grayscale); using var binary = new Mat(); using var dilate = new Mat(); using var erode = new Mat(); @@ -186,7 +186,7 @@ public void RLDilateErode() [Fact] public void PeiLinNormalization() { - using var src = Image("peilin_plane.png", ImreadModes.Grayscale); + using var src = LoadImage("peilin_plane.png", ImreadModes.Grayscale); using var tMat = src.Clone(); CvXImgProc.PeiLinNormalization(src, tMat); var tArray = CvXImgProc.PeiLinNormalization(src); diff --git a/test/OpenCvSharp.Tests/xphoto/TonemapDurandTest.cs b/test/OpenCvSharp.Tests/xphoto/TonemapDurandTest.cs index 59f1b5d57..6216186d8 100644 --- a/test/OpenCvSharp.Tests/xphoto/TonemapDurandTest.cs +++ b/test/OpenCvSharp.Tests/xphoto/TonemapDurandTest.cs @@ -8,7 +8,7 @@ public class TonemapDurandTest : TestBase [Fact] public void Process() { - using var src = Image("lenna.png"); + using var src = LoadImage("lenna.png"); using var dst = new Mat(); using var tonemap = TonemapDurand.Create(); @@ -25,8 +25,8 @@ public void Process() public void Properties() { using var tonemap = TonemapDurand.Create(1.2f, 3.0f, 1.5f, 2.2f, 1.3f); - Assert.Equal(3.0f, tonemap.Contrast, 3); - Assert.Equal(1.5f, tonemap.Saturation, 3); + Assert.Equal(3.0f, tonemap.Contrast, 1e-3); + Assert.Equal(1.5f, tonemap.Saturation, 1e-3); // TODO OpenCV bug https://github.com/opencv/opencv_contrib/pull/2398 //Assert.Equal(2.2f, tonemap.SigmaSpace, 3); @@ -36,8 +36,8 @@ public void Properties() tonemap.Saturation = 2.0f; tonemap.SigmaSpace = 2.5f; tonemap.SigmaColor = 2.5f; - Assert.Equal(3.5f, tonemap.Contrast, 3); - Assert.Equal(2.0f, tonemap.Saturation, 3); + Assert.Equal(3.5f, tonemap.Contrast, 1e-3); + Assert.Equal(2.0f, tonemap.Saturation, 1e-3); //Assert.Equal(2.5f, tonemap.SigmaSpace, 3); //Assert.Equal(2.5f, tonemap.SigmaColor, 3); } diff --git a/test/OpenCvSharp.Tests/xphoto/XPhotoTest.cs b/test/OpenCvSharp.Tests/xphoto/XPhotoTest.cs index 8f56b9cf2..1f0962b05 100644 --- a/test/OpenCvSharp.Tests/xphoto/XPhotoTest.cs +++ b/test/OpenCvSharp.Tests/xphoto/XPhotoTest.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics; +using System.Diagnostics; using OpenCvSharp.XPhoto; using Xunit; using Xunit.Abstractions; @@ -19,7 +18,7 @@ public XPhotoTest(ITestOutputHelper testOutputHelper) [Fact] public void ApplyChannelGains() { - using var src = Image("lenna.png"); + using var src = LoadImage("lenna.png"); using var b = new Mat(src.Rows, src.Cols, src.Type()); using var g = new Mat(src.Rows, src.Cols, src.Type()); using var r = new Mat(src.Rows, src.Cols, src.Type()); @@ -46,7 +45,7 @@ public void ApplyChannelGains() public void GrayworldWBBalanceWhite() { using var wb = CvXPhoto.CreateGrayworldWB(); - using var src = Image("lenna.png"); + using var src = LoadImage("lenna.png"); using var dst = new Mat(src.Rows, src.Cols, src.Type()); wb.BalanceWhite(src, dst); @@ -77,8 +76,8 @@ public void GrayworldWBProperties() [Fact] public void Inpaint() { - using var src = Image("building.jpg"); - using var mask = Image("building_mask.bmp", ImreadModes.Grayscale); + using var src = LoadImage("building.jpg"); + using var mask = LoadImage("building_mask.bmp", ImreadModes.Grayscale); using var dst = new Mat(src.Size(), src.Type()); CvXPhoto.Inpaint(src, mask, dst, InpaintTypes.SHIFTMAP); ShowImagesWhenDebugMode(src); @@ -89,7 +88,7 @@ public void Inpaint() public void LearningBasedWBBalanceWhite() { using var wb = CvXPhoto.CreateLearningBasedWB(null); - using var src = Image("lenna.png"); + using var src = LoadImage("lenna.png"); using var dst = new Mat(src.Rows, src.Cols, src.Type()); wb.BalanceWhite(src, dst); @@ -108,7 +107,7 @@ public void LearningBasedWBBalanceWhite() public void LearningBasedWBExtractSimpleFeatures() { using var wb = LearningBasedWB.Create(null); - using var src = Image("lenna.png"); + using var src = LoadImage("lenna.png"); using var dst = new Mat(); wb.ExtractSimpleFeatures(src, dst); @@ -135,7 +134,7 @@ public void LearningBasedWBBalanceWhiteWithModel() // About model file // http://docs.opencv.org/trunk/dc/dcb/tutorial_xphoto_training_white_balance.html using var wb = CvXPhoto.CreateLearningBasedWB(""); - using var src = Image("lenna.png"); + using var src = LoadImage("lenna.png"); using var dst = new Mat(src.Rows, src.Cols, src.Type()); wb.BalanceWhite(src, dst); @@ -177,7 +176,7 @@ public void LearningBasedWBProperties() public void SimpleWBBalanceWhite() { using var wb = CvXPhoto.CreateSimpleWB(); - using var src = Image("lenna.png"); + using var src = LoadImage("lenna.png"); using var dst = new Mat(src.Rows, src.Cols, src.Type()); wb.BalanceWhite(src, dst); @@ -225,7 +224,7 @@ public void SimpleWBProperties() [Fact] public void DctDenoising() { - using var src = Image("lenna.png"); + using var src = LoadImage("lenna.png"); using var dst = new Mat(); CvXPhoto.DctDenoising(src, dst, 1); @@ -238,7 +237,7 @@ public void DctDenoising() [Fact] public void Bm3dDenoising() { - using var src = Image("lenna.png", ImreadModes.Grayscale); + using var src = LoadImage("lenna.png", ImreadModes.Grayscale); using var dst = new Mat(); CvXPhoto.Bm3dDenoising(src, dst); @@ -251,7 +250,7 @@ public void Bm3dDenoising() [Fact] public void OilPainting() { - using var src = Image("lenna.png", ImreadModes.Grayscale); + using var src = LoadImage("lenna.png", ImreadModes.Grayscale); using var dst = new Mat(); CvXPhoto.OilPainting(src, dst, 5, 10); @@ -273,7 +272,7 @@ public void Sample() { RestoreDirectory = true, Multiselect = true, - Filter = "Image Files(*.png;*.jpg;*.jpeg;*.bmp)|*.png;*.jpg;*.jpeg;*.bmp" + Filter = "LoadImage Files(*.png;*.jpg;*.jpeg;*.bmp)|*.png;*.jpg;*.jpeg;*.bmp" }) { if (dialog.ShowDialog() != System.Windows.Forms.DialogResult.OK) diff --git a/tool/OpenCvSharp.NupkgBetaRemover/Program.cs b/tool/OpenCvSharp.NupkgBetaRemover/Program.cs index c804d9bee..aaf803797 100644 --- a/tool/OpenCvSharp.NupkgBetaRemover/Program.cs +++ b/tool/OpenCvSharp.NupkgBetaRemover/Program.cs @@ -30,7 +30,7 @@ private static void Main(string[] args) using (var zipArchive = ZipFile.Open(nupkgFile, ZipArchiveMode.Update)) { var nuspecEntry = zipArchive.Entries.FirstOrDefault(e => e.FullName.EndsWith(".nuspec")); - if (nuspecEntry == null) + if (nuspecEntry is null) continue; string nuspecContent; diff --git a/tool/OpenCvSharp.ReleaseMaker/Packer.cs b/tool/OpenCvSharp.ReleaseMaker/Packer.cs index 4a323446f..2726467bf 100644 --- a/tool/OpenCvSharp.ReleaseMaker/Packer.cs +++ b/tool/OpenCvSharp.ReleaseMaker/Packer.cs @@ -36,16 +36,6 @@ public static class Packer @"OpenCvSharp.Extensions\bin\Release\netstandard2.1\OpenCvSharp.Extensions.dll", @"OpenCvSharp.Extensions\bin\Release\netstandard2.1\OpenCvSharp.Extensions.pdb", }, - ["netcoreapp3.1"] = new[] - { - @"OpenCvSharp\bin\Release\netcoreapp3.1\OpenCvSharp.dll", - @"OpenCvSharp\bin\Release\netcoreapp3.1\OpenCvSharp.dll.config", - @"OpenCvSharp\bin\Release\netcoreapp3.1\OpenCvSharp.pdb", - @"OpenCvSharp.Extensions\bin\Release\netcoreapp3.1\OpenCvSharp.Extensions.dll", - @"OpenCvSharp.Extensions\bin\Release\netcoreapp3.1\OpenCvSharp.Extensions.pdb", - @"OpenCvSharp.WpfExtensions\bin\Release\netcoreapp3.1\OpenCvSharp.WpfExtensions.dll", - @"OpenCvSharp.WpfExtensions\bin\Release\netcoreapp3.1\OpenCvSharp.WpfExtensions.pdb", - }, ["net6.0"] = new[] { @"OpenCvSharp\bin\Release\net6.0\OpenCvSharp.dll", @@ -69,7 +59,7 @@ public static class Packer private static readonly IReadOnlyDictionary architectures = new Dictionary { ["win"] = new[] { "x86", "x64" }, - ["uwp"] = new[] { "x86", "x64", "ARM" }, + //["uwp"] = new[] { "x86", "x64", "ARM" }, }; private static readonly IReadOnlySet ignoredExt = new[]{ @@ -135,7 +125,7 @@ private static void MakeBinaryPackage(string dir, string dirDst, string opencvVe using var zipStream = File.OpenWrite(dstFileName); using var zipArchive = new ZipArchive(zipStream, ZipArchiveMode.Create, false); - // net48, netcoreapp3.1といったplatformごとにDLLを選択 + // net48, net6.0といったplatformごとにDLLを選択 foreach (var (frameworkName, dllFileNames) in dllFiles) { foreach (var dllFileName in dllFileNames)