1
0
mirror of https://github.com/opencv/opencv.git synced 2026-07-31 08:13:04 +04:00

Merge pull request #9048 from sovrasov:morph_hitmiss_fix

imgproc: fix MORPH_HITMISS operation when kernel has no negative values
This commit is contained in:
Alexander Alekhin
2017-07-14 17:13:06 +00:00
committed by GitHub
2 changed files with 52 additions and 13 deletions
+19 -13
View File
@@ -2012,8 +2012,6 @@ void cv::morphologyEx( InputArray _src, OutputArray _dst, int op,
CV_IPP_RUN_FAST(ipp_morphologyEx(op, src, dst, kernel, anchor, iterations, borderType, borderValue));
#endif
Mat k1, k2, e1, e2; //only for hit and miss op
switch( op )
{
case MORPH_ERODE:
@@ -2051,21 +2049,29 @@ void cv::morphologyEx( InputArray _src, OutputArray _dst, int op,
break;
case MORPH_HITMISS:
CV_Assert(src.type() == CV_8UC1);
k1 = (kernel == 1);
k2 = (kernel == -1);
if (countNonZero(k1) <= 0)
e1 = src;
else
erode(src, e1, k1, anchor, iterations, borderType, borderValue);
if (countNonZero(k2) <= 0)
e2 = src;
else
if(countNonZero(kernel) <=0)
{
src.copyTo(dst);
break;
}
{
Mat k1, k2, e1, e2;
k1 = (kernel == 1);
k2 = (kernel == -1);
if (countNonZero(k1) <= 0)
e1 = src;
else
erode(src, e1, k1, anchor, iterations, borderType, borderValue);
Mat src_complement;
bitwise_not(src, src_complement);
erode(src_complement, e2, k2, anchor, iterations, borderType, borderValue);
if (countNonZero(k2) <= 0)
e2 = src_complement;
else
erode(src_complement, e2, k2, anchor, iterations, borderType, borderValue);
dst = e1 & e2;
}
dst = e1 & e2;
break;
default:
CV_Error( CV_StsBadArg, "unknown morphological operation" );