OpenCV:copyMakeBorder()-拓展边界

1. 函数原型:

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

src:输入的数组。

dst:输出的拓展边界后的数组。

top:在src上边界向上拓展的行数。

bottom:在src下边界向下拓展的行数。

left:在src的左边界向左拓展的列数。

right:在src的右边界向右拓展的列数。

borderType:上一节中的边界拓展策略中的一个。

value:当你的边界策略使用的是BORDER_CONSTANT的时候,此处是指边界处填写的常数值。(

*BORDER_REPLICATE: aaaaaa | abcdefgh | hhhhhhh

* BORDER_REFLECT : fedcba | abcdefgh | hgfedcb

* BORDER_REFLECT_101 : gfedcb | abcdefgh | gfedcba

* BORDER_WRAP : cdefgh | abcdefgh | abcdefg

* BORDER_CONSTANT : iiiiii | abcdefgh | iiiiiii with some specified ’i’


源码在utils.cpp中;

2. 功能

扩充src边缘,将图像变大,便于处理边界,该函数调用了cv::borderInterpolate,

BORDER_REPLICATE:复制法,也就是复制最边缘像素。

BORDER_REFLECT_101:对称法,也就是以最边缘像素为轴,对称。

 

BORDER_CONSTANT:常量法。

常量法就是以一个常量像素值(由参数 value给定)填充扩充的边界值,这种方式在仿射变换,透视变换中非常常见

#include<opencv2/opencv.hpp>
using namespace cv;
 
int main(int arc, char** argv)
{   
	Mat src, dst;
	src = imread("2.jpg");
	namedWindow("input",CV_WINDOW_AUTOSIZE);
	imshow("input", src);
 
	RNG rng(1);
	int top = (int)(0.05*src.rows);
	int bottom = (int)(0.05*src.rows);
	int left = (int)(0.05*src.cols);
	int right = (int)(0.05*src.cols);
	int borderType = BORDER_DEFAULT;
	while (true) {
		int c = waitKey(500);
		if ((char)c == 27) {
			break;
		}else if ((char)c == 'c') {
			borderType = BORDER_CONSTANT;
		}else if ((char)c == 'r') {
			borderType = BORDER_REPLICATE;
		}else if ((char)c == 'w') {
			borderType = BORDER_WRAP;
		}	
		Scalar color = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));
		copyMakeBorder(src, dst, top, bottom, left, right, borderType, color);
		imshow("output", dst);
	}
	waitKey(0);
	return 0;
}

 

参考文章:

1. https://blog.csdn.net/qq_24946843/article/details/82429768

2. https://blog.csdn.net/zhangping1987/article/details/51141658

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 6
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值