mirror of
https://github.com/opencv/opencv.git
synced 2025-06-11 11:45:30 +08:00
Merge pull request #12054 from alalek:debug_bindings
This commit is contained in:
commit
c331a214d0
23
modules/core/include/opencv2/core/bindings_utils.hpp
Normal file
23
modules/core/include/opencv2/core/bindings_utils.hpp
Normal file
@ -0,0 +1,23 @@
|
||||
// This file is part of OpenCV project.
|
||||
// It is subject to the license terms in the LICENSE file found in the top-level directory
|
||||
// of this distribution and at http://opencv.org/license.html.
|
||||
|
||||
#ifndef OPENCV_CORE_BINDINGS_UTILS_HPP
|
||||
#define OPENCV_CORE_BINDINGS_UTILS_HPP
|
||||
|
||||
namespace cv { namespace utils {
|
||||
//! @addtogroup core_utils
|
||||
//! @{
|
||||
|
||||
CV_EXPORTS_W String dumpInputArray(InputArray argument);
|
||||
|
||||
CV_EXPORTS_W String dumpInputArrayOfArrays(InputArrayOfArrays argument);
|
||||
|
||||
CV_EXPORTS_W String dumpInputOutputArray(InputOutputArray argument);
|
||||
|
||||
CV_EXPORTS_W String dumpInputOutputArrayOfArrays(InputOutputArrayOfArrays argument);
|
||||
|
||||
//! @}
|
||||
}} // namespace
|
||||
|
||||
#endif // OPENCV_CORE_BINDINGS_UTILS_HPP
|
145
modules/core/src/bindings_utils.cpp
Normal file
145
modules/core/src/bindings_utils.cpp
Normal file
@ -0,0 +1,145 @@
|
||||
// This file is part of OpenCV project.
|
||||
// It is subject to the license terms in the LICENSE file found in the top-level directory
|
||||
// of this distribution and at http://opencv.org/license.html.
|
||||
|
||||
#include "precomp.hpp"
|
||||
#include "opencv2/core/bindings_utils.hpp"
|
||||
#include <sstream>
|
||||
|
||||
namespace cv { namespace utils {
|
||||
|
||||
String dumpInputArray(InputArray argument)
|
||||
{
|
||||
if (&argument == &noArray())
|
||||
return "InputArray: noArray()";
|
||||
std::ostringstream ss;
|
||||
ss << "InputArray:";
|
||||
try {
|
||||
do {
|
||||
ss << (argument.empty() ? " empty()=true" : " empty()=false");
|
||||
ss << cv::format(" kind=0x%08llx", (long long int)argument.kind());
|
||||
ss << cv::format(" flags=0x%08llx", (long long int)argument.getFlags());
|
||||
if (argument.getObj() == NULL)
|
||||
{
|
||||
ss << " obj=NULL";
|
||||
break; // done
|
||||
}
|
||||
ss << cv::format(" total(-1)=%lld", (long long int)argument.total(-1));
|
||||
ss << cv::format(" dims(-1)=%d", argument.dims(-1));
|
||||
Size size = argument.size(-1);
|
||||
ss << cv::format(" size(-1)=%dx%d", size.width, size.height);
|
||||
ss << " type(-1)=" << cv::typeToString(argument.type(-1));
|
||||
} while (0);
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
ss << " ERROR: exception occured, dump is non-complete"; // need to properly support different kinds
|
||||
}
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
CV_EXPORTS_W String dumpInputArrayOfArrays(InputArrayOfArrays argument)
|
||||
{
|
||||
if (&argument == &noArray())
|
||||
return "InputArrayOfArrays: noArray()";
|
||||
std::ostringstream ss;
|
||||
ss << "InputArrayOfArrays:";
|
||||
try {
|
||||
do {
|
||||
ss << (argument.empty() ? " empty()=true" : " empty()=false");
|
||||
ss << cv::format(" kind=0x%08llx", (long long int)argument.kind());
|
||||
ss << cv::format(" flags=0x%08llx", (long long int)argument.getFlags());
|
||||
if (argument.getObj() == NULL)
|
||||
{
|
||||
ss << " obj=NULL";
|
||||
break; // done
|
||||
}
|
||||
ss << cv::format(" total(-1)=%lld", (long long int)argument.total(-1));
|
||||
ss << cv::format(" dims(-1)=%d", argument.dims(-1));
|
||||
Size size = argument.size(-1);
|
||||
ss << cv::format(" size(-1)=%dx%d", size.width, size.height);
|
||||
if (argument.total(-1) > 0)
|
||||
{
|
||||
ss << " type(0)=" << cv::typeToString(argument.type(0));
|
||||
ss << cv::format(" dims(0)=%d", argument.dims(0));
|
||||
size = argument.size(0);
|
||||
ss << cv::format(" size(0)=%dx%d", size.width, size.height);
|
||||
ss << " type(0)=" << cv::typeToString(argument.type(0));
|
||||
}
|
||||
} while (0);
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
ss << " ERROR: exception occured, dump is non-complete"; // need to properly support different kinds
|
||||
}
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
CV_EXPORTS_W String dumpInputOutputArray(InputOutputArray argument)
|
||||
{
|
||||
if (&argument == &noArray())
|
||||
return "InputOutputArray: noArray()";
|
||||
std::ostringstream ss;
|
||||
ss << "InputOutputArray:";
|
||||
try {
|
||||
do {
|
||||
ss << (argument.empty() ? " empty()=true" : " empty()=false");
|
||||
ss << cv::format(" kind=0x%08llx", (long long int)argument.kind());
|
||||
ss << cv::format(" flags=0x%08llx", (long long int)argument.getFlags());
|
||||
if (argument.getObj() == NULL)
|
||||
{
|
||||
ss << " obj=NULL";
|
||||
break; // done
|
||||
}
|
||||
ss << cv::format(" total(-1)=%lld", (long long int)argument.total(-1));
|
||||
ss << cv::format(" dims(-1)=%d", argument.dims(-1));
|
||||
Size size = argument.size(-1);
|
||||
ss << cv::format(" size(-1)=%dx%d", size.width, size.height);
|
||||
ss << " type(-1)=" << cv::typeToString(argument.type(-1));
|
||||
} while (0);
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
ss << " ERROR: exception occured, dump is non-complete"; // need to properly support different kinds
|
||||
}
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
CV_EXPORTS_W String dumpInputOutputArrayOfArrays(InputOutputArrayOfArrays argument)
|
||||
{
|
||||
if (&argument == &noArray())
|
||||
return "InputOutputArrayOfArrays: noArray()";
|
||||
std::ostringstream ss;
|
||||
ss << "InputOutputArrayOfArrays:";
|
||||
try {
|
||||
do {
|
||||
ss << (argument.empty() ? " empty()=true" : " empty()=false");
|
||||
ss << cv::format(" kind=0x%08llx", (long long int)argument.kind());
|
||||
ss << cv::format(" flags=0x%08llx", (long long int)argument.getFlags());
|
||||
if (argument.getObj() == NULL)
|
||||
{
|
||||
ss << " obj=NULL";
|
||||
break; // done
|
||||
}
|
||||
ss << cv::format(" total(-1)=%lld", (long long int)argument.total(-1));
|
||||
ss << cv::format(" dims(-1)=%d", argument.dims(-1));
|
||||
Size size = argument.size(-1);
|
||||
ss << cv::format(" size(-1)=%dx%d", size.width, size.height);
|
||||
if (argument.total(-1) > 0)
|
||||
{
|
||||
ss << " type(0)=" << cv::typeToString(argument.type(0));
|
||||
ss << cv::format(" dims(0)=%d", argument.dims(0));
|
||||
size = argument.size(0);
|
||||
ss << cv::format(" size(0)=%dx%d", size.width, size.height);
|
||||
ss << " type(0)=" << cv::typeToString(argument.type(0));
|
||||
}
|
||||
} while (0);
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
ss << " ERROR: exception occured, dump is non-complete"; // need to properly support different kinds
|
||||
}
|
||||
return ss.str();
|
||||
}
|
||||
|
||||
}} // namespace
|
@ -46,5 +46,44 @@ class Bindings(NewOpenCVTests):
|
||||
pass
|
||||
|
||||
|
||||
class Arguments(NewOpenCVTests):
|
||||
|
||||
def test_InputArray(self):
|
||||
res1 = cv.utils.dumpInputArray(None)
|
||||
#self.assertEqual(res1, "InputArray: noArray()") # not supported
|
||||
self.assertEqual(res1, "InputArray: empty()=true kind=0x00010000 flags=0x01010000 total(-1)=0 dims(-1)=0 size(-1)=0x0 type(-1)=CV_8UC1")
|
||||
res2_1 = cv.utils.dumpInputArray((1, 2))
|
||||
self.assertEqual(res2_1, "InputArray: empty()=false kind=0x00010000 flags=0x01010000 total(-1)=2 dims(-1)=2 size(-1)=1x2 type(-1)=CV_64FC1")
|
||||
res2_2 = cv.utils.dumpInputArray(1.5) # Scalar(1.5, 1.5, 1.5, 1.5)
|
||||
self.assertEqual(res2_2, "InputArray: empty()=false kind=0x00010000 flags=0x01010000 total(-1)=4 dims(-1)=2 size(-1)=1x4 type(-1)=CV_64FC1")
|
||||
a = np.array([[1,2],[3,4],[5,6]])
|
||||
res3 = cv.utils.dumpInputArray(a) # 32SC1
|
||||
self.assertEqual(res3, "InputArray: empty()=false kind=0x00010000 flags=0x01010000 total(-1)=6 dims(-1)=2 size(-1)=2x3 type(-1)=CV_32SC1")
|
||||
a = np.array([[[1,2],[3,4],[5,6]]], dtype='f')
|
||||
res4 = cv.utils.dumpInputArray(a) # 32FC2
|
||||
self.assertEqual(res4, "InputArray: empty()=false kind=0x00010000 flags=0x01010000 total(-1)=3 dims(-1)=2 size(-1)=3x1 type(-1)=CV_32FC2")
|
||||
a = np.array([[[1,2]],[[3,4]],[[5,6]]], dtype=float)
|
||||
res5 = cv.utils.dumpInputArray(a) # 64FC2
|
||||
self.assertEqual(res5, "InputArray: empty()=false kind=0x00010000 flags=0x01010000 total(-1)=3 dims(-1)=2 size(-1)=1x3 type(-1)=CV_64FC2")
|
||||
|
||||
|
||||
def test_InputArrayOfArrays(self):
|
||||
res1 = cv.utils.dumpInputArrayOfArrays(None)
|
||||
#self.assertEqual(res1, "InputArray: noArray()") # not supported
|
||||
self.assertEqual(res1, "InputArrayOfArrays: empty()=true kind=0x00050000 flags=0x01050000 total(-1)=0 dims(-1)=1 size(-1)=0x0")
|
||||
res2_1 = cv.utils.dumpInputArrayOfArrays((1, 2)) # { Scalar:all(1), Scalar::all(2) }
|
||||
self.assertEqual(res2_1, "InputArrayOfArrays: empty()=false kind=0x00050000 flags=0x01050000 total(-1)=2 dims(-1)=1 size(-1)=2x1 type(0)=CV_64FC1 dims(0)=2 size(0)=1x4 type(0)=CV_64FC1")
|
||||
res2_2 = cv.utils.dumpInputArrayOfArrays([1.5])
|
||||
self.assertEqual(res2_2, "InputArrayOfArrays: empty()=false kind=0x00050000 flags=0x01050000 total(-1)=1 dims(-1)=1 size(-1)=1x1 type(0)=CV_64FC1 dims(0)=2 size(0)=1x4 type(0)=CV_64FC1")
|
||||
a = np.array([[1,2],[3,4],[5,6]])
|
||||
b = np.array([[1,2,3],[4,5,6],[7,8,9]])
|
||||
res3 = cv.utils.dumpInputArrayOfArrays([a, b])
|
||||
self.assertEqual(res3, "InputArrayOfArrays: empty()=false kind=0x00050000 flags=0x01050000 total(-1)=2 dims(-1)=1 size(-1)=2x1 type(0)=CV_32SC1 dims(0)=2 size(0)=2x3 type(0)=CV_32SC1")
|
||||
c = np.array([[[1,2],[3,4],[5,6]]], dtype='f')
|
||||
res4 = cv.utils.dumpInputArrayOfArrays([c, a, b])
|
||||
self.assertEqual(res4, "InputArrayOfArrays: empty()=false kind=0x00050000 flags=0x01050000 total(-1)=3 dims(-1)=1 size(-1)=3x1 type(0)=CV_32FC2 dims(0)=2 size(0)=3x1 type(0)=CV_32FC2")
|
||||
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
NewOpenCVTests.bootstrap()
|
||||
|
@ -26,7 +26,9 @@ class NewOpenCVTests(unittest.TestCase):
|
||||
# github repository url
|
||||
repoUrl = 'https://raw.github.com/opencv/opencv/master'
|
||||
|
||||
def get_sample(self, filename, iscolor = cv.IMREAD_COLOR):
|
||||
def get_sample(self, filename, iscolor = None):
|
||||
if iscolor is None:
|
||||
iscolor = cv.IMREAD_COLOR
|
||||
if not filename in self.image_cache:
|
||||
filedata = None
|
||||
if NewOpenCVTests.repoPath is not None:
|
||||
|
Loading…
Reference in New Issue
Block a user