public VectorOfPointF Detect(Image<Gray, byte> image, int innerCornersPerChessboardCols, int innerCornersPerChessboardRows) { var corners = new VectorOfPointF(); CvInvoke.FindChessboardCorners(image, new Size(innerCornersPerChessboardCols, innerCornersPerChessboardRows), corners); if (corners.Size != innerCornersPerChessboardCols*innerCornersPerChessboardRows) { return new VectorOfPointF(new[] {new PointF(0, 0)}); } var refinedCorners = new[] {corners.ToArray()}; image.FindCornerSubPix(refinedCorners, new Size(11, 11), new Size(-1, -1), new MCvTermCriteria(10)); return new VectorOfPointF(refinedCorners[0]); }