計算機視覺(opencv)實戰二——圖像邊界擴展cv2.copyMakeBorder()

OpenCV copyMakeBorder() 圖像邊界擴展詳解與實戰

在圖像處理和計算機視覺中,有時需要在原始圖像的四周增加邊界(Padding)。這種操作在很多場景中都有應用,比如:

  • 卷積神經網絡(CNN)中的圖像預處理

  • 為圖像添加裝飾性邊框

  • 保證濾波、卷積等操作不會丟失邊緣信息

OpenCV 提供了一個非常方便的函數 cv2.copyMakeBorder() 來實現邊界擴展。


1. copyMakeBorder() 函數原型

cv2.copyMakeBorder()是OpenCV庫中的一個函數,用于給圖像添加額外的邊界(padding)。
dst = cv2.copyMakeBorder(src, top, bottom, left, right, borderType[, value])

參數說明

參數含義
src原始圖像
top, bottom, left, right上、下、左、右四個方向的邊界寬度(單位:像素)
borderType邊界類型(見下文詳解)
valueborderType=cv2.BORDER_CONSTANT 時,需要指定填充的顏色(BGR 格式)

2. 常用 borderType 類型

OpenCV 提供了多種擴展方式,不同方式在邊緣處理時會有不同效果。

  1. cv2.BORDER_CONSTANT

    • 用固定顏色填充邊界。

    • 需要額外指定 value 參數,例如 (0, 0, 255) 代表紅色。

    • 適合純色邊框的效果。

  2. cv2.BORDER_REFLECT

    • 鏡像反射邊界,邊界像素會被復制。

    • 模式類似:321|123456789|987

  3. cv2.BORDER_REFLECT_101cv2.BORDER_REFLECT101

    • 也是鏡像反射,但不復制邊界像素本身。

    • 模式類似:432|123456789|876

  4. cv2.BORDER_REPLICATE

    • 使用邊界像素重復填充。

    • 模式類似:111|123456789|999

  5. cv2.BORDER_WRAP

    • 邊界使用圖像另一側的像素包裹。

    • 模式類似:789|123456789|123


3. 示例代碼

下面的示例會分別展示 5 種 borderType 效果,方便直觀對比。

import cv2# 讀取圖片
img = cv2.imread('lyf.jpg')# 調整圖片大小
img = cv2.resize(img, (500, 500))# 設置邊界寬度
top, bottom, left, right = 100, 100, 100, 100# 1. 設置顏色邊界(紅色)
constant = cv2.copyMakeBorder(img, top, bottom, left, right,borderType=cv2.BORDER_CONSTANT, value=(0, 0, 255))# 2. 鏡像反射(復制邊界像素)
reflect = cv2.copyMakeBorder(img, top, bottom, left, right, borderType=cv2.BORDER_REFLECT)# 3. 鏡像反射(不復制邊界像素)
reflect101 = cv2.copyMakeBorder(img, top, bottom, left, right, borderType=cv2.BORDER_REFLECT101)# 4. 重復邊界像素
replicate = cv2.copyMakeBorder(img, top, bottom, left, right, borderType=cv2.BORDER_REPLICATE)# 5. 包裹方式
wrap = cv2.copyMakeBorder(img, top, bottom, left, right, borderType=cv2.BORDER_WRAP)# 顯示結果
cv2.imshow('Original', img)
cv2.imshow('BORDER_CONSTANT', constant)
cv2.imshow('BORDER_REFLECT', reflect)
cv2.imshow('BORDER_REFLECT101', reflect101)
cv2.imshow('BORDER_REPLICATE', replicate)
cv2.imshow('BORDER_WRAP', wrap)cv2.waitKey(0)
cv2.destroyAllWindows()

4. 運行效果示意

原圖:lyf.jpg

BORDER_CONSTANT

BORDER_REFLECT

BORDER_REFLECT101

BORDER_REPLICATE

BORDER_WRAP

類型效果描述
BORDER_CONSTANT邊界為純紅色(示例中是 (0,0,255)
BORDER_REFLECT邊界為鏡像反射,邊緣處像素被復制
BORDER_REFLECT101邊界為鏡像反射,去掉邊緣像素自身
BORDER_REPLICATE邊界像素直接復制填充
BORDER_WRAP邊界使用對面邊的像素包裹

5.應用場景案例

多給幾個真實案例,讀者會立刻想到怎么用:

  • 圖像邊框美化 → 用 BORDER_CONSTANT 做彩色相框。

  • 深度學習數據增強 → 隨機 padding 后再裁剪。

  • 全景圖拼接 → 避免拼接縫隙處出現黑邊。

  • 濾波降噪 → 用鏡像 padding 防止邊緣模糊不均。


6. 小結

cv2.copyMakeBorder() 是一個簡單而強大的函數,可以在圖像四周添加不同類型的邊界。
在實際應用中:

  • 圖像卷積/濾波前 → 推薦 BORDER_REFLECTBORDER_REFLECT101,能保留邊緣信息。

  • 美化圖片 → 推薦 BORDER_CONSTANT,可指定任意顏色作為相框。

  • 特殊視覺效果 → 可嘗試 BORDER_WRAP

掌握它之后,你不僅能做圖像邊界填充,還能理解很多計算機視覺算法在“邊緣處理”時的邏輯。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/919181.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/919181.shtml
英文地址,請注明出處:http://en.pswp.cn/news/919181.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ansible管理變量和事實

ansible管理變量和事實與實施任務控制 在 Ansible 中,變量和事實(Facts)就像給劇本(Playbook)配備的 “信息工具箱”,讓你的自動化配置管理更靈活、更智能。 變量:提前準備的 “預設信息” 變…

STM32--寄存器與標準庫函數--基本定時器

目錄 前言 基本定時器概念 定時時間 定時器時鐘確定 倍頻鎖相環被正確配置為168MHz 定時器的庫函數操作 代碼 定時器的寄存器操作 代碼 寄存器 后言 前言 使用平臺:STM32F407ZET6 使用數據手冊:STM32F407數據手冊.pdf 使用參考手冊&…

PCA 實現多向量壓縮:首個主成分的深層意義

PCA 實現多向量壓縮 第一個主成分(components_[0])正是數據協方差矩陣中最大特征值對應的特征向量。 ,layer_attention_vector[layer] 被賦值為 pca.components_[0],這確實是一個特征向量,具體來說是 PCA 分解得到的第一個主成分(主特征向量)。 關于它的維度: 假設 c…

網絡常識-DNS如何解析

DNS(Domain Name System,域名系統)是互聯網的“地址簿”,負責將人類易記的域名(如www.example.com)轉換為計算機可識別的IP地址(如192.168.1.1)。其工作流程可以簡單理解為“從域名到…

Java中 23 種設計模式介紹,附帶示例

文章目錄設計模式六大原則設計模式分類1、創建型模式(Creational Patterns)2、結構型模式(Structural Patterns)3、行為型模式(Behavioral Patterns)一、創建型模式(Creational Patterns&#x…

嵌入式開發入門——電子元器件~電磁繼電器、蜂鳴器

文章目錄電磁繼電器定義關鍵參數實物蜂鳴器實物內部結構分類關鍵參數電磁繼電器 定義 概述:電磁繼電器是利用電磁感應原理職稱的一種電磁開關,他能通過:低電壓、低電流的電路,來控制高電壓、高電流的電路。 關鍵參數 線圈電壓…

ROS2基礎

1.helloworld案例1.創建功能包(C)終端下,進入ws00_helloworld/src目錄,使用如下指令創建一個C 功能包:ros2 pkg create pkg01_helloworld_cpp --build-type ament_cmake --dependencies rclcpp --node-name helloworld執行完畢&a…

Python爬蟲實戰:研究pygalmesh,構建Thingiverse平臺三維網格數據處理系統

1. 引言 1.1 研究背景 在數字化浪潮席卷全球的當下,三維建模技術已成為連接虛擬與現實的核心紐帶,廣泛滲透于工程設計、地理信息系統(GIS)、虛擬現實(VR)、增強現實(AR)、醫學影像等關鍵領域。例如,在建筑工程中,BIM(建筑信息模型)技術依賴高精度三維網格實現施工…

開發者說 | EmbodiedGen:為具身智能打造可交互3D世界生成引擎

概述 具身智能的發展離不開高質量、多樣化的可交互3D仿真環境。為突破傳統構建方式的瓶頸,我們提出了EmbodiedGen,一個基于生成式AI技術的自動化3D世界生成引擎,助力低成本、高效率地創建真實且可交互的3D場景。用戶僅需輸入任務定義或場景圖…

GitHub Copilot:AI編程助手的架構演進與真實世界影響

本文由「大千AI助手」原創發布,專注用真話講AI,回歸技術本質。拒絕神話或妖魔化。搜索「大千AI助手」關注我,一起撕掉過度包裝,學習真實的AI技術! 1. 技術背景與核心架構 GitHub Copilot 是由 GitHub 與 OpenAI 聯合開…

PDF OCR + 大模型:讓文檔理解不止停留在識字

在企業數字化的實際場景中,PDF OCR 已經很普遍了:從掃描件提取文本、表格到生成可搜索 PDF。但這類技術往往停留在"把圖片變成文字",對文檔背后的語義、邏輯、業務價值理解不足。 而當 OCR 遇上大語言模型(LLM&#xff…

半敏捷衛星觀測調度系統的設計與實現

半敏捷衛星觀測調度系統的設計與實現 摘要 本文詳細闡述了一個基于Python的半敏捷衛星觀測調度系統的設計與實現過程。系統針對半敏捷衛星特有的機動能力限制,綜合考慮了地面目標觀測需求、衛星資源約束、能源管理等多重因素,提出了一種混合啟發式算法解…

軟件測試中,常用的抓包工具有哪些?抓包的原理是什么?

回答重點在軟件測試中,常用的抓包工具主要有:1)Fiddler2)Wireshark3)Charles4)Postman(它的攔截器功能也可以用于抓包)5)tcpdump抓包的原理大致是通過安裝在本地的抓包工…

Cesium學習(二)-地形可視化處理

Cesium地形可視化是其核心功能之一,允許開發者在3D地球中展示真實的地形數據。以下是關于Cesium地形可視化的詳細處理方法: 文章目錄1. 啟用地形可視化基本地形加載自定義地形提供者2. 地形相關操作地形高度采樣地形夸張效果3. 地形可視化設置地形照明效…

《告別 if-else 迷宮:Python 策略模式 (Strategy Pattern) 的優雅之道》

《告別 if-else 迷宮:Python 策略模式 (Strategy Pattern) 的優雅之道》 大家好,我是你的朋友,一位與 Python 代碼相伴多年的開發者。在我們的編程生涯中,幾乎都曾與一種“代碼怪獸”搏斗過,它就是那冗長、復雜、牽一發而動全身的 if-elif-else 結構。 每當一個新的需求…

Redis--day7--黑馬點評--優惠券秒殺

(以下內容全部來自上述課程)優惠券秒殺 1. 全局唯一ID 每個店鋪都可以發布優惠券:當用戶搶購時,就會生成訂單并保存到tb voucher order這張表中,而訂單表如果使用數據庫自增ID就存在一些問題: id的規律性太明顯受單表數據量的限制…

Vue 與 React 深度對比:設計哲學、技術差異與應用場景

一、核心設計理念對比 特性 Vue React 設計目標 漸進式框架,降低學習曲線 構建大型應用,保持靈活性 設計哲學 “約定優于配置” “配置優于約定” 核心思想 響應式數據綁定 函數式編程 + 虛擬DOM 模板語言 HTML-based 模板 JSX(JavaScript XML) 狀態管理 內置響應式系統 依…

軟件開發 - foreground 與 background

foreground 與 background 1、foreground詞性含義n.前景;最突出的位置.v使突出;強調# 例詞in the 【foreground】(在最顯眼的位置)【foreground】 task(前臺任務)【foreground】 color(前景色&a…

深度學習——03 神經網絡(2)-損失函數

2 損失函數 2.1 概述作用:衡量模型預測結果(y^\hat{y}y^?)和真實標簽(yyy)的差異,差異越大,說明模型參數“質量越差”(需要調整);本質:深度學習訓…

【大模型微調系列-04】 神經網絡基礎與小項目實戰

【大模型微調系列-04】 神經網絡基礎與小項目實戰💡 本章目標:通過構建一個能識別手寫數字的AI模型,讓你真正理解神經網絡是如何"學習"的。2-3小時后,你將擁有第一個自己訓練的AI模型!4.1 理論講解&#xff…