mirror of
https://github.com/opencv/opencv.git
synced 2025-06-12 20:42:53 +08:00
got rid of Blob and BlobShape completely; use cv::Mat and std::vector<int> instead
This commit is contained in:
parent
fd93ae08b6
commit
dd54f7a22a
@ -270,6 +270,17 @@ std::ostream& operator << (std::ostream& out, const Rect_<_Tp>& rect)
|
|||||||
return out << "[" << rect.width << " x " << rect.height << " from (" << rect.x << ", " << rect.y << ")]";
|
return out << "[" << rect.width << " x " << rect.height << " from (" << rect.x << ", " << rect.y << ")]";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline std::ostream& operator << (std::ostream& out, const MatSize& msize)
|
||||||
|
{
|
||||||
|
int i, dims = msize.p[-1];
|
||||||
|
for( i = 0; i < dims; i++ )
|
||||||
|
{
|
||||||
|
out << msize.p[i];
|
||||||
|
if( i < dims-1 )
|
||||||
|
out << " x ";
|
||||||
|
}
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
#endif // OPENCV_NOSTL
|
#endif // OPENCV_NOSTL
|
||||||
} // cv
|
} // cv
|
||||||
|
@ -1215,6 +1215,9 @@ public:
|
|||||||
/** @overload */
|
/** @overload */
|
||||||
Mat reshape(int cn, int newndims, const int* newsz) const;
|
Mat reshape(int cn, int newndims, const int* newsz) const;
|
||||||
|
|
||||||
|
/** @overload */
|
||||||
|
Mat reshape(int cn, const std::vector<int>& newshape) 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
|
||||||
@ -1717,6 +1720,12 @@ public:
|
|||||||
*/
|
*/
|
||||||
size_t total() const;
|
size_t total() const;
|
||||||
|
|
||||||
|
/** @brief Returns the total number of array elements.
|
||||||
|
|
||||||
|
The method returns the number of elements within a certain sub-array slice with startDim <= dim < endDim
|
||||||
|
*/
|
||||||
|
size_t total(int startDim, int endDim=INT_MAX) const;
|
||||||
|
|
||||||
//! returns N if the matrix is 1-channel (N x ptdim) or ptdim-channel (1 x N) or (N x 1); negative number otherwise
|
//! returns N if the matrix is 1-channel (N x ptdim) or ptdim-channel (1 x N) or (N x 1); negative number otherwise
|
||||||
int checkVector(int elemChannels, int depth=-1, bool requireContinuous=true) const;
|
int checkVector(int elemChannels, int depth=-1, bool requireContinuous=true) const;
|
||||||
|
|
||||||
|
@ -807,6 +807,17 @@ size_t Mat::total() const
|
|||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline
|
||||||
|
size_t Mat::total(int startDim, int endDim) const
|
||||||
|
{
|
||||||
|
CV_Assert( 0 <= startDim && startDim <= endDim);
|
||||||
|
size_t p = 1;
|
||||||
|
int endDim_ = endDim <= dims ? endDim : dims;
|
||||||
|
for( int i = startDim; i < endDim_; i++ )
|
||||||
|
p *= size[i];
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
inline
|
inline
|
||||||
uchar* Mat::ptr(int y)
|
uchar* Mat::ptr(int y)
|
||||||
{
|
{
|
||||||
|
@ -1052,12 +1052,20 @@ Mat Mat::reshape(int new_cn, int new_rows) const
|
|||||||
int cn = channels();
|
int cn = channels();
|
||||||
Mat hdr = *this;
|
Mat hdr = *this;
|
||||||
|
|
||||||
if( dims > 2 && new_rows == 0 && new_cn != 0 && size[dims-1]*cn % new_cn == 0 )
|
if( dims > 2 )
|
||||||
{
|
{
|
||||||
hdr.flags = (hdr.flags & ~CV_MAT_CN_MASK) | ((new_cn-1) << CV_CN_SHIFT);
|
if( new_rows == 0 && new_cn != 0 && size[dims-1]*cn % new_cn == 0 )
|
||||||
hdr.step[dims-1] = CV_ELEM_SIZE(hdr.flags);
|
{
|
||||||
hdr.size[dims-1] = hdr.size[dims-1]*cn / new_cn;
|
hdr.flags = (hdr.flags & ~CV_MAT_CN_MASK) | ((new_cn-1) << CV_CN_SHIFT);
|
||||||
return hdr;
|
hdr.step[dims-1] = CV_ELEM_SIZE(hdr.flags);
|
||||||
|
hdr.size[dims-1] = hdr.size[dims-1]*cn / new_cn;
|
||||||
|
return hdr;
|
||||||
|
}
|
||||||
|
if( new_rows > 0 )
|
||||||
|
{
|
||||||
|
int sz[] = { new_rows, (int)(total()/new_rows) };
|
||||||
|
return reshape(new_cn, 2, sz);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CV_Assert( dims <= 2 );
|
CV_Assert( dims <= 2 );
|
||||||
@ -4482,6 +4490,18 @@ Mat Mat::reshape(int _cn, int _newndims, const int* _newsz) const
|
|||||||
return Mat();
|
return Mat();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Mat Mat::reshape(int _cn, const std::vector<int>& _newshape) const
|
||||||
|
{
|
||||||
|
if(_newshape.empty())
|
||||||
|
{
|
||||||
|
CV_Assert(empty());
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
return reshape(_cn, (int)_newshape.size(), &_newshape[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
NAryMatIterator::NAryMatIterator()
|
NAryMatIterator::NAryMatIterator()
|
||||||
: arrays(0), planes(0), ptrs(0), narrays(0), nplanes(0), size(0), iterdepth(0), idx(0)
|
: arrays(0), planes(0), ptrs(0), narrays(0), nplanes(0), size(0), iterdepth(0), idx(0)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user