1
0
mirror of https://github.com/opencv/opencv.git synced 2026-07-30 15:53:03 +04:00

Merge branch 4.x

This commit is contained in:
Alexander Smorkalov
2024-08-27 18:31:36 +03:00
108 changed files with 1241 additions and 646 deletions
+36
View File
@@ -1863,6 +1863,26 @@ TEST(Imgproc_ColorBayer, regression)
EXPECT_EQ(0, countNonZero(diff.reshape(1) > 1));
}
TEST(Imgproc_ColorBayer2Gray, regression_25823)
{
const int n = 100;
Mat src(n, n, CV_8UC1);
Mat dst;
for (int i = 0; i < src.rows; ++i)
{
for (int j = 0; j < src.cols; ++j)
{
src.at<uchar>(i, j) = (i + j) % 2;
}
}
cvtColor(src, dst, COLOR_BayerBG2GRAY);
Mat gold(n, n, CV_8UC1, Scalar(1));
EXPECT_EQ(0, cv::norm(dst, gold, NORM_INF));
}
TEST(Imgproc_ColorBayerVNG, regression)
{
cvtest::TS* ts = cvtest::TS::ptr();
@@ -3203,4 +3223,20 @@ TEST(ImgProc_RGB2Lab, NaN_21111)
#endif
}
// See https://github.com/opencv/opencv/issues/25971
// If num of channels is not suitable for selected cv::ColorConversionCodes,
// e.code must be cv::Error::BadNumChannels.
TEST(ImgProc_cvtColor_InvalidNumOfChannels, regression_25971)
{
try {
cv::Mat src = cv::Mat::zeros(100, 100, CV_8UC1);
cv::Mat dst;
EXPECT_THROW(cv::cvtColor(src, dst, COLOR_RGB2GRAY), cv::Exception);
}catch(const cv::Exception& e) {
EXPECT_EQ(e.code, cv::Error::BadNumChannels);
}catch(...) {
FAIL() << "Unexpected exception is happened.";
}
}
}} // namespace
@@ -65,4 +65,31 @@ TEST(Imgproc_CornerSubPix, out_of_image_corners)
ASSERT_TRUE(Rect(0, 0, image.cols, image.rows).contains(corners.front()));
}
// See https://github.com/opencv/opencv/issues/26016
TEST(Imgproc_CornerSubPix, corners_on_the_edge)
{
cv::Mat image(500, 500, CV_8UC1);
cv::Size win(1, 1);
cv::Size zeroZone(-1, -1);
cv::TermCriteria criteria;
std::vector<cv::Point2f> cornersOK1 = { cv::Point2f(250, std::nextafter(499.5f, 499.5f - 1.0f)) };
EXPECT_NO_THROW( cv::cornerSubPix(image, cornersOK1, win, zeroZone, criteria) ) << cornersOK1;
std::vector<cv::Point2f> cornersOK2 = { cv::Point2f(250, 499.5f) };
EXPECT_NO_THROW( cv::cornerSubPix(image, cornersOK2, win, zeroZone, criteria) ) << cornersOK2;
std::vector<cv::Point2f> cornersOK3 = { cv::Point2f(250, std::nextafter(499.5f, 499.5f + 1.0f)) };
EXPECT_NO_THROW( cv::cornerSubPix(image, cornersOK3, win, zeroZone, criteria) ) << cornersOK3;
std::vector<cv::Point2f> cornersOK4 = { cv::Point2f(250, std::nextafter(500.0f, 500.0f - 1.0f)) };
EXPECT_NO_THROW( cv::cornerSubPix(image, cornersOK4, win, zeroZone, criteria) ) << cornersOK4;
std::vector<cv::Point2f> cornersNG1 = { cv::Point2f(250, 500.0f) };
EXPECT_ANY_THROW( cv::cornerSubPix(image, cornersNG1, win, zeroZone, criteria) ) << cornersNG1;
std::vector<cv::Point2f> cornersNG2 = { cv::Point2f(250, std::nextafter(500.0f, 500.0f + 1.0f)) };
EXPECT_ANY_THROW( cv::cornerSubPix(image, cornersNG2, win, zeroZone, criteria) ) << cornersNG2;
}
}} // namespace