您的位置:首页 > 运维架构

OpenCV学习之旅——copyMakeBorder()函数

2017-09-25 22:03 1061 查看

扩充图像边界:copyMakeBorder()函数

函数原型:C++: 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:表示边界的类型

有下面几种类型:此处借鉴

http://blog.csdn.net/qq_18343569/article/details/47809917

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 ,那么边界的颜色值;

功能:以外插方式自动填充图像边缘,扩大图像,利于边缘处理。

示例代码:

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

using namespace std;
using namespace cv;

int _tmain(int argc, _TCHAR* argv[])
{
Mat image, result;
//获得边界的类型
int borderType = BORDER_REPLICATE;
//输入字符
image = imread("chengxuyuan.jpg");
if (!image.data)
{
printf("fail to load image\n");
return -1;
}

int top = (int)(0.5*image.rows);
int bottom = (int)(0.5*image.rows);
int left = (int)(0.5*(image.cols));
int right = (int)(0.5*(image.cols));

copyMakeBorder(image, result, top, bottom, left, right, borderType);
imshow("显示结果.bmp", result);
waitKey();

return 0;
}


原图:



效果图:



4000
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  opencv图像识别