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:
@@ -62,4 +62,46 @@ BIGDATA_TEST(Imgproc_DistanceTransform, large_image_12218)
|
||||
EXPECT_EQ(nz, (size.height*size.width / 2));
|
||||
}
|
||||
|
||||
TEST(Imgproc_DistanceTransform, wide_image_22732)
|
||||
{
|
||||
Mat src = Mat::zeros(1, 4099, CV_8U); // 4099 or larger used to be bad
|
||||
Mat dist(src.rows, src.cols, CV_32F);
|
||||
distanceTransform(src, dist, DIST_L2, DIST_MASK_PRECISE, CV_32F);
|
||||
int nz = countNonZero(dist);
|
||||
EXPECT_EQ(nz, 0);
|
||||
}
|
||||
|
||||
TEST(Imgproc_DistanceTransform, large_square_22732)
|
||||
{
|
||||
Mat src = Mat::zeros(8000, 8005, CV_8U), dist;
|
||||
distanceTransform(src, dist, DIST_L2, DIST_MASK_PRECISE, CV_32F);
|
||||
int nz = countNonZero(dist);
|
||||
EXPECT_EQ(dist.size(), src.size());
|
||||
EXPECT_EQ(dist.type(), CV_32F);
|
||||
EXPECT_EQ(nz, 0);
|
||||
|
||||
Point p0(src.cols-1, src.rows-1);
|
||||
src.setTo(1);
|
||||
src.at<uchar>(p0) = 0;
|
||||
distanceTransform(src, dist, DIST_L2, DIST_MASK_PRECISE, CV_32F);
|
||||
EXPECT_EQ(dist.size(), src.size());
|
||||
EXPECT_EQ(dist.type(), CV_32F);
|
||||
bool first = true;
|
||||
int nerrs = 0;
|
||||
for (int y = 0; y < dist.rows; y++)
|
||||
for (int x = 0; x < dist.cols; x++) {
|
||||
float d = dist.at<float>(y, x);
|
||||
double dx = (double)(x - p0.x), dy = (double)(y - p0.y);
|
||||
float d0 = (float)sqrt(dx*dx + dy*dy);
|
||||
if (std::abs(d0 - d) > 1) {
|
||||
if (first) {
|
||||
printf("y=%d, x=%d. dist_ref=%.2f, dist=%.2f\n", y, x, d0, d);
|
||||
first = false;
|
||||
}
|
||||
nerrs++;
|
||||
}
|
||||
}
|
||||
EXPECT_EQ(0, nerrs) << "reference distance map is different from computed one at " << nerrs << " pixels\n";
|
||||
}
|
||||
|
||||
}} // namespace
|
||||
|
||||
Reference in New Issue
Block a user