matlab的边界填充(padarray)opencv的边界填充(cvCopyMakeBorder)

本文详细解析了OpenCV中的cvCopyMakeBorder函数与MATLAB中padarray函数的使用方法及边界填充效果对比。介绍了cvCopyMakeBorder的参数设置,包括行列扩展、边界类型如复制、反射等,并通过实例展示了不同参数下的边界填充效果。

matlab的边界填充(padarray)和opencv的边界填充(cvCopyMakeBorder)
首先,先说一下opencv中的cvCopyMakeBorder()函数:
cvCopyMakeBorder(src,dst,cvPoint(m,n),bodertype,value)
cvPoint(m,n):的意思是以src(即原矩阵)的左上角点为坐标原点,dst(即目标矩阵)相对于src的左上角点向外扩展的列行数。注意m代表列数,n代表行数。这里的m列和n行虽然是指相对于左上角的行列数,但是,扩充时上下都扩充n行,左右都扩充n列,所以整个目标矩阵的大小就变成cvSize(src->height+2m,src->width+2n)。这里的大小应为最小,如果目标矩阵的大小大于它,则大于的的部分都加到右下的行列上。
Bodertype:是指扩充边界的方式,包括的方式有如下几种:常量、镜面反射、复制、反射101。

  • BORDER_REPLICATE: aaaaaa|abcdefgh|hhhhhhh 复制
  • BORDER_REFLECT: fedcba|abcdefgh|hgfedcb 镜面反射
  • BORDER_REFLECT_101: gfedcb|abcdefgh|gfedcba 反射101。
  • BORDER_CONSTANT: iiiiii|abcdefgh|iiiiiii with some specified ‘i’ 常量
    举例说明
    测试程序:
    int p = 2;
    float mat[2][2] = { 1, 2, 3, 4 };
    CvMat matrix = cvMat(2, 2, CV_32F, &mat);
    CvMatdst = cvCreateMat(matrix.rows+2p, matrix.cols+2*p,CV_32FC1);
    cvCopyMakeBorder(&matrix, dst, cvPoint(p, p), IPL_BORDER_CONSTANT);//上下左右都向外扩充2行2列,
    测试结果如下:
    在这里插入图片描述
    改变为cvPoint(1,1)向外扩充一行一列,不改变目标矩阵的大小,其余行列则加在右下的行列上,结果如下:
    在这里插入图片描述
    上面的函数cvCopyMakeBorder是opencv的C语言接口函数,而opencv的C++接口函数是copyMakeBorder,函数定义为copyMakeBorder(src,dst,top,bottom,left,right,bodertype,value),没有了cvpoint(),但是很明了,就是上下左右扩充的行列数,读者自行实验。
    其次,opencv函数和matlab中的做一下对比,
    测试程序
    A=[1 2; 3 4];
    padarray(A(:, : , 1), [2 2], ‘both’)
    测试结果:
    在这里插入图片描述
    结论:opencv的边界扩充可以和matlab的边界扩充函数取得相同的效果。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

能量鸣新

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值