import type { CanvasLike } from "./canvas-factory.js";
import { cv } from "./cv-provider.js";
import type { BoundingBox, Points } from "./index.interface.js";
/** Options for configuring contour detection. */
export type ContoursOptions = {
    /** The contour retrieval mode. (cv.RETR_...) */
    mode: cv.RetrievalModes;
    /** The contour approximation method. (cv.CHAIN_...) */
    method: cv.ContourApproximationModes;
};
/**
 * Wrapper around OpenCV's `findContours` that provides convenient accessors
 * for iterating, filtering, and analyzing contours in a binary image.
 */
export declare class Contours {
    private contours;
    /** The constructor for the Contours class. It takes an image and options as parameters. */
    /**
     * @param img - The image to find contours in.
     * @param options.mode - The contour retrieval mode. (cv.RETR_...)
     * @param options.method - The contour approximation method. (cv.CHAIN_...)
     * @example
     * const contours = new Contours(image, {
     *   mode: cv.RETR_EXTERNAL,
     *   method: cv.CHAIN_APPROX_SIMPLE,
     * });
     */
    constructor(img: cv.Mat, options?: Partial<ContoursOptions>);
    /**
     *  Get the all of contours found in the image.
     * @returns The number of contours found in the image (cv.MatVector).
     */
    getAll(): cv.MatVector;
    /**
     *  Get the size of the contours
     * @returns Size of the contours
     */
    getSize(): number;
    /**
     * Get contour at a specific index.
     * @param index - The index of the contour to get.
     * @returns The contour at the specified index (cv.Mat).
     */
    getFromIndex(index: number): cv.Mat;
    /**
     * Get the rectangle that bounds the contour.
     * @param contour - The contour to get the bounding rectangle for.
     * @returns The bounding rectangle for the contour (cv.Rect).
     */
    getRect(contour: cv.Mat): cv.Rect;
    /**
     * Iterate over all contours and call the callback function for each contour.
     * @param callback - The callback function to call for each contour.
     * The callback function takes a contour as a parameter.
     * @returns void
     */
    iterate(callback: (contour: cv.Mat) => any): Contours;
    /**
     * Get the largest contour area.
     * @returns The largest contour area (cv.Mat).
     */
    getLargestContourArea(): cv.Mat | null;
    /**
     * Get four corner points for a given contour.
     * Useful for perspective transformation (warp).
     * @param options.canvas - The canvas to get the corner points for.
     * @param options.contour - The contour to get the corner points for. If not provided, the largest contour area will be used.
     * @returns The four corner points of the contour (topLeft, topRight, bottomLeft, bottomRight) and the bounding box.
     */
    getCornerPoints(options: {
        canvas: CanvasLike;
        contour?: cv.Mat;
    }): {
        points: Points;
        bbox: BoundingBox;
    };
    /**
     * Approximates a rectangular contour from a given contour using the Douglas-Peucker algorithm.
     *
     * This method simplifies the contour by reducing the number of points,
     * which is useful for detecting rectangle-like shapes.
     *
     * @param options.threshold - Approximation accuracy as a factor of arc length.
     *        A lower value results in a more accurate approximation with more points. (default: 0.02)
     * @param options.contour - Optional input contour. If not provided, the largest contour area will be used.
     * @returns The approximated contour as a `cv.Mat`. Returns an empty `cv.Mat` if no contour is available.
     */
    getApproximateRectangleContour(options?: {
        threshold?: number;
        contour?: cv.Mat;
    }): cv.Mat | undefined;
    /**
     * Delete the contours object.
     */
    destroy(): void;
}
