mirror of
https://github.com/opencv/opencv.git
synced 2026-07-29 23:33:05 +04:00
created wrappers for new NPP functions
removed void integral(const GpuMat& src, GpuMat& sum, GpuMat& sqsum, Stream& stream) - it fails with NPP_NOT_IMPLEMENTED error updated docs, accuracy and performance tests
This commit is contained in:
@@ -69,10 +69,10 @@ PARAM_TEST_CASE(ArithmTestBase, cv::gpu::DeviceInfo, MatType, UseRoi)
|
||||
|
||||
size = cv::Size(rng.uniform(100, 200), rng.uniform(100, 200));
|
||||
|
||||
mat1 = randomMat(rng, size, type, 1, 16, false);
|
||||
mat2 = randomMat(rng, size, type, 1, 16, false);
|
||||
mat1 = randomMat(rng, size, type, 5, 16, false);
|
||||
mat2 = randomMat(rng, size, type, 5, 16, false);
|
||||
|
||||
val = cv::Scalar(rng.uniform(0.1, 3.0), rng.uniform(0.1, 3.0), rng.uniform(0.1, 3.0), rng.uniform(0.1, 3.0));
|
||||
val = cv::Scalar(rng.uniform(1, 3), rng.uniform(1, 3), rng.uniform(1, 3), rng.uniform(1, 3));
|
||||
}
|
||||
};
|
||||
|
||||
@@ -115,7 +115,8 @@ TEST_P(Add, Scalar)
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(Arithm, Add, Combine(
|
||||
ALL_DEVICES,
|
||||
Values(CV_8UC1, CV_16UC1, CV_32SC1, CV_32FC1),
|
||||
Values(CV_8UC1, CV_8UC3, CV_8UC4, CV_16UC1, CV_16UC3, CV_16UC4, CV_16SC1, CV_16SC2, CV_16SC3, CV_16SC4,
|
||||
CV_32SC1, CV_32SC2, CV_32SC3, CV_32FC1, CV_32FC2, CV_32FC3, CV_32FC4),
|
||||
USE_ROI));
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
@@ -157,7 +158,8 @@ TEST_P(Subtract, Scalar)
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(Arithm, Subtract, Combine(
|
||||
ALL_DEVICES,
|
||||
Values(CV_8UC1, CV_16UC1, CV_32SC1, CV_32FC1),
|
||||
Values(CV_8UC1, CV_8UC3, CV_8UC4, CV_16UC1, CV_16UC3, CV_16UC4, CV_16SC1, CV_16SC2, CV_16SC3, CV_16SC4,
|
||||
CV_32SC1, CV_32SC2, CV_32SC3, CV_32FC1, CV_32FC2, CV_32FC3, CV_32FC4),
|
||||
USE_ROI));
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
@@ -199,7 +201,8 @@ TEST_P(Multiply, Scalar)
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(Arithm, Multiply, Combine(
|
||||
ALL_DEVICES,
|
||||
Values(CV_8UC1, CV_16UC1, CV_32SC1, CV_32FC1),
|
||||
Values(CV_8UC1, CV_8UC3, CV_8UC4, CV_16UC1, CV_16UC3, CV_16UC4, CV_16SC1, CV_16SC3, CV_16SC4,
|
||||
CV_32SC1, CV_32SC3, CV_32FC1, CV_32FC3, CV_32FC4),
|
||||
USE_ROI));
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
@@ -220,7 +223,7 @@ TEST_P(Divide, Array)
|
||||
|
||||
gpuRes.download(dst);
|
||||
|
||||
EXPECT_MAT_NEAR(dst_gold, dst, 1.0);
|
||||
EXPECT_MAT_NEAR(dst_gold, dst, mat1.depth() == CV_32F ? 1e-5 : 1);
|
||||
}
|
||||
|
||||
TEST_P(Divide, Scalar)
|
||||
@@ -236,12 +239,13 @@ TEST_P(Divide, Scalar)
|
||||
|
||||
gpuRes.download(dst);
|
||||
|
||||
EXPECT_MAT_NEAR(dst_gold, dst, 1e-5);
|
||||
EXPECT_MAT_NEAR(dst_gold, dst, mat1.depth() == CV_32F ? 1e-5 : 1);
|
||||
}
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(Arithm, Divide, Combine(
|
||||
ALL_DEVICES,
|
||||
Values(CV_8UC1, CV_16UC1, CV_32SC1, CV_32FC1),
|
||||
Values(CV_8UC1, CV_8UC3, CV_8UC4, CV_16UC1, CV_16UC3, CV_16UC4, CV_16SC1, CV_16SC3, CV_16SC4,
|
||||
CV_32SC1, CV_32SC3, CV_32FC1, CV_32FC3, CV_32FC4),
|
||||
USE_ROI));
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
@@ -312,6 +316,83 @@ INSTANTIATE_TEST_CASE_P(Arithm, Absdiff, Combine(
|
||||
Values(CV_8UC1, CV_16UC1, CV_32SC1, CV_32FC1),
|
||||
USE_ROI));
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// abs
|
||||
|
||||
struct Abs : ArithmTestBase {};
|
||||
|
||||
TEST_P(Abs, Array)
|
||||
{
|
||||
cv::Mat dst_gold = cv::abs(mat1);
|
||||
|
||||
cv::Mat dst;
|
||||
|
||||
cv::gpu::GpuMat gpuRes;
|
||||
|
||||
cv::gpu::abs(loadMat(mat1, useRoi), gpuRes);
|
||||
|
||||
gpuRes.download(dst);
|
||||
|
||||
EXPECT_MAT_NEAR(dst_gold, dst, 0.0);
|
||||
}
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(Arithm, Abs, Combine(
|
||||
ALL_DEVICES,
|
||||
Values(CV_16SC1, CV_32FC1),
|
||||
USE_ROI));
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Sqr
|
||||
|
||||
struct Sqr : ArithmTestBase {};
|
||||
|
||||
TEST_P(Sqr, Array)
|
||||
{
|
||||
cv::Mat dst_gold;
|
||||
cv::multiply(mat1, mat1, dst_gold);
|
||||
|
||||
cv::Mat dst;
|
||||
|
||||
cv::gpu::GpuMat gpuRes;
|
||||
|
||||
cv::gpu::sqr(loadMat(mat1, useRoi), gpuRes);
|
||||
|
||||
gpuRes.download(dst);
|
||||
|
||||
EXPECT_MAT_NEAR(dst_gold, dst, 0.0);
|
||||
}
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(Arithm, Sqr, Combine(
|
||||
ALL_DEVICES,
|
||||
Values(CV_8UC1, CV_16UC1, CV_16SC1, CV_32FC1),
|
||||
USE_ROI));
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// Sqrt
|
||||
|
||||
struct Sqrt : ArithmTestBase {};
|
||||
|
||||
TEST_P(Sqrt, Array)
|
||||
{
|
||||
cv::Mat dst_gold;
|
||||
cv::sqrt(mat1, dst_gold);
|
||||
|
||||
cv::Mat dst;
|
||||
|
||||
cv::gpu::GpuMat gpuRes;
|
||||
|
||||
cv::gpu::sqrt(loadMat(mat1, useRoi), gpuRes);
|
||||
|
||||
gpuRes.download(dst);
|
||||
|
||||
EXPECT_MAT_NEAR(dst_gold, dst, 0.0);
|
||||
}
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(Arithm, Sqrt, Combine(
|
||||
ALL_DEVICES,
|
||||
Values(MatType(CV_32FC1)),
|
||||
USE_ROI));
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
// compare
|
||||
|
||||
@@ -513,7 +594,7 @@ TEST_P(Flip, Accuracy)
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(Arithm, Flip, Combine(
|
||||
ALL_DEVICES,
|
||||
Values(CV_8UC1, CV_8UC4),
|
||||
Values(CV_8UC1, CV_8UC3, CV_8UC4, CV_16UC1, CV_16UC3, CV_16UC4, CV_32SC1, CV_32SC3, CV_32SC4, CV_32FC1, CV_32FC3, CV_32FC4),
|
||||
Values((int)FLIP_BOTH, (int)FLIP_X, (int)FLIP_Y),
|
||||
USE_ROI));
|
||||
|
||||
@@ -1329,6 +1410,90 @@ INSTANTIATE_TEST_CASE_P(Arithm, Bitwise, Combine(
|
||||
ALL_DEVICES,
|
||||
ALL_TYPES));
|
||||
|
||||
PARAM_TEST_CASE(BitwiseScalar, cv::gpu::DeviceInfo, MatType)
|
||||
{
|
||||
cv::gpu::DeviceInfo devInfo;
|
||||
int type;
|
||||
|
||||
cv::Size size;
|
||||
cv::Mat mat;
|
||||
cv::Scalar sc;
|
||||
|
||||
virtual void SetUp()
|
||||
{
|
||||
devInfo = GET_PARAM(0);
|
||||
type = GET_PARAM(1);
|
||||
|
||||
cv::gpu::setDevice(devInfo.deviceID());
|
||||
|
||||
cv::RNG& rng = cvtest::TS::ptr()->get_rng();
|
||||
|
||||
size = cv::Size(rng.uniform(100, 200), rng.uniform(100, 200));
|
||||
|
||||
mat.create(size, type);
|
||||
|
||||
for (int i = 0; i < mat.rows; ++i)
|
||||
{
|
||||
cv::Mat row(1, static_cast<int>(mat.cols * mat.elemSize()), CV_8U, (void*)mat.ptr(i));
|
||||
rng.fill(row, cv::RNG::UNIFORM, cv::Scalar(0), cv::Scalar(255));
|
||||
}
|
||||
|
||||
sc = cv::Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));
|
||||
}
|
||||
};
|
||||
|
||||
TEST_P(BitwiseScalar, Or)
|
||||
{
|
||||
cv::Mat dst_gold;
|
||||
cv::bitwise_or(mat, sc, dst_gold);
|
||||
|
||||
cv::Mat dst;
|
||||
|
||||
cv::gpu::GpuMat dev_dst;
|
||||
|
||||
cv::gpu::bitwise_or(loadMat(mat), sc, dev_dst);
|
||||
|
||||
dev_dst.download(dst);
|
||||
|
||||
EXPECT_MAT_NEAR(dst_gold, dst, 0.0);
|
||||
}
|
||||
|
||||
TEST_P(BitwiseScalar, And)
|
||||
{
|
||||
cv::Mat dst_gold;
|
||||
cv::bitwise_and(mat, sc, dst_gold);
|
||||
|
||||
cv::Mat dst;
|
||||
|
||||
cv::gpu::GpuMat dev_dst;
|
||||
|
||||
cv::gpu::bitwise_and(loadMat(mat), sc, dev_dst);
|
||||
|
||||
dev_dst.download(dst);
|
||||
|
||||
EXPECT_MAT_NEAR(dst_gold, dst, 0.0);
|
||||
}
|
||||
|
||||
TEST_P(BitwiseScalar, Xor)
|
||||
{
|
||||
cv::Mat dst_gold;
|
||||
cv::bitwise_xor(mat, sc, dst_gold);
|
||||
|
||||
cv::Mat dst;
|
||||
|
||||
cv::gpu::GpuMat dev_dst;
|
||||
|
||||
cv::gpu::bitwise_xor(loadMat(mat), sc, dev_dst);
|
||||
|
||||
dev_dst.download(dst);
|
||||
|
||||
EXPECT_MAT_NEAR(dst_gold, dst, 0.0);
|
||||
}
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(Arithm, BitwiseScalar, Combine(
|
||||
ALL_DEVICES,
|
||||
Values(CV_8UC1, CV_8UC3, CV_8UC4, CV_16UC1, CV_16UC3, CV_16UC4, CV_32SC1, CV_32SC3, CV_32SC4)));
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// addWeighted
|
||||
|
||||
|
||||
@@ -2377,6 +2377,49 @@ INSTANTIATE_TEST_CASE_P(ImgProc, CvtColor, Combine(
|
||||
Values(CV_8U, CV_16U, CV_32F),
|
||||
USE_ROI));
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// swapChannels
|
||||
|
||||
PARAM_TEST_CASE(SwapChannels, cv::gpu::DeviceInfo, UseRoi)
|
||||
{
|
||||
cv::gpu::DeviceInfo devInfo;
|
||||
bool useRoi;
|
||||
|
||||
cv::Mat img;
|
||||
|
||||
cv::Mat dst_gold;
|
||||
|
||||
virtual void SetUp()
|
||||
{
|
||||
devInfo = GET_PARAM(0);
|
||||
useRoi = GET_PARAM(1);
|
||||
|
||||
cv::gpu::setDevice(devInfo.deviceID());
|
||||
|
||||
cv::Mat imgBase = readImage("stereobm/aloe-L.png");
|
||||
ASSERT_FALSE(imgBase.empty());
|
||||
|
||||
cv::cvtColor(imgBase, img, cv::COLOR_BGR2BGRA);
|
||||
|
||||
cv::cvtColor(img, dst_gold, cv::COLOR_BGRA2RGBA);
|
||||
}
|
||||
};
|
||||
|
||||
TEST_P(SwapChannels, Accuracy)
|
||||
{
|
||||
cv::gpu::GpuMat gpuImage = loadMat(img, useRoi);
|
||||
|
||||
const int dstOrder[] = {2, 1, 0, 3};
|
||||
cv::gpu::swapChannels(gpuImage, dstOrder);
|
||||
|
||||
cv::Mat dst;
|
||||
gpuImage.download(dst);
|
||||
|
||||
EXPECT_MAT_NEAR(dst_gold, dst, 0.0);
|
||||
}
|
||||
|
||||
INSTANTIATE_TEST_CASE_P(ImgProc, SwapChannels, Combine(ALL_DEVICES, USE_ROI));
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// histograms
|
||||
|
||||
|
||||
@@ -136,7 +136,7 @@ int main(int argc, char** argv)
|
||||
|
||||
#else // HAVE_CUDA
|
||||
|
||||
int main(int argc, char** argv)
|
||||
int main()
|
||||
{
|
||||
printf("OpenCV was built without CUDA support\n");
|
||||
return 0;
|
||||
|
||||
Reference in New Issue
Block a user