學(xué)習(xí)日記 8.1
前言前一篇文章講了圖片讀取與顯示今天繼續(xù)看圖像運(yùn)算、閾值處理和噪聲去除。主要涉及圖像運(yùn)算圖像的加法運(yùn)算與加權(quán)融合閾值處理二值化、截斷等閾值操作以及圖像邊框的填充噪聲去除椒鹽噪聲的生成與多種濾波器的去噪效果對比一、圖像運(yùn)算1.1 使用 NumPy 的加法 運(yùn)算符直接用運(yùn)算符做圖像加法但 NumPy 的加法是取模運(yùn)算import cv2 a1 cv2.imread(3.png) b1 cv2.imread(4.jpg) a1 cv2.resize(a1, (500, 400)) b1 cv2.resize(b1, (500, 400)) NumPy 加法像素值相加后對 256 取模 c1 a1 10 # 每個像素值加 10 c2 a1[50:450, 50:400] b1[50:450, 50:400] # ROI 區(qū)域相加當(dāng)像素值超過 255 時NumPy 會將其對 256 取模。例如250 10 260取模后變成260 % 256 4這會導(dǎo)致原本應(yīng)該更亮的區(qū)域反而變暗出現(xiàn)“溢出回繞”的現(xiàn)象。1.2 使用 OpenCV 的 cv2.add() 函數(shù)OpenCV 提供了專門的加法函數(shù)cv2.add()它的處理方式是飽和運(yùn)算——超過 255 的值會被截斷為 255a2 cv2.imread(3.png) b2 cv2.imread(4.jpg) b2 cv2.resize(b2, (400, 400)) a2 cv2.resize(a2, (400, 400)) OpenCV 加法超過 255 的像素值會被截斷為 255飽和運(yùn)算 c3 cv2.add(a2, b2)運(yùn)算方式函數(shù)溢出處理NumPy 加法img1 img2取模運(yùn)算% 256OpenCV 加法cv2.add(img1, img2)飽和運(yùn)算截斷到 255小結(jié)在處理圖像加法時推薦使用cv2.add()因?yàn)樗苊饬巳∧2僮鲙淼摹胺瓷碑惓R曈X效果更加自然。1.3 圖像加權(quán)融合 —— cv2.addWeighted()有時候我們希望將兩張圖像按照一定比例混合而不是簡單地相加。這時候就可以使用cv2.addWeighted()# 參數(shù)img1, 權(quán)重1, img2, 權(quán)重2, 亮度偏移量 c4 cv2.addWeighted(a2, 0.7, b2, 0.3, 100)公式為dst α · img1 β · img2 γ其中 α 和 β 是兩幅圖像的權(quán)重γ 是亮度調(diào)節(jié)參數(shù)。在上面的代碼中a2占 70% 的權(quán)重b2占 30%最后再加上 100 的亮度偏移。這個函數(shù)在圖像疊加、水印添加、視頻特效等場景中很常用。二、圖像邊框與閾值處理2.1 為圖像添加邊框 —— cv2.copyMakeBorder()為圖像添加邊框可以用cv2.copyMakeBorder()支持多種填充方式import cv2 ys cv2.imread(4.jpg) top, bottom, left, right 50, 50, 50, 50 1. 常量邊框用固定顏色填充 constant cv2.copyMakeBorder(ys, top, bottom, left, right, borderTypecv2.BORDER_CONSTANT, value[229, 25, 80]) 2. 鏡像邊框以邊緣為軸進(jìn)行鏡像 reflect cv2.copyMakeBorder(ys, top, bottom, left, right, borderTypecv2.BORDER_REFLECT) 3. 鏡像邊框不含邊界與 REFLECT 類似但不包含邊界像素 reflect101 cv2.copyMakeBorder(ys, top, bottom, left, right, borderTypecv2.BORDER_REFLECT101) 4. 復(fù)制邊框復(fù)制邊緣像素 replicate cv2.copyMakeBorder(ys, top, bottom, left, right, borderTypecv2.BORDER_REPLICATE) 5. 環(huán)繞邊框用對面邊界的像素填充 warp cv2.copyMakeBorder(ys, top, bottom, left, right, borderTypecv2.BORDER_WRAP)五種邊框類型的效果對比邊框類型OpenCV 常量說明常量邊框BORDER_CONSTANT用指定顏色值填充邊框區(qū)域鏡像邊框BORDER_REFLECT以邊緣像素為鏡像軸向外鏡像擴(kuò)展如 fedcba|abcdefgh|hgfedcb反射101BORDER_REFLECT101以邊緣像素為對稱中心如 gfedcb|abcdefgh|gfedcba復(fù)制邊框BORDER_REPLICATE直接復(fù)制最邊緣的像素值如 aaaaaa|abcdefgh|hhhhhhh環(huán)繞邊框BORDER_WRAP用對面邊界的像素來填充如 cdefgh|abcdefgh|abcdefg默認(rèn)推薦BORDER_REFLECT101 是 OpenCV 中許多函數(shù)如濾波的默認(rèn)邊框處理方式它在大多數(shù)場景下表現(xiàn)最佳。2.2 閾值處理 —— cv2.threshold()閾值處理是圖像分割中最基礎(chǔ)的方法之一設(shè)定一個閾值將像素值與閾值比較根據(jù)比較結(jié)果對像素分類。OpenCV 提供了五種閾值處理類型image cv2.imread(4.jpg, 0) # 以灰度模式讀取 參數(shù)源圖像, 閾值, 最大值, 閾值類型 ret, binary cv2.threshold(image, 175, 255, cv2.THRESH_BINARY) # 二值化 ret1, binaryinv cv2.threshold(image, 175, 255, cv2.THRESH_BINARY_INV) # 反二值化 ret2, trunc cv2.threshold(image, 175, 255, cv2.THRESH_TRUNC) # 截斷 ret3, tozero cv2.threshold(image, 175, 255, cv2.THRESH_TOZERO) # 閾值歸零 ret4, tozeroinv cv2.threshold(image, 175, 255, cv2.THRESH_TOZERO_INV) # 反閾值歸零閾值類型處理規(guī)則效果描述THRESH_BINARYdst maxVal 若 src thresh否則 0超過閾值為白色否則為黑色THRESH_BINARY_INVdst 0 若 src thresh否則 maxVal二值化的反轉(zhuǎn)版本THRESH_TRUNCdst thresh 若 src thresh否則 src超過閾值的像素被截斷為閾值THRESH_TOZEROdst src 若 src thresh否則 0低于閾值的像素歸零THRESH_TOZERO_INVdst 0 若 src thresh否則 src高于閾值的像素歸零返回值ret是實(shí)際使用的閾值在使用 Otsu 等自適應(yīng)方法時可能與傳入值不同binary等是處理后的圖像。應(yīng)用場景閾值處理常用于文檔掃描二值化、物體輪廓提取、前景/背景分離等任務(wù)。三、圖像噪聲與濾波3.1 椒鹽噪聲的生成椒鹽噪聲Salt-and-Pepper Noise是圖像中常見的噪聲類型表現(xiàn)為隨機(jī)出現(xiàn)的黑白像素點(diǎn)像撒了鹽和胡椒一樣??梢允謩幽M這種噪聲import numpy as np def add_peppersalt_noise(image, n10000): 向圖像添加椒鹽噪聲 Args: image: 輸入圖像 n: 噪聲點(diǎn)數(shù)量 Returns: 添加了噪聲的圖像 result image.copy() h, w image.shape[:2] # 獲取圖像的高和寬 for i in range(n): x np.random.randint(0, h) # 隨機(jī)行坐標(biāo) y np.random.randint(0, w) # 隨機(jī)列坐標(biāo) if np.random.randint(0, 2) 0: result[x][y] 0 # 黑點(diǎn)胡椒噪聲 else: result[x][y] 255 # 白點(diǎn)鹽噪聲 return result這段代碼會在圖像的隨機(jī)位置生成黑白噪聲點(diǎn)模擬真實(shí)場景中的椒鹽噪聲。3.2 均值濾波 —— cv2.blur() 與 cv2.boxFilter()均值濾波是最簡單的線性濾波方法它用像素鄰域的平均值來替代中心像素的值# 均值濾波5x5 的卷積核 blur_1 cv2.blur(noise, (5, 5)) 方框?yàn)V波當(dāng) normalizeTrue 時與均值濾波等效 boxFilter_1 cv2.boxFilter(noise, -1, (3, 3), normalizeTrue) 方框?yàn)V波normalizeFalse 時求和但不平均容易溢出 boxFilter_2 cv2.boxFilter(noise, -1, (3, 3), normalizeFalse)參數(shù)說明-1輸出圖像的深度-1表示與輸入圖像一致(3, 3)卷積核大小normalizeTrue是否對結(jié)果進(jìn)行歸一化處理注意當(dāng)normalizeFalse時方框?yàn)V波不再除以核面積像素值容易超過 255導(dǎo)致畫面一片白。3.3 高斯濾波 —— cv2.GaussianBlur()高斯濾波使用高斯函數(shù)作為權(quán)重分配離中心越近的像素權(quán)重越大去噪的同時能更好地保留邊緣信息# 高斯濾波核大小 (3,3)標(biāo)準(zhǔn)差為 1 Gaussian_Noise cv2.GaussianBlur(noise, (3, 3), 1)參數(shù)說明(3, 3)是高斯核的大小必須是奇數(shù)1是 X 方向的標(biāo)準(zhǔn)差如果設(shè)為 0則根據(jù)核大小自動計算。3.4 中值濾波 —— cv2.medianBlur()中值濾波是非線性濾波它用鄰域像素的中值替代中心像素對椒鹽噪聲的去除效果尤其出色# 中值濾波核大小為 3 medianB cv2.medianBlur(noise, 3)3.5 濾波效果對比結(jié)論對于椒鹽噪聲中值濾波是首選方案。它能在有效去除椒鹽噪聲的同時最大限度地保留圖像的邊緣細(xì)節(jié)。四、綜合實(shí)戰(zhàn)4.1 實(shí)戰(zhàn)一攝像頭實(shí)時畫面與背景圖融合這是一個綜合運(yùn)用圖像運(yùn)算的實(shí)戰(zhàn)案例實(shí)現(xiàn)攝像頭實(shí)時畫面與背景圖片的融合效果import cv2 cap cv2.VideoCapture(0) background cv2.imread(4.jpg) background cv2.resize(background, (640, 480)) background_gray cv2.cvtColor(background, cv2.COLOR_BGR2GRAY) if not cap.isOpened(): print(無法打開攝像頭) exit() while True: ret, frame cap.read() if not ret: break frame cv2.resize(frame, (640, 480)) frame_gray cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 彩色融合各占 50% 透明度 c1 cv2.addWeighted(frame, 0.5, background, 0.5, 100) 灰度融合各占 50% 透明度 c2 cv2.addWeighted(frame_gray, 0.5, background_gray, 0.5, 100) cv2.imshow(Color Fusion, c1) cv2.imshow(Gray Fusion, c2) 按下 ESC 鍵退出 if cv2.waitKey(60) 27: break cap.release() cv2.destroyAllWindows()4.2 實(shí)戰(zhàn)二視頻椒鹽噪聲處理對視頻文件逐幀添加椒鹽噪聲并使用中值濾波進(jìn)行去噪import cv2 import numpy as np def add_peppersalt_noise(image, n8000): result image.copy() h, w image.shape[:2] for i in range(n): x np.random.randint(0, h) y np.random.randint(0, w) if np.random.randint(0, 2) 0: result[x][y] 0 else: result[x][y] 255 return result cap cv2.VideoCapture(test.avi) if not cap.isOpened(): print(無法打開視頻文件) exit() while True: ret, frame cap.read() if not ret: break # 添加椒鹽噪聲 noise add_peppersalt_noise(frame) 中值濾波去噪 medianB cv2.medianBlur(noise, 3) 同時顯示三個窗口 cv2.imshow(Original, frame) # 原視頻 cv2.imshow(Noise, noise) # 含噪聲視頻 cv2.imshow(Denoised, medianB) # 去噪后視頻 if cv2.waitKey(60) 27: break cap.release() cv2.destroyAllWindows()五、總結(jié)今天的學(xué)習(xí)內(nèi)容涵蓋了 OpenCV 圖像處理的三個核心模塊模塊核心函數(shù)要點(diǎn)圖像運(yùn)算cv2.add(),cv2.addWeighted()區(qū)分 NumPy 取模加法與 OpenCV 飽和加法掌握加權(quán)融合閾值處理cv2.threshold(),cv2.copyMakeBorder()五種閾值類型 五種邊框填充方式濾波去噪cv2.blur(),cv2.boxFilter(),cv2.GaussianBlur(),cv2.medianBlur()椒鹽噪聲首選中值濾波這些知識都是后續(xù)學(xué)習(xí)更高級圖像處理操作如邊緣檢測、形態(tài)學(xué)操作、輪廓提取等的基礎(chǔ)建議動手運(yùn)行每一段代碼觀察不同參數(shù)帶來的效果變化。

相關(guān)新聞

Pintos實(shí)驗(yàn)2:用戶程序加載與系統(tǒng)調(diào)用實(shí)現(xiàn)全解析

Pintos實(shí)驗(yàn)2:用戶程序加載與系統(tǒng)調(diào)用實(shí)現(xiàn)全解析

1. 項(xiàng)目概述:從理論到實(shí)踐的Pintos操作系統(tǒng)實(shí)驗(yàn)如果你正在學(xué)習(xí)操作系統(tǒng)課程,或者對操作系統(tǒng)的內(nèi)部運(yùn)行機(jī)制充滿好奇,那么“Pintos”這個名字你一定不陌生。它是一個由斯坦福大學(xué)開發(fā),專門用于教學(xué)的小型操作系統(tǒng)內(nèi)核。而“實(shí)驗(yàn)2us…

2026/8/3 4:38:27 閱讀更多
研究生科研效率提升:5 款不花哨但管用的學(xué)術(shù)輔助工具盤點(diǎn)

研究生科研效率提升:5 款不花哨但管用的學(xué)術(shù)輔助工具盤點(diǎn)

隨著大模型爆發(fā),市面上的 AI 輔助科研工具鋪天蓋地。但很多同學(xué)在面對文獻(xiàn)綜述、數(shù)據(jù)處理和論文修改時,依然只會傻傻地用通用 AI 聊天框庫庫輸入指令。由于通用大模型的局限,寫出的東西不僅格式不規(guī)范,還經(jīng)常瞎編文獻(xiàn)。其實(shí)在科研…

2026/8/3 5:28:28 閱讀更多
SSM框架實(shí)現(xiàn)房屋銷售管理系統(tǒng)的核心技術(shù)解析

SSM框架實(shí)現(xiàn)房屋銷售管理系統(tǒng)的核心技術(shù)解析

1. 項(xiàng)目概述:Web版房屋銷售管理系統(tǒng)的核心價值去年幫朋友房產(chǎn)中介公司做系統(tǒng)升級時,他們還在用Excel表格管理上百套房源信息,每次修改房源狀態(tài)都要手動同步給5個業(yè)務(wù)員。這種場景正是Web版房屋銷售管理系統(tǒng)要解決的痛點(diǎn)——通過集中化、可視化…

2026/8/3 5:28:28 閱讀更多
Godot對話管理器性能優(yōu)化:10個技巧讓游戲?qū)υ捊z般順滑

Godot對話管理器性能優(yōu)化:10個技巧讓游戲?qū)υ捊z般順滑

1. 項(xiàng)目概述:為什么Godot對話管理器需要性能優(yōu)化?在Godot引擎里做游戲,尤其是敘事驅(qū)動或者對話密集的類型,比如視覺小說、RPG或者互動電影,一個流暢的對話系統(tǒng)絕對是核心體驗(yàn)的基石。我自己在項(xiàng)目里用Godot的Dialogue …

2026/8/3 5:28:28 閱讀更多
USB端點(diǎn)與管道:數(shù)據(jù)通信的核心機(jī)制解析

USB端點(diǎn)與管道:數(shù)據(jù)通信的核心機(jī)制解析

1. USB端點(diǎn)與管道:數(shù)據(jù)通信的毛細(xì)血管系統(tǒng)當(dāng)我們將U盤插入電腦時,那個小小的USB接口背后其實(shí)運(yùn)行著一套精密的通信機(jī)制。作為硬件開發(fā)者,我經(jīng)常需要與USB協(xié)議打交道,而端點(diǎn)和管道正是這套體系中最基礎(chǔ)卻最容易被忽視的核心概念。它…

2026/8/3 5:28:28 閱讀更多
YOLO(Ultralytics 框架)Tasks 任務(wù) + Modes 運(yùn)行模式 完整說明

YOLO(Ultralytics 框架)Tasks 任務(wù) + Modes 運(yùn)行模式 完整說明

說明介紹 YOLO(Ultralytics 框架)Tasks 任務(wù) + Modes 運(yùn)行模式 完整說明 這張圖是 Ultralytics YOLOv8/v10/v11 統(tǒng)一框架的兩大分類:Tasks(模型支持的 5 大 AI 任務(wù)類型)、Modes(7 種運(yùn)行操作模式) 一、Tasks 五大 AI 任務(wù)(模型能實(shí)現(xiàn)什么功能) 1. Detect(目標(biāo)檢測…

2026/8/3 5:18:28 閱讀更多
全球僅7家廠商通過ISO/IEC 27001認(rèn)證的名片AI引擎,我們逆向拆解了它的字段置信度熔斷機(jī)制

全球僅7家廠商通過ISO/IEC 27001認(rèn)證的名片AI引擎,我們逆向拆解了它的字段置信度熔斷機(jī)制

更多請點(diǎn)擊: https://kaifayun.com 第一章:全球僅7家廠商通過ISO/IEC 27001認(rèn)證的名片AI引擎概覽 名片AI引擎是企業(yè)級智能文檔處理的核心組件,專注于高精度OCR、語義結(jié)構(gòu)化提取與跨語言實(shí)體對齊。截至2024年第三季度,全球范圍內(nèi)僅…

2026/8/3 0:07:47 閱讀更多
MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動化發(fā)布完整解決方案

MoneyPrinterPlus實(shí)戰(zhàn)指南:AI視頻批量生成與自動化發(fā)布完整解決方案 【免費(fèi)下載鏈接】MoneyPrinterPlus AI一鍵批量生成各類短視頻,自動批量混剪短視頻,自動把視頻發(fā)布到抖音,快手,小紅書,視頻號上,賺錢從來沒有這么容易過! 支持本地語音模型chatTTS,fasterwhisper,…

2026/8/2 0:04:00 閱讀更多
3分鐘搞定!QQ空間歷史說說完整備份終極指南

3分鐘搞定!QQ空間歷史說說完整備份終極指南

3分鐘搞定!QQ空間歷史說說完整備份終極指南 【免費(fèi)下載鏈接】GetQzonehistory 獲取QQ空間發(fā)布的歷史說說 項(xiàng)目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾想過,那些年發(fā)過的QQ空間說說,那些記錄青春的文字…

2026/8/2 0:04:01 閱讀更多
AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O分配PCB板是應(yīng)用材料(Applied Materials)公司生產(chǎn)的一款用于半導(dǎo)體設(shè)備的I/O信號分配電路板。該型號(0100-02186)的核心特點(diǎn)如下:專用于Endura等半導(dǎo)體工藝腔室。集成信號路由與分配功能。連接控制…

2026/8/2 2:51:21 閱讀更多
Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動機(jī)

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動機(jī)

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動機(jī)是日本日清(Nissei)品牌的一款工業(yè)用三相異步電機(jī),適用于自動化設(shè)備及通用機(jī)械驅(qū)動。該型號(FFMN-32L-10-T0 40AX)的核心特點(diǎn)如下:三相交流異步電動機(jī)。額定…

2026/8/2 2:52:49 閱讀更多