Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
O
opencv
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
opencv
Commits
11d89ad7
Commit
11d89ad7
authored
Oct 08, 2014
by
Adrien BAK
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
coding guidelines
parent
53f4f06a
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
43 additions
and
43 deletions
+43
-43
seamless_cloning.cpp
modules/photo/src/seamless_cloning.cpp
+4
-4
seamless_cloning.hpp
modules/photo/src/seamless_cloning.hpp
+9
-9
seamless_cloning_impl.cpp
modules/photo/src/seamless_cloning_impl.cpp
+30
-30
No files found.
modules/photo/src/seamless_cloning.cpp
View file @
11d89ad7
...
...
@@ -116,7 +116,7 @@ void cv::seamlessClone(InputArray _src, InputArray _dst, InputArray _mask, Point
Cloning
obj
;
obj
.
normal
_c
lone
(
dest
,
cd_mask
,
dst_mask
,
blend
,
flags
);
obj
.
normal
C
lone
(
dest
,
cd_mask
,
dst_mask
,
blend
,
flags
);
}
...
...
@@ -143,7 +143,7 @@ void cv::colorChange(InputArray _src, InputArray _mask, OutputArray _dst, float
src
.
copyTo
(
cs_mask
,
gray
);
Cloning
obj
;
obj
.
local
_color_c
hange
(
src
,
cs_mask
,
gray
,
blend
,
red
,
green
,
blue
);
obj
.
local
ColorC
hange
(
src
,
cs_mask
,
gray
,
blend
,
red
,
green
,
blue
);
}
void
cv
::
illuminationChange
(
InputArray
_src
,
InputArray
_mask
,
OutputArray
_dst
,
float
a
,
float
b
)
...
...
@@ -168,7 +168,7 @@ void cv::illuminationChange(InputArray _src, InputArray _mask, OutputArray _dst,
src
.
copyTo
(
cs_mask
,
gray
);
Cloning
obj
;
obj
.
illum
_c
hange
(
src
,
cs_mask
,
gray
,
blend
,
alpha
,
beta
);
obj
.
illum
inationC
hange
(
src
,
cs_mask
,
gray
,
blend
,
alpha
,
beta
);
}
...
...
@@ -193,5 +193,5 @@ void cv::textureFlattening(InputArray _src, InputArray _mask, OutputArray _dst,
src
.
copyTo
(
cs_mask
,
gray
);
Cloning
obj
;
obj
.
texture
_f
latten
(
src
,
cs_mask
,
gray
,
low_threshold
,
high_threshold
,
kernel_size
,
blend
);
obj
.
texture
F
latten
(
src
,
cs_mask
,
gray
,
low_threshold
,
high_threshold
,
kernel_size
,
blend
);
}
modules/photo/src/seamless_cloning.hpp
View file @
11d89ad7
...
...
@@ -53,24 +53,24 @@ namespace cv
class
Cloning
{
public
:
void
normal
_c
lone
(
const
cv
::
Mat
&
destination
,
const
cv
::
Mat
&
mask
,
const
cv
::
Mat
&
wmask
,
cv
::
Mat
&
cloned
,
int
flag
);
void
illum
_c
hange
(
cv
::
Mat
&
I
,
cv
::
Mat
&
mask
,
cv
::
Mat
&
wmask
,
cv
::
Mat
&
cloned
,
float
alpha
,
float
beta
);
void
local
_color_c
hange
(
cv
::
Mat
&
I
,
cv
::
Mat
&
mask
,
cv
::
Mat
&
wmask
,
cv
::
Mat
&
cloned
,
float
red_mul
,
float
green_mul
,
float
blue_mul
);
void
texture
_f
latten
(
cv
::
Mat
&
I
,
cv
::
Mat
&
mask
,
cv
::
Mat
&
wmask
,
float
low_threshold
,
float
high_threhold
,
int
kernel_size
,
cv
::
Mat
&
cloned
);
void
normal
C
lone
(
const
cv
::
Mat
&
destination
,
const
cv
::
Mat
&
mask
,
const
cv
::
Mat
&
wmask
,
cv
::
Mat
&
cloned
,
int
flag
);
void
illum
inationC
hange
(
cv
::
Mat
&
I
,
cv
::
Mat
&
mask
,
cv
::
Mat
&
wmask
,
cv
::
Mat
&
cloned
,
float
alpha
,
float
beta
);
void
local
ColorC
hange
(
cv
::
Mat
&
I
,
cv
::
Mat
&
mask
,
cv
::
Mat
&
wmask
,
cv
::
Mat
&
cloned
,
float
red_mul
,
float
green_mul
,
float
blue_mul
);
void
texture
F
latten
(
cv
::
Mat
&
I
,
cv
::
Mat
&
mask
,
cv
::
Mat
&
wmask
,
float
low_threshold
,
float
high_threhold
,
int
kernel_size
,
cv
::
Mat
&
cloned
);
protected
:
void
init
_var
(
const
cv
::
Mat
&
destination
,
const
cv
::
Mat
&
binaryMask
);
void
compute
_d
erivatives
(
const
cv
::
Mat
&
destination
,
const
cv
::
Mat
&
patch
,
const
cv
::
Mat
&
binaryMask
);
void
scalar
_p
roduct
(
cv
::
Mat
mat
,
float
r
,
float
g
,
float
b
);
void
init
Variables
(
const
cv
::
Mat
&
destination
,
const
cv
::
Mat
&
binaryMask
);
void
compute
D
erivatives
(
const
cv
::
Mat
&
destination
,
const
cv
::
Mat
&
patch
,
const
cv
::
Mat
&
binaryMask
);
void
scalar
P
roduct
(
cv
::
Mat
mat
,
float
r
,
float
g
,
float
b
);
void
poisson
(
const
cv
::
Mat
&
destination
);
void
evaluate
(
const
cv
::
Mat
&
I
,
const
cv
::
Mat
&
wmask
,
const
cv
::
Mat
&
cloned
);
void
dst
(
const
Mat
&
src
,
Mat
&
dest
,
bool
invert
=
false
);
void
idst
(
const
Mat
&
src
,
Mat
&
dest
);
void
solve
(
const
cv
::
Mat
&
img
,
std
::
vector
<
float
>&
mod_diff
,
cv
::
Mat
&
result
);
void
poisson
_s
olver
(
const
cv
::
Mat
&
img
,
cv
::
Mat
&
gxx
,
cv
::
Mat
&
gyy
,
cv
::
Mat
&
result
);
void
poisson
S
olver
(
const
cv
::
Mat
&
img
,
cv
::
Mat
&
gxx
,
cv
::
Mat
&
gyy
,
cv
::
Mat
&
result
);
void
array
_p
roduct
(
const
cv
::
Mat
&
lhs
,
const
cv
::
Mat
&
rhs
,
cv
::
Mat
&
result
)
const
;
void
array
P
roduct
(
const
cv
::
Mat
&
lhs
,
const
cv
::
Mat
&
rhs
,
cv
::
Mat
&
result
)
const
;
void
computeGradientX
(
const
cv
::
Mat
&
img
,
cv
::
Mat
&
gx
);
void
computeGradientY
(
const
cv
::
Mat
&
img
,
cv
::
Mat
&
gy
);
...
...
modules/photo/src/seamless_cloning_impl.cpp
View file @
11d89ad7
...
...
@@ -185,7 +185,7 @@ void Cloning::solve(const Mat &img, std::vector<float>& mod_diff, Mat &result)
}
void
Cloning
::
poisson
_s
olver
(
const
Mat
&
img
,
Mat
&
laplacianX
,
Mat
&
laplacianY
,
Mat
&
result
)
void
Cloning
::
poisson
S
olver
(
const
Mat
&
img
,
Mat
&
laplacianX
,
Mat
&
laplacianY
,
Mat
&
result
)
{
const
int
w
=
img
.
size
().
width
;
...
...
@@ -237,7 +237,7 @@ void Cloning::poisson_solver(const Mat &img, Mat &laplacianX , Mat &laplacianY,
solve
(
img
,
mod_diff
,
result
);
}
void
Cloning
::
init
_var
(
const
Mat
&
destination
,
const
Mat
&
binaryMask
)
void
Cloning
::
init
Variables
(
const
Mat
&
destination
,
const
Mat
&
binaryMask
)
{
destinationGradientX
=
Mat
(
destination
.
size
(),
CV_32FC3
);
destinationGradientY
=
Mat
(
destination
.
size
(),
CV_32FC3
);
...
...
@@ -247,7 +247,7 @@ void Cloning::init_var(const Mat &destination, const Mat &binaryMask)
binaryMaskFloat
=
Mat
(
binaryMask
.
size
(),
CV_32FC1
);
binaryMaskFloatInverted
=
Mat
(
binaryMask
.
size
(),
CV_32FC1
);
//init of the filters used in the d
f
t
//init of the filters used in the d
s
t
const
int
w
=
destination
.
size
().
width
;
filter_X
.
resize
(
w
-
2
);
for
(
int
i
=
0
;
i
<
w
-
2
;
++
i
)
...
...
@@ -259,9 +259,9 @@ void Cloning::init_var(const Mat &destination, const Mat &binaryMask)
filter_Y
[
j
]
=
2.0
f
*
std
::
cos
(
CV_PI
*
(
j
+
1
)
/
(
h
-
1
));
}
void
Cloning
::
compute
_d
erivatives
(
const
Mat
&
destination
,
const
Mat
&
patch
,
const
Mat
&
binaryMask
)
void
Cloning
::
compute
D
erivatives
(
const
Mat
&
destination
,
const
Mat
&
patch
,
const
Mat
&
binaryMask
)
{
init
_var
(
destination
,
binaryMask
);
init
Variables
(
destination
,
binaryMask
);
computeGradientX
(
destination
,
destinationGradientX
);
computeGradientY
(
destination
,
destinationGradientY
);
...
...
@@ -276,7 +276,7 @@ void Cloning::compute_derivatives(const Mat& destination, const Mat &patch, cons
binaryMask
.
convertTo
(
binaryMaskFloat
,
CV_32FC1
,
1.0
/
255.0
);
}
void
Cloning
::
scalar
_p
roduct
(
Mat
mat
,
float
r
,
float
g
,
float
b
)
void
Cloning
::
scalar
P
roduct
(
Mat
mat
,
float
r
,
float
g
,
float
b
)
{
vector
<
Mat
>
channels
;
split
(
mat
,
channels
);
...
...
@@ -286,7 +286,7 @@ void Cloning::scalar_product(Mat mat, float r, float g, float b)
merge
(
channels
,
mat
);
}
void
Cloning
::
array
_p
roduct
(
const
cv
::
Mat
&
lhs
,
const
cv
::
Mat
&
rhs
,
cv
::
Mat
&
result
)
const
void
Cloning
::
array
P
roduct
(
const
cv
::
Mat
&
lhs
,
const
cv
::
Mat
&
rhs
,
cv
::
Mat
&
result
)
const
{
vector
<
Mat
>
lhs_channels
;
vector
<
Mat
>
result_channels
;
...
...
@@ -318,7 +318,7 @@ void Cloning::poisson(const Mat &destination)
for
(
int
chan
=
0
;
chan
<
3
;
++
chan
)
{
poisson
_s
olver
(
output
[
chan
],
rgbx_channel
[
chan
],
rgby_channel
[
chan
],
output
[
chan
]);
poisson
S
olver
(
output
[
chan
],
rgbx_channel
[
chan
],
rgby_channel
[
chan
],
output
[
chan
]);
}
}
...
...
@@ -328,27 +328,27 @@ void Cloning::evaluate(const Mat &I, const Mat &wmask, const Mat &cloned)
wmask
.
convertTo
(
binaryMaskFloatInverted
,
CV_32FC1
,
1.0
/
255.0
);
array
_p
roduct
(
destinationGradientX
,
binaryMaskFloatInverted
,
destinationGradientX
);
array
_p
roduct
(
destinationGradientY
,
binaryMaskFloatInverted
,
destinationGradientY
);
array
P
roduct
(
destinationGradientX
,
binaryMaskFloatInverted
,
destinationGradientX
);
array
P
roduct
(
destinationGradientY
,
binaryMaskFloatInverted
,
destinationGradientY
);
poisson
(
I
);
merge
(
output
,
cloned
);
}
void
Cloning
::
normal
_c
lone
(
const
Mat
&
destination
,
const
Mat
&
patch
,
const
Mat
&
binaryMask
,
Mat
&
cloned
,
int
flag
)
void
Cloning
::
normal
C
lone
(
const
Mat
&
destination
,
const
Mat
&
patch
,
const
Mat
&
binaryMask
,
Mat
&
cloned
,
int
flag
)
{
int
w
=
destination
.
size
().
width
;
int
h
=
destination
.
size
().
height
;
int
channel
=
destination
.
channels
();
compute
_d
erivatives
(
destination
,
patch
,
binaryMask
);
compute
D
erivatives
(
destination
,
patch
,
binaryMask
);
switch
(
flag
)
{
case
NORMAL_CLONE
:
array
_p
roduct
(
patchGradientX
,
binaryMaskFloat
,
patchGradientX
);
array
_p
roduct
(
patchGradientY
,
binaryMaskFloat
,
patchGradientY
);
array
P
roduct
(
patchGradientX
,
binaryMaskFloat
,
patchGradientX
);
array
P
roduct
(
patchGradientY
,
binaryMaskFloat
,
patchGradientY
);
break
;
case
MIXED_CLONE
:
...
...
@@ -395,8 +395,8 @@ void Cloning::normal_clone(const Mat &destination, const Mat &patch, const Mat &
computeGradientX
(
gray8
,
patchGradientX
);
computeGradientY
(
gray8
,
patchGradientY
);
array
_p
roduct
(
patchGradientX
,
binaryMaskFloat
,
patchGradientX
);
array
_p
roduct
(
patchGradientY
,
binaryMaskFloat
,
patchGradientY
);
array
P
roduct
(
patchGradientX
,
binaryMaskFloat
,
patchGradientX
);
array
P
roduct
(
patchGradientY
,
binaryMaskFloat
,
patchGradientY
);
break
;
}
...
...
@@ -404,25 +404,25 @@ void Cloning::normal_clone(const Mat &destination, const Mat &patch, const Mat &
evaluate
(
destination
,
binaryMask
,
cloned
);
}
void
Cloning
::
local
_color_c
hange
(
Mat
&
I
,
Mat
&
mask
,
Mat
&
wmask
,
Mat
&
cloned
,
float
red_mul
=
1.0
,
void
Cloning
::
local
ColorC
hange
(
Mat
&
I
,
Mat
&
mask
,
Mat
&
wmask
,
Mat
&
cloned
,
float
red_mul
=
1.0
,
float
green_mul
=
1.0
,
float
blue_mul
=
1.0
)
{
compute
_d
erivatives
(
I
,
mask
,
wmask
);
compute
D
erivatives
(
I
,
mask
,
wmask
);
array
_p
roduct
(
patchGradientX
,
binaryMaskFloat
,
patchGradientX
);
array
_p
roduct
(
patchGradientY
,
binaryMaskFloat
,
patchGradientY
);
scalar
_p
roduct
(
patchGradientX
,
red_mul
,
green_mul
,
blue_mul
);
scalar
_p
roduct
(
patchGradientY
,
red_mul
,
green_mul
,
blue_mul
);
array
P
roduct
(
patchGradientX
,
binaryMaskFloat
,
patchGradientX
);
array
P
roduct
(
patchGradientY
,
binaryMaskFloat
,
patchGradientY
);
scalar
P
roduct
(
patchGradientX
,
red_mul
,
green_mul
,
blue_mul
);
scalar
P
roduct
(
patchGradientY
,
red_mul
,
green_mul
,
blue_mul
);
evaluate
(
I
,
wmask
,
cloned
);
}
void
Cloning
::
illum
_c
hange
(
Mat
&
I
,
Mat
&
mask
,
Mat
&
wmask
,
Mat
&
cloned
,
float
alpha
,
float
beta
)
void
Cloning
::
illum
inationC
hange
(
Mat
&
I
,
Mat
&
mask
,
Mat
&
wmask
,
Mat
&
cloned
,
float
alpha
,
float
beta
)
{
compute
_d
erivatives
(
I
,
mask
,
wmask
);
compute
D
erivatives
(
I
,
mask
,
wmask
);
array
_p
roduct
(
patchGradientX
,
binaryMaskFloat
,
patchGradientX
);
array
_p
roduct
(
patchGradientY
,
binaryMaskFloat
,
patchGradientY
);
array
P
roduct
(
patchGradientX
,
binaryMaskFloat
,
patchGradientX
);
array
P
roduct
(
patchGradientY
,
binaryMaskFloat
,
patchGradientY
);
Mat
mag
=
Mat
(
I
.
size
(),
CV_32FC3
);
magnitude
(
patchGradientX
,
patchGradientY
,
mag
);
...
...
@@ -447,10 +447,10 @@ void Cloning::illum_change(Mat &I, Mat &mask, Mat &wmask, Mat &cloned, float alp
evaluate
(
I
,
wmask
,
cloned
);
}
void
Cloning
::
texture
_f
latten
(
Mat
&
I
,
Mat
&
mask
,
Mat
&
wmask
,
float
low_threshold
,
void
Cloning
::
texture
F
latten
(
Mat
&
I
,
Mat
&
mask
,
Mat
&
wmask
,
float
low_threshold
,
float
high_threshold
,
int
kernel_size
,
Mat
&
cloned
)
{
compute
_d
erivatives
(
I
,
mask
,
wmask
);
compute
D
erivatives
(
I
,
mask
,
wmask
);
Mat
out
=
Mat
(
mask
.
size
(),
CV_8UC1
);
Canny
(
mask
,
out
,
low_threshold
,
high_threshold
,
kernel_size
);
...
...
@@ -461,8 +461,8 @@ void Cloning::texture_flatten(Mat &I, Mat &mask, Mat &wmask, float low_threshold
zeros
.
copyTo
(
patchGradientX
,
zerosMask
);
zeros
.
copyTo
(
patchGradientY
,
zerosMask
);
array
_p
roduct
(
patchGradientX
,
binaryMaskFloat
,
patchGradientX
);
array
_p
roduct
(
patchGradientY
,
binaryMaskFloat
,
patchGradientY
);
array
P
roduct
(
patchGradientX
,
binaryMaskFloat
,
patchGradientX
);
array
P
roduct
(
patchGradientY
,
binaryMaskFloat
,
patchGradientY
);
evaluate
(
I
,
wmask
,
cloned
);
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment