opencv 小结6——Mat类的成员函数

1.Mat::Create
创建新的阵列数据

void Mat::create(int rows,int cols,int type)
void Mat::create(Size size, int type)
void Mat::create(int ndims, const int* sizes, int type)`

ndims – 新数组的维数。
rows –新的行数。
cols – 新的列数。
size – 替代新矩阵大小规格:Size(cols, rows)。
sizes – 指定一个新的阵列形状的整数数组。
type – 新矩阵的类型。

2.Mat::resize
重新定义图片大小

void Mat::resize(size_t sz)
void Mat::resize(size_t sz, const Scalar& s)

sz –新的行数。
s –分配给新添加的元素的值。

3.Mat::adjustROI
调整子阵大小及其在父矩阵中的位置

 Mat& Mat::adjustROI(int dtop, int dbottom,int dleft, int dright)

dtop –顶部子阵边界向上的平移量。
dbottom –底部子阵边界向下的平移量。
dleft –左子阵边界向左的平移量。
dright –右子阵边界向右的平移量。

4.Mat::total
返回数组元素的总数

size_t Mat::total() const

5.Mat::isContinuous
判断矩阵是否连续

bool Mat::isContinuous() const

6.Mat::elemSize
返回矩阵元素大小 (以字节为单位)。

size_t Mat::elemSize() const

该方法返回以字节为单位的矩阵元素大小。例如,如果矩阵类型是 CV_16SC3,该方法返回3*sizeof(short)或 6。

7.Mat::elemSize
以字节为单位返回每个矩阵元素通道的大小。

size_t Mat::elemSize1() const

该方法返回以字节为单位的矩阵元素通道大小,也就是忽略通道的数量。例如,
如果矩阵类型是 CV_16SC3,该方法返回 sizeof(short) 或 2。

8.Mat::type
返回一个矩阵元素的类型。

int Mat::type() const

该方法返回一个矩阵的元素类型。这是兼容CvMat 类型系统,像 CV_16SC3标识符
或 16 位有符号的3 通道阵列,等等。

9.Mat::depth
返回一个矩阵元素的深度。

int Mat::depth() const

该方法返回矩阵元素深度(每个单独的通道类型)的标识符。例如,对于16位有符号的3通道数组,该方法返回CV_16S。矩阵类型的完整列表包含以下内容值:
• CV_8U-8 位无符号整数 (0…..255)
• CV_8S-8 位符号整数 (-128…..127)
• CV_16U-16 位无符号整数 (0……65535)
• CV_16S-16 位符号整数 (-32768…..32767)
• CV_32S-32 位符号整数 (-2147483648……2147483647)
• CV_32F-32 位浮点数 (-FLT_MAX ………FLT_MAX,INF,NAN)
• CV_64F-64 位浮点数(-DBL_MAX ……….DBL_MAX,INF,NAN)

10.Mat::channels
返回矩阵通道的数目。

int Mat::channels() const

11.Mat::step1
返回矩阵归一化迈出的一步。

size_t const Mat::step1()

该方法返回以矩阵的step除以Mat::elemSize1()。它对快速访问任意矩阵元素很有用。

12.Mat::size
返回一个矩阵大小。

Size Mat::size() const

该方法返回一个矩阵大小:Size(cols, rows)。矩阵超过 2 维时返回大小为(-1,-1)。

13.Mat::empty
如果数组有没有 elemens,则返回 true。

bool Mat::empty() const

如果 Mat::total() 是 0 或 Mat::data 为 NULL,则方法返回 true。因为pop_back() 和 resize()方法M.total()== 0,并不意味着M.data = =NULL。

14.Mat::ptr
返回指定矩阵行的指针。

uchar* Mat::ptr(int i=0)
const uchar* Mat::ptr(int i=0) const
template<typename _Tp> _Tp* Mat::ptr(inti=0)
template<typename _Tp> const _Tp*Mat::ptr(int i=0) const

参数:
i –一个基于0的行索引。

15.Mat::at
返回对指定数组元素的引用。

template<typename T> T& Mat::at(int i)const
template<typename T> const T&Mat::at(int i) const
template<typename T> T& Mat::at(int i,int j)
template<typename T> const T&Mat::at(int i, int j) const
template<typename T> T& Mat::at(Pointpt)
template<typename T> const T&Mat::at(Point pt) const
template<typename T> T& Mat::at(int i,int j, int k)
template<typename T> const T&Mat::at(int i, int j, int k) const
template<typename T> T& Mat::at(constint* idx)
template<typename T> const T&Mat::at(const int* idx) const

参数
i –索引 0 维度
j – 1 维度的索引
k – 沿 2 维度的索引
pt – Point(j,i) 作为指定元素的位置。
idx – Mat::dims 数组的索引。
该模板方法返回指定数组元素的引用。为了具有更高的性能,索引范围检查只在调试配置下执行。请注意使用具有单个索引 (i) 的变量可以访问的单行或单列的2 维的数组元素。也就是比方说,如果A是1 x N 浮点矩阵和B是M x 1的整数矩阵,您只需编写A.at(k+4) 和 B.at(2*i+1) 分别代替A.at(0,k+4)和
B.at(2*i+1,0)。

//下面的示例将初始化希尔伯特矩阵:

Mat H(100, 100, CV_64F);
for(inti=0; i<H.rows; i++)
for(intj=0; j<H.cols; j++)
H.at<double>(i,j)=1./(i+j+1);

16.Mat::begin
返回矩阵迭代器,并将其设置为第一矩阵元。

template<typename _Tp>MatIterator_<_Tp> Mat::begin()
template<typename _Tp>MatConstIterator_<_Tp> Mat::begin() const

该方法返回矩阵的只读或读写的迭代器。矩阵迭代器的使用和双向 STL 迭代器的使用是非常相似的。在下面的示例中,alpha融合函数是使用矩阵迭代器重写:

template<typename T>
void alphaBlendRGBA(const Mat& src1,const Mat& src2, Mat& dst)
{
    typedef Vec<T, 4> VT;
    const float alpha_scale =(float)std::numeric_limits<T>::max(),
    inv_scale = 1.f/alpha_scale;
    CV_Assert( src1.type() == src2.type()&&
    src1.type() == DataType<VT>::type&&
    src1.size() == src2.size());
    Size size = src1.size();
    dst.create(size, src1.type());
    MatConstIterator_<VT> it1 =src1.begin<VT>(), it1_end = src1.end<VT>();
    MatConstIterator_<VT> it2 =src2.begin<VT>();
    MatIterator_<VT> dst_it =dst.begin<VT>();
    for( ; it1 != it1_end; ++it1, ++it2,++dst_it )
    {
        VT pix1 = *it1, pix2 = *it2;
        float alpha = pix1[3]*inv_scale, beta =pix2[3]*inv_scale;
        *dst_it =VT(saturate_cast<T>(pix1[0]*alpha + pix2[0]*beta),
        saturate_cast<T>(pix1[1]*alpha + pix2[1]*beta),
        saturate_cast<T>(pix1[2]*alpha +pix2[2]*beta),
        saturate_cast<T>((1 -(1-alpha)*(1-beta))*alpha_scale));
    }
}

17.Mat::end
返回矩阵迭代器,并将其设置为 最后元素之后(after-last)的矩阵元。

template<typename _Tp>MatIterator_<_Tp> Mat::end()
template<typename _Tp>MatConstIterator_<_Tp> Mat::end() const

该方法返回矩阵只读或读写的迭代器,设置为紧随最后一个矩阵元素的点。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值