mirror of
https://github.com/opencv/opencv.git
synced 2025-06-13 13:13:26 +08:00
add API to reinterpret Mat type
This commit is contained in:
parent
1ca526dcdb
commit
603344fa54
@ -371,6 +371,7 @@ public:
|
|||||||
void release() const;
|
void release() const;
|
||||||
void clear() const;
|
void clear() const;
|
||||||
void setTo(const _InputArray& value, const _InputArray & mask = _InputArray()) const;
|
void setTo(const _InputArray& value, const _InputArray & mask = _InputArray()) const;
|
||||||
|
Mat reinterpret( int type ) const;
|
||||||
|
|
||||||
void assign(const UMat& u) const;
|
void assign(const UMat& u) const;
|
||||||
void assign(const Mat& m) const;
|
void assign(const Mat& m) const;
|
||||||
@ -1322,6 +1323,15 @@ public:
|
|||||||
*/
|
*/
|
||||||
Mat reshape(int cn, const std::vector<int>& newshape) const;
|
Mat reshape(int cn, const std::vector<int>& newshape) const;
|
||||||
|
|
||||||
|
/** @brief Reset the type of matrix.
|
||||||
|
|
||||||
|
The methods reset the data type of matrix. If the new type and the old type of the matrix
|
||||||
|
have the same element size, the current buffer can be reused. The method needs to consider whether the
|
||||||
|
current mat is a submatrix or has any references.
|
||||||
|
@param type New data type.
|
||||||
|
*/
|
||||||
|
Mat reinterpret( int type ) const;
|
||||||
|
|
||||||
/** @brief Transposes a matrix.
|
/** @brief Transposes a matrix.
|
||||||
|
|
||||||
The method performs matrix transposition by means of matrix expressions. It does not perform the
|
The method performs matrix transposition by means of matrix expressions. It does not perform the
|
||||||
|
@ -1261,6 +1261,16 @@ Mat Mat::reshape(int _cn, const std::vector<int>& _newshape) const
|
|||||||
return reshape(_cn, (int)_newshape.size(), &_newshape[0]);
|
return reshape(_cn, (int)_newshape.size(), &_newshape[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Mat Mat::reinterpret(int type) const
|
||||||
|
{
|
||||||
|
type = CV_MAT_TYPE(type);
|
||||||
|
CV_Assert(CV_ELEM_SIZE(this->type()) == CV_ELEM_SIZE(type));
|
||||||
|
Mat m = *this;
|
||||||
|
m.flags = (m.flags & ~CV_MAT_TYPE_MASK) | type;
|
||||||
|
m.updateContinuityFlag();
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
|
||||||
Mat Mat::diag(const Mat& d)
|
Mat Mat::diag(const Mat& d)
|
||||||
{
|
{
|
||||||
CV_Assert( d.cols == 1 || d.rows == 1 );
|
CV_Assert( d.cols == 1 || d.rows == 1 );
|
||||||
|
@ -1656,6 +1656,12 @@ void _OutputArray::create(int d, const int* sizes, int mtype, int i,
|
|||||||
CV_Error(Error::StsNotImplemented, "Unknown/unsupported array type");
|
CV_Error(Error::StsNotImplemented, "Unknown/unsupported array type");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Mat _OutputArray::reinterpret(int mtype) const
|
||||||
|
{
|
||||||
|
mtype = CV_MAT_TYPE(mtype);
|
||||||
|
return getMat().reinterpret(mtype);
|
||||||
|
}
|
||||||
|
|
||||||
void _OutputArray::createSameSize(const _InputArray& arr, int mtype) const
|
void _OutputArray::createSameSize(const _InputArray& arr, int mtype) const
|
||||||
{
|
{
|
||||||
int arrsz[CV_MAX_DIM], d = arr.sizend(arrsz);
|
int arrsz[CV_MAX_DIM], d = arr.sizend(arrsz);
|
||||||
|
@ -1303,6 +1303,42 @@ TEST(Core_Mat, reshape_ndims_4)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(Core_Mat, reinterpret_Mat_8UC3_8SC3)
|
||||||
|
{
|
||||||
|
cv::Mat A(8, 16, CV_8UC3, cv::Scalar(1, 2, 3));
|
||||||
|
cv::Mat B = A.reinterpret(CV_8SC3);
|
||||||
|
|
||||||
|
EXPECT_EQ(A.data, B.data);
|
||||||
|
EXPECT_EQ(B.type(), CV_8SC3);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(Core_Mat, reinterpret_Mat_8UC4_32FC1)
|
||||||
|
{
|
||||||
|
cv::Mat A(8, 16, CV_8UC4, cv::Scalar(1, 2, 3, 4));
|
||||||
|
cv::Mat B = A.reinterpret(CV_32FC1);
|
||||||
|
|
||||||
|
EXPECT_EQ(A.data, B.data);
|
||||||
|
EXPECT_EQ(B.type(), CV_32FC1);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(Core_Mat, reinterpret_OutputArray_8UC3_8SC3) {
|
||||||
|
cv::Mat A(8, 16, CV_8UC3, cv::Scalar(1, 2, 3));
|
||||||
|
cv::OutputArray C(A);
|
||||||
|
cv::Mat B = C.reinterpret(CV_8SC3);
|
||||||
|
|
||||||
|
EXPECT_EQ(A.data, B.data);
|
||||||
|
EXPECT_EQ(B.type(), CV_8SC3);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(Core_Mat, reinterpret_OutputArray_8UC4_32FC1) {
|
||||||
|
cv::Mat A(8, 16, CV_8UC4, cv::Scalar(1, 2, 3, 4));
|
||||||
|
cv::OutputArray C(A);
|
||||||
|
cv::Mat B = C.reinterpret(CV_32FC1);
|
||||||
|
|
||||||
|
EXPECT_EQ(A.data, B.data);
|
||||||
|
EXPECT_EQ(B.type(), CV_32FC1);
|
||||||
|
}
|
||||||
|
|
||||||
TEST(Core_Mat, push_back)
|
TEST(Core_Mat, push_back)
|
||||||
{
|
{
|
||||||
Mat a = (Mat_<float>(1,2) << 3.4884074f, 1.4159607f);
|
Mat a = (Mat_<float>(1,2) << 3.4884074f, 1.4159607f);
|
||||||
|
Loading…
Reference in New Issue
Block a user