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
f6208e3d
Commit
f6208e3d
authored
Sep 08, 2016
by
Alexander Alekhin
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #7247 from valeriyvan:matrix
parents
125e2dcb
c562f0ad
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
95 additions
and
106 deletions
+95
-106
matrix.cpp
modules/core/src/matrix.cpp
+95
-106
No files found.
modules/core/src/matrix.cpp
View file @
f6208e3d
...
@@ -89,9 +89,9 @@ void MatAllocator::download(UMatData* u, void* dstptr,
...
@@ -89,9 +89,9 @@ void MatAllocator::download(UMatData* u, void* dstptr,
const
Mat
*
arrays
[]
=
{
&
src
,
&
dst
};
const
Mat
*
arrays
[]
=
{
&
src
,
&
dst
};
uchar
*
ptrs
[
2
];
uchar
*
ptrs
[
2
];
NAryMatIterator
it
(
arrays
,
ptrs
,
2
);
NAryMatIterator
it
(
arrays
,
ptrs
,
2
);
size_t
j
,
planesz
=
it
.
size
;
size_t
planesz
=
it
.
size
;
for
(
j
=
0
;
j
<
it
.
nplanes
;
j
++
,
++
it
)
for
(
size_t
j
=
0
;
j
<
it
.
nplanes
;
j
++
,
++
it
)
memcpy
(
ptrs
[
1
],
ptrs
[
0
],
planesz
);
memcpy
(
ptrs
[
1
],
ptrs
[
0
],
planesz
);
}
}
...
@@ -120,9 +120,9 @@ void MatAllocator::upload(UMatData* u, const void* srcptr, int dims, const size_
...
@@ -120,9 +120,9 @@ void MatAllocator::upload(UMatData* u, const void* srcptr, int dims, const size_
const
Mat
*
arrays
[]
=
{
&
src
,
&
dst
};
const
Mat
*
arrays
[]
=
{
&
src
,
&
dst
};
uchar
*
ptrs
[
2
];
uchar
*
ptrs
[
2
];
NAryMatIterator
it
(
arrays
,
ptrs
,
2
);
NAryMatIterator
it
(
arrays
,
ptrs
,
2
);
size_t
j
,
planesz
=
it
.
size
;
size_t
planesz
=
it
.
size
;
for
(
j
=
0
;
j
<
it
.
nplanes
;
j
++
,
++
it
)
for
(
size_t
j
=
0
;
j
<
it
.
nplanes
;
j
++
,
++
it
)
memcpy
(
ptrs
[
1
],
ptrs
[
0
],
planesz
);
memcpy
(
ptrs
[
1
],
ptrs
[
0
],
planesz
);
}
}
...
@@ -155,9 +155,9 @@ void MatAllocator::copy(UMatData* usrc, UMatData* udst, int dims, const size_t s
...
@@ -155,9 +155,9 @@ void MatAllocator::copy(UMatData* usrc, UMatData* udst, int dims, const size_t s
const
Mat
*
arrays
[]
=
{
&
src
,
&
dst
};
const
Mat
*
arrays
[]
=
{
&
src
,
&
dst
};
uchar
*
ptrs
[
2
];
uchar
*
ptrs
[
2
];
NAryMatIterator
it
(
arrays
,
ptrs
,
2
);
NAryMatIterator
it
(
arrays
,
ptrs
,
2
);
size_t
j
,
planesz
=
it
.
size
;
size_t
planesz
=
it
.
size
;
for
(
j
=
0
;
j
<
it
.
nplanes
;
j
++
,
++
it
)
for
(
size_t
j
=
0
;
j
<
it
.
nplanes
;
j
++
,
++
it
)
memcpy
(
ptrs
[
1
],
ptrs
[
0
],
planesz
);
memcpy
(
ptrs
[
1
],
ptrs
[
0
],
planesz
);
}
}
...
@@ -301,8 +301,7 @@ static inline void setSize( Mat& m, int _dims, const int* _sz,
...
@@ -301,8 +301,7 @@ static inline void setSize( Mat& m, int _dims, const int* _sz,
return
;
return
;
size_t
esz
=
CV_ELEM_SIZE
(
m
.
flags
),
esz1
=
CV_ELEM_SIZE1
(
m
.
flags
),
total
=
esz
;
size_t
esz
=
CV_ELEM_SIZE
(
m
.
flags
),
esz1
=
CV_ELEM_SIZE1
(
m
.
flags
),
total
=
esz
;
int
i
;
for
(
int
i
=
_dims
-
1
;
i
>=
0
;
i
--
)
for
(
i
=
_dims
-
1
;
i
>=
0
;
i
--
)
{
{
int
s
=
_sz
[
i
];
int
s
=
_sz
[
i
];
CV_Assert
(
s
>=
0
);
CV_Assert
(
s
>=
0
);
...
@@ -546,16 +545,16 @@ Mat::Mat(const Mat& m, const Range* ranges)
...
@@ -546,16 +545,16 @@ Mat::Mat(const Mat& m, const Range* ranges)
:
flags
(
MAGIC_VAL
),
dims
(
0
),
rows
(
0
),
cols
(
0
),
data
(
0
),
datastart
(
0
),
dataend
(
0
),
:
flags
(
MAGIC_VAL
),
dims
(
0
),
rows
(
0
),
cols
(
0
),
data
(
0
),
datastart
(
0
),
dataend
(
0
),
datalimit
(
0
),
allocator
(
0
),
u
(
0
),
size
(
&
rows
)
datalimit
(
0
),
allocator
(
0
),
u
(
0
),
size
(
&
rows
)
{
{
int
i
,
d
=
m
.
dims
;
int
d
=
m
.
dims
;
CV_Assert
(
ranges
);
CV_Assert
(
ranges
);
for
(
i
=
0
;
i
<
d
;
i
++
)
for
(
i
nt
i
=
0
;
i
<
d
;
i
++
)
{
{
Range
r
=
ranges
[
i
];
Range
r
=
ranges
[
i
];
CV_Assert
(
r
==
Range
::
all
()
||
(
0
<=
r
.
start
&&
r
.
start
<
r
.
end
&&
r
.
end
<=
m
.
size
[
i
])
);
CV_Assert
(
r
==
Range
::
all
()
||
(
0
<=
r
.
start
&&
r
.
start
<
r
.
end
&&
r
.
end
<=
m
.
size
[
i
])
);
}
}
*
this
=
m
;
*
this
=
m
;
for
(
i
=
0
;
i
<
d
;
i
++
)
for
(
i
nt
i
=
0
;
i
<
d
;
i
++
)
{
{
Range
r
=
ranges
[
i
];
Range
r
=
ranges
[
i
];
if
(
r
!=
Range
::
all
()
&&
r
!=
Range
(
0
,
size
.
p
[
i
]))
if
(
r
!=
Range
::
all
()
&&
r
!=
Range
(
0
,
size
.
p
[
i
]))
...
@@ -580,8 +579,8 @@ static Mat cvMatNDToMat(const CvMatND* m, bool copyData)
...
@@ -580,8 +579,8 @@ static Mat cvMatNDToMat(const CvMatND* m, bool copyData)
int
_sizes
[
CV_MAX_DIM
];
int
_sizes
[
CV_MAX_DIM
];
size_t
_steps
[
CV_MAX_DIM
];
size_t
_steps
[
CV_MAX_DIM
];
int
i
,
d
=
m
->
dims
;
int
d
=
m
->
dims
;
for
(
i
=
0
;
i
<
d
;
i
++
)
for
(
i
nt
i
=
0
;
i
<
d
;
i
++
)
{
{
_sizes
[
i
]
=
m
->
dim
[
i
].
size
;
_sizes
[
i
]
=
m
->
dim
[
i
].
size
;
_steps
[
i
]
=
m
->
dim
[
i
].
step
;
_steps
[
i
]
=
m
->
dim
[
i
].
step
;
...
@@ -1290,10 +1289,10 @@ void _InputArray::getMatVector(std::vector<Mat>& mv) const
...
@@ -1290,10 +1289,10 @@ void _InputArray::getMatVector(std::vector<Mat>& mv) const
if
(
k
==
MAT
)
if
(
k
==
MAT
)
{
{
const
Mat
&
m
=
*
(
const
Mat
*
)
obj
;
const
Mat
&
m
=
*
(
const
Mat
*
)
obj
;
int
i
,
n
=
(
int
)
m
.
size
[
0
];
int
n
=
(
int
)
m
.
size
[
0
];
mv
.
resize
(
n
);
mv
.
resize
(
n
);
for
(
i
=
0
;
i
<
n
;
i
++
)
for
(
i
nt
i
=
0
;
i
<
n
;
i
++
)
mv
[
i
]
=
m
.
dims
==
2
?
Mat
(
1
,
m
.
cols
,
m
.
type
(),
(
void
*
)
m
.
ptr
(
i
))
:
mv
[
i
]
=
m
.
dims
==
2
?
Mat
(
1
,
m
.
cols
,
m
.
type
(),
(
void
*
)
m
.
ptr
(
i
))
:
Mat
(
m
.
dims
-
1
,
&
m
.
size
[
1
],
m
.
type
(),
(
void
*
)
m
.
ptr
(
i
),
&
m
.
step
[
1
]);
Mat
(
m
.
dims
-
1
,
&
m
.
size
[
1
],
m
.
type
(),
(
void
*
)
m
.
ptr
(
i
),
&
m
.
step
[
1
]);
return
;
return
;
...
@@ -1302,20 +1301,20 @@ void _InputArray::getMatVector(std::vector<Mat>& mv) const
...
@@ -1302,20 +1301,20 @@ void _InputArray::getMatVector(std::vector<Mat>& mv) const
if
(
k
==
EXPR
)
if
(
k
==
EXPR
)
{
{
Mat
m
=
*
(
const
MatExpr
*
)
obj
;
Mat
m
=
*
(
const
MatExpr
*
)
obj
;
int
i
,
n
=
m
.
size
[
0
];
int
n
=
m
.
size
[
0
];
mv
.
resize
(
n
);
mv
.
resize
(
n
);
for
(
i
=
0
;
i
<
n
;
i
++
)
for
(
i
nt
i
=
0
;
i
<
n
;
i
++
)
mv
[
i
]
=
m
.
row
(
i
);
mv
[
i
]
=
m
.
row
(
i
);
return
;
return
;
}
}
if
(
k
==
MATX
)
if
(
k
==
MATX
)
{
{
size_t
i
,
n
=
sz
.
height
,
esz
=
CV_ELEM_SIZE
(
flags
);
size_t
n
=
sz
.
height
,
esz
=
CV_ELEM_SIZE
(
flags
);
mv
.
resize
(
n
);
mv
.
resize
(
n
);
for
(
i
=
0
;
i
<
n
;
i
++
)
for
(
size_t
i
=
0
;
i
<
n
;
i
++
)
mv
[
i
]
=
Mat
(
1
,
sz
.
width
,
CV_MAT_TYPE
(
flags
),
(
uchar
*
)
obj
+
esz
*
sz
.
width
*
i
);
mv
[
i
]
=
Mat
(
1
,
sz
.
width
,
CV_MAT_TYPE
(
flags
),
(
uchar
*
)
obj
+
esz
*
sz
.
width
*
i
);
return
;
return
;
}
}
...
@@ -1324,11 +1323,11 @@ void _InputArray::getMatVector(std::vector<Mat>& mv) const
...
@@ -1324,11 +1323,11 @@ void _InputArray::getMatVector(std::vector<Mat>& mv) const
{
{
const
std
::
vector
<
uchar
>&
v
=
*
(
const
std
::
vector
<
uchar
>*
)
obj
;
const
std
::
vector
<
uchar
>&
v
=
*
(
const
std
::
vector
<
uchar
>*
)
obj
;
size_t
i
,
n
=
v
.
size
(),
esz
=
CV_ELEM_SIZE
(
flags
);
size_t
n
=
v
.
size
(),
esz
=
CV_ELEM_SIZE
(
flags
);
int
t
=
CV_MAT_DEPTH
(
flags
),
cn
=
CV_MAT_CN
(
flags
);
int
t
=
CV_MAT_DEPTH
(
flags
),
cn
=
CV_MAT_CN
(
flags
);
mv
.
resize
(
n
);
mv
.
resize
(
n
);
for
(
i
=
0
;
i
<
n
;
i
++
)
for
(
size_t
i
=
0
;
i
<
n
;
i
++
)
mv
[
i
]
=
Mat
(
1
,
cn
,
t
,
(
void
*
)(
&
v
[
0
]
+
esz
*
i
));
mv
[
i
]
=
Mat
(
1
,
cn
,
t
,
(
void
*
)(
&
v
[
0
]
+
esz
*
i
));
return
;
return
;
}
}
...
@@ -1342,11 +1341,11 @@ void _InputArray::getMatVector(std::vector<Mat>& mv) const
...
@@ -1342,11 +1341,11 @@ void _InputArray::getMatVector(std::vector<Mat>& mv) const
if
(
k
==
STD_VECTOR_VECTOR
)
if
(
k
==
STD_VECTOR_VECTOR
)
{
{
const
std
::
vector
<
std
::
vector
<
uchar
>
>&
vv
=
*
(
const
std
::
vector
<
std
::
vector
<
uchar
>
>*
)
obj
;
const
std
::
vector
<
std
::
vector
<
uchar
>
>&
vv
=
*
(
const
std
::
vector
<
std
::
vector
<
uchar
>
>*
)
obj
;
int
i
,
n
=
(
int
)
vv
.
size
();
int
n
=
(
int
)
vv
.
size
();
int
t
=
CV_MAT_TYPE
(
flags
);
int
t
=
CV_MAT_TYPE
(
flags
);
mv
.
resize
(
n
);
mv
.
resize
(
n
);
for
(
i
=
0
;
i
<
n
;
i
++
)
for
(
i
nt
i
=
0
;
i
<
n
;
i
++
)
{
{
const
std
::
vector
<
uchar
>&
v
=
vv
[
i
];
const
std
::
vector
<
uchar
>&
v
=
vv
[
i
];
mv
[
i
]
=
Mat
(
size
(
i
),
t
,
(
void
*
)
&
v
[
0
]);
mv
[
i
]
=
Mat
(
size
(
i
),
t
,
(
void
*
)
&
v
[
0
]);
...
@@ -1357,10 +1356,10 @@ void _InputArray::getMatVector(std::vector<Mat>& mv) const
...
@@ -1357,10 +1356,10 @@ void _InputArray::getMatVector(std::vector<Mat>& mv) const
if
(
k
==
STD_VECTOR_MAT
)
if
(
k
==
STD_VECTOR_MAT
)
{
{
const
std
::
vector
<
Mat
>&
v
=
*
(
const
std
::
vector
<
Mat
>*
)
obj
;
const
std
::
vector
<
Mat
>&
v
=
*
(
const
std
::
vector
<
Mat
>*
)
obj
;
size_t
i
,
n
=
v
.
size
();
size_t
n
=
v
.
size
();
mv
.
resize
(
n
);
mv
.
resize
(
n
);
for
(
i
=
0
;
i
<
n
;
i
++
)
for
(
size_t
i
=
0
;
i
<
n
;
i
++
)
mv
[
i
]
=
v
[
i
];
mv
[
i
]
=
v
[
i
];
return
;
return
;
}
}
...
@@ -1368,10 +1367,10 @@ void _InputArray::getMatVector(std::vector<Mat>& mv) const
...
@@ -1368,10 +1367,10 @@ void _InputArray::getMatVector(std::vector<Mat>& mv) const
if
(
k
==
STD_VECTOR_UMAT
)
if
(
k
==
STD_VECTOR_UMAT
)
{
{
const
std
::
vector
<
UMat
>&
v
=
*
(
const
std
::
vector
<
UMat
>*
)
obj
;
const
std
::
vector
<
UMat
>&
v
=
*
(
const
std
::
vector
<
UMat
>*
)
obj
;
size_t
i
,
n
=
v
.
size
();
size_t
n
=
v
.
size
();
mv
.
resize
(
n
);
mv
.
resize
(
n
);
for
(
i
=
0
;
i
<
n
;
i
++
)
for
(
size_t
i
=
0
;
i
<
n
;
i
++
)
mv
[
i
]
=
v
[
i
].
getMat
(
accessFlags
);
mv
[
i
]
=
v
[
i
].
getMat
(
accessFlags
);
return
;
return
;
}
}
...
@@ -1393,10 +1392,10 @@ void _InputArray::getUMatVector(std::vector<UMat>& umv) const
...
@@ -1393,10 +1392,10 @@ void _InputArray::getUMatVector(std::vector<UMat>& umv) const
if
(
k
==
STD_VECTOR_MAT
)
if
(
k
==
STD_VECTOR_MAT
)
{
{
const
std
::
vector
<
Mat
>&
v
=
*
(
const
std
::
vector
<
Mat
>*
)
obj
;
const
std
::
vector
<
Mat
>&
v
=
*
(
const
std
::
vector
<
Mat
>*
)
obj
;
size_t
i
,
n
=
v
.
size
();
size_t
n
=
v
.
size
();
umv
.
resize
(
n
);
umv
.
resize
(
n
);
for
(
i
=
0
;
i
<
n
;
i
++
)
for
(
size_t
i
=
0
;
i
<
n
;
i
++
)
umv
[
i
]
=
v
[
i
].
getUMat
(
accessFlags
);
umv
[
i
]
=
v
[
i
].
getUMat
(
accessFlags
);
return
;
return
;
}
}
...
@@ -1404,10 +1403,10 @@ void _InputArray::getUMatVector(std::vector<UMat>& umv) const
...
@@ -1404,10 +1403,10 @@ void _InputArray::getUMatVector(std::vector<UMat>& umv) const
if
(
k
==
STD_VECTOR_UMAT
)
if
(
k
==
STD_VECTOR_UMAT
)
{
{
const
std
::
vector
<
UMat
>&
v
=
*
(
const
std
::
vector
<
UMat
>*
)
obj
;
const
std
::
vector
<
UMat
>&
v
=
*
(
const
std
::
vector
<
UMat
>*
)
obj
;
size_t
i
,
n
=
v
.
size
();
size_t
n
=
v
.
size
();
umv
.
resize
(
n
);
umv
.
resize
(
n
);
for
(
i
=
0
;
i
<
n
;
i
++
)
for
(
size_t
i
=
0
;
i
<
n
;
i
++
)
umv
[
i
]
=
v
[
i
];
umv
[
i
]
=
v
[
i
];
return
;
return
;
}
}
...
@@ -2818,8 +2817,7 @@ void cv::hconcat(const Mat* src, size_t nsrc, OutputArray _dst)
...
@@ -2818,8 +2817,7 @@ void cv::hconcat(const Mat* src, size_t nsrc, OutputArray _dst)
}
}
int
totalCols
=
0
,
cols
=
0
;
int
totalCols
=
0
,
cols
=
0
;
size_t
i
;
for
(
size_t
i
=
0
;
i
<
nsrc
;
i
++
)
for
(
i
=
0
;
i
<
nsrc
;
i
++
)
{
{
CV_Assert
(
src
[
i
].
dims
<=
2
&&
CV_Assert
(
src
[
i
].
dims
<=
2
&&
src
[
i
].
rows
==
src
[
0
].
rows
&&
src
[
i
].
rows
==
src
[
0
].
rows
&&
...
@@ -2828,7 +2826,7 @@ void cv::hconcat(const Mat* src, size_t nsrc, OutputArray _dst)
...
@@ -2828,7 +2826,7 @@ void cv::hconcat(const Mat* src, size_t nsrc, OutputArray _dst)
}
}
_dst
.
create
(
src
[
0
].
rows
,
totalCols
,
src
[
0
].
type
());
_dst
.
create
(
src
[
0
].
rows
,
totalCols
,
src
[
0
].
type
());
Mat
dst
=
_dst
.
getMat
();
Mat
dst
=
_dst
.
getMat
();
for
(
i
=
0
;
i
<
nsrc
;
i
++
)
for
(
size_t
i
=
0
;
i
<
nsrc
;
i
++
)
{
{
Mat
dpart
=
dst
(
Rect
(
cols
,
0
,
src
[
i
].
cols
,
src
[
i
].
rows
));
Mat
dpart
=
dst
(
Rect
(
cols
,
0
,
src
[
i
].
cols
,
src
[
i
].
rows
));
src
[
i
].
copyTo
(
dpart
);
src
[
i
].
copyTo
(
dpart
);
...
@@ -2864,8 +2862,7 @@ void cv::vconcat(const Mat* src, size_t nsrc, OutputArray _dst)
...
@@ -2864,8 +2862,7 @@ void cv::vconcat(const Mat* src, size_t nsrc, OutputArray _dst)
}
}
int
totalRows
=
0
,
rows
=
0
;
int
totalRows
=
0
,
rows
=
0
;
size_t
i
;
for
(
size_t
i
=
0
;
i
<
nsrc
;
i
++
)
for
(
i
=
0
;
i
<
nsrc
;
i
++
)
{
{
CV_Assert
(
src
[
i
].
dims
<=
2
&&
CV_Assert
(
src
[
i
].
dims
<=
2
&&
src
[
i
].
cols
==
src
[
0
].
cols
&&
src
[
i
].
cols
==
src
[
0
].
cols
&&
...
@@ -2874,7 +2871,7 @@ void cv::vconcat(const Mat* src, size_t nsrc, OutputArray _dst)
...
@@ -2874,7 +2871,7 @@ void cv::vconcat(const Mat* src, size_t nsrc, OutputArray _dst)
}
}
_dst
.
create
(
totalRows
,
src
[
0
].
cols
,
src
[
0
].
type
());
_dst
.
create
(
totalRows
,
src
[
0
].
cols
,
src
[
0
].
type
());
Mat
dst
=
_dst
.
getMat
();
Mat
dst
=
_dst
.
getMat
();
for
(
i
=
0
;
i
<
nsrc
;
i
++
)
for
(
size_t
i
=
0
;
i
<
nsrc
;
i
++
)
{
{
Mat
dpart
(
dst
,
Rect
(
0
,
rows
,
src
[
i
].
cols
,
src
[
i
].
rows
));
Mat
dpart
(
dst
,
Rect
(
0
,
rows
,
src
[
i
].
cols
,
src
[
i
].
rows
));
src
[
i
].
copyTo
(
dpart
);
src
[
i
].
copyTo
(
dpart
);
...
@@ -2951,7 +2948,7 @@ void cv::setIdentity( InputOutputArray _m, const Scalar& s )
...
@@ -2951,7 +2948,7 @@ void cv::setIdentity( InputOutputArray _m, const Scalar& s )
ocl_setIdentity
(
_m
,
s
))
ocl_setIdentity
(
_m
,
s
))
Mat
m
=
_m
.
getMat
();
Mat
m
=
_m
.
getMat
();
int
i
,
j
,
rows
=
m
.
rows
,
cols
=
m
.
cols
,
type
=
m
.
type
();
int
rows
=
m
.
rows
,
cols
=
m
.
cols
,
type
=
m
.
type
();
if
(
type
==
CV_32FC1
)
if
(
type
==
CV_32FC1
)
{
{
...
@@ -2959,9 +2956,9 @@ void cv::setIdentity( InputOutputArray _m, const Scalar& s )
...
@@ -2959,9 +2956,9 @@ void cv::setIdentity( InputOutputArray _m, const Scalar& s )
float
val
=
(
float
)
s
[
0
];
float
val
=
(
float
)
s
[
0
];
size_t
step
=
m
.
step
/
sizeof
(
data
[
0
]);
size_t
step
=
m
.
step
/
sizeof
(
data
[
0
]);
for
(
i
=
0
;
i
<
rows
;
i
++
,
data
+=
step
)
for
(
i
nt
i
=
0
;
i
<
rows
;
i
++
,
data
+=
step
)
{
{
for
(
j
=
0
;
j
<
cols
;
j
++
)
for
(
int
j
=
0
;
j
<
cols
;
j
++
)
data
[
j
]
=
0
;
data
[
j
]
=
0
;
if
(
i
<
cols
)
if
(
i
<
cols
)
data
[
i
]
=
val
;
data
[
i
]
=
val
;
...
@@ -2973,9 +2970,9 @@ void cv::setIdentity( InputOutputArray _m, const Scalar& s )
...
@@ -2973,9 +2970,9 @@ void cv::setIdentity( InputOutputArray _m, const Scalar& s )
double
val
=
s
[
0
];
double
val
=
s
[
0
];
size_t
step
=
m
.
step
/
sizeof
(
data
[
0
]);
size_t
step
=
m
.
step
/
sizeof
(
data
[
0
]);
for
(
i
=
0
;
i
<
rows
;
i
++
,
data
+=
step
)
for
(
i
nt
i
=
0
;
i
<
rows
;
i
++
,
data
+=
step
)
{
{
for
(
j
=
0
;
j
<
cols
;
j
++
)
for
(
int
j
=
0
;
j
<
cols
;
j
++
)
data
[
j
]
=
j
==
i
?
val
:
0
;
data
[
j
]
=
j
==
i
?
val
:
0
;
}
}
}
}
...
@@ -2994,7 +2991,7 @@ cv::Scalar cv::trace( InputArray _m )
...
@@ -2994,7 +2991,7 @@ cv::Scalar cv::trace( InputArray _m )
Mat
m
=
_m
.
getMat
();
Mat
m
=
_m
.
getMat
();
CV_Assert
(
m
.
dims
<=
2
);
CV_Assert
(
m
.
dims
<=
2
);
int
i
,
type
=
m
.
type
();
int
type
=
m
.
type
();
int
nm
=
std
::
min
(
m
.
rows
,
m
.
cols
);
int
nm
=
std
::
min
(
m
.
rows
,
m
.
cols
);
if
(
type
==
CV_32FC1
)
if
(
type
==
CV_32FC1
)
...
@@ -3002,7 +2999,7 @@ cv::Scalar cv::trace( InputArray _m )
...
@@ -3002,7 +2999,7 @@ cv::Scalar cv::trace( InputArray _m )
const
float
*
ptr
=
m
.
ptr
<
float
>
();
const
float
*
ptr
=
m
.
ptr
<
float
>
();
size_t
step
=
m
.
step
/
sizeof
(
ptr
[
0
])
+
1
;
size_t
step
=
m
.
step
/
sizeof
(
ptr
[
0
])
+
1
;
double
_s
=
0
;
double
_s
=
0
;
for
(
i
=
0
;
i
<
nm
;
i
++
)
for
(
i
nt
i
=
0
;
i
<
nm
;
i
++
)
_s
+=
ptr
[
i
*
step
];
_s
+=
ptr
[
i
*
step
];
return
_s
;
return
_s
;
}
}
...
@@ -3012,7 +3009,7 @@ cv::Scalar cv::trace( InputArray _m )
...
@@ -3012,7 +3009,7 @@ cv::Scalar cv::trace( InputArray _m )
const
double
*
ptr
=
m
.
ptr
<
double
>
();
const
double
*
ptr
=
m
.
ptr
<
double
>
();
size_t
step
=
m
.
step
/
sizeof
(
ptr
[
0
])
+
1
;
size_t
step
=
m
.
step
/
sizeof
(
ptr
[
0
])
+
1
;
double
_s
=
0
;
double
_s
=
0
;
for
(
i
=
0
;
i
<
nm
;
i
++
)
for
(
i
nt
i
=
0
;
i
<
nm
;
i
++
)
_s
+=
ptr
[
i
*
step
];
_s
+=
ptr
[
i
*
step
];
return
_s
;
return
_s
;
}
}
...
@@ -3084,12 +3081,11 @@ transpose_( const uchar* src, size_t sstep, uchar* dst, size_t dstep, Size sz )
...
@@ -3084,12 +3081,11 @@ transpose_( const uchar* src, size_t sstep, uchar* dst, size_t dstep, Size sz )
template
<
typename
T
>
static
void
template
<
typename
T
>
static
void
transposeI_
(
uchar
*
data
,
size_t
step
,
int
n
)
transposeI_
(
uchar
*
data
,
size_t
step
,
int
n
)
{
{
int
i
,
j
;
for
(
int
i
=
0
;
i
<
n
;
i
++
)
for
(
i
=
0
;
i
<
n
;
i
++
)
{
{
T
*
row
=
(
T
*
)(
data
+
step
*
i
);
T
*
row
=
(
T
*
)(
data
+
step
*
i
);
uchar
*
data1
=
data
+
i
*
sizeof
(
T
);
uchar
*
data1
=
data
+
i
*
sizeof
(
T
);
for
(
j
=
i
+
1
;
j
<
n
;
j
++
)
for
(
int
j
=
i
+
1
;
j
<
n
;
j
++
)
std
::
swap
(
row
[
j
],
*
(
T
*
)(
data1
+
step
*
j
)
);
std
::
swap
(
row
[
j
],
*
(
T
*
)(
data1
+
step
*
j
)
);
}
}
}
}
...
@@ -3417,7 +3413,7 @@ reduceC_( const Mat& srcmat, Mat& dstmat )
...
@@ -3417,7 +3413,7 @@ reduceC_( const Mat& srcmat, Mat& dstmat )
{
{
typedef
typename
Op
::
rtype
WT
;
typedef
typename
Op
::
rtype
WT
;
Size
size
=
srcmat
.
size
();
Size
size
=
srcmat
.
size
();
int
i
,
k
,
cn
=
srcmat
.
channels
();
int
cn
=
srcmat
.
channels
();
size
.
width
*=
cn
;
size
.
width
*=
cn
;
Op
op
;
Op
op
;
...
@@ -3426,13 +3422,14 @@ reduceC_( const Mat& srcmat, Mat& dstmat )
...
@@ -3426,13 +3422,14 @@ reduceC_( const Mat& srcmat, Mat& dstmat )
const
T
*
src
=
srcmat
.
ptr
<
T
>
(
y
);
const
T
*
src
=
srcmat
.
ptr
<
T
>
(
y
);
ST
*
dst
=
dstmat
.
ptr
<
ST
>
(
y
);
ST
*
dst
=
dstmat
.
ptr
<
ST
>
(
y
);
if
(
size
.
width
==
cn
)
if
(
size
.
width
==
cn
)
for
(
k
=
0
;
k
<
cn
;
k
++
)
for
(
int
k
=
0
;
k
<
cn
;
k
++
)
dst
[
k
]
=
src
[
k
];
dst
[
k
]
=
src
[
k
];
else
else
{
{
for
(
k
=
0
;
k
<
cn
;
k
++
)
for
(
int
k
=
0
;
k
<
cn
;
k
++
)
{
{
WT
a0
=
src
[
k
],
a1
=
src
[
k
+
cn
];
WT
a0
=
src
[
k
],
a1
=
src
[
k
+
cn
];
int
i
;
for
(
i
=
2
*
cn
;
i
<=
size
.
width
-
4
*
cn
;
i
+=
4
*
cn
)
for
(
i
=
2
*
cn
;
i
<=
size
.
width
-
4
*
cn
;
i
+=
4
*
cn
)
{
{
a0
=
op
(
a0
,
(
WT
)
src
[
i
+
k
]);
a0
=
op
(
a0
,
(
WT
)
src
[
i
+
k
]);
...
@@ -3934,7 +3931,7 @@ template<typename T> static void sort_( const Mat& src, Mat& dst, int flags )
...
@@ -3934,7 +3931,7 @@ template<typename T> static void sort_( const Mat& src, Mat& dst, int flags )
{
{
AutoBuffer
<
T
>
buf
;
AutoBuffer
<
T
>
buf
;
T
*
bptr
;
T
*
bptr
;
int
i
,
j
,
n
,
len
;
int
n
,
len
;
bool
sortRows
=
(
flags
&
1
)
==
CV_SORT_EVERY_ROW
;
bool
sortRows
=
(
flags
&
1
)
==
CV_SORT_EVERY_ROW
;
bool
inplace
=
src
.
data
==
dst
.
data
;
bool
inplace
=
src
.
data
==
dst
.
data
;
bool
sortDescending
=
(
flags
&
CV_SORT_DESCENDING
)
!=
0
;
bool
sortDescending
=
(
flags
&
CV_SORT_DESCENDING
)
!=
0
;
...
@@ -3959,7 +3956,7 @@ template<typename T> static void sort_( const Mat& src, Mat& dst, int flags )
...
@@ -3959,7 +3956,7 @@ template<typename T> static void sort_( const Mat& src, Mat& dst, int flags )
}
}
#endif
#endif
for
(
i
=
0
;
i
<
n
;
i
++
)
for
(
i
nt
i
=
0
;
i
<
n
;
i
++
)
{
{
T
*
ptr
=
bptr
;
T
*
ptr
=
bptr
;
if
(
sortRows
)
if
(
sortRows
)
...
@@ -3974,7 +3971,7 @@ template<typename T> static void sort_( const Mat& src, Mat& dst, int flags )
...
@@ -3974,7 +3971,7 @@ template<typename T> static void sort_( const Mat& src, Mat& dst, int flags )
}
}
else
else
{
{
for
(
j
=
0
;
j
<
len
;
j
++
)
for
(
int
j
=
0
;
j
<
len
;
j
++
)
ptr
[
j
]
=
src
.
ptr
<
T
>
(
j
)[
i
];
ptr
[
j
]
=
src
.
ptr
<
T
>
(
j
)[
i
];
}
}
...
@@ -3996,7 +3993,7 @@ template<typename T> static void sort_( const Mat& src, Mat& dst, int flags )
...
@@ -3996,7 +3993,7 @@ template<typename T> static void sort_( const Mat& src, Mat& dst, int flags )
#ifdef USE_IPP_SORT
#ifdef USE_IPP_SORT
setIppErrorStatus
();
setIppErrorStatus
();
#endif
#endif
for
(
j
=
0
;
j
<
len
/
2
;
j
++
)
for
(
int
j
=
0
;
j
<
len
/
2
;
j
++
)
std
::
swap
(
ptr
[
j
],
ptr
[
len
-
1
-
j
]);
std
::
swap
(
ptr
[
j
],
ptr
[
len
-
1
-
j
]);
}
}
#ifdef USE_IPP_SORT
#ifdef USE_IPP_SORT
...
@@ -4015,7 +4012,7 @@ template<typename T> static void sort_( const Mat& src, Mat& dst, int flags )
...
@@ -4015,7 +4012,7 @@ template<typename T> static void sort_( const Mat& src, Mat& dst, int flags )
#endif
#endif
if
(
!
sortRows
)
if
(
!
sortRows
)
for
(
j
=
0
;
j
<
len
;
j
++
)
for
(
int
j
=
0
;
j
<
len
;
j
++
)
dst
.
ptr
<
T
>
(
j
)[
i
]
=
ptr
[
j
];
dst
.
ptr
<
T
>
(
j
)[
i
]
=
ptr
[
j
];
}
}
}
}
...
@@ -4056,14 +4053,12 @@ template<typename T> static void sortIdx_( const Mat& src, Mat& dst, int flags )
...
@@ -4056,14 +4053,12 @@ template<typename T> static void sortIdx_( const Mat& src, Mat& dst, int flags )
{
{
AutoBuffer
<
T
>
buf
;
AutoBuffer
<
T
>
buf
;
AutoBuffer
<
int
>
ibuf
;
AutoBuffer
<
int
>
ibuf
;
T
*
bptr
;
int
*
_iptr
;
int
i
,
j
,
n
,
len
;
bool
sortRows
=
(
flags
&
1
)
==
CV_SORT_EVERY_ROW
;
bool
sortRows
=
(
flags
&
1
)
==
CV_SORT_EVERY_ROW
;
bool
sortDescending
=
(
flags
&
CV_SORT_DESCENDING
)
!=
0
;
bool
sortDescending
=
(
flags
&
CV_SORT_DESCENDING
)
!=
0
;
CV_Assert
(
src
.
data
!=
dst
.
data
);
CV_Assert
(
src
.
data
!=
dst
.
data
);
int
n
,
len
;
if
(
sortRows
)
if
(
sortRows
)
n
=
src
.
rows
,
len
=
src
.
cols
;
n
=
src
.
rows
,
len
=
src
.
cols
;
else
else
...
@@ -4072,8 +4067,8 @@ template<typename T> static void sortIdx_( const Mat& src, Mat& dst, int flags )
...
@@ -4072,8 +4067,8 @@ template<typename T> static void sortIdx_( const Mat& src, Mat& dst, int flags )
buf
.
allocate
(
len
);
buf
.
allocate
(
len
);
ibuf
.
allocate
(
len
);
ibuf
.
allocate
(
len
);
}
}
bptr
=
(
T
*
)
buf
;
T
*
bptr
=
(
T
*
)
buf
;
_iptr
=
(
int
*
)
ibuf
;
int
*
_iptr
=
(
int
*
)
ibuf
;
#if defined USE_IPP_SORT && IPP_DISABLE_BLOCK
#if defined USE_IPP_SORT && IPP_DISABLE_BLOCK
int
depth
=
src
.
depth
();
int
depth
=
src
.
depth
();
...
@@ -4086,7 +4081,7 @@ template<typename T> static void sortIdx_( const Mat& src, Mat& dst, int flags )
...
@@ -4086,7 +4081,7 @@ template<typename T> static void sortIdx_( const Mat& src, Mat& dst, int flags )
}
}
#endif
#endif
for
(
i
=
0
;
i
<
n
;
i
++
)
for
(
i
nt
i
=
0
;
i
<
n
;
i
++
)
{
{
T
*
ptr
=
bptr
;
T
*
ptr
=
bptr
;
int
*
iptr
=
_iptr
;
int
*
iptr
=
_iptr
;
...
@@ -4098,10 +4093,10 @@ template<typename T> static void sortIdx_( const Mat& src, Mat& dst, int flags )
...
@@ -4098,10 +4093,10 @@ template<typename T> static void sortIdx_( const Mat& src, Mat& dst, int flags )
}
}
else
else
{
{
for
(
j
=
0
;
j
<
len
;
j
++
)
for
(
int
j
=
0
;
j
<
len
;
j
++
)
ptr
[
j
]
=
src
.
ptr
<
T
>
(
j
)[
i
];
ptr
[
j
]
=
src
.
ptr
<
T
>
(
j
)[
i
];
}
}
for
(
j
=
0
;
j
<
len
;
j
++
)
for
(
int
j
=
0
;
j
<
len
;
j
++
)
iptr
[
j
]
=
j
;
iptr
[
j
]
=
j
;
#if defined USE_IPP_SORT && IPP_DISABLE_BLOCK
#if defined USE_IPP_SORT && IPP_DISABLE_BLOCK
...
@@ -4121,7 +4116,7 @@ template<typename T> static void sortIdx_( const Mat& src, Mat& dst, int flags )
...
@@ -4121,7 +4116,7 @@ template<typename T> static void sortIdx_( const Mat& src, Mat& dst, int flags )
#if defined USE_IPP_SORT && IPP_DISABLE_BLOCK
#if defined USE_IPP_SORT && IPP_DISABLE_BLOCK
setIppErrorStatus
();
setIppErrorStatus
();
#endif
#endif
for
(
j
=
0
;
j
<
len
/
2
;
j
++
)
for
(
int
j
=
0
;
j
<
len
/
2
;
j
++
)
std
::
swap
(
iptr
[
j
],
iptr
[
len
-
1
-
j
]);
std
::
swap
(
iptr
[
j
],
iptr
[
len
-
1
-
j
]);
}
}
#if defined USE_IPP_SORT && IPP_DISABLE_BLOCK
#if defined USE_IPP_SORT && IPP_DISABLE_BLOCK
...
@@ -4140,7 +4135,7 @@ template<typename T> static void sortIdx_( const Mat& src, Mat& dst, int flags )
...
@@ -4140,7 +4135,7 @@ template<typename T> static void sortIdx_( const Mat& src, Mat& dst, int flags )
#endif
#endif
if
(
!
sortRows
)
if
(
!
sortRows
)
for
(
j
=
0
;
j
<
len
;
j
++
)
for
(
int
j
=
0
;
j
<
len
;
j
++
)
dst
.
ptr
<
int
>
(
j
)[
i
]
=
iptr
[
j
];
dst
.
ptr
<
int
>
(
j
)[
i
]
=
iptr
[
j
];
}
}
}
}
...
@@ -4251,22 +4246,17 @@ cvReduce( const CvArr* srcarr, CvArr* dstarr, int dim, int op )
...
@@ -4251,22 +4246,17 @@ cvReduce( const CvArr* srcarr, CvArr* dstarr, int dim, int op )
CV_IMPL
CvArr
*
CV_IMPL
CvArr
*
cvRange
(
CvArr
*
arr
,
double
start
,
double
end
)
cvRange
(
CvArr
*
arr
,
double
start
,
double
end
)
{
{
int
ok
=
0
;
CvMat
stub
,
*
mat
=
(
CvMat
*
)
arr
;
CvMat
stub
,
*
mat
=
(
CvMat
*
)
arr
;
double
delta
;
int
step
;
int
type
,
step
;
double
val
=
start
;
double
val
=
start
;
int
i
,
j
;
int
rows
,
cols
;
if
(
!
CV_IS_MAT
(
mat
)
)
if
(
!
CV_IS_MAT
(
mat
)
)
mat
=
cvGetMat
(
mat
,
&
stub
);
mat
=
cvGetMat
(
mat
,
&
stub
);
rows
=
mat
->
rows
;
int
rows
=
mat
->
rows
;
cols
=
mat
->
cols
;
int
cols
=
mat
->
cols
;
type
=
CV_MAT_TYPE
(
mat
->
type
);
int
type
=
CV_MAT_TYPE
(
mat
->
type
);
delta
=
(
end
-
start
)
/
(
rows
*
cols
);
d
ouble
d
elta
=
(
end
-
start
)
/
(
rows
*
cols
);
if
(
CV_IS_MAT_CONT
(
mat
->
type
)
)
if
(
CV_IS_MAT_CONT
(
mat
->
type
)
)
{
{
...
@@ -4285,29 +4275,28 @@ cvRange( CvArr* arr, double start, double end )
...
@@ -4285,29 +4275,28 @@ cvRange( CvArr* arr, double start, double end )
if
(
fabs
(
val
-
ival
)
<
DBL_EPSILON
&&
if
(
fabs
(
val
-
ival
)
<
DBL_EPSILON
&&
fabs
(
delta
-
idelta
)
<
DBL_EPSILON
)
fabs
(
delta
-
idelta
)
<
DBL_EPSILON
)
{
{
for
(
i
=
0
;
i
<
rows
;
i
++
,
idata
+=
step
)
for
(
i
nt
i
=
0
;
i
<
rows
;
i
++
,
idata
+=
step
)
for
(
j
=
0
;
j
<
cols
;
j
++
,
ival
+=
idelta
)
for
(
int
j
=
0
;
j
<
cols
;
j
++
,
ival
+=
idelta
)
idata
[
j
]
=
ival
;
idata
[
j
]
=
ival
;
}
}
else
else
{
{
for
(
i
=
0
;
i
<
rows
;
i
++
,
idata
+=
step
)
for
(
i
nt
i
=
0
;
i
<
rows
;
i
++
,
idata
+=
step
)
for
(
j
=
0
;
j
<
cols
;
j
++
,
val
+=
delta
)
for
(
int
j
=
0
;
j
<
cols
;
j
++
,
val
+=
delta
)
idata
[
j
]
=
cvRound
(
val
);
idata
[
j
]
=
cvRound
(
val
);
}
}
}
}
else
if
(
type
==
CV_32FC1
)
else
if
(
type
==
CV_32FC1
)
{
{
float
*
fdata
=
mat
->
data
.
fl
;
float
*
fdata
=
mat
->
data
.
fl
;
for
(
i
=
0
;
i
<
rows
;
i
++
,
fdata
+=
step
)
for
(
i
nt
i
=
0
;
i
<
rows
;
i
++
,
fdata
+=
step
)
for
(
j
=
0
;
j
<
cols
;
j
++
,
val
+=
delta
)
for
(
int
j
=
0
;
j
<
cols
;
j
++
,
val
+=
delta
)
fdata
[
j
]
=
(
float
)
val
;
fdata
[
j
]
=
(
float
)
val
;
}
}
else
else
CV_Error
(
CV_StsUnsupportedFormat
,
"The function only supports 32sC1 and 32fC1 datatypes"
);
CV_Error
(
CV_StsUnsupportedFormat
,
"The function only supports 32sC1 and 32fC1 datatypes"
);
ok
=
1
;
return
arr
;
return
ok
?
arr
:
0
;
}
}
...
@@ -4708,7 +4697,7 @@ void MatConstIterator::seek(ptrdiff_t ofs, bool relative)
...
@@ -4708,7 +4697,7 @@ void MatConstIterator::seek(ptrdiff_t ofs, bool relative)
void
MatConstIterator
::
seek
(
const
int
*
_idx
,
bool
relative
)
void
MatConstIterator
::
seek
(
const
int
*
_idx
,
bool
relative
)
{
{
int
i
,
d
=
m
->
dims
;
int
d
=
m
->
dims
;
ptrdiff_t
ofs
=
0
;
ptrdiff_t
ofs
=
0
;
if
(
!
_idx
)
if
(
!
_idx
)
;
;
...
@@ -4716,7 +4705,7 @@ void MatConstIterator::seek(const int* _idx, bool relative)
...
@@ -4716,7 +4705,7 @@ void MatConstIterator::seek(const int* _idx, bool relative)
ofs
=
_idx
[
0
]
*
m
->
size
[
1
]
+
_idx
[
1
];
ofs
=
_idx
[
0
]
*
m
->
size
[
1
]
+
_idx
[
1
];
else
else
{
{
for
(
i
=
0
;
i
<
d
;
i
++
)
for
(
i
nt
i
=
0
;
i
<
d
;
i
++
)
ofs
=
ofs
*
m
->
size
[
i
]
+
_idx
[
i
];
ofs
=
ofs
*
m
->
size
[
i
]
+
_idx
[
i
];
}
}
seek
(
ofs
,
relative
);
seek
(
ofs
,
relative
);
...
@@ -4926,13 +4915,13 @@ SparseMat::SparseMat(const Mat& m)
...
@@ -4926,13 +4915,13 @@ SparseMat::SparseMat(const Mat& m)
void
SparseMat
::
create
(
int
d
,
const
int
*
_sizes
,
int
_type
)
void
SparseMat
::
create
(
int
d
,
const
int
*
_sizes
,
int
_type
)
{
{
int
i
;
CV_Assert
(
_sizes
&&
0
<
d
&&
d
<=
CV_MAX_DIM
);
CV_Assert
(
_sizes
&&
0
<
d
&&
d
<=
CV_MAX_DIM
);
for
(
i
=
0
;
i
<
d
;
i
++
)
for
(
i
nt
i
=
0
;
i
<
d
;
i
++
)
CV_Assert
(
_sizes
[
i
]
>
0
);
CV_Assert
(
_sizes
[
i
]
>
0
);
_type
=
CV_MAT_TYPE
(
_type
);
_type
=
CV_MAT_TYPE
(
_type
);
if
(
hdr
&&
_type
==
type
()
&&
hdr
->
dims
==
d
&&
hdr
->
refcount
==
1
)
if
(
hdr
&&
_type
==
type
()
&&
hdr
->
dims
==
d
&&
hdr
->
refcount
==
1
)
{
{
int
i
;
for
(
i
=
0
;
i
<
d
;
i
++
)
for
(
i
=
0
;
i
<
d
;
i
++
)
if
(
_sizes
[
i
]
!=
hdr
->
size
[
i
]
)
if
(
_sizes
[
i
]
!=
hdr
->
size
[
i
]
)
break
;
break
;
...
@@ -4945,7 +4934,7 @@ void SparseMat::create(int d, const int* _sizes, int _type)
...
@@ -4945,7 +4934,7 @@ void SparseMat::create(int d, const int* _sizes, int _type)
int
_sizes_backup
[
CV_MAX_DIM
];
// #5991
int
_sizes_backup
[
CV_MAX_DIM
];
// #5991
if
(
_sizes
==
hdr
->
size
)
if
(
_sizes
==
hdr
->
size
)
{
{
for
(
i
=
0
;
i
<
d
;
i
++
)
for
(
i
nt
i
=
0
;
i
<
d
;
i
++
)
_sizes_backup
[
i
]
=
_sizes
[
i
];
_sizes_backup
[
i
]
=
_sizes
[
i
];
_sizes
=
_sizes_backup
;
_sizes
=
_sizes_backup
;
}
}
...
@@ -4965,9 +4954,9 @@ void SparseMat::copyTo( SparseMat& m ) const
...
@@ -4965,9 +4954,9 @@ void SparseMat::copyTo( SparseMat& m ) const
}
}
m
.
create
(
hdr
->
dims
,
hdr
->
size
,
type
()
);
m
.
create
(
hdr
->
dims
,
hdr
->
size
,
type
()
);
SparseMatConstIterator
from
=
begin
();
SparseMatConstIterator
from
=
begin
();
size_t
i
,
N
=
nzcount
(),
esz
=
elemSize
();
size_t
N
=
nzcount
(),
esz
=
elemSize
();
for
(
i
=
0
;
i
<
N
;
i
++
,
++
from
)
for
(
size_t
i
=
0
;
i
<
N
;
i
++
,
++
from
)
{
{
const
Node
*
n
=
from
.
node
();
const
Node
*
n
=
from
.
node
();
uchar
*
to
=
m
.
newNode
(
n
->
idx
,
n
->
hashval
);
uchar
*
to
=
m
.
newNode
(
n
->
idx
,
n
->
hashval
);
...
@@ -4983,9 +4972,9 @@ void SparseMat::copyTo( Mat& m ) const
...
@@ -4983,9 +4972,9 @@ void SparseMat::copyTo( Mat& m ) const
m
=
Scalar
(
0
);
m
=
Scalar
(
0
);
SparseMatConstIterator
from
=
begin
();
SparseMatConstIterator
from
=
begin
();
size_t
i
,
N
=
nzcount
(),
esz
=
elemSize
();
size_t
N
=
nzcount
(),
esz
=
elemSize
();
for
(
i
=
0
;
i
<
N
;
i
++
,
++
from
)
for
(
size_t
i
=
0
;
i
<
N
;
i
++
,
++
from
)
{
{
const
Node
*
n
=
from
.
node
();
const
Node
*
n
=
from
.
node
();
copyElem
(
from
.
ptr
,
(
ndims
>
1
?
m
.
ptr
(
n
->
idx
)
:
m
.
ptr
(
n
->
idx
[
0
])),
esz
);
copyElem
(
from
.
ptr
,
(
ndims
>
1
?
m
.
ptr
(
n
->
idx
)
:
m
.
ptr
(
n
->
idx
[
0
])),
esz
);
...
@@ -5012,12 +5001,12 @@ void SparseMat::convertTo( SparseMat& m, int rtype, double alpha ) const
...
@@ -5012,12 +5001,12 @@ void SparseMat::convertTo( SparseMat& m, int rtype, double alpha ) const
m
.
create
(
hdr
->
dims
,
hdr
->
size
,
rtype
);
m
.
create
(
hdr
->
dims
,
hdr
->
size
,
rtype
);
SparseMatConstIterator
from
=
begin
();
SparseMatConstIterator
from
=
begin
();
size_t
i
,
N
=
nzcount
();
size_t
N
=
nzcount
();
if
(
alpha
==
1
)
if
(
alpha
==
1
)
{
{
ConvertData
cvtfunc
=
getConvertElem
(
type
(),
rtype
);
ConvertData
cvtfunc
=
getConvertElem
(
type
(),
rtype
);
for
(
i
=
0
;
i
<
N
;
i
++
,
++
from
)
for
(
size_t
i
=
0
;
i
<
N
;
i
++
,
++
from
)
{
{
const
Node
*
n
=
from
.
node
();
const
Node
*
n
=
from
.
node
();
uchar
*
to
=
hdr
==
m
.
hdr
?
from
.
ptr
:
m
.
newNode
(
n
->
idx
,
n
->
hashval
);
uchar
*
to
=
hdr
==
m
.
hdr
?
from
.
ptr
:
m
.
newNode
(
n
->
idx
,
n
->
hashval
);
...
@@ -5027,7 +5016,7 @@ void SparseMat::convertTo( SparseMat& m, int rtype, double alpha ) const
...
@@ -5027,7 +5016,7 @@ void SparseMat::convertTo( SparseMat& m, int rtype, double alpha ) const
else
else
{
{
ConvertScaleData
cvtfunc
=
getConvertScaleElem
(
type
(),
rtype
);
ConvertScaleData
cvtfunc
=
getConvertScaleElem
(
type
(),
rtype
);
for
(
i
=
0
;
i
<
N
;
i
++
,
++
from
)
for
(
size_t
i
=
0
;
i
<
N
;
i
++
,
++
from
)
{
{
const
Node
*
n
=
from
.
node
();
const
Node
*
n
=
from
.
node
();
uchar
*
to
=
hdr
==
m
.
hdr
?
from
.
ptr
:
m
.
newNode
(
n
->
idx
,
n
->
hashval
);
uchar
*
to
=
hdr
==
m
.
hdr
?
from
.
ptr
:
m
.
newNode
(
n
->
idx
,
n
->
hashval
);
...
@@ -5049,12 +5038,12 @@ void SparseMat::convertTo( Mat& m, int rtype, double alpha, double beta ) const
...
@@ -5049,12 +5038,12 @@ void SparseMat::convertTo( Mat& m, int rtype, double alpha, double beta ) const
m
=
Scalar
(
beta
);
m
=
Scalar
(
beta
);
SparseMatConstIterator
from
=
begin
();
SparseMatConstIterator
from
=
begin
();
size_t
i
,
N
=
nzcount
();
size_t
N
=
nzcount
();
if
(
alpha
==
1
&&
beta
==
0
)
if
(
alpha
==
1
&&
beta
==
0
)
{
{
ConvertData
cvtfunc
=
getConvertElem
(
type
(),
rtype
);
ConvertData
cvtfunc
=
getConvertElem
(
type
(),
rtype
);
for
(
i
=
0
;
i
<
N
;
i
++
,
++
from
)
for
(
size_t
i
=
0
;
i
<
N
;
i
++
,
++
from
)
{
{
const
Node
*
n
=
from
.
node
();
const
Node
*
n
=
from
.
node
();
uchar
*
to
=
m
.
ptr
(
n
->
idx
);
uchar
*
to
=
m
.
ptr
(
n
->
idx
);
...
@@ -5064,7 +5053,7 @@ void SparseMat::convertTo( Mat& m, int rtype, double alpha, double beta ) const
...
@@ -5064,7 +5053,7 @@ void SparseMat::convertTo( Mat& m, int rtype, double alpha, double beta ) const
else
else
{
{
ConvertScaleData
cvtfunc
=
getConvertScaleElem
(
type
(),
rtype
);
ConvertScaleData
cvtfunc
=
getConvertScaleElem
(
type
(),
rtype
);
for
(
i
=
0
;
i
<
N
;
i
++
,
++
from
)
for
(
size_t
i
=
0
;
i
<
N
;
i
++
,
++
from
)
{
{
const
Node
*
n
=
from
.
node
();
const
Node
*
n
=
from
.
node
();
uchar
*
to
=
m
.
ptr
(
n
->
idx
);
uchar
*
to
=
m
.
ptr
(
n
->
idx
);
...
@@ -5098,7 +5087,7 @@ uchar* SparseMat::ptr(int i0, bool createMissing, size_t* hashval)
...
@@ -5098,7 +5087,7 @@ uchar* SparseMat::ptr(int i0, bool createMissing, size_t* hashval)
int
idx
[]
=
{
i0
};
int
idx
[]
=
{
i0
};
return
newNode
(
idx
,
h
);
return
newNode
(
idx
,
h
);
}
}
return
0
;
return
NULL
;
}
}
uchar
*
SparseMat
::
ptr
(
int
i0
,
int
i1
,
bool
createMissing
,
size_t
*
hashval
)
uchar
*
SparseMat
::
ptr
(
int
i0
,
int
i1
,
bool
createMissing
,
size_t
*
hashval
)
...
@@ -5120,7 +5109,7 @@ uchar* SparseMat::ptr(int i0, int i1, bool createMissing, size_t* hashval)
...
@@ -5120,7 +5109,7 @@ uchar* SparseMat::ptr(int i0, int i1, bool createMissing, size_t* hashval)
int
idx
[]
=
{
i0
,
i1
};
int
idx
[]
=
{
i0
,
i1
};
return
newNode
(
idx
,
h
);
return
newNode
(
idx
,
h
);
}
}
return
0
;
return
NULL
;
}
}
uchar
*
SparseMat
::
ptr
(
int
i0
,
int
i1
,
int
i2
,
bool
createMissing
,
size_t
*
hashval
)
uchar
*
SparseMat
::
ptr
(
int
i0
,
int
i1
,
int
i2
,
bool
createMissing
,
size_t
*
hashval
)
...
@@ -5143,7 +5132,7 @@ uchar* SparseMat::ptr(int i0, int i1, int i2, bool createMissing, size_t* hashva
...
@@ -5143,7 +5132,7 @@ uchar* SparseMat::ptr(int i0, int i1, int i2, bool createMissing, size_t* hashva
int
idx
[]
=
{
i0
,
i1
,
i2
};
int
idx
[]
=
{
i0
,
i1
,
i2
};
return
newNode
(
idx
,
h
);
return
newNode
(
idx
,
h
);
}
}
return
0
;
return
NULL
;
}
}
uchar
*
SparseMat
::
ptr
(
const
int
*
idx
,
bool
createMissing
,
size_t
*
hashval
)
uchar
*
SparseMat
::
ptr
(
const
int
*
idx
,
bool
createMissing
,
size_t
*
hashval
)
...
@@ -5167,7 +5156,7 @@ uchar* SparseMat::ptr(const int* idx, bool createMissing, size_t* hashval)
...
@@ -5167,7 +5156,7 @@ uchar* SparseMat::ptr(const int* idx, bool createMissing, size_t* hashval)
nidx
=
elem
->
next
;
nidx
=
elem
->
next
;
}
}
return
createMissing
?
newNode
(
idx
,
h
)
:
0
;
return
createMissing
?
newNode
(
idx
,
h
)
:
NULL
;
}
}
void
SparseMat
::
erase
(
int
i0
,
int
i1
,
size_t
*
hashval
)
void
SparseMat
::
erase
(
int
i0
,
int
i1
,
size_t
*
hashval
)
...
@@ -5241,13 +5230,13 @@ void SparseMat::resizeHashTab(size_t newsize)
...
@@ -5241,13 +5230,13 @@ void SparseMat::resizeHashTab(size_t newsize)
if
((
newsize
&
(
newsize
-
1
))
!=
0
)
if
((
newsize
&
(
newsize
-
1
))
!=
0
)
newsize
=
(
size_t
)
1
<<
cvCeil
(
std
::
log
((
double
)
newsize
)
/
CV_LOG2
);
newsize
=
(
size_t
)
1
<<
cvCeil
(
std
::
log
((
double
)
newsize
)
/
CV_LOG2
);
size_t
i
,
hsize
=
hdr
->
hashtab
.
size
();
size_t
hsize
=
hdr
->
hashtab
.
size
();
std
::
vector
<
size_t
>
_newh
(
newsize
);
std
::
vector
<
size_t
>
_newh
(
newsize
);
size_t
*
newh
=
&
_newh
[
0
];
size_t
*
newh
=
&
_newh
[
0
];
for
(
i
=
0
;
i
<
newsize
;
i
++
)
for
(
size_t
i
=
0
;
i
<
newsize
;
i
++
)
newh
[
i
]
=
0
;
newh
[
i
]
=
0
;
uchar
*
pool
=
&
hdr
->
pool
[
0
];
uchar
*
pool
=
&
hdr
->
pool
[
0
];
for
(
i
=
0
;
i
<
hsize
;
i
++
)
for
(
size_t
i
=
0
;
i
<
hsize
;
i
++
)
{
{
size_t
nidx
=
hdr
->
hashtab
[
i
];
size_t
nidx
=
hdr
->
hashtab
[
i
];
while
(
nidx
)
while
(
nidx
)
...
...
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