首页 > 编程笔记 > C++笔记 阅读:2

C++ cv::copyMakeBorder()函数的用法(附带实例)

在 OpenCV 中,可以使用函数 copyMakeBorder() 为图像设置边界。该函数可以为图像定义额外的填充(边框),原始边缘的行或列被复制成额外的边框。

copyMakeBorder() 函数声明如下:
void cv::copyMakeBorder ( InputArray  src, OutputArray  dst, int   top, int bottom, int left, int   right, int  borderType, const Scalar & value = Scalar() );
参数说明如下:
【实例】为图像加上边框。
1) 新建一个控制台工程,工程名是 test。

2) 打开 main.cpp,输入如下代码:
#include <opencv2/opencv.hpp>
using namespace cv;
#include<iostream>
using namespace std;

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

int main(int argc, char** argv)
{
    Mat src, dst;
    int borderType = BORDER_CONSTANT;
    const char* window_name = "copyMakeBorder Demo";
    RNG rng(12345);
    int top, bottom, left, right;
    const char* imageName = argc >= 2 ? argv[1] : "sky.jpg";
    // 加载图片
    src = imread(samples::findFile(imageName), IMREAD_COLOR);
    // 检查图像是否加载完成
    if (src.empty()) {
        printf(" Error opening image\n");
        printf(" Program Arguments: [image_name -- default lena.jpg] \n");
        return -1;
    }
    // 此程序的简要操作方法
    printf("\n \t copyMakeBorder Demo: \n");
    printf("\t ----------- \n");
    printf(" ** Press 'c' to set the border to a random constant value \n");
    printf(" ** Press 'r' to set the border to be replicated \n");
    printf(" ** Press 'ESC' to exit the program \n");
    namedWindow(window_name, WINDOW_AUTOSIZE);
    // 初始化筛选器的参数
    top = (int)(0.05*src.rows);
    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));
       copyMakeBorder(src, dst, top, bottom, left, right, borderType, value);
       imshow(window_name, dst);
       char c = (char)waitKey(500);
       if (c == 27) break; // 按 Esc 键退出
       else if (c == 'c') borderType = BORDER_CONSTANT;
       else if (c == 'r') borderType = BORDER_REPLICATE;
   }
   return 0;
}
在上述代码中,按 C 键将边界设置为随机常量值,按R键设置要复制的边框,按 Esc 键退出程序。注意,这些按键需要对着图像窗口来按才会起作用。在设置好 top、bottom、left 和 right 后,在循环中调用 copyMakeBorder() 函数为图像增加边框。

3) 保存工程并运行,结果如下图所示:

相关文章