More refactoring over Blob. Fix warnings and eliminated zlib dependency in cnpy.hpull/265/head
parent
0ebe30a362
commit
d02bced118
12 changed files with 392 additions and 260 deletions
@ -0,0 +1,260 @@ |
|||||||
|
#ifndef __OPENCV_DNN_DNN_BLOB_INL_HPP__ |
||||||
|
#define __OPENCV_DNN_DNN_BLOB_INL_HPP__ |
||||||
|
#include "blob.hpp" |
||||||
|
|
||||||
|
namespace cv |
||||||
|
{ |
||||||
|
namespace dnn |
||||||
|
{ |
||||||
|
|
||||||
|
inline BlobShape::BlobShape(int ndims, int fill) : sz( (size_t)std::max(ndims, 1) ) |
||||||
|
{ |
||||||
|
for (int i = 0; i < ndims; i++) |
||||||
|
sz[i] = fill; |
||||||
|
} |
||||||
|
|
||||||
|
inline BlobShape::BlobShape(int ndims, const int *sizes) : sz( (size_t)std::max(ndims, 1) ) |
||||||
|
{ |
||||||
|
CV_Assert(ndims > 0); |
||||||
|
for (int i = 0; i < ndims; i++) |
||||||
|
sz[i] = sizes[i]; |
||||||
|
} |
||||||
|
|
||||||
|
inline BlobShape::BlobShape(int num, int cn, int rows, int cols) : sz(4) |
||||||
|
{ |
||||||
|
sz[0] = num; |
||||||
|
sz[1] = cn; |
||||||
|
sz[2] = rows; |
||||||
|
sz[3] = cols; |
||||||
|
} |
||||||
|
|
||||||
|
inline BlobShape::BlobShape(const std::vector<int> &sizes) : sz( sizes.size() ) |
||||||
|
{ |
||||||
|
CV_Assert(sizes.size() > 0); |
||||||
|
for (int i = 0; i < (int)sizes.size(); i++) |
||||||
|
sz[i] = sizes[i]; |
||||||
|
} |
||||||
|
|
||||||
|
template<int n> |
||||||
|
inline BlobShape::BlobShape(const Vec<int, n> &shape) : sz(n) |
||||||
|
{ |
||||||
|
for (int i = 0; i < n; i++) |
||||||
|
sz[i] = shape[i]; |
||||||
|
} |
||||||
|
|
||||||
|
inline int BlobShape::dims() const |
||||||
|
{ |
||||||
|
return (int)sz.size(); |
||||||
|
} |
||||||
|
|
||||||
|
inline int BlobShape::xsize(int axis) const |
||||||
|
{ |
||||||
|
if (axis < -dims() || axis >= dims()) |
||||||
|
return 1; |
||||||
|
|
||||||
|
return sz[(axis < 0) ? axis + dims() : axis]; |
||||||
|
} |
||||||
|
|
||||||
|
inline int BlobShape::size(int axis) const |
||||||
|
{ |
||||||
|
CV_Assert(-dims() <= axis && axis < dims()); |
||||||
|
return sz[(axis < 0) ? axis + dims() : axis]; |
||||||
|
} |
||||||
|
|
||||||
|
inline int &BlobShape::size(int axis) |
||||||
|
{ |
||||||
|
CV_Assert(-dims() <= axis && axis < dims()); |
||||||
|
return sz[(axis < 0) ? axis + dims() : axis]; |
||||||
|
} |
||||||
|
|
||||||
|
inline int BlobShape::operator[] (int axis) const |
||||||
|
{ |
||||||
|
CV_Assert(-dims() <= axis && axis < dims()); |
||||||
|
return sz[(axis < 0) ? axis + dims() : axis]; |
||||||
|
} |
||||||
|
|
||||||
|
inline int &BlobShape::operator[] (int axis) |
||||||
|
{ |
||||||
|
CV_Assert(-dims() <= axis && axis < dims()); |
||||||
|
return sz[(axis < 0) ? axis + dims() : axis]; |
||||||
|
} |
||||||
|
|
||||||
|
inline const int *BlobShape::ptr() const |
||||||
|
{ |
||||||
|
return sz; |
||||||
|
} |
||||||
|
|
||||||
|
inline bool BlobShape::equal(const BlobShape &other) const |
||||||
|
{ |
||||||
|
if (this->dims() != other.dims()) |
||||||
|
return false; |
||||||
|
|
||||||
|
for (int i = 0; i < other.dims(); i++) |
||||||
|
{ |
||||||
|
if (sz[i] != other.sz[i]) |
||||||
|
return false; |
||||||
|
} |
||||||
|
|
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
inline bool operator== (const BlobShape &l, const BlobShape &r) |
||||||
|
{ |
||||||
|
return l.equal(r); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
inline int Blob::canonicalAxis(int axis) const |
||||||
|
{ |
||||||
|
CV_Assert(-dims() <= axis && axis < dims()); |
||||||
|
|
||||||
|
if (axis < 0) |
||||||
|
{ |
||||||
|
return dims() + axis; |
||||||
|
} |
||||||
|
return axis; |
||||||
|
} |
||||||
|
|
||||||
|
inline int Blob::dims() const |
||||||
|
{ |
||||||
|
return m.dims; |
||||||
|
} |
||||||
|
|
||||||
|
inline int Blob::xsize(int axis) const |
||||||
|
{ |
||||||
|
if (axis < -dims() || axis >= dims()) |
||||||
|
return 1; |
||||||
|
|
||||||
|
return sizes()[(axis < 0) ? axis + dims() : axis]; |
||||||
|
} |
||||||
|
|
||||||
|
inline int Blob::size(int axis) const |
||||||
|
{ |
||||||
|
CV_Assert(-dims() <= axis && axis < dims()); |
||||||
|
return sizes()[(axis < 0) ? axis + dims() : axis]; |
||||||
|
} |
||||||
|
|
||||||
|
inline size_t Blob::total(int startAxis, int endAxis) const |
||||||
|
{ |
||||||
|
if (startAxis < 0) |
||||||
|
startAxis += dims(); |
||||||
|
|
||||||
|
if (endAxis == -1) |
||||||
|
endAxis = dims(); |
||||||
|
|
||||||
|
CV_Assert(0 <= startAxis && startAxis <= endAxis && endAxis <= dims()); |
||||||
|
|
||||||
|
size_t size = 1; //assume that blob isn't empty
|
||||||
|
for (int i = startAxis; i < endAxis; i++) |
||||||
|
size *= (size_t)sizes()[i]; |
||||||
|
|
||||||
|
return size; |
||||||
|
} |
||||||
|
|
||||||
|
inline int Blob::offset(int n, int cn, int row, int col) const |
||||||
|
{ |
||||||
|
CV_DbgAssert(0 <= n && n < num() && 0 <= cn && cn < channels() && 0 <= row && row < rows() && 0 <= col && col < cols()); |
||||||
|
return ((n*channels() + cn)*rows() + row)*cols() + col; |
||||||
|
} |
||||||
|
|
||||||
|
inline float *Blob::ptrf(int n, int cn, int row, int col) |
||||||
|
{ |
||||||
|
CV_Assert(type() == CV_32F); |
||||||
|
return (float*)m.data + offset(n, cn, row, col); |
||||||
|
} |
||||||
|
|
||||||
|
inline uchar *Blob::ptrRaw(int n, int cn, int row, int col) |
||||||
|
{ |
||||||
|
return m.data + m.elemSize() * offset(n, cn, row, col); |
||||||
|
} |
||||||
|
|
||||||
|
template<typename TFloat> |
||||||
|
inline TFloat* Blob::ptr(int n, int cn, int row, int col) |
||||||
|
{ |
||||||
|
CV_Assert(type() == cv::DataDepth<TFloat>::value); |
||||||
|
return (TFloat*) ptrRaw(n, cn, row, col); |
||||||
|
} |
||||||
|
|
||||||
|
inline BlobShape Blob::shape() const |
||||||
|
{ |
||||||
|
return BlobShape(dims(), sizes()); |
||||||
|
} |
||||||
|
|
||||||
|
inline bool Blob::equalShape(const Blob &other) const |
||||||
|
{ |
||||||
|
if (this->dims() != other.dims()) |
||||||
|
return false; |
||||||
|
|
||||||
|
for (int i = 0; i < dims(); i++) |
||||||
|
{ |
||||||
|
if (this->sizes()[i] != other.sizes()[i]) |
||||||
|
return false; |
||||||
|
} |
||||||
|
return true; |
||||||
|
} |
||||||
|
|
||||||
|
inline Mat& Blob::getMatRef() |
||||||
|
{ |
||||||
|
return m; |
||||||
|
} |
||||||
|
|
||||||
|
inline const Mat& Blob::getMatRef() const |
||||||
|
{ |
||||||
|
return m; |
||||||
|
} |
||||||
|
|
||||||
|
inline Mat Blob::getMat(int n, int cn) |
||||||
|
{ |
||||||
|
return Mat(rows(), cols(), m.type(), this->ptrRaw(n, cn)); |
||||||
|
} |
||||||
|
|
||||||
|
inline int Blob::cols() const |
||||||
|
{ |
||||||
|
return xsize(3); |
||||||
|
} |
||||||
|
|
||||||
|
inline int Blob::rows() const |
||||||
|
{ |
||||||
|
return xsize(2); |
||||||
|
} |
||||||
|
|
||||||
|
inline int Blob::channels() const |
||||||
|
{ |
||||||
|
return xsize(1); |
||||||
|
} |
||||||
|
|
||||||
|
inline int Blob::num() const |
||||||
|
{ |
||||||
|
return xsize(0); |
||||||
|
} |
||||||
|
|
||||||
|
inline Size Blob::size2() const |
||||||
|
{ |
||||||
|
return Size(cols(), rows()); |
||||||
|
} |
||||||
|
|
||||||
|
inline int Blob::type() const |
||||||
|
{ |
||||||
|
return m.depth(); |
||||||
|
} |
||||||
|
|
||||||
|
inline bool Blob::isFloat() const |
||||||
|
{ |
||||||
|
return (type() == CV_32F); |
||||||
|
} |
||||||
|
|
||||||
|
inline bool Blob::isDouble() const |
||||||
|
{ |
||||||
|
return (type() == CV_32F); |
||||||
|
} |
||||||
|
|
||||||
|
inline const int * Blob::sizes() const |
||||||
|
{ |
||||||
|
return &m.size[0]; |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
#endif |
Loading…
Reference in new issue