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月前
|
计算机视觉
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
这篇文章详细介绍了OpenCV库中的图像二值化函数`cv2.threshold`,包括二值化的概念、常见的阈值类型、函数的参数说明以及通过代码实例展示了如何应用该函数进行图像二值化处理,并展示了运行结果。
922 0
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
|
5月前
|
算法 计算机视觉
opencv图像形态学
图像形态学是一种基于数学形态学的图像处理技术,它主要用于分析和修改图像的形状和结构。
76 4
|
7月前
|
机器学习/深度学习 人工智能 算法
Python在计算机视觉(CV)中扮演重要角色,得益于其丰富的库如OpenCV、Pillow和Scikit-image。
【7月更文挑战第5天】Python在计算机视觉(CV)中扮演重要角色,得益于其丰富的库如OpenCV、Pillow和Scikit-image。CV涉及图像处理、模式识别和机器学习,用于图像理解和生成。Python的跨平台特性和活跃社区使其成为CV的理想工具。基本流程包括图像获取、预处理、特征提取、分类识别及图像生成。例如,面部识别通过预处理图像,使用如`cv2.CascadeClassifier`进行检测;物体检测类似,但需适应不同目标;图像生成则利用GAN创造新图像。
89 4
|
5月前
|
存储 计算机视觉
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
本文介绍了使用OpenCV进行图像读取、显示和存储的基本操作,以及如何绘制直线、圆形、矩形和文本等几何图形的方法。
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
|
6月前
|
算法 计算机视觉 Python
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
该文章详细介绍了使用Python和OpenCV进行相机标定以获取畸变参数,并提供了修正图像畸变的全部代码,包括生成棋盘图、拍摄标定图像、标定过程和畸变矫正等步骤。
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
|
6月前
|
计算机视觉 索引
OpenCV读取视频失败<无可用信息,未为 opencv_world453.dll 加载任何符号> cv::VideoCapture
本文介绍了解决OpenCV读取视频失败的错误,指出问题通常由视频路径错误或摄像头索引错误导致,并提供了相应的解决方法。
OpenCV读取视频失败<无可用信息,未为 opencv_world453.dll 加载任何符号> cv::VideoCapture
WK
|
6月前
|
编解码 计算机视觉 Python
如何在OpenCV中进行图像转换
在OpenCV中,图像转换涉及颜色空间变换、大小调整及类型转换等操作。常用函数如`cvtColor`可实现BGR到RGB、灰度图或HSV的转换;`resize`则用于调整图像分辨率。此外,通过`astype`或`convertScaleAbs`可改变图像数据类型。对于复杂的几何变换,如仿射或透视变换,则可利用`warpAffine`和`warpPerspective`函数实现。这些技术为图像处理提供了强大的工具。
WK
181 1
|
6月前
|
计算机视觉
OpenCV 图像类型标识符 CV_<bit_depth><S|U|F>C<number_of_channels>
OpenCV 图像类型标识符 CV_<bit_depth><S|U|F>C<number_of_channels>
57 0
|
8月前
|
算法 计算机视觉
【Qt&OpenCV 图像的感兴趣区域ROI】
【Qt&OpenCV 图像的感兴趣区域ROI】
282 1
|
8月前
|
运维 算法 计算机视觉
【Qt&OpenCV 图像的模板匹配 matchTemplate/minMaxLoc】
【Qt&OpenCV 图像的模板匹配 matchTemplate/minMaxLoc】
113 1