C++中cv::copyMakeBorder()函数的理解和示例
以cv::BORDER_CONSTANT为例进行运行展示。处理前尺寸大小为1920*1080,处理后尺寸大小为1960*1140。
·
前言
在C++中,cv::copyMakeBorder 函数是OpenCV库提供的一个非常实用的图像处理函数,它允许用户在图像的边界上添加额外的像素。这个功能在图像处理、计算机视觉等领域中非常重要,因为它可以帮助解决边缘效应问题,使得在边缘附近的像素也能被正常处理。
函数原理
cv::copyMakeBorder 函数的目的是创建一个新的图像,该图像在原始图像的边界上增加了指定的像素层。这些新增的像素层可以通过不同的方式填充,比如常数填充、边缘像素复制、边缘像素镜像等。
函数的原型如下:
cv::copyMakeBorder(src, dst, top, bottom, left, right, borderType, value);
参数解释:
src:输入图像。
dst:输出图像,它应该具有与源图像相同的尺寸和类型。
top, bottom, left, right:表示在各个边界添加的像素数目。
borderType:定义了边界的类型。它可以是以下值之一:
cv::BORDER_CONSTANT:如果边界类型是常量,那么所有的像素都将被设置为常量值。这是通过 value 参数定义的。
cv::BORDER_REFLECT:对于这个类型,像素是通过对角线镜像复制的。例如,如果我们在顶部添加了2个像素,那么第一个和最后一个像素会镜像复制到新的边界中。
cv::BORDER_WRAP:在这种情况下,如果像素在源图像中越界,那么它们会被复制到另一侧。例如,如果我们在顶部添加了2个像素,那么第一个和最后一个像素会复制到下面。
cv::BORDER_REFLECT_101:这与 cv::BORDER_REFLECT 类似,但是强度较低(即像素强度只被复制到新边界的一个方向)。
cv::BORDER_DEFAULT:这是 cv::BORDER_REFLECT_101 的别名。
cv::BORDER_ISOLATED:这个选项要求源和目标图像是不同的,这样就避免了在目标图像中修改源图像的问题。
value:当 borderType 为 cv::BORDER_CONSTANT 时,这个值定义了边界的常数值。它是一个包含B、G、R、A四个通道的向量(对于彩色图像)。对于灰度图像,它只有一个通道。
示例
下面以cv::BORDER_CONSTANT为例进行运行展示。
#include <iostream>
#include <vector>
#include <fstream>
#include <sstream>
#include <opencv2/opencv.hpp>
#include "opencv2/core.hpp"
#include <opencv2/highgui/highgui.hpp>
void Ceshi_Fun()
{
cv::Mat src = cv::imread("./10001_1.jpg"); // Load an image
cv::imshow("1", src);
cv::waitKey(0);
cv::Mat dst;
//上边界扩充40行,下边界扩充20行,左边扩充30列,右边扩充10列
int top = 40, bottom = 20, left = 30, right = 10;
//扩充部分用像素值(111,114,114)填充
cv::copyMakeBorder(src, dst, top, bottom, left, right, cv::BORDER_CONSTANT, cv::Scalar(114, 114, 114));
cv::imshow("2", dst);
cv::waitKey(0);
std::cout<<" " << std::endl;
}
int()
{
Ceshi_Fun();
return 0;
}
图像处理前:
尺寸大小为1920*1080
图像处理后:
尺寸大小为1960*1140
更多推荐
所有评论(0)