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++ )
{
imsize.height = 1;
}
- if( !ranges )
+ if( !ranges ) // implicit uniform ranges for 8U
{
CV_Assert( depth == CV_8U );
{
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() &&
{
CV_INSTRUMENT_REGION();
+ CV_Assert(images && nimages > 0);
+
Mat mask = _mask.getMat();
calcHist( images, nimages, channels, mask, hist, dims, histSize,
ranges, uniform, accumulate, false );
{
CV_INSTRUMENT_REGION();
+ CV_Assert(images && nimages > 0);
+
Mat hist = _hist.getMat();
std::vector<uchar*> ptrs;
std::vector<int> deltas;
{
CV_INSTRUMENT_REGION();
+ CV_Assert(images && nimages > 0);
+
std::vector<uchar*> ptrs;
std::vector<int> deltas;
std::vector<double> uniranges;
}
}
+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 */