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
92d23fb1
Commit
92d23fb1
authored
Dec 08, 2017
by
Vitaly Tuzov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
updated createsamples app utility functions to new c++ API from old c
parent
f8b14a16
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
188 additions
and
409 deletions
+188
-409
utility.cpp
apps/createsamples/utility.cpp
+188
-409
No files found.
apps/createsamples/utility.cpp
View file @
92d23fb1
...
@@ -49,11 +49,12 @@
...
@@ -49,11 +49,12 @@
#include "utility.hpp"
#include "utility.hpp"
#include "opencv2/core.hpp"
#include "opencv2/core.hpp"
#include "opencv2/core/core_c.h"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/imgcodecs/imgcodecs_c.h"
#include "opencv2/imgproc.hpp"
#include "opencv2/imgproc/imgproc_c.h"
#include "opencv2/highgui.hpp"
#include "opencv2/highgui/highgui_c.h"
#include "opencv2/calib3d.hpp"
#include "opencv2/calib3d/calib3d_c.h"
using
namespace
cv
;
#ifndef PATH_MAX
#ifndef PATH_MAX
#define PATH_MAX 512
#define PATH_MAX 512
...
@@ -130,21 +131,15 @@ static void icvWriteVecHeader( FILE* file, int count, int width, int height )
...
@@ -130,21 +131,15 @@ static void icvWriteVecHeader( FILE* file, int count, int width, int height )
fwrite
(
&
tmp
,
sizeof
(
tmp
),
1
,
file
);
fwrite
(
&
tmp
,
sizeof
(
tmp
),
1
,
file
);
}
}
static
void
icvWriteVecSample
(
FILE
*
file
,
CvArr
*
sample
)
static
void
icvWriteVecSample
(
FILE
*
file
,
Mat
sample
)
{
{
CvMat
*
mat
,
stub
;
uchar
chartmp
=
0
;
int
r
,
c
;
short
tmp
;
uchar
chartmp
;
mat
=
cvGetMat
(
sample
,
&
stub
);
chartmp
=
0
;
fwrite
(
&
chartmp
,
sizeof
(
chartmp
),
1
,
file
);
fwrite
(
&
chartmp
,
sizeof
(
chartmp
),
1
,
file
);
for
(
r
=
0
;
r
<
mat
->
rows
;
r
++
)
for
(
int
r
=
0
;
r
<
sample
.
rows
;
r
++
)
{
{
for
(
c
=
0
;
c
<
mat
->
cols
;
c
++
)
for
(
int
c
=
0
;
c
<
sample
.
cols
;
c
++
)
{
{
tmp
=
(
short
)
(
CV_MAT_ELEM
(
*
mat
,
uchar
,
r
,
c
)
);
short
tmp
=
sample
.
at
<
uchar
>
(
r
,
c
);
fwrite
(
&
tmp
,
sizeof
(
tmp
),
1
,
file
);
fwrite
(
&
tmp
,
sizeof
(
tmp
),
1
,
file
);
}
}
}
}
...
@@ -176,18 +171,14 @@ static void icvWriteVecSample( FILE* file, CvArr* sample )
...
@@ -176,18 +171,14 @@ static void icvWriteVecSample( FILE* file, CvArr* sample )
* cij - coeffs[i][j], coeffs[2][2] = 1
* cij - coeffs[i][j], coeffs[2][2] = 1
* (ui, vi) - rectangle vertices
* (ui, vi) - rectangle vertices
*/
*/
static
void
cvGetPerspectiveTransform
(
Cv
Size
src_size
,
double
quad
[
4
][
2
],
double
coeffs
[
3
][
3
]
)
static
void
cvGetPerspectiveTransform
(
Size
src_size
,
double
quad
[
4
][
2
],
double
coeffs
[
3
][
3
]
)
{
{
//CV_FUNCNAME( "cvWarpPerspective" );
__BEGIN__
;
double
a
[
8
][
8
];
double
a
[
8
][
8
];
double
b
[
8
];
double
b
[
8
];
CvMat
A
=
cvMat
(
8
,
8
,
CV_64FC1
,
a
);
Mat
A
(
8
,
8
,
CV_64FC1
,
a
);
CvMat
B
=
cvMat
(
8
,
1
,
CV_64FC1
,
b
);
Mat
B
(
8
,
1
,
CV_64FC1
,
b
);
CvMat
X
=
cvMat
(
8
,
1
,
CV_64FC1
,
coeffs
);
Mat
X
(
8
,
1
,
CV_64FC1
,
coeffs
);
int
i
;
int
i
;
for
(
i
=
0
;
i
<
4
;
++
i
)
for
(
i
=
0
;
i
<
4
;
++
i
)
...
@@ -214,30 +205,14 @@ static void cvGetPerspectiveTransform( CvSize src_size, double quad[4][2], doubl
...
@@ -214,30 +205,14 @@ static void cvGetPerspectiveTransform( CvSize src_size, double quad[4][2], doubl
a
[
7
][
6
]
=
-
quad
[
3
][
0
]
*
v
;
a
[
7
][
7
]
=
-
quad
[
3
][
1
]
*
v
;
a
[
7
][
6
]
=
-
quad
[
3
][
0
]
*
v
;
a
[
7
][
7
]
=
-
quad
[
3
][
1
]
*
v
;
b
[
6
]
=
b
[
7
]
=
v
;
b
[
6
]
=
b
[
7
]
=
v
;
cvSolve
(
&
A
,
&
B
,
&
X
);
solve
(
A
,
B
,
X
);
coeffs
[
2
][
2
]
=
1
;
coeffs
[
2
][
2
]
=
1
;
__END__
;
}
}
/* Warps source into destination by a perspective transform */
/* Warps source into destination by a perspective transform */
static
void
cvWarpPerspective
(
CvArr
*
src
,
CvArr
*
dst
,
double
quad
[
4
][
2
]
)
static
void
cvWarpPerspective
(
Mat
src
,
Mat
dst
,
double
quad
[
4
][
2
]
)
{
{
CV_FUNCNAME
(
"cvWarpPerspective"
);
__BEGIN__
;
#ifdef __IPL_H__
IplImage
src_stub
,
dst_stub
;
IplImage
*
src_img
;
IplImage
*
dst_img
;
CV_CALL
(
src_img
=
cvGetImage
(
src
,
&
src_stub
)
);
CV_CALL
(
dst_img
=
cvGetImage
(
dst
,
&
dst_stub
)
);
iplWarpPerspectiveQ
(
src_img
,
dst_img
,
quad
,
IPL_WARP_R_TO_Q
,
IPL_INTER_CUBIC
|
IPL_SMOOTH_EDGE
);
#else
int
fill_value
=
0
;
int
fill_value
=
0
;
double
c
[
3
][
3
];
/* transformation coefficients */
double
c
[
3
][
3
];
/* transformation coefficients */
...
@@ -251,37 +226,22 @@ static void cvWarpPerspective( CvArr* src, CvArr* dst, double quad[4][2] )
...
@@ -251,37 +226,22 @@ static void cvWarpPerspective( CvArr* src, CvArr* dst, double quad[4][2] )
double
y_max
=
0
;
double
y_max
=
0
;
double
k_left
,
b_left
,
k_right
,
b_right
;
double
k_left
,
b_left
,
k_right
,
b_right
;
uchar
*
src_data
;
int
src_step
;
CvSize
src_size
;
uchar
*
dst_data
;
int
dst_step
;
CvSize
dst_size
;
double
d
=
0
;
double
d
=
0
;
int
direction
=
0
;
int
direction
=
0
;
int
i
;
int
i
;
if
(
!
src
||
(
!
CV_IS_IMAGE
(
src
)
&&
!
CV_IS_MAT
(
src
))
||
if
(
src
.
type
()
!=
CV_8UC1
||
src
.
dims
!=
2
)
cvGetElemType
(
src
)
!=
CV_8UC1
||
cvGetDims
(
src
)
!=
2
)
{
{
CV_E
RROR
(
CV_
StsBadArg
,
CV_E
rror
(
Error
::
StsBadArg
,
"Source must be two-dimensional array of CV_8UC1 type."
);
"Source must be two-dimensional array of CV_8UC1 type."
);
}
}
if
(
!
dst
||
(
!
CV_IS_IMAGE
(
dst
)
&&
!
CV_IS_MAT
(
dst
))
||
if
(
dst
.
type
()
!=
CV_8UC1
||
dst
.
dims
!=
2
)
cvGetElemType
(
dst
)
!=
CV_8UC1
||
cvGetDims
(
dst
)
!=
2
)
{
{
CV_E
RROR
(
CV_
StsBadArg
,
CV_E
rror
(
Error
::
StsBadArg
,
"Destination must be two-dimensional array of CV_8UC1 type."
);
"Destination must be two-dimensional array of CV_8UC1 type."
);
}
}
CV_CALL
(
cvGetRawData
(
src
,
&
src_data
,
&
src_step
,
&
src_size
)
);
cvGetPerspectiveTransform
(
src
.
size
(),
quad
,
c
);
CV_CALL
(
cvGetRawData
(
dst
,
&
dst_data
,
&
dst_step
,
&
dst_size
)
);
CV_CALL
(
cvGetPerspectiveTransform
(
src_size
,
quad
,
c
)
);
/* if direction > 0 then vertices in quad follow in a CW direction,
/* if direction > 0 then vertices in quad follow in a CW direction,
otherwise they follow in a CCW direction */
otherwise they follow in a CCW direction */
...
@@ -293,7 +253,7 @@ static void cvWarpPerspective( CvArr* src, CvArr* dst, double quad[4][2] )
...
@@ -293,7 +253,7 @@ static void cvWarpPerspective( CvArr* src, CvArr* dst, double quad[4][2] )
d
=
(
quad
[
i
][
0
]
-
quad
[
pi
][
0
])
*
(
quad
[
ni
][
1
]
-
quad
[
i
][
1
])
-
d
=
(
quad
[
i
][
0
]
-
quad
[
pi
][
0
])
*
(
quad
[
ni
][
1
]
-
quad
[
i
][
1
])
-
(
quad
[
i
][
1
]
-
quad
[
pi
][
1
])
*
(
quad
[
ni
][
0
]
-
quad
[
i
][
0
]);
(
quad
[
i
][
1
]
-
quad
[
pi
][
1
])
*
(
quad
[
ni
][
0
]
-
quad
[
i
][
0
]);
int
cur_direction
=
CV_SIGN
(
d
)
;
int
cur_direction
=
d
>
0
?
1
:
d
<
0
?
-
1
:
0
;
if
(
direction
==
0
)
if
(
direction
==
0
)
{
{
direction
=
cur_direction
;
direction
=
cur_direction
;
...
@@ -306,7 +266,7 @@ static void cvWarpPerspective( CvArr* src, CvArr* dst, double quad[4][2] )
...
@@ -306,7 +266,7 @@ static void cvWarpPerspective( CvArr* src, CvArr* dst, double quad[4][2] )
}
}
if
(
direction
==
0
)
if
(
direction
==
0
)
{
{
CV_E
RROR
(
CV_
StsBadArg
,
"Quadrangle is nonconvex or degenerated."
);
CV_E
rror
(
Error
::
StsBadArg
,
"Quadrangle is nonconvex or degenerated."
);
}
}
/* <left> is the index of the topmost quad vertice
/* <left> is the index of the topmost quad vertice
...
@@ -387,7 +347,7 @@ static void cvWarpPerspective( CvArr* src, CvArr* dst, double quad[4][2] )
...
@@ -387,7 +347,7 @@ static void cvWarpPerspective( CvArr* src, CvArr* dst, double quad[4][2] )
y_max
=
MIN
(
q
[
next_left
][
1
],
q
[
next_right
][
1
]
);
y_max
=
MIN
(
q
[
next_left
][
1
],
q
[
next_right
][
1
]
);
int
iy_min
=
MAX
(
cvRound
(
y_min
),
0
)
+
1
;
int
iy_min
=
MAX
(
cvRound
(
y_min
),
0
)
+
1
;
int
iy_max
=
MIN
(
cvRound
(
y_max
),
dst
_size
.
height
-
1
);
int
iy_max
=
MIN
(
cvRound
(
y_max
),
dst
.
rows
-
1
);
double
x_min
=
k_left
*
iy_min
+
b_left
;
double
x_min
=
k_left
*
iy_min
+
b_left
;
double
x_max
=
k_right
*
iy_min
+
b_right
;
double
x_max
=
k_right
*
iy_min
+
b_right
;
...
@@ -396,7 +356,7 @@ static void cvWarpPerspective( CvArr* src, CvArr* dst, double quad[4][2] )
...
@@ -396,7 +356,7 @@ static void cvWarpPerspective( CvArr* src, CvArr* dst, double quad[4][2] )
for
(
y
=
iy_min
;
y
<=
iy_max
;
++
y
)
for
(
y
=
iy_min
;
y
<=
iy_max
;
++
y
)
{
{
int
ix_min
=
MAX
(
cvRound
(
x_min
),
0
);
int
ix_min
=
MAX
(
cvRound
(
x_min
),
0
);
int
ix_max
=
MIN
(
cvRound
(
x_max
),
dst
_size
.
width
-
1
);
int
ix_max
=
MIN
(
cvRound
(
x_max
),
dst
.
cols
-
1
);
for
(
x
=
ix_min
;
x
<=
ix_max
;
++
x
)
for
(
x
=
ix_min
;
x
<=
ix_max
;
++
x
)
{
{
...
@@ -410,37 +370,35 @@ static void cvWarpPerspective( CvArr* src, CvArr* dst, double quad[4][2] )
...
@@ -410,37 +370,35 @@ static void cvWarpPerspective( CvArr* src, CvArr* dst, double quad[4][2] )
double
delta_x
=
src_x
-
isrc_x
;
double
delta_x
=
src_x
-
isrc_x
;
double
delta_y
=
src_y
-
isrc_y
;
double
delta_y
=
src_y
-
isrc_y
;
uchar
*
s
=
src_data
+
isrc_y
*
src_step
+
isrc_x
;
int
i00
,
i10
,
i01
,
i11
;
int
i00
,
i10
,
i01
,
i11
;
i00
=
i10
=
i01
=
i11
=
(
int
)
fill_value
;
i00
=
i10
=
i01
=
i11
=
(
int
)
fill_value
;
/* linear interpolation using 2x2 neighborhood */
/* linear interpolation using 2x2 neighborhood */
if
(
isrc_x
>=
0
&&
isrc_x
<=
src
_size
.
width
&&
if
(
isrc_x
>=
0
&&
isrc_x
<=
src
.
cols
&&
isrc_y
>=
0
&&
isrc_y
<=
src
_size
.
height
)
isrc_y
>=
0
&&
isrc_y
<=
src
.
rows
)
{
{
i00
=
s
[
0
]
;
i00
=
s
rc
.
at
<
uchar
>
(
isrc_y
,
isrc_x
)
;
}
}
if
(
isrc_x
>=
-
1
&&
isrc_x
<
src
_size
.
width
&&
if
(
isrc_x
>=
-
1
&&
isrc_x
<
src
.
cols
&&
isrc_y
>=
0
&&
isrc_y
<=
src
_size
.
height
)
isrc_y
>=
0
&&
isrc_y
<=
src
.
rows
)
{
{
i10
=
s
[
1
]
;
i10
=
s
rc
.
at
<
uchar
>
(
isrc_y
,
isrc_x
+
1
)
;
}
}
if
(
isrc_x
>=
0
&&
isrc_x
<=
src
_size
.
width
&&
if
(
isrc_x
>=
0
&&
isrc_x
<=
src
.
cols
&&
isrc_y
>=
-
1
&&
isrc_y
<
src
_size
.
height
)
isrc_y
>=
-
1
&&
isrc_y
<
src
.
rows
)
{
{
i01
=
s
[
src_step
]
;
i01
=
s
rc
.
at
<
uchar
>
(
isrc_y
+
1
,
isrc_x
)
;
}
}
if
(
isrc_x
>=
-
1
&&
isrc_x
<
src
_size
.
width
&&
if
(
isrc_x
>=
-
1
&&
isrc_x
<
src
.
cols
&&
isrc_y
>=
-
1
&&
isrc_y
<
src
_size
.
height
)
isrc_y
>=
-
1
&&
isrc_y
<
src
.
rows
)
{
{
i11
=
s
[
src_step
+
1
]
;
i11
=
s
rc
.
at
<
uchar
>
(
isrc_y
+
1
,
isrc_x
+
1
)
;
}
}
double
i0
=
i00
+
(
i10
-
i00
)
*
delta_x
;
double
i0
=
i00
+
(
i10
-
i00
)
*
delta_x
;
double
i1
=
i01
+
(
i11
-
i01
)
*
delta_x
;
double
i1
=
i01
+
(
i11
-
i01
)
*
delta_x
;
((
uchar
*
)(
dst_data
+
y
*
dst_step
))[
x
]
=
(
uchar
)
(
i0
+
(
i1
-
i0
)
*
delta_y
);
dst
.
at
<
uchar
>
(
y
,
x
)
=
(
uchar
)
(
i0
+
(
i1
-
i0
)
*
delta_y
);
}
}
x_min
+=
k_left
;
x_min
+=
k_left
;
x_max
+=
k_right
;
x_max
+=
k_right
;
...
@@ -476,9 +434,6 @@ static void cvWarpPerspective( CvArr* src, CvArr* dst, double quad[4][2] )
...
@@ -476,9 +434,6 @@ static void cvWarpPerspective( CvArr* src, CvArr* dst, double quad[4][2] )
}
}
y_min
=
y_max
;
y_min
=
y_max
;
}
}
#endif
/* #ifndef __IPL_H__ */
__END__
;
}
}
static
static
...
@@ -497,15 +452,11 @@ void icvRandomQuad( int width, int height, double quad[4][2],
...
@@ -497,15 +452,11 @@ void icvRandomQuad( int width, int height, double quad[4][2],
double
vectData
[
3
];
double
vectData
[
3
];
double
rotMatData
[
9
];
double
rotMatData
[
9
];
CvMat
rotVect
;
CvMat
rotMat
;
CvMat
vect
;
double
d
;
double
d
;
rotVect
=
cvMa
t
(
3
,
1
,
CV_64FC1
,
&
rotVectData
[
0
]
);
Mat
rotVec
t
(
3
,
1
,
CV_64FC1
,
&
rotVectData
[
0
]
);
rotMat
=
cv
Mat
(
3
,
3
,
CV_64FC1
,
&
rotMatData
[
0
]
);
Mat
rot
Mat
(
3
,
3
,
CV_64FC1
,
&
rotMatData
[
0
]
);
vect
=
cvMa
t
(
3
,
1
,
CV_64FC1
,
&
vectData
[
0
]
);
Mat
vec
t
(
3
,
1
,
CV_64FC1
,
&
vectData
[
0
]
);
rotVectData
[
0
]
=
maxxangle
*
(
2.0
*
rand
()
/
RAND_MAX
-
1.0
);
rotVectData
[
0
]
=
maxxangle
*
(
2.0
*
rand
()
/
RAND_MAX
-
1.0
);
rotVectData
[
1
]
=
(
maxyangle
-
fabs
(
rotVectData
[
0
]
)
)
rotVectData
[
1
]
=
(
maxyangle
-
fabs
(
rotVectData
[
0
]
)
)
...
@@ -513,15 +464,7 @@ void icvRandomQuad( int width, int height, double quad[4][2],
...
@@ -513,15 +464,7 @@ void icvRandomQuad( int width, int height, double quad[4][2],
rotVectData
[
2
]
=
maxzangle
*
(
2.0
*
rand
()
/
RAND_MAX
-
1.0
);
rotVectData
[
2
]
=
maxzangle
*
(
2.0
*
rand
()
/
RAND_MAX
-
1.0
);
d
=
(
distfactor
+
distfactor2
*
(
2.0
*
rand
()
/
RAND_MAX
-
1.0
))
*
width
;
d
=
(
distfactor
+
distfactor2
*
(
2.0
*
rand
()
/
RAND_MAX
-
1.0
))
*
width
;
/*
Rodrigues
(
rotVect
,
rotMat
);
rotVectData[0] = maxxangle;
rotVectData[1] = maxyangle;
rotVectData[2] = maxzangle;
d = distfactor * width;
*/
cvRodrigues2
(
&
rotVect
,
&
rotMat
);
halfw
=
0.5
*
width
;
halfw
=
0.5
*
width
;
halfh
=
0.5
*
height
;
halfh
=
0.5
*
height
;
...
@@ -540,26 +483,21 @@ void icvRandomQuad( int width, int height, double quad[4][2],
...
@@ -540,26 +483,21 @@ void icvRandomQuad( int width, int height, double quad[4][2],
rotVectData
[
0
]
=
quad
[
i
][
0
];
rotVectData
[
0
]
=
quad
[
i
][
0
];
rotVectData
[
1
]
=
quad
[
i
][
1
];
rotVectData
[
1
]
=
quad
[
i
][
1
];
rotVectData
[
2
]
=
0.0
;
rotVectData
[
2
]
=
0.0
;
cvMatMulAdd
(
&
rotMat
,
&
rotVect
,
0
,
&
vect
);
gemm
(
rotMat
,
rotVect
,
1.
,
Mat
(),
1.
,
vect
);
quad
[
i
][
0
]
=
vectData
[
0
]
*
d
/
(
d
+
vectData
[
2
])
+
halfw
;
quad
[
i
][
0
]
=
vectData
[
0
]
*
d
/
(
d
+
vectData
[
2
])
+
halfw
;
quad
[
i
][
1
]
=
vectData
[
1
]
*
d
/
(
d
+
vectData
[
2
])
+
halfh
;
quad
[
i
][
1
]
=
vectData
[
1
]
*
d
/
(
d
+
vectData
[
2
])
+
halfh
;
/*
quad[i][0] += halfw;
quad[i][1] += halfh;
*/
}
}
}
}
typedef
struct
CvSampleDistortionData
typedef
struct
CvSampleDistortionData
{
{
IplImage
*
src
;
Mat
src
;
IplImage
*
erode
;
Mat
erode
;
IplImage
*
dilate
;
Mat
dilate
;
IplImage
*
mask
;
Mat
mask
;
IplImage
*
img
;
Mat
img
;
IplImage
*
maskimg
;
Mat
maskimg
;
int
dx
;
int
dx
;
int
dy
;
int
dy
;
int
bgcolor
;
int
bgcolor
;
...
@@ -577,18 +515,18 @@ typedef struct CvBackgroundData
...
@@ -577,18 +515,18 @@ typedef struct CvBackgroundData
char
**
filename
;
char
**
filename
;
int
last
;
int
last
;
int
round
;
int
round
;
Cv
Size
winsize
;
Size
winsize
;
}
CvBackgroundData
;
}
CvBackgroundData
;
typedef
struct
CvBackgroundReader
typedef
struct
CvBackgroundReader
{
{
Cv
Mat
src
;
Mat
src
;
Cv
Mat
img
;
Mat
img
;
Cv
Point
offset
;
Point
offset
;
float
scale
;
float
scale
;
float
scalefactor
;
float
scalefactor
;
float
stepfactor
;
float
stepfactor
;
Cv
Point
point
;
Point
point
;
}
CvBackgroundReader
;
}
CvBackgroundReader
;
/*
/*
...
@@ -607,81 +545,66 @@ static int icvStartSampleDistortion( const char* imgfilename, int bgcolor, int b
...
@@ -607,81 +545,66 @@ static int icvStartSampleDistortion( const char* imgfilename, int bgcolor, int b
CvSampleDistortionData
*
data
)
CvSampleDistortionData
*
data
)
{
{
memset
(
data
,
0
,
sizeof
(
*
data
)
);
memset
(
data
,
0
,
sizeof
(
*
data
)
);
data
->
src
=
cvLoadImage
(
imgfilename
,
0
);
data
->
src
=
imread
(
imgfilename
,
IMREAD_GRAYSCALE
);
if
(
data
->
src
!=
NULL
&&
data
->
src
->
nChannels
==
1
if
(
!
(
data
->
src
.
empty
())
&&
data
->
src
.
type
()
==
CV_8UC1
)
&&
data
->
src
->
depth
==
IPL_DEPTH_8U
)
{
{
int
r
,
c
;
int
r
,
c
;
uchar
*
pmask
;
uchar
*
psrc
;
data
->
dx
=
data
->
src
.
cols
/
2
;
uchar
*
perode
;
data
->
dy
=
data
->
src
.
rows
/
2
;
uchar
*
pdilate
;
uchar
dd
,
de
;
data
->
dx
=
data
->
src
->
width
/
2
;
data
->
dy
=
data
->
src
->
height
/
2
;
data
->
bgcolor
=
bgcolor
;
data
->
bgcolor
=
bgcolor
;
data
->
mask
=
cvCloneImage
(
data
->
src
);
data
->
mask
=
data
->
src
.
clone
(
);
data
->
erode
=
cvCloneImage
(
data
->
src
);
data
->
erode
=
data
->
src
.
clone
(
);
data
->
dilate
=
cvCloneImage
(
data
->
src
);
data
->
dilate
=
data
->
src
.
clone
(
);
/* make mask image */
/* make mask image */
for
(
r
=
0
;
r
<
data
->
mask
->
height
;
r
++
)
for
(
r
=
0
;
r
<
data
->
mask
.
rows
;
r
++
)
{
{
for
(
c
=
0
;
c
<
data
->
mask
->
width
;
c
++
)
for
(
c
=
0
;
c
<
data
->
mask
.
cols
;
c
++
)
{
{
pmask
=
(
(
uchar
*
)
(
data
->
mask
->
imageData
+
r
*
data
->
mask
->
widthStep
)
uchar
&
pmask
=
data
->
mask
.
at
<
uchar
>
(
r
,
c
);
+
c
);
if
(
bgcolor
-
bgthreshold
<=
(
int
)
pmask
&&
if
(
bgcolor
-
bgthreshold
<=
(
int
)
(
*
pmask
)
&&
(
int
)
pmask
<=
bgcolor
+
bgthreshold
)
(
int
)
(
*
pmask
)
<=
bgcolor
+
bgthreshold
)
{
{
*
pmask
=
(
uchar
)
0
;
pmask
=
(
uchar
)
0
;
}
}
else
else
{
{
*
pmask
=
(
uchar
)
255
;
pmask
=
(
uchar
)
255
;
}
}
}
}
}
}
/* extend borders of source image */
/* extend borders of source image */
cvErode
(
data
->
src
,
data
->
erode
,
0
,
1
);
erode
(
data
->
src
,
data
->
erode
,
Mat
()
);
cvDilate
(
data
->
src
,
data
->
dilate
,
0
,
1
);
dilate
(
data
->
src
,
data
->
dilate
,
Mat
()
);
for
(
r
=
0
;
r
<
data
->
mask
->
height
;
r
++
)
for
(
r
=
0
;
r
<
data
->
mask
.
rows
;
r
++
)
{
{
for
(
c
=
0
;
c
<
data
->
mask
->
width
;
c
++
)
for
(
c
=
0
;
c
<
data
->
mask
.
cols
;
c
++
)
{
{
pmask
=
(
(
uchar
*
)
(
data
->
mask
->
imageData
+
r
*
data
->
mask
->
widthStep
)
uchar
&
pmask
=
data
->
mask
.
at
<
uchar
>
(
r
,
c
);
+
c
);
if
(
pmask
==
0
)
if
(
(
*
pmask
)
==
0
)
{
{
psrc
=
(
(
uchar
*
)
(
data
->
src
->
imageData
+
r
*
data
->
src
->
widthStep
)
uchar
&
psrc
=
data
->
src
.
at
<
uchar
>
(
r
,
c
);
+
c
);
uchar
&
perode
=
data
->
erode
.
at
<
uchar
>
(
r
,
c
);
perode
=
uchar
&
pdilate
=
data
->
dilate
.
at
<
uchar
>
(
r
,
c
);
(
(
uchar
*
)
(
data
->
erode
->
imageData
+
r
*
data
->
erode
->
widthStep
)
uchar
de
=
(
uchar
)(
bgcolor
-
perode
);
+
c
);
uchar
dd
=
(
uchar
)(
pdilate
-
bgcolor
);
pdilate
=
(
(
uchar
*
)(
data
->
dilate
->
imageData
+
r
*
data
->
dilate
->
widthStep
)
+
c
);
de
=
(
uchar
)(
bgcolor
-
(
*
perode
));
dd
=
(
uchar
)((
*
pdilate
)
-
bgcolor
);
if
(
de
>=
dd
&&
de
>
bgthreshold
)
if
(
de
>=
dd
&&
de
>
bgthreshold
)
{
{
(
*
psrc
)
=
(
*
perode
)
;
psrc
=
perode
;
}
}
if
(
dd
>
de
&&
dd
>
bgthreshold
)
if
(
dd
>
de
&&
dd
>
bgthreshold
)
{
{
(
*
psrc
)
=
(
*
pdilate
)
;
psrc
=
pdilate
;
}
}
}
}
}
}
}
}
data
->
img
=
cvCreateImage
(
cvSize
(
data
->
src
->
width
+
2
*
data
->
dx
,
data
->
img
=
Mat
(
Size
(
data
->
src
.
cols
+
2
*
data
->
dx
,
data
->
src
.
rows
+
2
*
data
->
dy
),
CV_8UC1
);
data
->
src
->
height
+
2
*
data
->
dy
),
data
->
maskimg
=
Mat
(
Size
(
data
->
src
.
cols
+
2
*
data
->
dx
,
data
->
src
.
rows
+
2
*
data
->
dy
),
CV_8UC1
);
IPL_DEPTH_8U
,
1
);
data
->
maskimg
=
cvCloneImage
(
data
->
img
);
return
1
;
return
1
;
}
}
...
@@ -690,7 +613,7 @@ static int icvStartSampleDistortion( const char* imgfilename, int bgcolor, int b
...
@@ -690,7 +613,7 @@ static int icvStartSampleDistortion( const char* imgfilename, int bgcolor, int b
}
}
static
static
void
icvPlaceDistortedSample
(
CvArr
*
background
,
void
icvPlaceDistortedSample
(
Mat
background
,
int
inverse
,
int
maxintensitydev
,
int
inverse
,
int
maxintensitydev
,
double
maxxangle
,
double
maxyangle
,
double
maxzangle
,
double
maxxangle
,
double
maxyangle
,
double
maxzangle
,
int
inscribe
,
double
maxshiftf
,
double
maxscalef
,
int
inscribe
,
double
maxshiftf
,
double
maxscalef
,
...
@@ -698,23 +621,15 @@ void icvPlaceDistortedSample( CvArr* background,
...
@@ -698,23 +621,15 @@ void icvPlaceDistortedSample( CvArr* background,
{
{
double
quad
[
4
][
2
];
double
quad
[
4
][
2
];
int
r
,
c
;
int
r
,
c
;
uchar
*
pimg
;
uchar
*
pbg
;
uchar
*
palpha
;
uchar
chartmp
;
int
forecolordev
;
int
forecolordev
;
float
scale
;
float
scale
;
IplImage
*
img
;
IplImage
*
maskimg
;
CvMat
stub
;
CvMat
*
bgimg
;
Cv
Rect
cr
;
Rect
cr
;
Cv
Rect
roi
;
Rect
roi
;
double
xshift
,
yshift
,
randscale
;
double
xshift
,
yshift
,
randscale
;
icvRandomQuad
(
data
->
src
->
width
,
data
->
src
->
height
,
quad
,
icvRandomQuad
(
data
->
src
.
cols
,
data
->
src
.
rows
,
quad
,
maxxangle
,
maxyangle
,
maxzangle
);
maxxangle
,
maxyangle
,
maxzangle
);
quad
[
0
][
0
]
+=
(
double
)
data
->
dx
;
quad
[
0
][
0
]
+=
(
double
)
data
->
dx
;
quad
[
0
][
1
]
+=
(
double
)
data
->
dy
;
quad
[
0
][
1
]
+=
(
double
)
data
->
dy
;
...
@@ -725,20 +640,18 @@ void icvPlaceDistortedSample( CvArr* background,
...
@@ -725,20 +640,18 @@ void icvPlaceDistortedSample( CvArr* background,
quad
[
3
][
0
]
+=
(
double
)
data
->
dx
;
quad
[
3
][
0
]
+=
(
double
)
data
->
dx
;
quad
[
3
][
1
]
+=
(
double
)
data
->
dy
;
quad
[
3
][
1
]
+=
(
double
)
data
->
dy
;
cvSet
(
data
->
img
,
cvScalar
(
data
->
bgcolor
)
)
;
data
->
img
=
data
->
bgcolor
;
cvSet
(
data
->
maskimg
,
cvScalar
(
0.0
)
)
;
data
->
maskimg
=
0
;
cvWarpPerspective
(
data
->
src
,
data
->
img
,
quad
);
cvWarpPerspective
(
data
->
src
,
data
->
img
,
quad
);
cvWarpPerspective
(
data
->
mask
,
data
->
maskimg
,
quad
);
cvWarpPerspective
(
data
->
mask
,
data
->
maskimg
,
quad
);
cvSmooth
(
data
->
maskimg
,
data
->
maskimg
,
CV_GAUSSIAN
,
3
,
3
);
GaussianBlur
(
data
->
maskimg
,
data
->
maskimg
,
Size
(
3
,
3
),
0
,
0
);
bgimg
=
cvGetMat
(
background
,
&
stub
);
cr
.
x
=
data
->
dx
;
cr
.
x
=
data
->
dx
;
cr
.
y
=
data
->
dy
;
cr
.
y
=
data
->
dy
;
cr
.
width
=
data
->
src
->
width
;
cr
.
width
=
data
->
src
.
cols
;
cr
.
height
=
data
->
src
->
height
;
cr
.
height
=
data
->
src
.
rows
;
if
(
inscribe
)
if
(
inscribe
)
{
{
...
@@ -763,76 +676,39 @@ void icvPlaceDistortedSample( CvArr* background,
...
@@ -763,76 +676,39 @@ void icvPlaceDistortedSample( CvArr* background,
cr
.
width
=
(
int
)
((
1.0
+
randscale
)
*
cr
.
width
);
cr
.
width
=
(
int
)
((
1.0
+
randscale
)
*
cr
.
width
);
cr
.
height
=
(
int
)
((
1.0
+
randscale
)
*
cr
.
height
);
cr
.
height
=
(
int
)
((
1.0
+
randscale
)
*
cr
.
height
);
scale
=
MAX
(
((
float
)
cr
.
width
)
/
b
gimg
->
cols
,
((
float
)
cr
.
height
)
/
bgimg
->
rows
);
scale
=
MAX
(
((
float
)
cr
.
width
)
/
b
ackground
.
cols
,
((
float
)
cr
.
height
)
/
background
.
rows
);
roi
.
x
=
(
int
)
(
-
0.5
F
*
(
scale
*
b
gimg
->
cols
-
cr
.
width
)
+
cr
.
x
);
roi
.
x
=
(
int
)
(
-
0.5
F
*
(
scale
*
b
ackground
.
cols
-
cr
.
width
)
+
cr
.
x
);
roi
.
y
=
(
int
)
(
-
0.5
F
*
(
scale
*
b
gimg
->
rows
-
cr
.
height
)
+
cr
.
y
);
roi
.
y
=
(
int
)
(
-
0.5
F
*
(
scale
*
b
ackground
.
rows
-
cr
.
height
)
+
cr
.
y
);
roi
.
width
=
(
int
)
(
scale
*
b
gimg
->
cols
);
roi
.
width
=
(
int
)
(
scale
*
b
ackground
.
cols
);
roi
.
height
=
(
int
)
(
scale
*
b
gimg
->
rows
);
roi
.
height
=
(
int
)
(
scale
*
b
ackground
.
rows
);
img
=
cvCreateImage
(
cvSize
(
bgimg
->
cols
,
bgimg
->
rows
),
IPL_DEPTH_8U
,
1
);
Mat
img
(
background
.
size
(),
CV_8UC
1
);
maskimg
=
cvCreateImage
(
cvSize
(
bgimg
->
cols
,
bgimg
->
rows
),
IPL_DEPTH_8U
,
1
);
Mat
maskimg
(
background
.
size
(),
CV_8UC
1
);
cvSetImageROI
(
data
->
img
,
roi
);
resize
(
data
->
img
(
roi
),
img
,
img
.
size
(),
0
,
0
,
INTER_LINEAR
);
cvResize
(
data
->
img
,
img
);
resize
(
data
->
maskimg
(
roi
),
maskimg
,
maskimg
.
size
(),
0
,
0
,
INTER_LINEAR
);
cvResetImageROI
(
data
->
img
);
cvSetImageROI
(
data
->
maskimg
,
roi
);
cvResize
(
data
->
maskimg
,
maskimg
);
cvResetImageROI
(
data
->
maskimg
);
forecolordev
=
(
int
)
(
maxintensitydev
*
(
2.0
*
rand
()
/
RAND_MAX
-
1.0
));
forecolordev
=
(
int
)
(
maxintensitydev
*
(
2.0
*
rand
()
/
RAND_MAX
-
1.0
));
for
(
r
=
0
;
r
<
img
->
height
;
r
++
)
for
(
r
=
0
;
r
<
img
.
rows
;
r
++
)
{
{
for
(
c
=
0
;
c
<
img
->
width
;
c
++
)
for
(
c
=
0
;
c
<
img
.
cols
;
c
++
)
{
{
pimg
=
(
uchar
*
)
img
->
imageData
+
r
*
img
->
widthStep
+
c
;
uchar
&
pbg
=
background
.
at
<
uchar
>
(
r
,
c
);
pbg
=
(
uchar
*
)
bgimg
->
data
.
ptr
+
r
*
bgimg
->
step
+
c
;
uchar
&
palpha
=
maskimg
.
at
<
uchar
>
(
r
,
c
);
palpha
=
(
uchar
*
)
maskimg
->
imageData
+
r
*
maskimg
->
widthStep
+
c
;
uchar
chartmp
=
(
uchar
)
MAX
(
0
,
MIN
(
255
,
forecolordev
+
img
.
at
<
uchar
>
(
r
,
c
))
);
chartmp
=
(
uchar
)
MAX
(
0
,
MIN
(
255
,
forecolordev
+
(
*
pimg
)
)
);
if
(
inverse
)
if
(
inverse
)
{
{
chartmp
^=
0xFF
;
chartmp
^=
0xFF
;
}
}
*
pbg
=
(
uchar
)
((
chartmp
*
(
*
palpha
)
+
(
255
-
(
*
palpha
)
)
*
(
*
pbg
)
)
/
255
);
pbg
=
(
uchar
)
((
chartmp
*
palpha
+
(
255
-
palpha
)
*
pbg
)
/
255
);
}
}
}
}
cvReleaseImage
(
&
img
);
cvReleaseImage
(
&
maskimg
);
}
}
static
static
void
icvEndSampleDistortion
(
CvSampleDistortionData
*
data
)
CvBackgroundData
*
icvCreateBackgroundData
(
const
char
*
filename
,
Size
winsize
)
{
if
(
data
->
src
)
{
cvReleaseImage
(
&
data
->
src
);
}
if
(
data
->
mask
)
{
cvReleaseImage
(
&
data
->
mask
);
}
if
(
data
->
erode
)
{
cvReleaseImage
(
&
data
->
erode
);
}
if
(
data
->
dilate
)
{
cvReleaseImage
(
&
data
->
dilate
);
}
if
(
data
->
img
)
{
cvReleaseImage
(
&
data
->
img
);
}
if
(
data
->
maskimg
)
{
cvReleaseImage
(
&
data
->
maskimg
);
}
}
static
CvBackgroundData
*
icvCreateBackgroundData
(
const
char
*
filename
,
CvSize
winsize
)
{
{
CvBackgroundData
*
data
=
NULL
;
CvBackgroundData
*
data
=
NULL
;
...
@@ -845,7 +721,7 @@ CvBackgroundData* icvCreateBackgroundData( const char* filename, CvSize winsize
...
@@ -845,7 +721,7 @@ CvBackgroundData* icvCreateBackgroundData( const char* filename, CvSize winsize
char
*
tmp
=
NULL
;
char
*
tmp
=
NULL
;
int
len
=
0
;
int
len
=
0
;
a
ssert
(
filename
!=
NULL
);
CV_A
ssert
(
filename
!=
NULL
);
dir
=
strrchr
(
filename
,
'\\'
);
dir
=
strrchr
(
filename
,
'\\'
);
if
(
dir
==
NULL
)
if
(
dir
==
NULL
)
...
@@ -889,7 +765,7 @@ CvBackgroundData* icvCreateBackgroundData( const char* filename, CvSize winsize
...
@@ -889,7 +765,7 @@ CvBackgroundData* icvCreateBackgroundData( const char* filename, CvSize winsize
//rewind( input );
//rewind( input );
fseek
(
input
,
0
,
SEEK_SET
);
fseek
(
input
,
0
,
SEEK_SET
);
datasize
+=
sizeof
(
*
data
)
+
sizeof
(
char
*
)
*
count
;
datasize
+=
sizeof
(
*
data
)
+
sizeof
(
char
*
)
*
count
;
data
=
(
CvBackgroundData
*
)
cvA
lloc
(
datasize
);
data
=
(
CvBackgroundData
*
)
fastMa
lloc
(
datasize
);
memset
(
(
void
*
)
data
,
0
,
datasize
);
memset
(
(
void
*
)
data
,
0
,
datasize
);
data
->
count
=
count
;
data
->
count
=
count
;
data
->
filename
=
(
char
**
)
(
data
+
1
);
data
->
filename
=
(
char
**
)
(
data
+
1
);
...
@@ -921,71 +797,29 @@ CvBackgroundData* icvCreateBackgroundData( const char* filename, CvSize winsize
...
@@ -921,71 +797,29 @@ CvBackgroundData* icvCreateBackgroundData( const char* filename, CvSize winsize
return
data
;
return
data
;
}
}
static
void
icvReleaseBackgroundData
(
CvBackgroundData
**
data
)
{
assert
(
data
!=
NULL
&&
(
*
data
)
!=
NULL
);
cvFree
(
data
);
}
static
static
CvBackgroundReader
*
icvCreateBackgroundReader
()
CvBackgroundReader
*
icvCreateBackgroundReader
()
{
{
CvBackgroundReader
*
reader
=
NULL
;
CvBackgroundReader
*
reader
=
NULL
;
reader
=
(
CvBackgroundReader
*
)
cvAlloc
(
sizeof
(
*
reader
)
);
reader
=
new
CvBackgroundReader
;
memset
(
(
void
*
)
reader
,
0
,
sizeof
(
*
reader
)
);
reader
->
src
=
cvMat
(
0
,
0
,
CV_8UC1
,
NULL
);
reader
->
img
=
cvMat
(
0
,
0
,
CV_8UC1
,
NULL
);
reader
->
offset
=
cvPoint
(
0
,
0
);
reader
->
scale
=
1.0
F
;
reader
->
scale
=
1.0
F
;
reader
->
scalefactor
=
1.4142135623730950488016887242097
F
;
reader
->
scalefactor
=
1.4142135623730950488016887242097
F
;
reader
->
stepfactor
=
0.5
F
;
reader
->
stepfactor
=
0.5
F
;
reader
->
point
=
reader
->
offset
;
return
reader
;
return
reader
;
}
}
static
void
icvReleaseBackgroundReader
(
CvBackgroundReader
**
reader
)
{
assert
(
reader
!=
NULL
&&
(
*
reader
)
!=
NULL
);
if
(
(
*
reader
)
->
src
.
data
.
ptr
!=
NULL
)
{
cvFree
(
&
((
*
reader
)
->
src
.
data
.
ptr
)
);
}
if
(
(
*
reader
)
->
img
.
data
.
ptr
!=
NULL
)
{
cvFree
(
&
((
*
reader
)
->
img
.
data
.
ptr
)
);
}
cvFree
(
reader
);
}
static
static
void
icvGetNextFromBackgroundData
(
CvBackgroundData
*
data
,
void
icvGetNextFromBackgroundData
(
CvBackgroundData
*
data
,
CvBackgroundReader
*
reader
)
CvBackgroundReader
*
reader
)
{
{
IplImage
*
img
=
NULL
;
Mat
img
;
size_t
datasize
=
0
;
int
round
=
0
;
int
round
=
0
;
int
i
=
0
;
int
i
=
0
;
CvPoint
offset
=
cvPoint
(
0
,
0
)
;
Point
offset
;
assert
(
data
!=
NULL
&&
reader
!=
NULL
);
CV_Assert
(
data
!=
NULL
&&
reader
!=
NULL
);
if
(
reader
->
src
.
data
.
ptr
!=
NULL
)
{
cvFree
(
&
(
reader
->
src
.
data
.
ptr
)
);
reader
->
src
.
data
.
ptr
=
NULL
;
}
if
(
reader
->
img
.
data
.
ptr
!=
NULL
)
{
cvFree
(
&
(
reader
->
img
.
data
.
ptr
)
);
reader
->
img
.
data
.
ptr
=
NULL
;
}
#ifdef CV_OPENMP
#ifdef CV_OPENMP
#pragma omp critical(c_background_data)
#pragma omp critical(c_background_data)
...
@@ -1001,8 +835,8 @@ void icvGetNextFromBackgroundData( CvBackgroundData* data,
...
@@ -1001,8 +835,8 @@ void icvGetNextFromBackgroundData( CvBackgroundData* data,
printf
(
"Open background image: %s
\n
"
,
data
->
filename
[
data
->
last
]
);
printf
(
"Open background image: %s
\n
"
,
data
->
filename
[
data
->
last
]
);
#endif
/* CV_VERBOSE */
#endif
/* CV_VERBOSE */
img
=
cvLoadImage
(
data
->
filename
[
data
->
last
],
0
);
img
=
imread
(
data
->
filename
[
data
->
last
],
IMREAD_GRAYSCALE
);
if
(
!
img
)
if
(
img
.
empty
()
)
continue
;
continue
;
data
->
round
+=
data
->
last
/
data
->
count
;
data
->
round
+=
data
->
last
/
data
->
count
;
data
->
round
=
data
->
round
%
(
data
->
winsize
.
width
*
data
->
winsize
.
height
);
data
->
round
=
data
->
round
%
(
data
->
winsize
.
width
*
data
->
winsize
.
height
);
...
@@ -1010,20 +844,17 @@ void icvGetNextFromBackgroundData( CvBackgroundData* data,
...
@@ -1010,20 +844,17 @@ void icvGetNextFromBackgroundData( CvBackgroundData* data,
offset
.
x
=
round
%
data
->
winsize
.
width
;
offset
.
x
=
round
%
data
->
winsize
.
width
;
offset
.
y
=
round
/
data
->
winsize
.
width
;
offset
.
y
=
round
/
data
->
winsize
.
width
;
offset
.
x
=
MIN
(
offset
.
x
,
img
->
width
-
data
->
winsize
.
width
);
offset
.
x
=
MIN
(
offset
.
x
,
img
.
cols
-
data
->
winsize
.
width
);
offset
.
y
=
MIN
(
offset
.
y
,
img
->
height
-
data
->
winsize
.
height
);
offset
.
y
=
MIN
(
offset
.
y
,
img
.
rows
-
data
->
winsize
.
height
);
if
(
img
!=
NULL
&&
img
->
depth
==
IPL_DEPTH_8U
&&
img
->
nChannels
==
1
&&
if
(
!
img
.
empty
()
&&
img
.
type
()
==
CV_8UC1
&&
offset
.
x
>=
0
&&
offset
.
y
>=
0
)
offset
.
x
>=
0
&&
offset
.
y
>=
0
)
{
{
break
;
break
;
}
}
if
(
img
!=
NULL
)
img
=
Mat
();
cvReleaseImage
(
&
img
);
img
=
NULL
;
}
}
}
}
if
(
img
==
NULL
)
if
(
img
.
empty
()
)
{
{
/* no appropriate image */
/* no appropriate image */
...
@@ -1031,14 +862,11 @@ void icvGetNextFromBackgroundData( CvBackgroundData* data,
...
@@ -1031,14 +862,11 @@ void icvGetNextFromBackgroundData( CvBackgroundData* data,
printf
(
"Invalid background description file.
\n
"
);
printf
(
"Invalid background description file.
\n
"
);
#endif
/* CV_VERBOSE */
#endif
/* CV_VERBOSE */
a
ssert
(
0
);
CV_A
ssert
(
0
);
exit
(
1
);
exit
(
1
);
}
}
datasize
=
sizeof
(
uchar
)
*
img
->
width
*
img
->
height
;
reader
->
src
=
cvMat
(
img
->
height
,
img
->
width
,
CV_8UC1
,
(
void
*
)
cvAlloc
(
datasize
)
);
reader
->
src
=
img
;
cvCopy
(
img
,
&
reader
->
src
,
NULL
);
cvReleaseImage
(
&
img
);
img
=
NULL
;
//reader->offset.x = round % data->winsize.width;
//reader->offset.x = round % data->winsize.width;
//reader->offset.y = round / data->winsize.width;
//reader->offset.y = round / data->winsize.width;
...
@@ -1048,10 +876,8 @@ void icvGetNextFromBackgroundData( CvBackgroundData* data,
...
@@ -1048,10 +876,8 @@ void icvGetNextFromBackgroundData( CvBackgroundData* data,
((
float
)
data
->
winsize
.
width
+
reader
->
point
.
x
)
/
((
float
)
reader
->
src
.
cols
),
((
float
)
data
->
winsize
.
width
+
reader
->
point
.
x
)
/
((
float
)
reader
->
src
.
cols
),
((
float
)
data
->
winsize
.
height
+
reader
->
point
.
y
)
/
((
float
)
reader
->
src
.
rows
)
);
((
float
)
data
->
winsize
.
height
+
reader
->
point
.
y
)
/
((
float
)
reader
->
src
.
rows
)
);
reader
->
img
=
cvMat
(
(
int
)
(
reader
->
scale
*
reader
->
src
.
rows
+
0.5
F
),
resize
(
reader
->
src
,
reader
->
img
,
(
int
)
(
reader
->
scale
*
reader
->
src
.
cols
+
0.5
F
),
Size
((
int
)(
reader
->
scale
*
reader
->
src
.
rows
+
0.5
F
),
(
int
)(
reader
->
scale
*
reader
->
src
.
cols
+
0.5
F
)),
0
,
0
,
INTER_LINEAR
);
CV_8UC1
,
(
void
*
)
cvAlloc
(
datasize
)
);
cvResize
(
&
(
reader
->
src
),
&
(
reader
->
img
)
);
}
}
/*
/*
...
@@ -1075,25 +901,17 @@ void icvGetNextFromBackgroundData( CvBackgroundData* data,
...
@@ -1075,25 +901,17 @@ void icvGetNextFromBackgroundData( CvBackgroundData* data,
static
static
void
icvGetBackgroundImage
(
CvBackgroundData
*
data
,
void
icvGetBackgroundImage
(
CvBackgroundData
*
data
,
CvBackgroundReader
*
reader
,
CvBackgroundReader
*
reader
,
CvMat
*
img
)
Mat
&
img
)
{
{
CvMat
mat
;
CV_Assert
(
data
!=
NULL
&&
reader
!=
NULL
);
assert
(
data
!=
NULL
&&
reader
!=
NULL
&&
img
!=
NULL
);
assert
(
CV_MAT_TYPE
(
img
->
type
)
==
CV_8UC1
);
assert
(
img
->
cols
==
data
->
winsize
.
width
);
assert
(
img
->
rows
==
data
->
winsize
.
height
);
if
(
reader
->
img
.
data
.
ptr
==
NULL
)
if
(
reader
->
img
.
empty
()
)
{
{
icvGetNextFromBackgroundData
(
data
,
reader
);
icvGetNextFromBackgroundData
(
data
,
reader
);
}
}
mat
=
cvMat
(
data
->
winsize
.
height
,
data
->
winsize
.
width
,
CV_8UC1
);
img
=
reader
->
img
(
Rect
(
reader
->
point
.
x
,
reader
->
point
.
y
,
data
->
winsize
.
height
,
data
->
winsize
.
width
)).
clone
();
cvSetData
(
&
mat
,
(
void
*
)
(
reader
->
img
.
data
.
ptr
+
reader
->
point
.
y
*
reader
->
img
.
step
+
reader
->
point
.
x
*
sizeof
(
uchar
)),
reader
->
img
.
step
);
cvCopy
(
&
mat
,
img
,
0
);
if
(
(
int
)
(
reader
->
point
.
x
+
(
1.0
F
+
reader
->
stepfactor
)
*
data
->
winsize
.
width
)
if
(
(
int
)
(
reader
->
point
.
x
+
(
1.0
F
+
reader
->
stepfactor
)
*
data
->
winsize
.
width
)
<
reader
->
img
.
cols
)
<
reader
->
img
.
cols
)
{
{
...
@@ -1113,10 +931,8 @@ void icvGetBackgroundImage( CvBackgroundData* data,
...
@@ -1113,10 +931,8 @@ void icvGetBackgroundImage( CvBackgroundData* data,
reader
->
scale
*=
reader
->
scalefactor
;
reader
->
scale
*=
reader
->
scalefactor
;
if
(
reader
->
scale
<=
1.0
F
)
if
(
reader
->
scale
<=
1.0
F
)
{
{
reader
->
img
=
cvMat
(
(
int
)
(
reader
->
scale
*
reader
->
src
.
rows
),
resize
(
reader
->
src
,
reader
->
img
,
(
int
)
(
reader
->
scale
*
reader
->
src
.
cols
),
Size
((
int
)(
reader
->
scale
*
reader
->
src
.
rows
),
(
int
)(
reader
->
scale
*
reader
->
src
.
cols
)),
0
,
0
,
INTER_LINEAR
);
CV_8UC1
,
(
void
*
)
(
reader
->
img
.
data
.
ptr
)
);
cvResize
(
&
(
reader
->
src
),
&
(
reader
->
img
)
);
}
}
else
else
{
{
...
@@ -1138,7 +954,7 @@ void icvGetBackgroundImage( CvBackgroundData* data,
...
@@ -1138,7 +954,7 @@ void icvGetBackgroundImage( CvBackgroundData* data,
*
*
* return 1 on success, 0 otherwise.
* return 1 on success, 0 otherwise.
*/
*/
static
int
icvInitBackgroundReaders
(
const
char
*
filename
,
Cv
Size
winsize
)
static
int
icvInitBackgroundReaders
(
const
char
*
filename
,
Size
winsize
)
{
{
if
(
cvbgdata
==
NULL
&&
filename
!=
NULL
)
if
(
cvbgdata
==
NULL
&&
filename
!=
NULL
)
{
{
...
@@ -1187,7 +1003,7 @@ void icvDestroyBackgroundReaders()
...
@@ -1187,7 +1003,7 @@ void icvDestroyBackgroundReaders()
{
{
if
(
cvbgreader
!=
NULL
)
if
(
cvbgreader
!=
NULL
)
{
{
icvReleaseBackgroundReader
(
&
cvbgreader
)
;
delete
cvbgreader
;
cvbgreader
=
NULL
;
cvbgreader
=
NULL
;
}
}
}
}
...
@@ -1195,7 +1011,7 @@ void icvDestroyBackgroundReaders()
...
@@ -1195,7 +1011,7 @@ void icvDestroyBackgroundReaders()
if
(
cvbgdata
!=
NULL
)
if
(
cvbgdata
!=
NULL
)
{
{
icvReleaseBackgroundData
(
&
cvbgdata
);
fastFree
(
cvbgdata
);
cvbgdata
=
NULL
;
cvbgdata
=
NULL
;
}
}
}
}
...
@@ -1210,8 +1026,8 @@ void cvCreateTrainingSamples( const char* filename,
...
@@ -1210,8 +1026,8 @@ void cvCreateTrainingSamples( const char* filename,
{
{
CvSampleDistortionData
data
;
CvSampleDistortionData
data
;
a
ssert
(
filename
!=
NULL
);
CV_A
ssert
(
filename
!=
NULL
);
a
ssert
(
imgfilename
!=
NULL
);
CV_A
ssert
(
imgfilename
!=
NULL
);
if
(
!
icvMkDir
(
filename
)
)
if
(
!
icvMkDir
(
filename
)
)
{
{
...
@@ -1227,21 +1043,19 @@ void cvCreateTrainingSamples( const char* filename,
...
@@ -1227,21 +1043,19 @@ void cvCreateTrainingSamples( const char* filename,
{
{
int
hasbg
;
int
hasbg
;
int
i
;
int
i
;
CvMat
sample
;
int
inverse
;
int
inverse
;
hasbg
=
0
;
hasbg
=
0
;
hasbg
=
(
bgfilename
!=
NULL
&&
icvInitBackgroundReaders
(
bgfilename
,
hasbg
=
(
bgfilename
!=
NULL
&&
icvInitBackgroundReaders
(
bgfilename
,
cv
Size
(
winwidth
,
winheight
)
)
);
Size
(
winwidth
,
winheight
)
)
);
sample
=
cvMat
(
winheight
,
winwidth
,
CV_8UC1
,
cvAlloc
(
sizeof
(
uchar
)
*
Mat
sample
(
winheight
,
winwidth
,
CV_8UC1
);
winheight
*
winwidth
)
);
icvWriteVecHeader
(
output
,
count
,
sample
.
cols
,
sample
.
rows
);
icvWriteVecHeader
(
output
,
count
,
sample
.
cols
,
sample
.
rows
);
if
(
showsamples
)
if
(
showsamples
)
{
{
cvNamedWindow
(
"Sample"
,
CV_
WINDOW_AUTOSIZE
);
namedWindow
(
"Sample"
,
WINDOW_AUTOSIZE
);
}
}
inverse
=
invert
;
inverse
=
invert
;
...
@@ -1249,18 +1063,18 @@ void cvCreateTrainingSamples( const char* filename,
...
@@ -1249,18 +1063,18 @@ void cvCreateTrainingSamples( const char* filename,
{
{
if
(
hasbg
)
if
(
hasbg
)
{
{
icvGetBackgroundImage
(
cvbgdata
,
cvbgreader
,
&
sample
);
icvGetBackgroundImage
(
cvbgdata
,
cvbgreader
,
sample
);
}
}
else
else
{
{
cvSet
(
&
sample
,
cvScalar
(
bgcolor
)
)
;
sample
=
bgcolor
;
}
}
if
(
invert
==
CV_RANDOM_INVERT
)
if
(
invert
==
CV_RANDOM_INVERT
)
{
{
inverse
=
(
rand
()
>
(
RAND_MAX
/
2
));
inverse
=
(
rand
()
>
(
RAND_MAX
/
2
));
}
}
icvPlaceDistortedSample
(
&
sample
,
inverse
,
maxintensitydev
,
icvPlaceDistortedSample
(
sample
,
inverse
,
maxintensitydev
,
maxxangle
,
maxyangle
,
maxzangle
,
maxxangle
,
maxyangle
,
maxzangle
,
0
/* nonzero means placing image without cut offs */
,
0
/* nonzero means placing image without cut offs */
,
0.0
/* nozero adds random shifting */
,
0.0
/* nozero adds random shifting */
,
...
@@ -1269,14 +1083,14 @@ void cvCreateTrainingSamples( const char* filename,
...
@@ -1269,14 +1083,14 @@ void cvCreateTrainingSamples( const char* filename,
if
(
showsamples
)
if
(
showsamples
)
{
{
cvShowImage
(
"Sample"
,
&
sample
);
imshow
(
"Sample"
,
sample
);
if
(
(
cvW
aitKey
(
0
)
&
0xFF
)
==
27
)
if
(
(
w
aitKey
(
0
)
&
0xFF
)
==
27
)
{
{
showsamples
=
0
;
showsamples
=
0
;
}
}
}
}
icvWriteVecSample
(
output
,
&
sample
);
icvWriteVecSample
(
output
,
sample
);
#ifdef CV_VERBOSE
#ifdef CV_VERBOSE
if
(
i
%
500
==
0
)
if
(
i
%
500
==
0
)
...
@@ -1286,11 +1100,8 @@ void cvCreateTrainingSamples( const char* filename,
...
@@ -1286,11 +1100,8 @@ void cvCreateTrainingSamples( const char* filename,
#endif
/* CV_VERBOSE */
#endif
/* CV_VERBOSE */
}
}
icvDestroyBackgroundReaders
();
icvDestroyBackgroundReaders
();
cvFree
(
&
(
sample
.
data
.
ptr
)
);
fclose
(
output
);
fclose
(
output
);
}
/* if( output != NULL ) */
}
/* if( output != NULL ) */
icvEndSampleDistortion
(
&
data
);
}
}
#ifdef CV_VERBOSE
#ifdef CV_VERBOSE
...
@@ -1311,9 +1122,9 @@ void cvCreateTestSamples( const char* infoname,
...
@@ -1311,9 +1122,9 @@ void cvCreateTestSamples( const char* infoname,
{
{
CvSampleDistortionData
data
;
CvSampleDistortionData
data
;
a
ssert
(
infoname
!=
NULL
);
CV_A
ssert
(
infoname
!=
NULL
);
a
ssert
(
imgfilename
!=
NULL
);
CV_A
ssert
(
imgfilename
!=
NULL
);
a
ssert
(
bgfilename
!=
NULL
);
CV_A
ssert
(
bgfilename
!=
NULL
);
if
(
!
icvMkDir
(
infoname
)
)
if
(
!
icvMkDir
(
infoname
)
)
{
{
...
@@ -1328,10 +1139,9 @@ void cvCreateTestSamples( const char* infoname,
...
@@ -1328,10 +1139,9 @@ void cvCreateTestSamples( const char* infoname,
{
{
char
fullname
[
PATH_MAX
];
char
fullname
[
PATH_MAX
];
char
*
filename
;
char
*
filename
;
CvMat
win
;
FILE
*
info
;
FILE
*
info
;
if
(
icvInitBackgroundReaders
(
bgfilename
,
cv
Size
(
10
,
10
)
)
)
if
(
icvInitBackgroundReaders
(
bgfilename
,
Size
(
10
,
10
)
)
)
{
{
int
i
;
int
i
;
int
x
,
y
,
width
,
height
;
int
x
,
y
,
width
,
height
;
...
@@ -1340,7 +1150,7 @@ void cvCreateTestSamples( const char* infoname,
...
@@ -1340,7 +1150,7 @@ void cvCreateTestSamples( const char* infoname,
if
(
showsamples
)
if
(
showsamples
)
{
{
cvNamedWindow
(
"Image"
,
CV_
WINDOW_AUTOSIZE
);
namedWindow
(
"Image"
,
WINDOW_AUTOSIZE
);
}
}
info
=
fopen
(
infoname
,
"w"
);
info
=
fopen
(
infoname
,
"w"
);
...
@@ -1379,12 +1189,11 @@ void cvCreateTestSamples( const char* infoname,
...
@@ -1379,12 +1189,11 @@ void cvCreateTestSamples( const char* infoname,
x
=
(
int
)
((
0.1
+
0.8
*
rand
()
/
RAND_MAX
)
*
(
cvbgreader
->
src
.
cols
-
width
));
x
=
(
int
)
((
0.1
+
0.8
*
rand
()
/
RAND_MAX
)
*
(
cvbgreader
->
src
.
cols
-
width
));
y
=
(
int
)
((
0.1
+
0.8
*
rand
()
/
RAND_MAX
)
*
(
cvbgreader
->
src
.
rows
-
height
));
y
=
(
int
)
((
0.1
+
0.8
*
rand
()
/
RAND_MAX
)
*
(
cvbgreader
->
src
.
rows
-
height
));
cvGetSubArr
(
&
cvbgreader
->
src
,
&
win
,
cvRect
(
x
,
y
,
width
,
height
)
);
if
(
invert
==
CV_RANDOM_INVERT
)
if
(
invert
==
CV_RANDOM_INVERT
)
{
{
inverse
=
(
rand
()
>
(
RAND_MAX
/
2
));
inverse
=
(
rand
()
>
(
RAND_MAX
/
2
));
}
}
icvPlaceDistortedSample
(
&
win
,
inverse
,
maxintensitydev
,
icvPlaceDistortedSample
(
cvbgreader
->
src
(
Rect
(
x
,
y
,
width
,
height
))
,
inverse
,
maxintensitydev
,
maxxangle
,
maxyangle
,
maxzangle
,
maxxangle
,
maxyangle
,
maxzangle
,
1
,
0.0
,
0.0
,
&
data
);
1
,
0.0
,
0.0
,
&
data
);
...
@@ -1398,11 +1207,11 @@ void cvCreateTestSamples( const char* infoname,
...
@@ -1398,11 +1207,11 @@ void cvCreateTestSamples( const char* infoname,
filename
,
1
,
x
,
y
,
width
,
height
);
filename
,
1
,
x
,
y
,
width
,
height
);
}
}
cvSaveImage
(
fullname
,
&
cvbgreader
->
src
);
imwrite
(
fullname
,
cvbgreader
->
src
);
if
(
showsamples
)
if
(
showsamples
)
{
{
cvShowImage
(
"Image"
,
&
cvbgreader
->
src
);
imshow
(
"Image"
,
cvbgreader
->
src
);
if
(
(
cvW
aitKey
(
0
)
&
0xFF
)
==
27
)
if
(
(
w
aitKey
(
0
)
&
0xFF
)
==
27
)
{
{
showsamples
=
0
;
showsamples
=
0
;
}
}
...
@@ -1411,7 +1220,6 @@ void cvCreateTestSamples( const char* infoname,
...
@@ -1411,7 +1220,6 @@ void cvCreateTestSamples( const char* infoname,
if
(
info
)
fclose
(
info
);
if
(
info
)
fclose
(
info
);
icvDestroyBackgroundReaders
();
icvDestroyBackgroundReaders
();
}
}
icvEndSampleDistortion
(
&
data
);
}
}
}
}
...
@@ -1426,16 +1234,14 @@ int cvCreateTrainingSamplesFromInfo( const char* infoname, const char* vecfilena
...
@@ -1426,16 +1234,14 @@ int cvCreateTrainingSamplesFromInfo( const char* infoname, const char* vecfilena
FILE
*
info
;
FILE
*
info
;
FILE
*
vec
;
FILE
*
vec
;
IplImage
*
src
=
0
;
IplImage
*
sample
;
int
line
;
int
line
;
int
error
;
int
error
;
int
i
;
int
i
;
int
x
,
y
,
width
,
height
;
int
x
,
y
,
width
,
height
;
int
total
;
int
total
;
a
ssert
(
infoname
!=
NULL
);
CV_A
ssert
(
infoname
!=
NULL
);
a
ssert
(
vecfilename
!=
NULL
);
CV_A
ssert
(
vecfilename
!=
NULL
);
total
=
0
;
total
=
0
;
if
(
!
icvMkDir
(
vecfilename
)
)
if
(
!
icvMkDir
(
vecfilename
)
)
...
@@ -1472,13 +1278,11 @@ int cvCreateTrainingSamplesFromInfo( const char* infoname, const char* vecfilena
...
@@ -1472,13 +1278,11 @@ int cvCreateTrainingSamplesFromInfo( const char* infoname, const char* vecfilena
return
total
;
return
total
;
}
}
sample
=
cvCreateImage
(
cvSize
(
winwidth
,
winheight
),
IPL_DEPTH_8U
,
1
);
icvWriteVecHeader
(
vec
,
num
,
winwidth
,
winheight
);
icvWriteVecHeader
(
vec
,
num
,
sample
->
width
,
sample
->
height
);
if
(
showsamples
)
if
(
showsamples
)
{
{
cvNamedWindow
(
"Sample"
,
CV_
WINDOW_AUTOSIZE
);
namedWindow
(
"Sample"
,
WINDOW_AUTOSIZE
);
}
}
strcpy
(
fullname
,
infoname
);
strcpy
(
fullname
,
infoname
);
...
@@ -1498,14 +1302,13 @@ int cvCreateTrainingSamplesFromInfo( const char* infoname, const char* vecfilena
...
@@ -1498,14 +1302,13 @@ int cvCreateTrainingSamplesFromInfo( const char* infoname, const char* vecfilena
for
(
line
=
1
,
error
=
0
,
total
=
0
;
total
<
num
;
line
++
)
for
(
line
=
1
,
error
=
0
,
total
=
0
;
total
<
num
;
line
++
)
{
{
Mat
src
;
int
count
;
int
count
;
error
=
(
fscanf
(
info
,
"%s %d"
,
filename
,
&
count
)
!=
2
);
if
(
fscanf
(
info
,
"%s %d"
,
filename
,
&
count
)
==
2
)
if
(
!
error
)
{
{
src
=
cvLoadImage
(
fullname
,
0
);
src
=
imread
(
fullname
,
IMREAD_GRAYSCALE
);
error
=
(
src
==
NULL
);
if
(
src
.
empty
())
if
(
error
)
{
{
#if CV_VERBOSE
#if CV_VERBOSE
...
@@ -1518,14 +1321,14 @@ int cvCreateTrainingSamplesFromInfo( const char* infoname, const char* vecfilena
...
@@ -1518,14 +1321,14 @@ int cvCreateTrainingSamplesFromInfo( const char* infoname, const char* vecfilena
{
{
error
=
(
fscanf
(
info
,
"%d %d %d %d"
,
&
x
,
&
y
,
&
width
,
&
height
)
!=
4
);
error
=
(
fscanf
(
info
,
"%d %d %d %d"
,
&
x
,
&
y
,
&
width
,
&
height
)
!=
4
);
if
(
error
)
break
;
if
(
error
)
break
;
cvSetImageROI
(
src
,
cvRect
(
x
,
y
,
width
,
height
)
)
;
Mat
sample
;
cvResize
(
src
,
sample
,
width
>=
sample
->
width
&&
resize
(
src
(
Rect
(
x
,
y
,
width
,
height
)),
sample
,
Size
(
winwidth
,
winheight
),
0
,
0
,
height
>=
sample
->
height
?
CV_INTER_AREA
:
CV_
INTER_LINEAR
);
width
>=
winwidth
&&
height
>=
winheight
?
INTER_AREA
:
INTER_LINEAR
);
if
(
showsamples
)
if
(
showsamples
)
{
{
cvShowImage
(
"Sample"
,
sample
);
imshow
(
"Sample"
,
sample
);
if
(
(
cvW
aitKey
(
0
)
&
0xFF
)
==
27
)
if
(
(
w
aitKey
(
0
)
&
0xFF
)
==
27
)
{
{
showsamples
=
0
;
showsamples
=
0
;
}
}
...
@@ -1533,11 +1336,6 @@ int cvCreateTrainingSamplesFromInfo( const char* infoname, const char* vecfilena
...
@@ -1533,11 +1336,6 @@ int cvCreateTrainingSamplesFromInfo( const char* infoname, const char* vecfilena
icvWriteVecSample
(
vec
,
sample
);
icvWriteVecSample
(
vec
,
sample
);
}
}
if
(
src
)
{
cvReleaseImage
(
&
src
);
}
if
(
error
)
if
(
error
)
{
{
...
@@ -1549,11 +1347,6 @@ int cvCreateTrainingSamplesFromInfo( const char* infoname, const char* vecfilena
...
@@ -1549,11 +1347,6 @@ int cvCreateTrainingSamplesFromInfo( const char* infoname, const char* vecfilena
}
}
}
}
if
(
sample
)
{
cvReleaseImage
(
&
sample
);
}
fclose
(
vec
);
fclose
(
vec
);
fclose
(
info
);
fclose
(
info
);
...
@@ -1566,36 +1359,33 @@ typedef struct CvVecFile
...
@@ -1566,36 +1359,33 @@ typedef struct CvVecFile
int
count
;
int
count
;
int
vecsize
;
int
vecsize
;
int
last
;
int
last
;
short
*
vector
;
}
CvVecFile
;
}
CvVecFile
;
static
static
int
icvGetTraininDataFromVec
(
CvMat
*
img
,
void
*
userdata
)
int
icvGetTraininDataFromVec
(
Mat
&
img
,
CvVecFile
&
userdata
)
{
{
AutoBuffer
<
short
>
vector
(
userdata
.
vecsize
);
uchar
tmp
=
0
;
uchar
tmp
=
0
;
int
r
=
0
;
int
r
=
0
;
int
c
=
0
;
int
c
=
0
;
assert
(
img
->
rows
*
img
->
cols
==
((
CvVecFile
*
)
userdata
)
->
vecsize
);
CV_Assert
(
img
.
rows
*
img
.
cols
==
userdata
.
vecsize
);
size_t
elements_read
=
fread
(
&
tmp
,
sizeof
(
tmp
),
1
,
((
CvVecFile
*
)
userdata
)
->
input
);
size_t
elements_read
=
fread
(
&
tmp
,
sizeof
(
tmp
),
1
,
userdata
.
input
);
CV_Assert
(
elements_read
==
1
);
CV_Assert
(
elements_read
==
1
);
elements_read
=
fread
(
((
CvVecFile
*
)
userdata
)
->
vector
,
sizeof
(
short
),
elements_read
=
fread
(
vector
,
sizeof
(
short
),
userdata
.
vecsize
,
userdata
.
input
);
((
CvVecFile
*
)
userdata
)
->
vecsize
,
((
CvVecFile
*
)
userdata
)
->
input
);
CV_Assert
(
elements_read
==
(
size_t
)
userdata
.
vecsize
);
CV_Assert
(
elements_read
==
(
size_t
)((
CvVecFile
*
)
userdata
)
->
vecsize
);
if
(
feof
(
((
CvVecFile
*
)
userdata
)
->
input
)
||
if
(
feof
(
userdata
.
input
)
||
userdata
.
last
++
>=
userdata
.
count
)
(((
CvVecFile
*
)
userdata
)
->
last
)
++
>=
((
CvVecFile
*
)
userdata
)
->
count
)
{
{
return
0
;
return
0
;
}
}
for
(
r
=
0
;
r
<
img
->
rows
;
r
++
)
for
(
r
=
0
;
r
<
img
.
rows
;
r
++
)
{
{
for
(
c
=
0
;
c
<
img
->
cols
;
c
++
)
for
(
c
=
0
;
c
<
img
.
cols
;
c
++
)
{
{
CV_MAT_ELEM
(
*
img
,
uchar
,
r
,
c
)
=
img
.
at
<
uchar
>
(
r
,
c
)
=
(
uchar
)
(
vector
[
r
*
img
.
cols
+
c
]
);
(
uchar
)
(
((
CvVecFile
*
)
userdata
)
->
vector
[
r
*
img
->
cols
+
c
]
);
}
}
}
}
...
@@ -1607,7 +1397,6 @@ void cvShowVecSamples( const char* filename, int winwidth, int winheight,
...
@@ -1607,7 +1397,6 @@ void cvShowVecSamples( const char* filename, int winwidth, int winheight,
CvVecFile
file
;
CvVecFile
file
;
short
tmp
;
short
tmp
;
int
i
;
int
i
;
CvMat
*
sample
;
tmp
=
0
;
tmp
=
0
;
file
.
input
=
fopen
(
filename
,
"rb"
);
file
.
input
=
fopen
(
filename
,
"rb"
);
...
@@ -1655,28 +1444,18 @@ void cvShowVecSamples( const char* filename, int winwidth, int winheight,
...
@@ -1655,28 +1444,18 @@ void cvShowVecSamples( const char* filename, int winwidth, int winheight,
if
(
!
feof
(
file
.
input
)
&&
scale
>
0
)
if
(
!
feof
(
file
.
input
)
&&
scale
>
0
)
{
{
CvMat
*
scaled_sample
=
0
;
file
.
last
=
0
;
file
.
last
=
0
;
file
.
vector
=
(
short
*
)
cvAlloc
(
sizeof
(
*
file
.
vector
)
*
file
.
vecsize
);
namedWindow
(
"Sample"
,
WINDOW_AUTOSIZE
);
sample
=
scaled_sample
=
cvCreateMat
(
winheight
,
winwidth
,
CV_8UC1
);
if
(
scale
!=
1.0
)
{
scaled_sample
=
cvCreateMat
(
MAX
(
1
,
cvCeil
(
scale
*
winheight
)
),
MAX
(
1
,
cvCeil
(
scale
*
winwidth
)
),
CV_8UC1
);
}
cvNamedWindow
(
"Sample"
,
CV_WINDOW_AUTOSIZE
);
for
(
i
=
0
;
i
<
file
.
count
;
i
++
)
for
(
i
=
0
;
i
<
file
.
count
;
i
++
)
{
{
icvGetTraininDataFromVec
(
sample
,
&
file
);
Mat
sample
(
winheight
,
winwidth
,
CV_8UC1
);
if
(
scale
!=
1.0
)
cvResize
(
sample
,
scaled_sample
,
CV_INTER_LINEAR
);
icvGetTraininDataFromVec
(
sample
,
file
);
cvShowImage
(
"Sample"
,
scaled_sample
);
if
(
scale
!=
1.0
)
if
(
(
cvWaitKey
(
0
)
&
0xFF
)
==
27
)
break
;
resize
(
sample
,
sample
,
Size
(
MAX
(
1
,
cvCeil
(
scale
*
winheight
)),
MAX
(
1
,
cvCeil
(
scale
*
winwidth
))),
0
,
0
,
INTER_LINEAR
);
imshow
(
"Sample"
,
sample
);
if
(
(
waitKey
(
0
)
&
0xFF
)
==
27
)
break
;
}
}
if
(
scaled_sample
&&
scaled_sample
!=
sample
)
cvReleaseMat
(
&
scaled_sample
);
cvReleaseMat
(
&
sample
);
cvFree
(
&
file
.
vector
);
}
}
fclose
(
file
.
input
);
fclose
(
file
.
input
);
}
}
...
...
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