mirror of
https://github.com/opencv/opencv.git
synced 2026-07-29 23:33:05 +04:00
Merge branch 4.x
This commit is contained in:
@@ -771,6 +771,57 @@ TEST_P(CharucoBoard, testWrongSizeDetection)
|
||||
ASSERT_TRUE(detectedCharucoIds.empty());
|
||||
}
|
||||
|
||||
TEST(CharucoBoardGenerate, issue_24806)
|
||||
{
|
||||
aruco::Dictionary dict = aruco::getPredefinedDictionary(aruco::DICT_4X4_1000);
|
||||
const float squareLength = 13.f, markerLength = 10.f;
|
||||
const Size boardSize(7ull, 4ull);
|
||||
const aruco::CharucoBoard board(boardSize, squareLength, markerLength, dict);
|
||||
const int marginSize = 24;
|
||||
Mat boardImg;
|
||||
|
||||
// generate chessboard image
|
||||
board.generateImage(Size(400, 300), boardImg, marginSize);
|
||||
// This condition checks that the width of the image determines the dimensions of the chessboard in this test
|
||||
CV_Assert((float)(boardImg.cols) / (float)boardSize.width <=
|
||||
(float)(boardImg.rows) / (float)boardSize.height);
|
||||
|
||||
// prepare data for chessboard image test
|
||||
Mat noMarginsImg = boardImg(Range(marginSize, boardImg.rows - marginSize),
|
||||
Range(marginSize, boardImg.cols - marginSize));
|
||||
const float pixInSquare = (float)(noMarginsImg.cols) / (float)boardSize.width;
|
||||
|
||||
Size pixInChessboard(cvRound(pixInSquare*boardSize.width), cvRound(pixInSquare*boardSize.height));
|
||||
const Point startChessboard((noMarginsImg.cols - pixInChessboard.width) / 2,
|
||||
(noMarginsImg.rows - pixInChessboard.height) / 2);
|
||||
Mat chessboardZoneImg = noMarginsImg(Rect(startChessboard, pixInChessboard));
|
||||
|
||||
// B - black pixel, W - white pixel
|
||||
// chessboard corner 1:
|
||||
// B W
|
||||
// W B
|
||||
Mat goldCorner1 = (Mat_<uint8_t>(2, 2) <<
|
||||
0, 255,
|
||||
255, 0);
|
||||
// B - black pixel, W - white pixel
|
||||
// chessboard corner 2:
|
||||
// W B
|
||||
// B W
|
||||
Mat goldCorner2 = (Mat_<uint8_t>(2, 2) <<
|
||||
255, 0,
|
||||
0, 255);
|
||||
|
||||
// test chessboard corners in generated image
|
||||
for (const Point3f& p: board.getChessboardCorners()) {
|
||||
Point2f chessCorner(pixInSquare*(p.x/squareLength),
|
||||
pixInSquare*(p.y/squareLength));
|
||||
Mat winCorner = chessboardZoneImg(Rect(Point(cvRound(chessCorner.x) - 1, cvRound(chessCorner.y) - 1), Size(2, 2)));
|
||||
bool eq = (cv::countNonZero(goldCorner1 != winCorner) == 0) | (cv::countNonZero(goldCorner2 != winCorner) == 0);
|
||||
ASSERT_TRUE(eq);
|
||||
}
|
||||
// TODO: fix aruco generateImage and add test aruco corners for generated image
|
||||
}
|
||||
|
||||
// Temporary disabled in https://github.com/opencv/opencv/pull/24338
|
||||
// 5.x version produces conrnes with different shape than 4.x (32F_C2 instead of 2x 32FC1)
|
||||
TEST(Charuco, DISABLED_testSeveralBoardsWithCustomIds)
|
||||
|
||||
@@ -7,10 +7,6 @@
|
||||
#include "opencv2/ts.hpp"
|
||||
#include "opencv2/objdetect.hpp"
|
||||
|
||||
#if defined CV_CXX11
|
||||
#include <random>
|
||||
#else
|
||||
#include <cstdlib>
|
||||
#endif
|
||||
#include <random>
|
||||
|
||||
#endif
|
||||
|
||||
@@ -5,16 +5,6 @@
|
||||
#include "test_precomp.hpp"
|
||||
namespace opencv_test { namespace {
|
||||
|
||||
#if !defined CV_CXX11
|
||||
// Wrapper for generating seeded random number via std::rand.
|
||||
template<unsigned Seed>
|
||||
class SeededRandFunctor {
|
||||
public:
|
||||
SeededRandFunctor() { std::srand(Seed); }
|
||||
int operator()(int i) { return std::rand() % (i + 1); }
|
||||
};
|
||||
#endif
|
||||
|
||||
std::string encode_qrcode_images_name[] = {
|
||||
"version1_mode1.png", "version1_mode2.png", "version1_mode4.png",
|
||||
"version2_mode1.png", "version2_mode2.png", "version2_mode4.png",
|
||||
|
||||
Reference in New Issue
Block a user