Commit 2e22f8e7 authored by Vitaly Tuzov's avatar Vitaly Tuzov

Fix for morphologyEx MORPH_HITMISS mode

parent 44572fac
...@@ -2115,16 +2115,18 @@ void cv::morphologyEx( InputArray _src, OutputArray _dst, int op, ...@@ -2115,16 +2115,18 @@ void cv::morphologyEx( InputArray _src, OutputArray _dst, int op,
k2 = (kernel == -1); k2 = (kernel == -1);
if (countNonZero(k1) <= 0) if (countNonZero(k1) <= 0)
e1 = src; e1 = Mat(src.size(), src.type(), Scalar(255));
else else
erode(src, e1, k1, anchor, iterations, borderType, borderValue); erode(src, e1, k1, anchor, iterations, borderType, borderValue);
Mat src_complement;
bitwise_not(src, src_complement);
if (countNonZero(k2) <= 0) if (countNonZero(k2) <= 0)
e2 = src_complement; e2 = Mat(src.size(), src.type(), Scalar(255));
else else
{
Mat src_complement;
bitwise_not(src, src_complement);
erode(src_complement, e2, k2, anchor, iterations, borderType, borderValue); erode(src_complement, e2, k2, anchor, iterations, borderType, borderValue);
}
dst = e1 & e2; dst = e1 & e2;
} }
break; break;
......
...@@ -2102,6 +2102,12 @@ TEST(Imgproc_MorphEx, hitmiss_regression_8957) ...@@ -2102,6 +2102,12 @@ TEST(Imgproc_MorphEx, hitmiss_regression_8957)
ref.at<uchar>(1, 1) = 255; ref.at<uchar>(1, 1) = 255;
ASSERT_DOUBLE_EQ(cvtest::norm(dst, ref, NORM_INF), 0.); ASSERT_DOUBLE_EQ(cvtest::norm(dst, ref, NORM_INF), 0.);
src.at<uchar>(1, 1) = 255;
ref.at<uchar>(0, 1) = 255;
ref.at<uchar>(2, 1) = 255;
cv::morphologyEx(src, dst, MORPH_HITMISS, kernel);
ASSERT_DOUBLE_EQ(cvtest::norm(dst, ref, NORM_INF), 0.);
} }
TEST(Imgproc_MorphEx, hitmiss_zero_kernel) TEST(Imgproc_MorphEx, hitmiss_zero_kernel)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment