16 #include <mrpt/3rdparty/do_opencv_includes.h> 38 bool useScaramuzzaMethod)
51 bool corners_found =
false;
57 vector<CvPoint2D32f> corners_list;
58 corners_count = CORNERS_COUNT;
59 corners_list.resize(CORNERS_COUNT);
63 int find_chess_flags = cv::CALIB_CB_ADAPTIVE_THRESH;
64 if (normalize_image) find_chess_flags |= cv::CALIB_CB_NORMALIZE_IMAGE;
67 if (!useScaramuzzaMethod)
69 vector<cv::Point2f> pointbuf;
73 cvImg, check_size, pointbuf, find_chess_flags);
75 corners_list.resize(pointbuf.size());
76 for (
size_t i = 0; i < pointbuf.size(); i++)
78 corners_list[i].x = pointbuf[i].x;
79 corners_list[i].y = pointbuf[i].y;
90 if (corners_found && corners_count != CORNERS_COUNT) corners_found =
false;
97 &iplImg, &corners_list[0], corners_count, cvSize(5, 5),
99 cvTermCriteria(CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, 10, 0.01f));
104 for (y = 0, k = 0; y < check_size.height; y++)
105 for (
int x = 0; x < check_size.width; x++, k++)
106 cornerCoords.emplace_back(corners_list[k].x, corners_list[k].y);
109 return corners_found;
135 std::vector<std::vector<TPixelCoordf>>& cornerCoords,
142 const IplImage img_ipl = cvIplImage(img_m);
144 std::vector<std::vector<CvPoint2D32f>> corners_list;
150 if (corners_found && !corners_list.empty())
153 cornerCoords.resize(corners_list.size());
156 for (
size_t i = 0; i < corners_list.size(); i++)
164 cvTermCriteria(CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, 10, 0.01f));
170 corners_list[i][k].x, corners_list[i][k].y));
179 cornerCoords[i][0].y},
180 pt_x1{cornerCoords[i][1].x, cornerCoords[i][1].y},
199 cornerCoords.clear();
void findMultipleChessboardsCorners(const mrpt::img::CImage &img, std::vector< std::vector< mrpt::img::TPixelCoordf >> &cornerCoords, unsigned int check_size_x, unsigned int check_size_y)
Look for the corners of one or more chessboard/checkerboards in the image.
Shallow copy: the copied object is a reference to the original one.
size_t size(const MATRIXLIKE &m, const int dim)
A pair (x,y) of pixel coordinates (subpixel resolution).
void crossProduct3D(const T &v0, const U &v1, V &vOut)
Computes the cross product of two 3D vectors, returning a vector normal to both.
void asCvMat(cv::Mat &out_img, copy_type_t copy_type) const
Makes a shallow or deep copy of this image into the provided cv::Mat.
#define ASSERT_(f)
Defines an assertion mechanism.
This base provides a set of functions for maths stuff.
bool findChessboardCorners(const mrpt::img::CImage &img, std::vector< mrpt::img::TPixelCoordf > &cornerCoords, unsigned int check_size_x, unsigned int check_size_y, bool normalize_image=true, bool useScaramuzzaMethod=false)
Look for the corners of a chessboard in the image using one of two different methods.
Classes for computer vision, detectors, features, etc.
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
const_iterator begin() const
struct _IplImage IplImage
bool find_chessboard_corners_multiple(const CImage &img_, CvSize pattern_size, std::vector< std::vector< CvPoint2D32f >> &out_corners)
int cvFindChessboardCorners3(const CImage &img_, CvSize pattern_size, std::vector< CvPoint2D32f > &out_corners)
A class for storing images as grayscale or RGB bitmaps.