给图像添加边界

OpenCV官网教程

原理

  • 一般在处理卷积操作的时候,遇到图像边界要么扩大图像,要么图像边界不做处理。对于增加图像边界通常有很多方法,这里介绍两种,使用的是OpenCV API cv::copyMakeBorder()
  1. BORDER_CONSTANT:给边界填充常量
  2. BORDER_REPLICATE:将原来的边界复制到扩大的边界

例程

#include 
#include 

using namespace cv;

Mat dst, src;
int top,bottom,left,right;
int bordertype = cv::BORDER_CONSTANT;
const char* window_name = "copyMakeBorder Demo";
RNG rng(123);


int main(void)
{
	src = imread("../res/beauty.jpg");
	if(src.empty())
	{
		std::cout << "can't load the specific image" << std::endl;
	}

	top = (int)(0.05*src.rows); //扩展大小是0.05rows
	bottom = top;
	left = (int)(0.05*src.cols);
   	right = left;

	for(;;)
	{
		Scalar value(rng.uniform(0,255),rng.uniform(0,255),rng.uniform(0,255));//生成随机数
		cv::copyMakeBorder(src,dst,top,bottom,left,right,bordertype,value);
		imshow(window_name,dst);

		char c = (char)waitKey(500);//延时500ms
		if(c == 27) //ESC
			break;
		else if(c == 'c') 
			bordertype = cv::BORDER_CONSTANT;
		else if(c == 'r')
			bordertype = cv::BORDER_REPLICATE;
		
	}

	return 0;
};

结果:
给图像添加边界_第1张图片


OpenCV API

void cv::copyMakeBorder
(
InputArray src,     // 输入图像
OutputArray dst,    //输出图像
int top,    //
int bottom,    //
int left,    //
int right,    //每个边需要往外扩大的像素点数
int borderType,    // 见下图
const Scalar & value = Scalar()     //在borderType== BORDER_CONSTANT的时候,边界值
)

给图像添加边界_第2张图片

你可能感兴趣的:(opencv)