Пример #1
0
        /// <summary>
        /// Находит углы в изображении шахматной доски, установленном с помощью SetImage
        /// </summary>
        /// <param name="corners">Найденные углы</param>
        /// <returns>Показывает соответствуют-ли найленные углы шаблону CornersPattern</returns>
        public bool FindCorners(out CvPoint2D32f[] corners)
        {
            bool           result;
            int            numCorners;
            ChessboardFlag flags    = ChessboardFlag.AdaptiveThresh | ChessboardFlag.NormalizeImage | ChessboardFlag.FilterQuads;
            CvTermCriteria criteria = new CvTermCriteria(CriteriaType.Iteration | CriteriaType.Epsilon, MaxIterations, Epsilon);

            // Находим углы
            result = chessBoard.FindChessboardCorners(CornersPattern, out corners, out numCorners, flags);

            // Уточнаем положение углов
            chessBoard.CvtColor(grayChessBoard, ColorConversion.RgbToGray);
            grayChessBoard.FindCornerSubPix(corners, corners.Length, new CvSize(11, 11), new CvSize(-1, -1), criteria);

            return(result);
        }
Пример #2
0
        /// <summary>
        /// Finds the positions of internal corners of the chessboard.
        /// </summary>
        /// <param name="image">Source chessboard view. It must be an 8-bit grayscale or color image.</param>
        /// <param name="patternSize">Number of inner corners per a chessboard row and column 
        /// ( patternSize = Size(points_per_row,points_per_colum) = Size(columns, rows) ).</param>
        /// <param name="corners">Output array of detected corners.</param>
        /// <param name="flags">Various operation flags that can be zero or a combination of the ChessboardFlag values</param>
        /// <returns>The function returns true if all of the corners are found and they are placed in a certain order (row by row, left to right in every row). 
        /// Otherwise, if the function fails to find all the corners or reorder them, it returns false.</returns>
        public static bool FindChessboardCorners(
            InputArray image,
            Size patternSize,
            out Point2f[] corners,
            ChessboardFlag flags = ChessboardFlag.AdaptiveThresh | ChessboardFlag.NormalizeImage)
        {
            if (image == null)
                throw new ArgumentNullException("image");
            image.ThrowIfDisposed();

            using (var cornersVec = new VectorOfPoint2f())
            {
                int ret = NativeMethods.calib3d_findChessboardCorners_InputArray(
                    image.CvPtr, patternSize, cornersVec.CvPtr, (int)flags);
                corners = cornersVec.ToArray();
                return ret != 0;
            }
        }
Пример #3
0
        /// <summary>
        /// Finds the positions of internal corners of the chessboard.
        /// </summary>
        /// <param name="image">Source chessboard view. It must be an 8-bit grayscale or color image.</param>
        /// <param name="patternSize">Number of inner corners per a chessboard row and column 
        /// ( patternSize = Size(points_per_row,points_per_colum) = Size(columns, rows) ).</param>
        /// <param name="corners">Output array of detected corners.</param>
        /// <param name="flags">Various operation flags that can be zero or a combination of the ChessboardFlag values</param>
        /// <returns>The function returns true if all of the corners are found and they are placed in a certain order (row by row, left to right in every row). 
        /// Otherwise, if the function fails to find all the corners or reorder them, it returns false.</returns>
        public static bool FindChessboardCorners(
            InputArray image, 
            Size patternSize,
            OutputArray corners,
            ChessboardFlag flags = ChessboardFlag.AdaptiveThresh | ChessboardFlag.NormalizeImage)
        {
            if (image == null)
                throw new ArgumentNullException("image");
            if (corners == null)
                throw new ArgumentNullException("corners");
            image.ThrowIfDisposed();
            corners.ThrowIfNotReady();

            int ret = NativeMethods.calib3d_findChessboardCorners_InputArray(
                image.CvPtr, patternSize, corners.CvPtr, (int)flags);
            corners.Fix();
            return ret != 0;
        }
Пример #4
0
        /// <summary>
        /// 入力画像がチェスボードパターンであるかどうかを確認し,チェスボードの各コーナーの位置検出を試みる.
        /// </summary>
        /// <param name="image">入力のチェスボード画像.8ビットのグレースケールまたはカラー画像.</param>
        /// <param name="patternSize">チェスボードの行と列ごとのコーナーの数</param>
        /// <param name="corners">検出されたコーナーの配列. Length=pattern_size.Width*pattern_size.Height</param>
        /// <param name="cornerCount">コーナーの数が出力される</param>
        /// <param name="flags">処理フラグ</param>
        /// <returns>すべてのコーナーが検出され,正しい順番(行順で,かつ各行は左から右に並ぶ)でそれらが配置されている場合には, true</returns>
#else
        /// <summary>
        /// Finds positions of internal corners of the chessboard
        /// </summary>
        /// <param name="image">Source chessboard view; it must be 8-bit grayscale or color image. </param>
        /// <param name="patternSize">The number of inner corners per chessboard row and column. </param>
        /// <param name="corners">The output array of corners detected. </param>
        /// <param name="cornerCount">The output corner counter. If it is not null, the function stores there the number of corners found. </param>
        /// <param name="flags">Various operation flags</param>
        /// <returns>returns true if all the corners have been found and they have been placed in a certain order (row by row, left to right in every row), otherwise, if the function fails to find all the corners or reorder them, it returns false. </returns>
#endif
        public static bool FindChessboardCorners(CvArr image, CvSize patternSize, out CvPoint2D32f[] corners, out int cornerCount, ChessboardFlag flags)
        {
            if (image == null)
            {
                throw new ArgumentNullException("image");
            }

            cornerCount = patternSize.Width * patternSize.Height;
            corners = new CvPoint2D32f[cornerCount];

            using (var cornersPtr = new ArrayAddress1<CvPoint2D32f>(corners))
            {
                int result = NativeMethods.cvFindChessboardCorners(image.CvPtr, patternSize, cornersPtr, ref cornerCount, flags);
                return result != 0;
            }
        }