作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

函数原型

void copyMakeBorder(InputArray src, OutputArray dst,int top, int bottom, int left, int right,int borderType, const Scalar& value = Scalar() );

参数说明

  1. InputArray类型的src,输入图像,如Mat类型。
  2. OutputArray类型的dst,输出图像。
  3. int类型的top,表示向上扩展多少像素。
  4. int类型的bottom,表示向下扩展多少像素。
  5. int类型的left,表示向左扩展多少像素。
  6. int类型的right,表示向右扩展多少像素。
  7. int类型的borderType,推断图像边缘像素的边界模式。
  8. const Scalar&类型的value,有默认值Scalar(),即0。

测试代码

#include<iostream>
#include<opencv2/opencv.hpp>
#include<ctime>
using namespace std;
using namespace cv;cv::Mat image_make_border(cv::Mat &src);int main(void)
{Mat test = imread("liu.jpg", 0);cv::Mat result=image_make_border(test);imshow("original", test);imshow("result", result/255);waitKey(0);system("pause");return 0;
}// 图像边界处理
cv::Mat image_make_border(cv::Mat &src)
{int w = cv::getOptimalDFTSize(src.cols); // 获取DFT变换的最佳宽度int h = cv::getOptimalDFTSize(src.rows); // 获取DFT变换的最佳高度cv::Mat padded;// 常量法扩充图像边界,常量 = 0cv::copyMakeBorder(src, padded, 0, h - src.rows, 0, w - src.cols, cv::BORDER_CONSTANT, cv::Scalar::all(0));padded.convertTo(padded, CV_32FC1);return padded;
}

测试效果

图1 REPLICATE扩充效果

图2 WRAP扩充效果

图3 REFLECT扩充效果

图4 REFLECT101扩充效果

上图展示了4种不同的图像扩展方案:CONSTANT就不多说了,常数扩展,第八个参数设置为255,那就扩展的数据全是255;图1是REPLICATE扩展,最边缘的数据是什么,那么下面那一列或者行都是这个数据,图中看出来就是一条条竖线;图2是WRAP扩展,把另一头的数据拿到下面来补上,有点类似于周期性的感觉;图3是REFLECT扩展,将图像下方数据镜像反转,对称式填充,从图中可以看出来;图4是REFLECT101,顾名思义,0不动,只对称1,和图3不一样的地方在于,它把最边缘的那一行数据作为轴线,不参与翻转,也就是从次边缘开始对称填充~

如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!

OpenCV-扩充图像边界cv::copyMakeBorder相关推荐

  1. 在OpenCV中图像边界扩展 copyMakeBorder 的实现

    原文:http://blog.csdn.net/viewcode/article/details/8287599 1. 边界处理的类型 2. OpenCV的实现 在图像处理中,经常需要空域或频域的滤波 ...

  2. opencv之图像边界填充-- copyMakeBorder

    函数原型 dst=cv.copyMakeBorder(src, top, bottom, left, right, borderType[, dst[, value]]) src-源图像 top,bo ...

  3. Ros下使用OpenCV对图像进行处理

    Ros中的图像信息是sensor_msgs/Image的格式,而OpenCV 中图像是cv:Mat格式.所以从Ros中获取的图像不能直接用OpenCV进行处理,需要进行格式转化.还好,Ros中提供了进 ...

  4. 边界外推和边界处理--cv::copyMakeBorder()和cv::borderInterpolate()

    OpenCV 边界外推和边界处理 一.边界外推 在图像处理的时候,我们会面临对边界的处理问题. 在OpenCV中的滤波操作,得到的输出图像与源图像的形状是一样的. 为了实现这种效果,OpenCV采用的 ...

  5. opencv图像边界的填充

    填充图像边界的两种方法: BORDER_CONSTANT: 使用常数填充边界 (i.e. 黑色或者 ) BORDER_REPLICATE: 复制原图中最临近的行或者列. 源码部分给出更加详细的解释. ...

  6. 【OpenCV 例程200篇】76. OpenCV 实现图像傅里叶变换

    [OpenCV 例程200篇]76. OpenCV 实现图像傅里叶变换 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更新中 ...

  7. 【OpenCV 例程200篇】54. OpenCV 实现图像二维卷积

    [OpenCV 例程200篇]54. OpenCV 实现图像二维卷积 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更新中 ...

  8. opencv 对图像进行卷积

    卷积 什么是二维卷积呢?看下面一张图就一目了然: 卷积就是循环对图像跟一个核逐个元素相乘再求和得到另外一副图像的操作,比如结果图中第一个元素5是怎么算的呢?原图中3×3的区域与3×3的核逐个元素相乘再 ...

  9. (十一)OpenCV实现图像频率域滤波

    1.基础 见<数字图像处理第四版>P137-P209 1.1傅里叶变换Fourier Transform Fourier Transform由法国的一位数学家和物理学家Jean-Bapti ...

最新文章

  1. 公有变量java_Java反射机制(只可以访问公有的方法或者变量)
  2. STM32H7的Cache和MPU
  3. T-SQL查询——数据集之间的运算
  4. P3768 简单的数学题(杜教筛)
  5. java年轻代频繁gc_年轻代频繁ParNew GC,导致http服务rt飙高
  6. 域domain user用户对本地NTFS磁盘的写入权限问题
  7. 阿里云成为MariaDB基金会白金会员 全球唯一入选云计算公司
  8. xilinx sdk对文本内容进行查找(find/replace)的快捷键ctrl+f
  9. .NET反编译工具:de4dot
  10. ps图像放大后变清晰和文字模糊变清晰
  11. 为什么电脑浏览器打不开网页但微信可以登陆
  12. ubuntu16.10+cuda8.0+cudnn+caffe+opencv3.2+anaconda2
  13. 打开终端如何自动进入conda环境
  14. 使用函数计算分段函数的值
  15. Traceback (most recent call last)
  16. 浙江大学 工程伦理 第四章 工程规范与责任
  17. 论文笔记(十七):Brax — A Differentiable Physics Engine for Large Scale Rigid Body Simulation
  18. JVM重要知识点整理和学习
  19. 基于Egret的OPPO小游戏接入
  20. Pursue a Post-graduate Degree

热门文章

  1. 自动化运维之ansible-安装部署与基础命令篇
  2. nginx开机启动脚本
  3. Visio的UML模板
  4. 支持向量机回归_机器学习系列17:支持向量机
  5. 关于互联网大厂裁员,引发企业危机处理与个人危机处理的思考
  6. 随机组卷功能,你值得拥有~~~
  7. mac php fpm 自动启动,mac系统,php-fpm加入开机启动项
  8. electron 改变窗体 大小_「Science子刊」约翰·霍普金斯大学创造灰尘大小设备,可协助药物在胃肠道停留24小时之久...
  9. 计算机科学已发展成为一门,计算机前沿技术论文
  10. php输出内容到页面,php实时输出内容