Skip to content

Commit 92deccb

Browse files
committed
Merge pull request opencv#9654 from savuor:seamlessclone
2 parents 0624411 + d343a58 commit 92deccb

File tree

1 file changed

+6
-13
lines changed

1 file changed

+6
-13
lines changed

modules/photo/src/seamless_cloning.cpp

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -56,15 +56,13 @@ void cv::seamlessClone(InputArray _src, InputArray _dst, InputArray _mask, Point
5656
const Mat mask = _mask.getMat();
5757
_blend.create(dest.size(), CV_8UC3);
5858
Mat blend = _blend.getMat();
59+
dest.copyTo(blend);
5960

6061
int minx = INT_MAX, miny = INT_MAX, maxx = INT_MIN, maxy = INT_MIN;
6162
int h = mask.size().height;
6263
int w = mask.size().width;
6364

6465
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);
6866

6967
if(mask.channels() == 3)
7068
cvtColor(mask, gray, COLOR_BGR2GRAY );
@@ -88,8 +86,6 @@ void cv::seamlessClone(InputArray _src, InputArray _dst, InputArray _mask, Point
8886
int lenx = maxx - minx;
8987
int leny = maxy - miny;
9088

91-
Mat patch = Mat::zeros(Size(leny, lenx), CV_8UC3);
92-
9389
int minxd = p.y - lenx/2;
9490
int maxxd = p.y + lenx/2;
9591
int minyd = p.x - leny/2;
@@ -100,19 +96,16 @@ void cv::seamlessClone(InputArray _src, InputArray _dst, InputArray _mask, Point
10096
Rect roi_d(minyd,minxd,leny,lenx);
10197
Rect roi_s(miny,minx,leny,lenx);
10298

103-
Mat destinationROI = dst_mask(roi_d);
104-
Mat sourceROI = cs_mask(roi_s);
99+
Mat destinationROI = dest(roi_d).clone();
105100

106-
gray(roi_s).copyTo(destinationROI);
101+
Mat sourceROI = Mat::zeros(leny, lenx, src.type());
107102
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);
112103

104+
Mat maskROI = gray(roi_s);
105+
Mat recoveredROI = blend(roi_d);
113106

114107
Cloning obj;
115-
obj.normalClone(dest,cd_mask,dst_mask,blend,flags);
108+
obj.normalClone(destinationROI,sourceROI,maskROI,recoveredROI,flags);
116109

117110
}
118111

0 commit comments

Comments
 (0)