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
435c97c7
Commit
435c97c7
authored
Dec 10, 2019
by
Maksim Shabunin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
imgproc: add parameter checks in calcHist and calcBackProj
parent
939099b9
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
48 additions
and
3 deletions
+48
-3
histogram.cpp
modules/imgproc/src/histogram.cpp
+11
-3
test_histograms.cpp
modules/imgproc/test/test_histograms.cpp
+37
-0
No files found.
modules/imgproc/src/histogram.cpp
View file @
435c97c7
...
...
@@ -75,8 +75,8 @@ calcHistLookupTables_8u( const Mat& hist, const SparseMat& shist,
int
sz
=
!
issparse
?
hist
.
size
[
i
]
:
shist
.
size
(
i
);
size_t
step
=
!
issparse
?
hist
.
step
[
i
]
:
1
;
double
v_lo
=
ranges
[
i
][
0
]
;
double
v_hi
=
ranges
[
i
][
1
]
;
double
v_lo
=
ranges
?
ranges
[
i
][
0
]
:
0
;
double
v_hi
=
ranges
?
ranges
[
i
][
1
]
:
256
;
for
(
j
=
low
;
j
<
high
;
j
++
)
{
...
...
@@ -183,7 +183,7 @@ static void histPrepareImages( const Mat* images, int nimages, const int* channe
imsize
.
height
=
1
;
}
if
(
!
ranges
)
if
(
!
ranges
)
// implicit uniform ranges for 8U
{
CV_Assert
(
depth
==
CV_8U
);
...
...
@@ -951,6 +951,8 @@ void cv::calcHist( const Mat* images, int nimages, const int* channels,
{
CV_INSTRUMENT_REGION
();
CV_Assert
(
images
&&
nimages
>
0
);
CV_OVX_RUN
(
images
&&
histSize
&&
nimages
==
1
&&
images
[
0
].
type
()
==
CV_8UC1
&&
dims
==
1
&&
_mask
.
getMat
().
empty
()
&&
...
...
@@ -1261,6 +1263,8 @@ void cv::calcHist( const Mat* images, int nimages, const int* channels,
{
CV_INSTRUMENT_REGION
();
CV_Assert
(
images
&&
nimages
>
0
);
Mat
mask
=
_mask
.
getMat
();
calcHist
(
images
,
nimages
,
channels
,
mask
,
hist
,
dims
,
histSize
,
ranges
,
uniform
,
accumulate
,
false
);
...
...
@@ -1608,6 +1612,8 @@ void cv::calcBackProject( const Mat* images, int nimages, const int* channels,
{
CV_INSTRUMENT_REGION
();
CV_Assert
(
images
&&
nimages
>
0
);
Mat
hist
=
_hist
.
getMat
();
std
::
vector
<
uchar
*>
ptrs
;
std
::
vector
<
int
>
deltas
;
...
...
@@ -1777,6 +1783,8 @@ void cv::calcBackProject( const Mat* images, int nimages, const int* channels,
{
CV_INSTRUMENT_REGION
();
CV_Assert
(
images
&&
nimages
>
0
);
std
::
vector
<
uchar
*>
ptrs
;
std
::
vector
<
int
>
deltas
;
std
::
vector
<
double
>
uniranges
;
...
...
modules/imgproc/test/test_histograms.cpp
View file @
435c97c7
...
...
@@ -1957,5 +1957,42 @@ TEST(Imgproc_Hist_Calc, calcHist_regression_11544)
}
}
TEST
(
Imgproc_Hist_Calc
,
badarg
)
{
const
int
channels
[]
=
{
0
};
float
range1
[]
=
{
0
,
10
};
float
range2
[]
=
{
10
,
20
};
const
float
*
ranges
[]
=
{
range1
,
range2
};
Mat
img
=
cv
::
Mat
::
zeros
(
10
,
10
,
CV_8UC1
);
Mat
imgInt
=
cv
::
Mat
::
zeros
(
10
,
10
,
CV_32SC1
);
Mat
hist
;
const
int
hist_size
[]
=
{
100
};
// base run
EXPECT_NO_THROW
(
cv
::
calcHist
(
&
img
,
1
,
channels
,
noArray
(),
hist
,
1
,
hist_size
,
ranges
,
true
));
// bad parameters
EXPECT_THROW
(
cv
::
calcHist
(
NULL
,
1
,
channels
,
noArray
(),
hist
,
1
,
hist_size
,
ranges
,
true
),
cv
::
Exception
);
EXPECT_THROW
(
cv
::
calcHist
(
&
img
,
0
,
channels
,
noArray
(),
hist
,
1
,
hist_size
,
ranges
,
true
),
cv
::
Exception
);
EXPECT_THROW
(
cv
::
calcHist
(
&
img
,
1
,
NULL
,
noArray
(),
hist
,
2
,
hist_size
,
ranges
,
true
),
cv
::
Exception
);
EXPECT_THROW
(
cv
::
calcHist
(
&
img
,
1
,
channels
,
noArray
(),
noArray
(),
1
,
hist_size
,
ranges
,
true
),
cv
::
Exception
);
EXPECT_THROW
(
cv
::
calcHist
(
&
img
,
1
,
channels
,
noArray
(),
hist
,
-
1
,
hist_size
,
ranges
,
true
),
cv
::
Exception
);
EXPECT_THROW
(
cv
::
calcHist
(
&
img
,
1
,
channels
,
noArray
(),
hist
,
1
,
NULL
,
ranges
,
true
),
cv
::
Exception
);
EXPECT_THROW
(
cv
::
calcHist
(
&
imgInt
,
1
,
channels
,
noArray
(),
hist
,
1
,
hist_size
,
NULL
,
true
),
cv
::
Exception
);
// special case
EXPECT_NO_THROW
(
cv
::
calcHist
(
&
img
,
1
,
channels
,
noArray
(),
hist
,
1
,
hist_size
,
NULL
,
true
));
Mat
backProj
;
// base run
EXPECT_NO_THROW
(
cv
::
calcBackProject
(
&
img
,
1
,
channels
,
hist
,
backProj
,
ranges
,
1
,
true
));
// bad parameters
EXPECT_THROW
(
cv
::
calcBackProject
(
NULL
,
1
,
channels
,
hist
,
backProj
,
ranges
,
1
,
true
),
cv
::
Exception
);
EXPECT_THROW
(
cv
::
calcBackProject
(
&
img
,
0
,
channels
,
hist
,
backProj
,
ranges
,
1
,
true
),
cv
::
Exception
);
EXPECT_THROW
(
cv
::
calcBackProject
(
&
img
,
1
,
channels
,
noArray
(),
backProj
,
ranges
,
1
,
true
),
cv
::
Exception
);
EXPECT_THROW
(
cv
::
calcBackProject
(
&
img
,
1
,
channels
,
hist
,
noArray
(),
ranges
,
1
,
true
),
cv
::
Exception
);
EXPECT_THROW
(
cv
::
calcBackProject
(
&
imgInt
,
1
,
channels
,
hist
,
backProj
,
NULL
,
1
,
true
),
cv
::
Exception
);
// special case
EXPECT_NO_THROW
(
cv
::
calcBackProject
(
&
img
,
1
,
channels
,
hist
,
backProj
,
NULL
,
1
,
true
));
}
}}
// namespace
/* End Of File */
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