Mat行复制

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值