@@ -56,15 +56,13 @@ void cv::seamlessClone(InputArray _src, InputArray _dst, InputArray _mask, Point
56
56
const Mat mask = _mask.getMat ();
57
57
_blend.create (dest.size (), CV_8UC3);
58
58
Mat blend = _blend.getMat ();
59
+ dest.copyTo (blend);
59
60
60
61
int minx = INT_MAX, miny = INT_MAX, maxx = INT_MIN, maxy = INT_MIN;
61
62
int h = mask.size ().height ;
62
63
int w = mask.size ().width ;
63
64
64
65
Mat gray = Mat (mask.size (),CV_8UC1);
65
- Mat dst_mask = Mat::zeros (dest.size (),CV_8UC1);
66
- Mat cs_mask = Mat::zeros (src.size (),CV_8UC3);
67
- Mat cd_mask = Mat::zeros (dest.size (),CV_8UC3);
68
66
69
67
if (mask.channels () == 3 )
70
68
cvtColor (mask, gray, COLOR_BGR2GRAY );
@@ -88,8 +86,6 @@ void cv::seamlessClone(InputArray _src, InputArray _dst, InputArray _mask, Point
88
86
int lenx = maxx - minx;
89
87
int leny = maxy - miny;
90
88
91
- Mat patch = Mat::zeros (Size (leny, lenx), CV_8UC3);
92
-
93
89
int minxd = p.y - lenx/2 ;
94
90
int maxxd = p.y + lenx/2 ;
95
91
int minyd = p.x - leny/2 ;
@@ -100,19 +96,16 @@ void cv::seamlessClone(InputArray _src, InputArray _dst, InputArray _mask, Point
100
96
Rect roi_d (minyd,minxd,leny,lenx);
101
97
Rect roi_s (miny,minx,leny,lenx);
102
98
103
- Mat destinationROI = dst_mask (roi_d);
104
- Mat sourceROI = cs_mask (roi_s);
99
+ Mat destinationROI = dest (roi_d).clone ();
105
100
106
- gray (roi_s). copyTo (destinationROI );
101
+ Mat sourceROI = Mat::zeros (leny, lenx, src. type () );
107
102
src (roi_s).copyTo (sourceROI,gray (roi_s));
108
- src (roi_s).copyTo (patch, gray (roi_s));
109
-
110
- destinationROI = cd_mask (roi_d);
111
- cs_mask (roi_s).copyTo (destinationROI);
112
103
104
+ Mat maskROI = gray (roi_s);
105
+ Mat recoveredROI = blend (roi_d);
113
106
114
107
Cloning obj;
115
- obj.normalClone (dest,cd_mask,dst_mask,blend ,flags);
108
+ obj.normalClone (destinationROI,sourceROI,maskROI,recoveredROI ,flags);
116
109
117
110
}
118
111
0 commit comments