OpenCV-扩充图像边界cv::copyMakeBorder

简介: OpenCV-扩充图像边界cv::copyMakeBorder

函数原型

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


参数说明

  1. InputArray类型的src,输入图像,如Mat类型。
  2. OutputArray类型的dst,输出图像。
  3. int类型的top,表示向上扩展多少像素。
  4. int类型的bottom,表示向下扩展多少像素。
  5. int类型的left,表示向左扩展多少像素。
  6. int类型的right,表示向右扩展多少像素。
  7. int类型的borderType,推断图像边缘像素的边界模式。
  8. const Scalar&类型的value,有默认值Scalar(),即0。

测试代码

#include<iostream>
#include<opencv2/opencv.hpp>
#include<ctime>
using namespace std;
using namespace cv;
cv::Mat image_make_border(cv::Mat &src);
int main(void)
{
  Mat test = imread("liu.jpg", 0);
  cv::Mat result=image_make_border(test);
  imshow("original", test);
  imshow("result", result/255);
  waitKey(0);
  system("pause");
  return 0;
}
// 图像边界处理
cv::Mat image_make_border(cv::Mat &src)
{
  int w = cv::getOptimalDFTSize(src.cols); // 获取DFT变换的最佳宽度
  int h = cv::getOptimalDFTSize(src.rows); // 获取DFT变换的最佳高度
  cv::Mat padded;
  // 常量法扩充图像边界,常量 = 0
  cv::copyMakeBorder(src, padded, 0, h - src.rows, 0, w - src.cols, cv::BORDER_CONSTANT, cv::Scalar::all(0));
  padded.convertTo(padded, CV_32FC1);
  return padded;
}

测试效果

图1 REPLICATE扩充效果

图2 WRAP扩充效果

图3 REFLECT扩充效果

图4 REFLECT101扩充效果


      上图展示了4种不同的图像扩展方案:CONSTANT就不多说了,常数扩展,第八个参数设置为255,那就扩展的数据全是255;图1是REPLICATE扩展,最边缘的数据是什么,那么下面那一列或者行都是这个数据,图中看出来就是一条条竖线;图2是WRAP扩展,把另一头的数据拿到下面来补上,有点类似于周期性的感觉;图3是REFLECT扩展,将图像下方数据镜像反转,对称式填充,从图中可以看出来;图4是REFLECT101,顾名思义,0不动,只对称1,和图3不一样的地方在于,它把最边缘的那一行数据作为轴线,不参与翻转,也就是从次边缘开始对称填充~


      如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!

相关文章
|
4天前
|
算法 计算机视觉
【Qt&OpenCV 图像的感兴趣区域ROI】
【Qt&OpenCV 图像的感兴趣区域ROI】
9 1
|
4天前
|
运维 算法 计算机视觉
【Qt&OpenCV 图像的模板匹配 matchTemplate/minMaxLoc】
【Qt&OpenCV 图像的模板匹配 matchTemplate/minMaxLoc】
7 1
|
4天前
|
存储 编解码 算法
【Qt&OpenCV 检测图像中的线/圆/轮廓 HoughLinesP/HoughCircles/findContours&drawContours】
【Qt&OpenCV 检测图像中的线/圆/轮廓 HoughLinesP/HoughCircles/findContours&drawContours】
16 0
|
5天前
|
算法 计算机视觉
【Qt&OpenCV 图像边缘检测 Sobel/Laplace/Canny】
【Qt&OpenCV 图像边缘检测 Sobel/Laplace/Canny】
6 0
|
5天前
|
算法 计算机视觉
【Qt&OpenCV 图像的形态学变换 morpholgyEx】
【Qt&OpenCV 图像的形态学变换 morpholgyEx】
4 0
|
5天前
|
算法 计算机视觉
【Qt&OpenCV 图像阈值操作 threshold】
【Qt&OpenCV 图像阈值操作 threshold】
8 0
|
5天前
|
资源调度 算法 计算机视觉
【Qt&OpenCV 图像平滑/滤波处理 -- Blur/Gaussian/Median/Bilateral】
【Qt&OpenCV 图像平滑/滤波处理 -- Blur/Gaussian/Median/Bilateral】
13 0
|
5天前
|
算法 计算机视觉
【Qt&OpenCV 图像缩放resize()】
【Qt&OpenCV 图像缩放resize()】
7 0
|
10天前
|
算法 计算机视觉 Python
openCV 3计算机视觉 Python语言实现 笔记 第三章 使用OpenCV 3处理图像
openCV 3计算机视觉 Python语言实现 笔记 第三章 使用OpenCV 3处理图像
|
16天前
|
存储 编解码 API
【图像文本化】Base64编解码OpenCV4中 Mat 对象
【图像文本化】Base64编解码OpenCV4中 Mat 对象
14 0