friend struct StreamAccessor;\r
};\r
\r
+ ////////////////////////////// Arithmetics ///////////////////////////////////\r
+\r
+ CV_EXPORTS void add(const GpuMat& src1, const GpuMat& src2, GpuMat& dst);\r
+\r
////////////////////////////// Image processing //////////////////////////////\r
// DST[x,y] = SRC[xmap[x,y],ymap[x,y]] with bilinear interpolation.\r
// xymap.type() == xymap.type() == CV_32FC1\r
--- /dev/null
+/*M///////////////////////////////////////////////////////////////////////////////////////\r
+//\r
+// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.\r
+//\r
+// By downloading, copying, installing or using the software you agree to this license.\r
+// If you do not agree to this license, do not download, install,\r
+// copy or use the software.\r
+//\r
+//\r
+// License Agreement\r
+// For Open Source Computer Vision Library\r
+//\r
+// Copyright (C) 2000-2008, Intel Corporation, all rights reserved.\r
+// Copyright (C) 2009, Willow Garage Inc., all rights reserved.\r
+// Third party copyrights are property of their respective owners.\r
+//\r
+// Redistribution and use in source and binary forms, with or without modification,\r
+// are permitted provided that the following conditions are met:\r
+//\r
+// * Redistribution's of source code must retain the above copyright notice,\r
+// this list of conditions and the following disclaimer.\r
+//\r
+// * Redistribution's in binary form must reproduce the above copyright notice,\r
+// this list of conditions and the following disclaimer in the documentation\r
+// and/or other GpuMaterials provided with the distribution.\r
+//\r
+// * The name of the copyright holders may not be used to endorse or promote products\r
+// derived from this software without specific prior written permission.\r
+//\r
+// This software is provided by the copyright holders and contributors "as is" and\r
+// any express or bpied warranties, including, but not limited to, the bpied\r
+// warranties of merchantability and fitness for a particular purpose are disclaimed.\r
+// In no event shall the Intel Corporation or contributors be liable for any direct,\r
+// indirect, incidental, special, exemplary, or consequential damages\r
+// (including, but not limited to, procurement of substitute goods or services;\r
+// loss of use, data, or profits; or business interruption) however caused\r
+// and on any theory of liability, whether in contract, strict liability,\r
+// or tort (including negligence or otherwise) arising in any way out of\r
+// the use of this software, even if advised of the possibility of such damage.\r
+//\r
+//M*/\r
+\r
+#include "precomp.hpp"\r
+#include "npp.h" //TODO: move to the precomp.hpp\r
+\r
+using namespace cv;\r
+using namespace cv::gpu;\r
+using namespace std;\r
+\r
+#if !defined (HAVE_CUDA)\r
+\r
+void cv::gpu::add(const GpuMat& src1, const GpuMat& src2, GpuMat& dst) { throw_nogpu(); }\r
+\r
+#else /* !defined (HAVE_CUDA) */\r
+\r
+void cv::gpu::add(const GpuMat& src1, const GpuMat& src2, GpuMat& dst)\r
+{\r
+ CV_Assert(src1.size() == src2.size() && src1.type() == src2.type());\r
+\r
+ dst.create( src1.size(), src1.type() );\r
+ \r
+ CV_DbgAssert(src1.depth() == CV_8U || src1.depth() == CV_32F);\r
+ CV_DbgAssert(src1.channels() == 1 || src1.channels() == 4);\r
+\r
+ NppiSize sz;\r
+ sz.width = src1.cols;\r
+ sz.height = src1.rows;\r
+\r
+ if (src1.depth() == CV_8U)\r
+ {\r
+ nppiAdd_8u_C1RSfs((const Npp8u*)src1.ptr<char>(), src1.step, \r
+ (const Npp8u*)src2.ptr<char>(), src2.step, \r
+ (Npp8u*)dst.ptr<char>(), dst.step, sz, 0);\r
+ }\r
+ //TODO: implement other depths\r
+}\r
+\r
+#endif /* !defined (HAVE_CUDA) */
\ No newline at end of file
--- /dev/null
+/*M///////////////////////////////////////////////////////////////////////////////////////
+//
+// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
+//
+// By downloading, copying, installing or using the software you agree to this license.
+// If you do not agree to this license, do not download, install,
+// copy or use the software.
+//
+//
+// Intel License Agreement
+// For Open Source Computer Vision Library
+//
+// Copyright (C) 2000, Intel Corporation, all rights reserved.
+// Third party copyrights are property of their respective owners.
+//
+// Redistribution and use in source and binary forms, with or without modification,
+// are permitted provided that the following conditions are met:
+//
+// * Redistribution's of source code must retain the above copyright notice,
+// this list of conditions and the following disclaimer.
+//
+// * Redistribution's in binary form must reproduce the above copyright notice,
+// this list of conditions and the following disclaimer in the documentation
+// and/or other materials provided with the distribution.
+//
+// * The name of Intel Corporation may not be used to endorse or promote products
+// derived from this software without specific prior written permission.
+//
+// This software is provided by the copyright holders and contributors "as is" and
+// any express or implied warranties, including, but not limited to, the implied
+// warranties of merchantability and fitness for a particular purpose are disclaimed.
+// In no event shall the Intel Corporation or contributors be liable for any direct,
+// indirect, incidental, special, exemplary, or consequential damages
+// (including, but not limited to, procurement of substitute goods or services;
+// loss of use, data, or profits; or business interruption) however caused
+// and on any theory of liability, whether in contract, strict liability,
+// or tort (including negligence or otherwise) arising in any way out of
+// the use of this software, even if advised of the possibility of such damage.
+//
+//M*/
+
+#include "gputest.hpp"
+#include "highgui.h"
+
+using namespace cv;
+using namespace std;
+using namespace gpu;
+
+class CV_GpuNppImageAdditionTest : public CvTest
+{
+public:
+ CV_GpuNppImageAdditionTest();
+ ~CV_GpuNppImageAdditionTest();
+
+protected:
+ void run(int);
+};
+
+CV_GpuNppImageAdditionTest::CV_GpuNppImageAdditionTest(): CvTest( "GPU-NppImageAddition", "add" )
+{
+}
+
+CV_GpuNppImageAdditionTest::~CV_GpuNppImageAdditionTest() {}
+
+void CV_GpuNppImageAdditionTest::run( int )
+{
+ cv::Mat img_l = cv::imread(std::string(ts->get_data_path()) + "stereobm/aloe-L.png", 0);
+ cv::Mat img_r = cv::imread(std::string(ts->get_data_path()) + "stereobm/aloe-R.png", 0);
+
+ if (img_l.empty() || img_r.empty())
+ {
+ ts->set_failed_test_info(CvTS::FAIL_MISSING_TEST_DATA);
+ return;
+ }
+
+ cv::Mat cpuAdd;
+ cv::add(img_l, img_r, cpuAdd);
+
+ GpuMat gpuL(img_l);
+ GpuMat gpuR(img_r);
+ GpuMat gpuAdd;
+ cv::gpu::add(gpuL, gpuR, gpuAdd);
+
+ //namedWindow("gpu");
+ //imshow("gpu", gpuAdd);
+ //namedWindow("cpu");
+ //imshow("cpu", cpuAdd);
+ //waitKey(1000);
+
+ double ret = norm(cpuAdd, gpuAdd);
+
+ if (ret < 1.0)
+ ts->set_failed_test_info(CvTS::OK);
+ else
+ {
+ ts->printf(CvTS::CONSOLE, "\nNorm: %f\n", ret);
+ ts->set_failed_test_info(CvTS::FAIL_GENERIC);
+ }
+}
+
+CV_GpuNppImageAdditionTest CV_GpuNppImageAddition_test;
\ No newline at end of file