Mat行复制

来源:互联网 发布:php网店系统源码 编辑:程序博客网 时间:2024/05/17 13:11

1.Mat::row()函数

作用:截取特定行数矩阵,并创建矩阵头部信息(header)。
复杂度:O(1),原因是新的矩阵数据与源矩阵共享,并不会创建新的存储空间。所以导致的问题是下方代码并不会执行:

for (int i = A.rows; i > 100; i--) { 
A.row(i) = A.row(i-100);//图像下移100个像素
}

      这是因为A.rows(i)创建的是一个临时头部信息,O(1)复杂度意味着没有信息被复制,没有新的存储空间建立。所以=并不会有效。正确的方法是使用:
A.row(i).copyTo(b.row(i-100));

但是,矩阵之间=是没有问题的,测试代码如下:
Mat res_img; 
res_img = bg2_img;
bg2_img.release();
pic_look(res_img);//自定义查看图片方法

这段代码可以正常查看res_img图像,也就是bg2_img的图像。
注意
  • 1,copyTo(outputarray m, inpuyarray mask)函数的mask参数是可有可无的,表示mask矩阵中非0的位置就copy,否则不copy。mask矩阵的类型一定是 CV_8UC1或者CV_8UC3。
  • 2,第一个参数m可以仅仅创建了头部,并没有分配存储空间。因为copyTo()函数在调用之前,先调用m.create(this->size(), this->type())
  • 0 0
    原创粉丝点击