3 #include <opencv2/imgproc/imgproc.hpp> 10 max_correction_rate=max(0.
f,
min(1.0
f,max_correction_rate));
20 out.create(nbits_sq,nbits_sq,CV_8UC1);
23 for(
int r=0;r<nbits_sq;r++){
24 uchar *pr=out.ptr<uchar>(r);
25 for(
int c=0;c<nbits_sq;c++)
36 for(
int i=0;i<63;i++){
44 assert(in.rows == in.cols);
46 if (in.type() == CV_8UC1) grey = in;
47 else cv::cvtColor(in, grey, CV_BGR2GRAY);
49 cv::threshold(grey, grey, 125, 255, cv::THRESH_BINARY | cv::THRESH_OTSU);
59 marker_id=
_dic[ids[i]];
83 int bits_a=
sqrt(total_nbits);
88 int swidth = thres_img.rows / bits_a2;
89 for (
int y = 0;
y < bits_a2;
y++) {
91 if (
y == 0 ||
y == bits_a2-1)
93 for (
int x = 0; x < bits_a2; x += inc) {
94 cv::Mat
square = thres_img(cv::Rect(x*swidth,
y*swidth, swidth, swidth));
95 if (cv::countNonZero(square) > (swidth * swidth) / 2)
104 cv::Mat _bits = cv::Mat::zeros(bits_a, bits_a, CV_8UC1);
107 for (
int y = 0;
y < bits_a;
y++) {
109 for (
int x = 0; x < bits_a; x++) {
110 int Xstart = (x + 1) * (swidth);
111 int Ystart = (
y + 1) * (swidth);
112 cv::Mat
square = thres_img(cv::Rect(Xstart, Ystart, swidth, swidth));
113 int nZ = cv::countNonZero(square);
114 if (nZ > (swidth * swidth) / 2)
115 _bits.at< uchar >(
y, x) = 1;
132 std::bitset<64> bits;
134 for (
int y = code.rows-1;
y >=0 ;
y--)
135 for (
int x = code.cols-1; x >=0; x--)
136 bits[bidx++]=code.at<uchar>(
y,x);
137 return bits.to_ullong();
143 for (
int i = 0; i < in.rows; i++) {
144 for (
int j = 0; j < in.cols; j++) {
145 out.at< uchar >(i, j) = in.at< uchar >(in.cols - j - 1, i);
int _maxCorrectionAllowed
const CwiseUnaryOp< internal::scalar_square_op< Scalar >, const Derived > square() const
void setParams(const Dictionary &dic, float max_correction_rate)
uint64_t touulong(const cv::Mat &code)
std::string getName() const
cv::Mat rotate(const cv::Mat &in)
void toMat(uint64_t code, int nbits_sq, cv::Mat &out)
bool getInnerCode(const cv::Mat &thres_img, int total_nbits, vector< uint64_t > &ids)
DICT_TYPES getType() const
const std::map< uint64_t, uint16_t > & getMapCode() const
static std::string getTypeString(DICT_TYPES t)
bool is(uint64_t code) const
int hamm_distance(uint64_t a, uint64_t b)
bool detect(const cv::Mat &in, int &marker_id, int &nRotations)
const CwiseUnaryOp< internal::scalar_sqrt_op< Scalar >, const Derived > sqrt() const