mirror of
https://github.com/opencv/opencv.git
synced 2025-08-01 02:18:01 +08:00
imgproc: add parameter checks in calcHist and calcBackProj
This commit is contained in:
parent
939099b9ce
commit
435c97c7a2
@ -75,8 +75,8 @@ calcHistLookupTables_8u( const Mat& hist, const SparseMat& shist,
|
|||||||
int sz = !issparse ? hist.size[i] : shist.size(i);
|
int sz = !issparse ? hist.size[i] : shist.size(i);
|
||||||
size_t step = !issparse ? hist.step[i] : 1;
|
size_t step = !issparse ? hist.step[i] : 1;
|
||||||
|
|
||||||
double v_lo = ranges[i][0];
|
double v_lo = ranges ? ranges[i][0] : 0;
|
||||||
double v_hi = ranges[i][1];
|
double v_hi = ranges ? ranges[i][1] : 256;
|
||||||
|
|
||||||
for( j = low; j < high; j++ )
|
for( j = low; j < high; j++ )
|
||||||
{
|
{
|
||||||
@ -183,7 +183,7 @@ static void histPrepareImages( const Mat* images, int nimages, const int* channe
|
|||||||
imsize.height = 1;
|
imsize.height = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( !ranges )
|
if( !ranges ) // implicit uniform ranges for 8U
|
||||||
{
|
{
|
||||||
CV_Assert( depth == CV_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_INSTRUMENT_REGION();
|
||||||
|
|
||||||
|
CV_Assert(images && nimages > 0);
|
||||||
|
|
||||||
CV_OVX_RUN(
|
CV_OVX_RUN(
|
||||||
images && histSize &&
|
images && histSize &&
|
||||||
nimages == 1 && images[0].type() == CV_8UC1 && dims == 1 && _mask.getMat().empty() &&
|
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_INSTRUMENT_REGION();
|
||||||
|
|
||||||
|
CV_Assert(images && nimages > 0);
|
||||||
|
|
||||||
Mat mask = _mask.getMat();
|
Mat mask = _mask.getMat();
|
||||||
calcHist( images, nimages, channels, mask, hist, dims, histSize,
|
calcHist( images, nimages, channels, mask, hist, dims, histSize,
|
||||||
ranges, uniform, accumulate, false );
|
ranges, uniform, accumulate, false );
|
||||||
@ -1608,6 +1612,8 @@ void cv::calcBackProject( const Mat* images, int nimages, const int* channels,
|
|||||||
{
|
{
|
||||||
CV_INSTRUMENT_REGION();
|
CV_INSTRUMENT_REGION();
|
||||||
|
|
||||||
|
CV_Assert(images && nimages > 0);
|
||||||
|
|
||||||
Mat hist = _hist.getMat();
|
Mat hist = _hist.getMat();
|
||||||
std::vector<uchar*> ptrs;
|
std::vector<uchar*> ptrs;
|
||||||
std::vector<int> deltas;
|
std::vector<int> deltas;
|
||||||
@ -1777,6 +1783,8 @@ void cv::calcBackProject( const Mat* images, int nimages, const int* channels,
|
|||||||
{
|
{
|
||||||
CV_INSTRUMENT_REGION();
|
CV_INSTRUMENT_REGION();
|
||||||
|
|
||||||
|
CV_Assert(images && nimages > 0);
|
||||||
|
|
||||||
std::vector<uchar*> ptrs;
|
std::vector<uchar*> ptrs;
|
||||||
std::vector<int> deltas;
|
std::vector<int> deltas;
|
||||||
std::vector<double> uniranges;
|
std::vector<double> uniranges;
|
||||||
|
@ -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
|
}} // namespace
|
||||||
/* End Of File */
|
/* End Of File */
|
||||||
|
Loading…
Reference in New Issue
Block a user