計算機視覺(opencv)實戰三——圖像運算、cv2.add()、cv2.addWeighted()


圖像運算詳解:加法運算與加權運算

在數字圖像處理中,圖像運算是基礎且常用的操作之一。它能夠對兩幅圖像或圖像與常數進行加減乘除,從而實現亮度調整、融合疊加、特效制作等功能。本文將重點介紹 OpenCV 中的圖像加法運算與加權運算,包括它們的底層規則與區別。

?先準備兩張圖片:


1. 圖像加法運算

圖像加法運算可以用兩種方式實現:

  • 直接使用 + 號運算符

  • 使用 cv2.add() 函數

雖然它們的寫法類似,但處理結果有差異

+ 號運算規則(NumPy 方式)

當使用 + 對兩個圖像的像素進行加法時,遵循 取模(mod 256)規則

  • 如果某個像素位置的兩個值相加后 小于 255,則結果等于它們的和;

  • 如果某個像素位置的兩個值相加后 大于 255,結果會被截斷,并對 256 取模,例如:

    250 + 10 = 260   →   260 - 256 = 4即:260   →   4

代碼示例:

import cv2a = cv2.imread('penguin.jpg')
c = a + 10  # 整體亮度+10
cv2.imshow('a+10', c)
cv2.waitKey(0)

特點:

  • 會產生“回繞”現象(高亮區域變暗)。

結果:


2?cv2.add()運算

原理:

cv2.add() 是 OpenCV 提供的逐像素加法運算函數,用于將兩幅圖像或圖像與常數進行加法處理。

在數學上,它實現的是:

當使用 cv2.add() 時,規則不同:

  • 如果相加結果 小于 255,則直接為相加之和;

  • 如果相加結果 大于 255,則直接 飽和為 255(不會回繞)。


主要特性

  1. 逐像素加法

    • 對圖像中每個像素點分別計算 src1_pixel + src2_pixel

    • 適用于單通道(灰度)和多通道(BGR、RGBA)圖像。

  2. 飽和運算(Saturation Arithmetic)

    • 如果加法結果大于 255,則直接設為 255。

    • 不會出現 + 號運算那種 取模回繞 現象。

    • 這保證了圖像亮度不會出現意外變暗。

  3. 支持圖像與常數相加

    • 如果要整體調亮,可以加上一個常數矩陣,常數會廣播到每個像素。


基本語法

dst = cv2.add(src1, src2, dtype=None, mask=None)

參數說明:

  • src1, src2
    輸入的兩幅圖像(大小、通道數必須一致),也可以是常數矩陣。

  • dtype
    可選,輸出圖像的數據類型;若為 None 則和輸入相同。

  • mask
    可選掩膜,只在掩膜為非零的區域執行加法,其余區域保持原值。


代碼示例:

d = a[0:500,500:1000]+b[0:500,0:500]
e = cv2.add(a[0:500,500:1000],b[0:500,0:500])  # 使用 cv2.add()
cv2.imshow('a+b',d)
cv2.imshow('add(a,b)',e)
cv2.waitKey(0)

切割:

[0:500, 500:1000]表示數組切片,選取圖像的某個矩形區域。

  • 0:500 → 高度方向(y 軸):從第 0 行到第 499 行(共 500 行)

  • 500:1000 → 寬度方向(x 軸):從第 500 列到第 999 列(共 500 列)

結果:

解析:([255,255,255]為白色)

a+b的結果圖片像素數值會回繞

add(a,b)則會飽和到255


2. cv2.addWeighted()圖像加權運算

有時我們需要將兩幅圖像按比例融合,而不是簡單相加。這時就可以使用 加權和 公式:

  • α(alpha):第一幅圖像的權重

  • β(beta):第二幅圖像的權重

  • γ(gamma):亮度偏移值(常數)

基本語法

dst = cv2.addWeighted(src1, alpha, src2, beta, gamma)

參數說明

參數說明
src1第一張輸入圖像(矩陣)
alpha第一張圖像的權重系數
src2第二張輸入圖像(矩陣),大小、通道必須與 src1 相同
beta第二張圖像的權重系數
gamma亮度調整常數,直接加到最終結果上

代碼示例:

a = cv2.resize(a, (800, 600))
b = cv2.resize(b, (800, 600))# α = 0.6, β = 0.4, γ = 10
f = cv2.addWeighted(a, 0.6, b, 0.4, 10)
cv2.imshow('addWeighted', f)
cv2.waitKey(0)
cv2.destroyAllWindows()

效果:

  • 0.6 和 0.4 表示 a 圖像占 60%,b 圖像占 40%。

  • γ = 10 表示整體亮度提升 10。


3. 三種方式對比

方法溢出處理方式應用場景
+(NumPy)取模(回繞)特殊視覺效果、循環色彩變換
cv2.add()飽和到 255普通加法、避免溢出
cv2.addWeighted()飽和到 255(帶權重和亮度調節)圖像融合、透明度調整

4. 注意事項

  1. 兩幅圖像必須 大小相同、通道數一致,否則需先使用 cv2.resize() 統一尺寸。

  2. 如果僅調整亮度,cv2.convertScaleAbs() 也可以實現,更快更安全。

  3. 加權運算的 α 與 β 不一定要加起來等于 1,但一般這樣可以避免過度曝光。


5. 應用實例

  • 圖像融合:將兩張風景圖柔和地合成一張。

  • 特效制作:用 NumPy 加法制造像素回繞的炫彩效果。

  • 亮度調節:用 cv2.addWeighted() 調節透明度和亮度。

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

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

相關文章

Redis核心架構

一、核心模塊如圖 Client 客戶端,官方提供了 C 語言開發的客戶端,可以發送命令,性能分析和測試等。網絡層事件驅動模型,基于 I/O 多路復用,封裝了一個短小精悍的高性能 ae 庫,全稱是 a simple event-driven…

Python爬蟲大師課:HTTP協議深度解析與工業級請求封裝

Python爬蟲大師課:HTTP協議深度解析與工業級請求封裝 從零構建企業級爬蟲框架(附完整源碼) 一、爬蟲基礎:網絡世界的通行證 ??HTTP協議核心數據??: 全球網站數量:20億 HTTP請求占比:83% …

機器學習——PCA(主成分分析)降維

PCA(主成分分析)降維詳解一、什么是 PCAPCA(Principal Component Analysis,主成分分析)是一種常用的數據降維方法。它通過線性變換將原始的高維數據映射到低維空間,同時盡可能保留原數據的主要信息&#xf…

把 AI 裝進“冰箱貼”——基于超低功耗語音合成的小屏電子價簽

標簽:電子價簽、語音合成、TTS、超低功耗、電子墨水、BLE、離線語音 ---- 1. 背景:價簽也要開口說話? 超市做促銷,顧客拿價簽一掃,“今日番茄 2.99 元/斤,會員再享 9 折” 直接語音播放。 硬件限制&#xf…

挖漏洞是什么意思?挖漏洞賺錢入門到精通,收藏這篇就夠了!

挖漏洞是什么意思?挖漏洞賺錢入門到精通,收藏這篇就夠了! 什么是漏洞挖掘 漏洞挖掘是指通過分析軟件、系統或網絡中存在的安全漏洞來發現并利用這些漏洞。漏洞挖掘是信息安全領域的一項重要工作,可以幫助企業和組織提高系統的安…

如何理解AP中SM中宿主進程?

在AUTOSAR Adaptive Platform(AP)中,狀態管理(State Management, SM)的宿主進程(Host Process) 是實現狀態機運行的核心載體,其本質與運作機制可通過以下結構化解析深入理解&#xf…

無人機光電探測模塊技術分析

一、技術要點1. 多光譜成像技術 可見光與紅外融合:白天依賴可見光高分辨率成像(識別外形、顏色),夜間或低光照條件下切換至紅外熱成像(捕捉0.5℃級溫差),通過雙波段互補提升全天候能力。 激光…

第40周——GAN入門

目錄 目錄 目錄 前言 一、定義超參數 二、下載數據 三、配置數據 四、定義鑒別器 五、訓練模型并保存 總結 前言 🍨 本文為🔗365天深度學習訓練營中的學習記錄博客🍖 原作者:K同學啊 一、定義超參數 import argparse import os i…

Nginx性能優化與安全配置:打造高性能Web服務器

系列文章索引: 第一篇:《Nginx入門與安裝詳解:從零開始搭建高性能Web服務器》第二篇:《Nginx基礎配置詳解:nginx.conf核心配置與虛擬主機實戰》第三篇:《Nginx代理配置詳解:正向代理與反向代理…

二分算法(模板)

例題1: 704. 二分查找 - 力扣(LeetCode) 算法原理:(二分) 通過遍歷也可以通過,但是二分更優且數據量越大越能體現。 二分思路: 1.mid1 (left right)/2 與 mid2 right (right …

VUE3 學習筆記2 computed、watch、生命周期、hooks、其他組合式API

computed 計算屬性在vue3中,雖然也能寫vue2的computed,但還是更推薦使用vue3語法的computed。在Vue3中,計算屬性是組合式API,要想使用computed,需要先對computed進行引入:import { computed } from vuecomp…

【java面試day13】mysql-定位慢查詢

文章目錄問題💬 Question 1相關知識問題 💬 Question 1 Q:這條sql語句執行很慢,你如何分析呢? A:當一條 SQL 執行較慢時,可以先使用 EXPLAIN 查看執行計劃,通過 key 和 key_len 判…

3分鐘解鎖網頁“硬盤“能力:離線運行VSCode的新一代Web存儲技術

Hi,我是前端人類學(之前叫布蘭妮甜)! “這不是瀏覽器,這是裝了個硬盤。” —— 用戶對現代Web應用能力的驚嘆 隨著Origin Private File System和IndexedDB Stream等新技術的出現,Web應用現在可以在用戶的設…

LT6911GXD,HD-DVI2.1/DP1.4a/Type-C 轉 Dual-port MIPI/LVDS with Audio 帶音頻

簡介LT6911GXD是一款高性能HD-DVI2.1/DP1.4a/Type-c轉Dual-port MIPI/LVDS芯片,兼容 HDMI2.1、HDMI2.0b、HDMI1.4、DVI1.0、DisplayPort 1.4a、eDP1.4b 等多種視頻接口標準。支持4K(38402160)60Hz的DSC直通。應用場景AR/VR設備LT6911GXD 支持高達 4K(384…

【100頁PPT】數字化轉型某著名企業集團信息化頂層規劃方案(附下載方式)

篇幅所限,本文只提供部分資料內容,完整資料請看下面鏈接 https://download.csdn.net/download/2501_92808811/91662628 資料解讀:數字化轉型某著名企業集團信息化頂層規劃方案 詳細資料請看本解讀文章的最后內容 作為企業數字化轉型領域的…

高精度標準鋼卷尺優質廠家、選購建議

高精度標準鋼卷尺的優質廠家通常具備精湛工藝與權威精度認證等特征,能為產品質量提供保障。其選購需兼顧精度標識、使用場景、結構細節等多方面,具體介紹如下:一、高精度標準鋼卷尺優質廠家**1、河南普天同創:**PTTC-C5標準鋼卷尺…

38 C++ STL模板庫7-迭代器

C STL模板庫7-迭代器 文章目錄C STL模板庫7-迭代器一、迭代器的核心作用二、迭代器的五大分類與操作三、關鍵用法與代碼示例1. 迭代器的原理2. 迭代器用法與示例3. 迭代工具用法示例4. 使用技巧迭代器是C中連接容器與算法的通用接口,提供了一種訪問容器元素的統一方…

【0基礎3ds Max】學習計劃

3ds Max 作為一款功能強大的專業 3D 計算機圖形軟件,在影視動畫、游戲開發、建筑可視化、產品設計和工業設計等眾多領域有著廣泛的應用。 目錄前言一、第一階段:基礎認知(第 1 - 2 周)?二、第二階段:建模技術學習&…

用 Enigma Virtual Box 將 Qt 程序打包成單 exe

上一篇介紹了用windeployqt生成可運行的多文件程序,但一堆文件分發起來不夠方便。有沒有辦法將所有文件合并成一個 exe? 答案是肯定的 用Enigma Virtual Box工具就能實現。本文就來講解如何用它將 Qt 多文件程序打包為單一 exe,讓分發更輕松。 其中的 一定要選 第二個 一…

【LeetCode 熱題 100】45. 跳躍游戲 II

Problem: 45. 跳躍游戲 II 給定一個長度為 n 的 0 索引整數數組 nums。初始位置為 nums[0]。 每個元素 nums[i] 表示從索引 i 向后跳轉的最大長度。換句話說&#xff0c;如果你在索引 i 處&#xff0c;你可以跳轉到任意 (i j) 處&#xff1a; 0 < j < nums[i] 且 i j &…