Merge pull request #8698 from cdcseacave:fix_Mat_release

This commit is contained in:
Vadim Pisarevsky 2017-05-23 10:44:12 +00:00
commit b59df66709
3 changed files with 23 additions and 4 deletions

View File

@ -2185,6 +2185,8 @@ public:
void create(Size _size);
//! equivalent to Mat::create(_ndims, _sizes, DatType<_Tp>::type)
void create(int _ndims, const int* _sizes);
//! equivalent to Mat::release()
void release();
//! cross-product
Mat_ cross(const Mat_& m) const;
//! data type conversion
@ -2676,11 +2678,11 @@ public:
/*!
@param [out] m - output matrix; if it does not have a proper size or type before the operation,
it is reallocated
@param [in] rtype desired output matrix type or, rather, the depth since the number of channels
@param [in] rtype - desired output matrix type or, rather, the depth since the number of channels
are the same as the input has; if rtype is negative, the output matrix will have the
same type as the input.
@param [in] alpha optional scale factor
@param [in] beta optional delta added to the scaled values
@param [in] alpha - optional scale factor
@param [in] beta - optional delta added to the scaled values
*/
void convertTo( Mat& m, int rtype, double alpha=1, double beta=0 ) const;

View File

@ -1625,6 +1625,15 @@ void Mat_<_Tp>::create(int _dims, const int* _sz)
Mat::create(_dims, _sz, DataType<_Tp>::type);
}
template<typename _Tp> inline
void Mat_<_Tp>::release()
{
Mat::release();
#ifdef _DEBUG
flags = (flags & ~CV_MAT_TYPE_MASK) | DataType<_Tp>::type;
#endif
}
template<typename _Tp> inline
Mat_<_Tp> Mat_<_Tp>::cross(const Mat_& m) const
{

View File

@ -1726,3 +1726,11 @@ TEST(Core_Mat_array, SplitMerge)
}
}
#endif
TEST(Mat, regression_8680)
{
Mat_<Point2i> mat(3,1);
ASSERT_EQ(mat.channels(), 2);
mat.release();
ASSERT_EQ(mat.channels(), 2);
}