copyMakeBorder函数

copyMakeBorder函数:

调用方式:

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


参数的理解:

InputArray src:输入图像

OutputArray dst:输出的图像

int top, int bottom, int left, int right:表示对边界每个方向添加的像素个数,就是边框的粗细程度

int borderType:表示边界的类型

有下面几种类型:

borderType:扩充边缘的类型,就是外插的类型,OpenCV中给出以下几种方式

  * BORDER_REPLICATE            重复:  就是对边界像素进行复制
 * BORDER_REFLECT               反射:对感兴趣的图像中的像素在两边进行复制例如:fedcba|abcdefgh|hgfedcb    反射
 * BORDER_REFLECT_101       反射101: 例子:gfedcb|abcdefgh|gfedcba
 * BORDER_WRAP                   外包装:cdefgh|abcdefgh|abcdefg
 * BORDER_CONSTANT           常量复制:例子:iiiiii|abcdefgh|iiiiiii

const Scalar& value=Scalar():表示如果边界的类型是 BORDER_CONSTANT  ,那么边界的颜色值;


opencv代码:


#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>

using namespace std;
using namespace cv;




int main()
{
	Mat image, result;
	//获得边界的类型
	int borderType = BORDER_REPLICATE;
	//输入字符
	int c;

	image = imread("D:6.jpg");
	if (!image.data)
	{
		printf("fail to load image\n");
		return -1;
	}
	//使用说明
	cout << "使用说明:" << endl;
	cout << "按键c设置边界为随机的颜色" << endl;
	cout << "按键r设置边界为原图的颜色" << endl;
	cout << "按键按键ESC退出程序" << endl;

	//颜色随机值
	Scalar value;
	//随机数种子
	RNG rng(12345);
	//初始化参数:边框的粗细
	int top = (int)(0.05*image.rows);
	int bottom = (int)(0.05*image.rows);
	int left = (int)(0.05*image.cols);
	int right = (int)(0.05*image.cols);

	result = image;
	//imshow("显示结果",result);

	while (true)
	{
		c = waitKey(500);
		if ((char)c == 27)
		{
			break;
		}
		else if ((char)c == 'c')
		{
			//用常数添加边框(255:白色)
			borderType = BORDER_CONSTANT;
		}
		else if ((char)c == 'r')
		{
			//复制原图像的边界像素
			borderType = BORDER_REPLICATE;
		}

		//设置随机颜色
		value = Scalar(rng.uniform(0, 255), rng.uniform(0, 255), rng.uniform(0, 255));
		//在图像周围形成边界:输入图像、输出图像(大小为源图像+边界)、上、下、左、右、边界类型、颜色
		copyMakeBorder(image, result, top, bottom, left, right, borderType, value);
		imshow("显示结果", result);
	}

}


实验结果:





  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: copyMakeBorder函数是OpenCV中的一个函数,用于将图像的边缘进行扩展或者填充。该函数可以在图像的边缘周围添加一个像素宽度的边框,也可以在边缘周围添加一个特定的像素值的边框。 该函数的语法如下: cv2.copyMakeBorder(src, top, bottom, left, right, borderType[, dst[, value]]) 其中,src表示输入的图像,top、bottom、left、right表示需要在图像边缘添加的像素宽度,borderType表示边框类型,dst表示输出的图像,value表示边框的像素值。 borderType可以取以下几种值: - cv2.BORDER_CONSTANT:添加一个常数值的边框。 - cv2.BORDER_REPLICATE:复制图像边缘的像素值。 - cv2.BORDER_REFLECT:通过镜像反射的方式填充边框。 - cv2.BORDER_WRAP:通过环绕的方式填充边框。 使用copyMakeBorder函数可以在图像边缘添加边框,从而使得图像更加美观,同时也可以在图像处理中起到一定的作用。 ### 回答2: copyMakeBorder函数是OpenCV中的一个图像处理函数,它可以在图像边界周围添加像素。这可以用于各种图像处理应用程序,例如在图像周围创建边框或在图像边缘填充零(黑)像素。本文将详细介绍copyMakeBorder函数以及如何使用它。 copyMakeBorder函数的语法如下: ```python cv2.copyMakeBorder(src, top, bottom, left, right, borderType[,dst[, value]]) ``` 其中,src是输入图像,top,bottom,left,right表示在图像的四个边界上要添加的像素数。borderType是指定添加像素的类型,包括cv2.BORDER_CONSTANT,cv2.BORDER_REFLECT,cv2.BORDER_WRAP和cv2.BORDER_REPLICATE。可选的dst表示为输出图像,如果没有指定,则函数会自动创建一个。value是用于cv2.BORDER_CONSTANT时指定添加像素的值。 下面给出一些常见的borderType类型的使用方法: 1. BORDER_CONSTANT : 添加的像素为常数(可选颜色),默认情况下为黑色 ```python img1 = cv2.copyMakeBorder(img, 10,10,10,10,cv2.BORDER_CONSTANT) ``` 2. BORDER_REPLICATE : 添加的像素为复制的最后像素 ```python img1 = cv2.copyMakeBorder(img,10,10,10,10,cv2.BORDER_REPLICATE) ``` 3. BORDER_WRAP : 添加的像素为环绕的像素 ```python img1 = cv2.copyMakeBorder(img,10,10,10,10,cv2.BORDER_WRAP) ``` 4. BORDER_REFLECT : 添加的像素为图像反转后的像素 ```python img1 = cv2.copyMakeBorder(img,10,10,10,10,cv2.BORDER_REFLECT) ``` 总之,copyMakeBorder函数是用于在图像边界添加像素的简单函数,对于许多图像处理任务非常有用。掌握了这个函数,可以让你的图像处理程序更加灵活和通用。 ### 回答3: copyMakeBorder函数是OpenCV中的一种图像处理方法,用于将图像的边界进行扩展或复制,生成一个新的边缘处理后的图像。 在实际应用中,copyMakeBorder函数通常用于边界填充周围像素值的情况,例如:当需要对原始图像进行滤波、卷积等操作时,如果不进行边缘扩展,则会导致边缘像素值无法参与滤波或者卷积运算,从而导致处理结果出现偏差。 函数的语法形式如下: ``` void cv::copyMakeBorder( cv::InputArray src, // 输入原图像 cv::OutputArray dst, // 输出扩展后的图像 int top, // 上边界宽度 int bottom, // 下边界宽度 int left, // 左边界宽度 int right, // 右边界宽度 int borderType, // 边界类型 const cv::Scalar& value = cv::Scalar() // 边界填充颜色,默认为黑色 ); ``` 函数参数说明: - src:输入原图像,可以是灰度或者彩色图像,通道数不限。 - dst:输出扩展后的图像。 - top/bottom/left/right:分别代表上/下/左/右四个边界的扩展宽度,单位为像素。 - borderType:表示边界填充的类型,包括以下几种: - BORDER_CONSTANT:表示采用常数填充边界。 - BORDER_REPLICATE:表示通过复制最靠近边界的像素填充边界。 - BORDER_REFLECT:表示通过边界反转填充边界。 - BORDER_REFLECT_101:表示和 BORDER_REFLECT 类似,但是以第一个和第二个像素为中心进行边界反转。 - BORDER_WRAP:表示通过环绕填充边界。 - value:边界填充的颜色,可用来填充边界像素值。默认为黑色。 需要注意的是,边界扩展宽度(top/bottom/left/right)不能超过原始图像的尺寸。在使用copyMakeBorder函数时,建议根据实际需要选择边界类型和填充颜色,避免对图像处理结果产生不利影响。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值