Merge pull request #13267 from LaurentBerger:StitchPython
* Python wrapper for detail * hide pyrotationwrapper * copy code in pyopencv_rotationwarper.hpp * move ImageFeatures MatchInfo and CameraParams in core/misc/ * add python test for detail * move test_detail in test_stitching * rename
This commit is contained in:
committed by
Alexander Alekhin
parent
fd27d5ea00
commit
2fb409b286
@@ -197,6 +197,7 @@ typedef std::vector<size_t> vector_size_t;
|
||||
typedef std::vector<Point> vector_Point;
|
||||
typedef std::vector<Point2f> vector_Point2f;
|
||||
typedef std::vector<Point3f> vector_Point3f;
|
||||
typedef std::vector<Size> vector_Size;
|
||||
typedef std::vector<Vec2f> vector_Vec2f;
|
||||
typedef std::vector<Vec3f> vector_Vec3f;
|
||||
typedef std::vector<Vec4f> vector_Vec4f;
|
||||
@@ -1338,6 +1339,19 @@ template<> struct pyopencvVecConverter<Mat>
|
||||
}
|
||||
};
|
||||
|
||||
template<> struct pyopencvVecConverter<UMat>
|
||||
{
|
||||
static bool to(PyObject* obj, std::vector<UMat>& value, const ArgInfo info)
|
||||
{
|
||||
return pyopencv_to_generic_vec(obj, value, info);
|
||||
}
|
||||
|
||||
static PyObject* from(const std::vector<UMat>& value)
|
||||
{
|
||||
return pyopencv_from_generic_vec(value);
|
||||
}
|
||||
};
|
||||
|
||||
template<> struct pyopencvVecConverter<KeyPoint>
|
||||
{
|
||||
static bool to(PyObject* obj, std::vector<KeyPoint>& value, const ArgInfo info)
|
||||
@@ -1364,6 +1378,47 @@ template<> struct pyopencvVecConverter<DMatch>
|
||||
}
|
||||
};
|
||||
|
||||
template<> struct pyopencvVecConverter<detail::ImageFeatures>
|
||||
{
|
||||
static bool to(PyObject* obj, std::vector<detail::ImageFeatures>& value, const ArgInfo info)
|
||||
{
|
||||
return pyopencv_to_generic_vec(obj, value, info);
|
||||
}
|
||||
|
||||
static PyObject* from(const std::vector<detail::ImageFeatures>& value)
|
||||
{
|
||||
return pyopencv_from_generic_vec(value);
|
||||
}
|
||||
};
|
||||
|
||||
template<> struct pyopencvVecConverter<detail::MatchesInfo>
|
||||
{
|
||||
static bool to(PyObject* obj, std::vector<detail::MatchesInfo>& value, const ArgInfo info)
|
||||
{
|
||||
return pyopencv_to_generic_vec(obj, value, info);
|
||||
}
|
||||
|
||||
static PyObject* from(const std::vector<detail::MatchesInfo>& value)
|
||||
{
|
||||
return pyopencv_from_generic_vec(value);
|
||||
}
|
||||
};
|
||||
|
||||
template<> struct pyopencvVecConverter<detail::CameraParams>
|
||||
{
|
||||
static bool to(PyObject* obj, std::vector<detail::CameraParams>& value, const ArgInfo info)
|
||||
{
|
||||
return pyopencv_to_generic_vec(obj, value, info);
|
||||
}
|
||||
|
||||
static PyObject* from(const std::vector<detail::CameraParams>& value)
|
||||
{
|
||||
return pyopencv_from_generic_vec(value);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
template<> struct pyopencvVecConverter<String>
|
||||
{
|
||||
static bool to(PyObject* obj, std::vector<String>& value, const ArgInfo info)
|
||||
|
||||
@@ -19,5 +19,68 @@ class stitching_test(NewOpenCVTests):
|
||||
self.assertAlmostEqual(pano.shape[0], 685, delta=100, msg="rows: %r" % list(pano.shape))
|
||||
self.assertAlmostEqual(pano.shape[1], 1025, delta=100, msg="cols: %r" % list(pano.shape))
|
||||
|
||||
class stitching_detail_test(NewOpenCVTests):
|
||||
|
||||
def test_simple(self):
|
||||
img = self.get_sample('stitching/a1.png')
|
||||
finder= cv.ORB.create()
|
||||
imgFea = cv.detail.computeImageFeatures2(finder,img)
|
||||
self.assertIsNotNone(imgFea)
|
||||
|
||||
matcher = cv.detail_BestOf2NearestMatcher(False, 0.3)
|
||||
self.assertIsNotNone(matcher)
|
||||
matcher = cv.detail_AffineBestOf2NearestMatcher(False, False, 0.3)
|
||||
self.assertIsNotNone(matcher)
|
||||
matcher = cv.detail_BestOf2NearestRangeMatcher(2, False, 0.3)
|
||||
self.assertIsNotNone(matcher)
|
||||
estimator = cv.detail_AffineBasedEstimator()
|
||||
self.assertIsNotNone(estimator)
|
||||
estimator = cv.detail_HomographyBasedEstimator()
|
||||
self.assertIsNotNone(estimator)
|
||||
|
||||
adjuster = cv.detail_BundleAdjusterReproj()
|
||||
self.assertIsNotNone(adjuster)
|
||||
adjuster = cv.detail_BundleAdjusterRay()
|
||||
self.assertIsNotNone(adjuster)
|
||||
adjuster = cv.detail_BundleAdjusterAffinePartial()
|
||||
self.assertIsNotNone(adjuster)
|
||||
adjuster = cv.detail_NoBundleAdjuster()
|
||||
self.assertIsNotNone(adjuster)
|
||||
|
||||
compensator=cv.detail.ExposureCompensator_createDefault(cv.detail.ExposureCompensator_NO)
|
||||
self.assertIsNotNone(compensator)
|
||||
compensator=cv.detail.ExposureCompensator_createDefault(cv.detail.ExposureCompensator_GAIN)
|
||||
self.assertIsNotNone(compensator)
|
||||
compensator=cv.detail.ExposureCompensator_createDefault(cv.detail.ExposureCompensator_GAIN_BLOCKS)
|
||||
self.assertIsNotNone(compensator)
|
||||
|
||||
seam_finder = cv.detail.SeamFinder_createDefault(cv.detail.SeamFinder_NO)
|
||||
self.assertIsNotNone(seam_finder)
|
||||
seam_finder = cv.detail.SeamFinder_createDefault(cv.detail.SeamFinder_NO)
|
||||
self.assertIsNotNone(seam_finder)
|
||||
seam_finder = cv.detail.SeamFinder_createDefault(cv.detail.SeamFinder_VORONOI_SEAM)
|
||||
self.assertIsNotNone(seam_finder)
|
||||
|
||||
seam_finder = cv.detail_GraphCutSeamFinder("COST_COLOR")
|
||||
self.assertIsNotNone(seam_finder)
|
||||
seam_finder = cv.detail_GraphCutSeamFinder("COST_COLOR_GRAD")
|
||||
self.assertIsNotNone(seam_finder)
|
||||
seam_finder = cv.detail_DpSeamFinder("COLOR")
|
||||
self.assertIsNotNone(seam_finder)
|
||||
seam_finder = cv.detail_DpSeamFinder("COLOR_GRAD")
|
||||
self.assertIsNotNone(seam_finder)
|
||||
|
||||
blender = cv.detail.Blender_createDefault(cv.detail.Blender_NO)
|
||||
self.assertIsNotNone(blender)
|
||||
blender = cv.detail.Blender_createDefault(cv.detail.Blender_FEATHER)
|
||||
self.assertIsNotNone(blender)
|
||||
blender = cv.detail.Blender_createDefault(cv.detail.Blender_MULTI_BAND)
|
||||
self.assertIsNotNone(blender)
|
||||
|
||||
timelapser = cv.detail.Timelapser_createDefault(cv.detail.Timelapser_AS_IS);
|
||||
self.assertIsNotNone(timelapser)
|
||||
timelapser = cv.detail.Timelapser_createDefault(cv.detail.Timelapser_CROP);
|
||||
self.assertIsNotNone(timelapser)
|
||||
|
||||
if __name__ == '__main__':
|
||||
NewOpenCVTests.bootstrap()
|
||||
|
||||
Reference in New Issue
Block a user