-
填充图像边界的两种方法:
- BORDER_CONSTANT: 使用常数填充边界 (i.e. 黑色或者 )
- BORDER_REPLICATE: 复制原图中最临近的行或者列。
源码部分给出更加详细的解释。
源码
-
本程序做什么?
-
装载图像
-
由用户决定使用哪种填充方式。有两个选项:
- 常数边界: 所有新增边界像素使用一个常数,程序每0.5秒会产生一个随机数更新该常数值。
- 复制边界: 复制原图像的边界像素。
用户可以选择按 ‘c’ 键 (常数边界) 或者 ‘r’ 键 (复制边界)
-
当用户按 ‘ESC’ 键,程序退出。
-
-
下面是本教程的源码, 你也可以从 这里 下载
解释
-
首先申明程序中用到的变量:
尤其要注意变量 rng ,这是一个随机数生成器, 用来产生随机边界色彩。
-
装载原图像 src:
-
在简要说明了程序的使用方法后,创建一个显示窗口:
-
初始化边界宽度参数(top, bottom, left 和 right)。我们将它们设定为图像 src 大小的5%。
-
程序进入 while 循环。 如果用户按’c’键或者 ‘r’键, 变量 borderType 分别取值 BORDER_CONSTANT 或 BORDER_REPLICATE :
-
每个循环 (周期 0.5 秒), 变量 value 自动更新...
为一个由 RNG 类型变量 rng 产生的随机数。 随机数的范围在 之间。
-
最后调用函数 copyMakeBorder 填充边界像素:
接受参数:
- src: 原图像
- dst: 目标图像
- top, bottom, left, right: 各边界的宽度,此处定义为原图像尺寸的5%。
- borderType: 边界类型,此处可以选择常数边界或者复制边界。
- value: 如果 borderType 类型是 BORDER_CONSTANT, 该值用来填充边界像素。
-
显示输出图像
结果
-
在编译上面的代码之后, 我们可以运行结果,将图片路径输入。 结果应该为:
- 程序启动时边界类型为 BORDER_CONSTANT (0), 因此,一开始边界颜色任意变换。
- 如果用户按 ‘r’ 键, 边界将会变成原图像边缘的拷贝。
- 如果用户按 ‘c’ 键, 边界再次变为任意颜色。
- 如果用户按 ‘ESC’ 键,程序退出。
下面显示了几张截图演示了边界颜色如何改变,以及在边界类型为 BORDER_REPLICATE 时的情形: