Opencv图像处理之图像增加边框

理论

在本教程中,我们将简要介绍两种为图像定义额外填充(边框)的方法:

  • BORDER_CONSTANT:用恒定值(即黑色或0)填充图像
  • BORDER_REPLICATE:原始边缘的行或列复制到额外边框。

代码

程序的运行流程

  • 加载一张图片
  • 让用户选择输入图像中使用哪种填充。 有两种选择:

1.常量值边框:为整个边框应用常量值的填充。 该值将每0.5秒随机更新一次。

2.复制边框:将从原始图像边缘的像素值复制边框。

  • 当用户按下'ESC'时程序结束

原始代码

 #include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/imgcodecs.hpp"
#include "opencv2/highgui/highgui.hpp"
#include <stdlib.h>
#include <stdio.h>
using namespace cv;
Mat src, dst;
int top, bottom, left, right;
int borderType;
const char* window_name = "copyMakeBorder Demo";
RNG rng(12345);
int main( int, char** argv )
{
 int c;
 src = imread( argv[1] );
 if( src.empty() )
  {
   printf(" No data entered, please enter the path to an image file \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 = (int) (0.05*src.rows);
 left = (int) (0.05*src.cols); right = (int) (0.05*src.cols);
 dst = src;
 imshow( window_name, dst );
 for(;;)
    {
     c = waitKey(500);
     if( (char)c == 27 )
      { break; }
     else if( (char)c == 'c' )
      { borderType = BORDER_CONSTANT; }
     else if( (char)c == 'r' )
      { borderType = BORDER_REPLICATE; }
     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 );
    }
 return 0;
}

解释

首先,我们声明我们将要使用的变量:

我们加载源图像src:

我们创建了一个窗口:

现在我们初始化定义边框大小(顶部,底部,左侧和右侧)的参数。 我们给它们的值是src大小的5%。

程序开始一个while循环。 如果用户按下'c'或'r',则borderType变量分别取值BORDER_CONSTANT或BORDER_REPLICATE:

在每次迭代中(0.5秒后),更新变量值

我们调用函数cv :: copyMakeBorder来应用相应的填充:

参数介绍:

src:源图像

dst:目标图像

top,bottom,left,right:图像两侧边框的长度(以像素为单位)。 我们将它们定义为图像原始大小的5%。

borderType:定义应用的边框类型。 对于此示例,它可以是常量或复制。

value:如果borderType为BORDER_CONSTANT,则这是用于填充边框像素的值。

我们在先前创建的图像中显示输出图像

效果

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • OpenCV实现给图片添加边框功能

    目标: 基于OpenCV的函数cv::copyMakeBorder给图像添加边框 函数简介: copyMakeBorder( src, dst, top, bottom, left, right, borderType, value ); 参数: src: 原图像 dst: 目标图像 top, bottom, left, right: 每一个边界方向上像素的宽度.在这里使用图像原始大小的 5% . borderType:边框的类型 .当前例子中位纯色或者边界的复制. value: 如果borde

  • Opencv图像处理之图像增加边框

    理论 在本教程中,我们将简要介绍两种为图像定义额外填充(边框)的方法: BORDER_CONSTANT:用恒定值(即黑色或0)填充图像 BORDER_REPLICATE:原始边缘的行或列复制到额外边框. 代码 程序的运行流程 加载一张图片 让用户选择输入图像中使用哪种填充. 有两种选择: 1.常量值边框:为整个边框应用常量值的填充. 该值将每0.5秒随机更新一次. 2.复制边框:将从原始图像边缘的像素值复制边框. 当用户按下'ESC'时程序结束 原始代码 #include "opencv2/im

  • Python OpenCV图像处理之图像滤波特效详解

    目录 1分类 2邻域滤波 2.1线性滤波 2.2非线性滤波 3频域滤波 3.1低通滤波 3.2高通滤波 1 分类 图像滤波按图像域可分为两种类型: 邻域滤波(Spatial Domain Filter),其本质是数字窗口上的数学运算.一般用于图像平滑.图像锐化.特征提取(如纹理测量.边缘检测)等,邻域滤波使用邻域算子——利用给定像素周围像素值以决定此像素最终输出的一种算子 频域滤波(Frequency Domain Filter),其本质是对像素频率的修改.一般用于降噪.重采样.图像压缩等. 按

  • python opencv 图像处理之图像算数运算及修改颜色空间

    目录 1.图像加法 1.1Numpy加法 1.2OpenCV加法 2.图像融合 3.改变颜色空间 1.图像加法 图像加法有两种方式,一种是通过 Numpy 直接对两个图像进行相加,另一种是通过 OpenCV 的 add() 函数进行相加. 不管使用哪种方法,相加的两个图像必须具有相同的深度和类型,简单理解就是图像的大小和类型必须一致. 1.1Numpy加法 Numpy 的运算方法是: img = img1 + img2 ,然后再对最终的运算结果取模. 当最终的像素值 <= 255 时,则运算结果

  • C++ opencv图像处理实现图像腐蚀和膨胀示例

    目录 1 概念 2 膨胀 3 腐蚀 1 概念 1.1 腐蚀跟膨胀是最基本的形态学运算 1.2 腐蚀跟膨胀是对图像的白色的部分(亮光部分)进行操作 1.3 腐蚀是对亮光部分进行腐蚀 拥有比原图更小的亮光部分 1.4 膨胀是对亮光部分进行膨胀 拥有比原图更大的亮光部分 这里有一个误区 假如说在图片上的一个字,很多人都会认为膨胀是将图片上的字进行膨胀放大实则不然 可以看到膨胀是将图片上的亮色区域进行放大,字就会变得更小,结构体够大的情况下,字就会看不见了** 可以看到腐蚀是将图片上的亮色区域进行放小,

  • Python+OpenCV图像处理——图像二值化的实现

    简介:图像二值化就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果的过程. 普通图像二值化 代码如下: import cv2 as cv import numpy as np #全局阈值 def threshold_demo(image): gray = cv.cvtColor(image, cv.COLOR_RGB2GRAY) #把输入图像灰度化 #直接阈值化是对输入的单通道矩阵逐像素进行阈值分割. ret, binary = cv.threshold(gray

  • OpenCV图像处理之七种常用图像几何变换

    0 程序环境与所学函数 本章程序运行需要导入下面三个库,并定义了一个显示图像的函数 所学函数 ##放大.缩小 cv.resize(img,dsize,[interpolation]) ##平移变换 M = np.array([[...]], dtype=np.float32) cv.warpAffine(img, M, dsize) ##镜像变换 cv.flip(img, 1) # 垂直镜像 cv.flip(img, 0) # 水平镜像 cv.flit(img, -1) # 水平垂直同时进行 #

  • Java OpenCV图像处理之自定义图像滤波算子

    目录 示例代码 效果图 示例代码 package com.xu.image; import java.io.File; import org.opencv.core.Core; import org.opencv.core.Mat; import org.opencv.core.Point; import org.opencv.highgui.HighGui; import org.opencv.imgcodecs.Imgcodecs; import org.opencv.imgproc.Img

  • Python OpenCV学习之图像形态学

    目录 背景 一.图像二值化 二.自适应阈值 三.腐蚀 四.卷积核获取 五.膨胀 六.开运算 七.闭运算 八.形态学梯度 九.顶帽运算 十.黑帽运算 总结 背景 形态学处理方法是基于对二进制图像进行处理的,卷积核决定图像处理后的效果:形态学的处理哦本质上相当于对图像做前处理,提取出有用的特征,以便后续的目标识别等任务: 一.图像二值化 定义:将图像的每个像素变成两种值,如0和255: 全局二值化的函数原型: threshold(img,thresh,maxVal,type) img:最好是灰度图像

  • Python图像处理之图像融合与ROI区域绘制详解

    目录 一.图像融合 二.图像ROI区域定位 三.图像属性 (1)shape (2)size (3)dtype 四.图像通道分离及合并 (1)split()函数 (2)merge()函数 五.图像类型转换 六.总结 一.图像融合 图像融合通常是指多张图像的信息进行融合,从而获得信息更丰富的结果,能够帮助人们观察或计算机处理.图5-1是将两张不清晰的图像融合得到更清晰的效果图. 图像融合是在图像加法的基础上增加了系数和亮度调节量,它与图像的主要区别如下[1-3]: 图像加法:目标图像 = 图像1 +

随机推荐