当前位置: 首页 > article >正文

013 OpenCV copyMakeBorder(padding)

目录

一、环境

二、原理

三、完整代码


一、环境

本文使用环境为:

  • Windows10
  • Python 3.9.17
  • opencv-python 4.8.0.74

二、原理

cv.copyMakeBorder是OpenCV库中的一个函数,用于在图像周围添加边框(padding)。这个函数可以用于图像的预处理、增强等任务。它的基本语法如下:

dst = cv.copyMakeBorder(src, top, bottom, left, right, borderType, value)
  • src:输入图像,可以是彩色或灰度图像。
  • topbottomleftright:分别表示上、下、左、右方向上的边框宽度。如果设置为负数,则表示自动计算边框宽度。
  • borderType:边框类型,可以是上述提到的任意一种类型。
  • value:边框的颜色值。对于彩色图像,需要提供一个包含三个元素的元组(例如:(0, 0, 0)表示黑色);对于灰度图像,需要提供一个单一的数值(例如:0表示黑色)。

其中,cv.copyMakeBorder支持以下几种边框类型:

  1. cv.BORDER_CONSTANT:常数填充,即用一个固定的值填充边框。
  2. cv.BORDER_REFLECT:反射填充,即用图像边界的像素值进行填充。
  3. cv.BORDER_REFLECT_101:反射填充,与cv.BORDER_REFLECT类似,但使用不同的边界像素值。
  4. cv.BORDER_WRAP:循环填充,即用图像边界的像素值进行填充,形成一个环状的效果。
  5. cv.BORDER_REPLICATE:复制填充,即用图像边界的像素值进行填充。
  6. cv.BORDER_DEFAULT:默认填充,即用0填充边框。

三、完整代码

注:执行下面代码,图像显示后:

  • 按下r是原图,
  • 按下c是边界padding后的效果图,
  • 按下esc退出
import sys
from random import randint
import cv2 as cv
def main(argv):
    borderType = cv.BORDER_CONSTANT
    window_name = "copyMakeBorder Demo"
    src = cv.imread(cv.samples.findFile('data/lena.jpg'), cv.IMREAD_COLOR)
    ## [create_window]
    cv.namedWindow(window_name, cv.WINDOW_AUTOSIZE)
    top = int(0.05 * src.shape[0])  # shape[0] = rows
    bottom = top
    left = int(0.05 * src.shape[1])  # shape[1] = cols
    right = left
    while 1:
        # 待填充的随机颜色
        value = [randint(0, 255), randint(0, 255), randint(0, 255)]
        dst = cv.copyMakeBorder(src, top, bottom, left, right, borderType, None, value)
        cv.imshow(window_name, dst)
        c = cv.waitKey(500)
        if c == 27:
            break
        elif c == 99: # 99 = ord('c')
            borderType = cv.BORDER_CONSTANT
        elif c == 114: # 114 = ord('r')
            borderType = cv.BORDER_REPLICATE
    return 0
if __name__ == "__main__":
    main(sys.argv[1:])


http://www.kler.cn/a/162251.html

相关文章:

  • Scala学习记录,case class,迭代器
  • HTTP 客户端怎么向 Spring Cloud Sleuth 传输跟踪 ID
  • HP G10服务器ESXI6.7告警提示ramdisk tmp已满
  • 排序算法 - 冒泡
  • ubuntu-desktop-24.04上手指南(更新阿里源、安装ssh、安装chrome、设置固定IP、安装搜狗输入法)
  • 【STM32F1】——无线收发模块RF200与串口通信
  • vscode如何在没有网络的情况下安装插件
  • Python 中 Thread 线程的用法
  • 非常抱歉的通知
  • 在imx6ull中加入ov5640模块
  • Linux查看命令的绝对路径
  • 企业贷款行业如何获客?
  • 无公网IP环境如何SSH远程连接Deepin操作系统
  • C++初学教程三
  • 赛事回顾 | 首届“智航杯“全国无人机智能算法竞赛落幕
  • 无人机语音中继电台 U-ATC118
  • try catch 应该在 for 循环里面还是外面?(荣耀典藏版)
  • 读书笔记-《数据结构与算法》-摘要1[数据结构]
  • shell学习---杂谈
  • 【JavaEE进阶】 Spring使用注解存储对象
  • 第3课 SQL入门之排序检索数据
  • K8S 删除命令空间时 一直卡住怎么办?
  • 2024 年甘肃省职业院校技能大赛中职组 电子与信息类“网络安全”赛项竞赛样题-A
  • KWin、libdrm、DRM从上到下全过程 —— drmModeAddFBxxx(22)
  • elasticsearch 内网下如何以离线的方式上传任意的huggingFace上的NLP模型(国内避坑指南)
  • SpringBoot最常用的50个注解【搬代码转载】