圖像認知與OpenCV——圖像預處理

目錄

一、顏色加法

顏色加法

顏色加權加法

示例

二、顏色空間轉換?

RGB轉Gray(灰度)

RGB轉HSV

HSV轉RGB

示例

三、灰度化

最大值法

平均值法

加權平均值法

四、圖像二值化處理

?閾值法

反閾值法

截斷閾值法

低閾值零處理

超閾值法

OTSU

自適應二值化

均值

加權求和

五、圖像翻轉

總結


一、顏色加法

可以使用OpenCV的cv.add()函數把兩幅圖像相加,或者可以簡單地通過numpy操作添加兩個圖像,如res = img1 + img2。兩個圖像應該具有相同的大小和類型。

顏色加法

OpenCV加法和Numpy加法之間存在差異。OpenCV的加法是飽和操作,而Numpy添加是模運算。

# 飽和操作: cv.add(img1,img2)
# Numpy直接相加是取模運算,如250+10 = 260%256 = 4
x = np.uint8([[250]])
y = np.uint8([[10]])
xy1 = cv.add(x,y)
xy2 = x + y
print(xy1,xy2)

xy1采用OpenCV中的飽和運算,最大值為255,因為250+10=260>255,所以xy1=255

xy2采用Numpy的加法,采用去摸運算,結果與256取模運算,260%255=4,所以xy2=4

顏色加權加法

cv.addWeighted(img1,alpha,img2,beta,gamma)
結果:img1*alpha+img2*beta+gamma

img1,img2為圖片數據(數組)

alpha,beta為權重

gamma為亮度調整值

  • gamma > 0,圖像會變亮。

  • gamma < 0,圖像會變暗。

  • gamma = 0,則沒有額外的亮度調整。

示例

import cv2 as cv
import numpy as np# 讀取圖片
cao = cv.imread("../images/cao.png")
pig = cv.imread("../images/pig.png")
# 飽和操作: cv.add(img1,img2)
dst1 = cv.add(cao,pig)
# print(cao)
# print(pig)
# print(dst1)
cv.imshow('dst1',dst1)# Numpy直接相加是取模運算,如250+10 = 260%256 = 4
dst2 = cao + pig
cv.imshow('dst2',dst2)# 顏色加權加法: cv.addWeighted(img1,alpha,img2,beta,gamma) : img1*alpha+img2*beta+gamma
dst3 = cv.addWeighted(pig,0.7,cao,0.3,0)
cv.imshow('dst3',dst3)cv.waitKey(0)
cv.destroyAllWindows()

二、顏色空間轉換?

cv.cvtColor(img,code)

RGB轉Gray(灰度)

code = cv.COLOR_BGR2GRAY

RGB轉HSV

code =?cv.COLOR_BGR2HSV

HSV轉RGB

code =?cv.COLOR_BGR2RGB

示例

import cv2 as cv
# 讀取圖片
img = cv.imread("../images/1.jpg")
# 顏色轉換 cv.cvtColor(img,code)
gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
cv.imshow('gray',gray)
# 轉HSV
hsv = cv.cvtColor(img,cv.COLOR_BGR2HSV)
cv.imshow('hsv',hsv)
# 轉RGB
rgb = cv.cvtColor(img,cv.COLOR_BGR2RGB)
cv.imshow('rgb',rgb)cv.waitKey(0)
cv.destroyAllWindows()

三、灰度化

最大值法

對于彩色圖像的每個像素,它會從R、G、B三個通道的值中選出最大的一個,并將其作為灰度圖像中對應位置的像素值。

import cv2 as cv
import numpy as np# 讀取圖片
pig = cv.imread("../images/pig.png")
img = np.zeros((pig.shape[0],pig.shape[1]),dtype=np.uint8)
# 循環遍歷
for i in range(pig.shape[0]):for j in range(pig.shape[1]):img[i,j] = max(pig[i,j,:])
cv.imshow("img",img)
cv.waitKey(0)
cv.destroyAllWindows()

平均值法

對于彩色圖像的每個像素,它會將R、G、B三個通道的像素值全部加起來,然后再除以三,得到的平均值就是灰度圖像中對應位置的像素值。

import cv2 as cv
import numpy as np# 讀取圖片
pig = cv.imread("../images/pig.png")
img = np.zeros((pig.shape[0],pig.shape[1]),dtype=np.uint8)
# 循環遍歷
for i in range(pig.shape[0]):for j in range(pig.shape[1]):# int():轉為更大的數據類型,防止溢出img[i,j] = (int(pig[i,j,0])+int(pig[i,j,1])+int(pig[i,j,2]))//3cv.imshow('img', img)
cv.waitKey(0)
cv.destroyAllWindows()

注:圖像數據都是整數,需要轉換為int型,結果也必須為整數,所以整除

加權平均值法

對于彩色圖像的每個像素,它會按照一定的權重去乘以每個通道的像素值,并將其相加,得到最后的值就是灰度圖像中對應位置的像素值。

import cv2 as cv
import numpy as np# 讀取圖片
pig = cv.imread("../images/pig.png")
img = np.zeros((pig.shape[0],pig.shape[1]),dtype=np.uint8)
# 定義權重
wb,wg,wr=0.114,0.587,0.299# 循環遍歷
for i in range(pig.shape[0]):for j in range(pig.shape[1]):img[i,j] = round(wb*pig[i,j,0])+round(wg*pig[i,j,1])+round(wr*pig[i,j,2])cv.imshow("img",img)
cv.waitKey(0)
cv.destroyAllWindows()

四、圖像二值化處理

將某張圖像的所有像素改成只有兩種值之一

操作的圖像必須為灰度圖,所以處理前需要進行灰度化處理

_,binary = cv2.threshold(img,thresh,maxval,type)

  • img:輸入圖像,要進行二值化處理的灰度圖。

  • thresh:設定的閾值。當像素值大于(或小于,取決于閾值類型)thresh時,該像素被賦予的值。

  • type:閾值處理的類型。

  • 返回值:

    • 第一個值(通常用下劃線表示):計算出的閾值,若使用自適應閾值法,會根據算法自動計算出這個值。

    • 第二個值(binary):二值化后的圖像矩陣。與輸入圖像尺寸相同。

?閾值法

將灰度圖中的每一個像素值與該閾值進行比較,小于等于閾值的像素就被設置為0(通常代表背景),大于閾值的像素就被設置為maxval

type =?cv.THRESH_BINARY

反閾值法

與閾值法相反。反閾值法是當灰度圖的像素值大于閾值時,該像素值將會變成0(黑),當灰度圖的像素值小于等于閾值時,該像素值將會變成maxval

type =?cv.THRESH_BINARY_INV

截斷閾值法

截斷閾值法,指將灰度圖中的所有像素與閾值進行比較,像素值大于閾值的部分將會被修改為閾值,小于等于閾值的部分不變

type =?cv.THRESH_TRUNC

低閾值零處理

低閾值零處理,像素值小于等于閾值的部分被置為0(也就是黑色),大于閾值的部分不變。

type =?cv.THRESH_TOZERO

超閾值法

超閾值零處理,與低閾值零處理相反,就是將灰度圖中的每個像素與閾值進行比較,像素值大于閾值的部分置為0,像素值小于等于閾值的部分不變

type =?cv.THRESH_TOZERO_INV

OTSU

OTSU算法就是在灰度圖的像素值范圍內遍歷閾值T,使得g最大,基本上雙峰圖片的閾值T在兩峰之間的谷底。

g就是前景與背景兩類之間的方差,這個值越大,說明前景和背景的差別就越大,效果就越好。

THRESH_OTSU 通常與 THRESH_BINARYTHRESH_BINARY_INV 結合使用。

type =?cv.THRESH_BINARY+cv.THRESH_OTSU? 或 cv.THRESH_BINARY_INV+cv.THRESH_OTSU

手動設置的thresh值無效,閾值通過OTSU函數自動計算

自適應二值化

自適應二值化更加適合用在明暗分布不均的圖片

自適應二值化方法會對圖像中的所有像素點計算其各自的閾值

與OTSU類似,必須且只能結合一個閾值法或反閾值法

cv2.adaptiveThreshold(image_np_gray, maxval , cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, blockSize , c)

  • blockSize:選取的小區域的面積,如7就是7*7的小塊。
  • c:最終閾值等于小區域計算出的閾值再減去此值

均值

根據選中點一定范圍內的平均值作為閾值

    加權求和

    根據高斯權重核求加權,對小區域內的像素進行加權求和得到新的閾值,其權重值來自于高斯分布

    五、圖像翻轉

    • cv2.flip(img,flipcode)

    • 參數

      • im. 要翻轉的圖像

      • flipcode: 指定翻轉類型的標志

        • flipcode=0: 垂直翻轉,圖片像素點沿x軸翻轉

        • flipcode>0: 水平翻轉,圖片像素點沿y軸翻轉

        • flipcode<0: 水平垂直翻轉,水平翻轉和垂直翻轉的結合

    示例?

    import cv2 as cv# 讀取圖片
    face = cv.imread("../images/face.png")
    cv.imshow("face",face)
    # 圖像翻轉/鏡像旋轉 : 以圖像中心為原點  cv.flip(img,flipCode)
    # flipCode = 0 : 垂直翻轉
    flip_0 = cv.flip(face,0)
    cv.imshow('flip_0', flip_0)
    # flipCode = 1 : 水平翻轉
    flip_1 = cv.flip(face,1)
    cv.imshow('flip_1', flip_1)
    # flipCode = -1 : 水平垂直翻轉
    flip_2 = cv.flip(face,-1)
    cv.imshow('flip_2',flip_2)cv.waitKey(0)
    cv.destroyAllWindows()

    ?效果

    總結

    本文介紹了圖像預處理中的一些內容,顏色加法包括平均值和加權加法,其中平均值包括OpenCV飽和加法與Numpy模運算加法;顏色空間轉換包括灰度、RGB、HSV三者的轉換;灰度化處理包括最大值法、平均值法、加權平均值法;圖像二值化處理包括5種閾值方法和自適應二值化;圖像反轉包括水平翻轉、垂直翻轉、雙向翻轉。

    以上就是本章所有內容,感謝觀看。

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

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

    相關文章

    Vue 3 組件通信全解析:從 Props 到 Pinia 的深入實踐

    引言 Vue 3 作為現代前端框架的代表之一&#xff0c;以其靈活性和高效性受到開發者的廣泛喜愛。在 Vue 3 中&#xff0c;組件是構建用戶界面的核心單元&#xff0c;而組件之間的通信則是實現動態交互和數據流動的關鍵環節。無論是簡單的父子組件通信&#xff0c;還是復雜的跨組…

    CodeBuddy IDE實戰:用AI全棧能力快速搭建課程表網頁

    聲明&#xff1a;本文僅是實踐測評&#xff0c;并非廣告 1.前言 在數字化開發的浪潮中&#xff0c;工具的革新往往是效率躍遷的起點。騰訊云 CodeBuddy IDE 是 “全球首個產設研一體 AI 全棧開發平臺” &#xff0c;它不僅打破了產品、設計與研發的職能壁壘&#xff0c;更重新…

    11. HTML 中 DOCTYPE 的作用

    總結H5 的聲明HTML5 的 DOCTYPE 聲明 HTML5 中的 <!DOCTYPE html> 聲明用于告訴瀏覽器當前文檔使用的是 HTML5 的文檔類型。它必須是文檔中的第一行內容&#xff08;在任何 HTML 標簽之前&#xff09;&#xff0c;以確保瀏覽器能夠正確地解析和渲染頁面。DOCTYPE 的作用 …

    Linux C 網絡基礎編程

    基礎知識在進行網絡編程之前&#xff0c;我們需要簡單回顧一下計算機網絡五層模型的網絡層和傳輸層&#xff0c;這兩層在面向后端編程時用的最多。物理層和鏈路層過于底層&#xff0c;已經完全由內核協議棧實現&#xff0c;不再細述。這里假設讀者已經對計算機網絡有一個大致的…

    循環神經網絡--NLP基礎

    一、簡單介紹NLP&#xff08;Natural Language Processing&#xff09;&#xff1a;自然語言處理是人工智能和語言領域的一個分支&#xff0c;它涉及計算機和人類語言之間的相互作用。二、NLP基礎概念詞表&#xff08;詞庫&#xff09;&#xff1a;文本數據集出現的所有單詞的集…

    【Android】約束布局總結(1)

    三三要成為安卓糕手 零&#xff1a;創建布局文件方式 1&#xff1a;創建步驟ctrl alt 空格 設置根元素2&#xff1a;處理老版本約束布局 在一些老的工程中&#xff0c;constrainlayout可能沒有辦法被直接使用&#xff0c;這里需要手動添加依賴implementation androidx.const…

    S7-200 SMART 數字量 I/O 組態指南:從參數設置到實戰案例

    在工業自動化控制中&#xff0c;PLC 的數字量輸入&#xff08;DI&#xff09;和輸出&#xff08;DO&#xff09;是連接傳感器、執行器與控制系統的 “神經末梢”。西門子 S7-200 SMART 作為一款高性價比的小型 PLC&#xff0c;其數字量 I/O 的靈活組態直接影響系統的穩定性與響…

    可調諧激光器原理與設計 【DFB 與 DBR 激光器剖析】

    可調諧激光器原理與設計 【DFB 與 DBR 激光器剖析】1. 可調諧激光器的原理與分類簡介2. DFB 與 DBR 激光器結構原理比較2.1 DFB&#xff08;Distributed Feedback Laser&#xff09;激光器2.2 DBR&#xff08;Distributed Bragg Reflector&#xff09;激光器2.3 DFB 激光器與 D…

    【前端工程化】前端項目開發過程中如何做好通知管理?

    在企業級后臺系統中&#xff0c;通知是保障團隊協作、監控系統狀態和及時響應問題的重要手段。與 C 端產品不同&#xff0c;B 端更關注構建完成、部署狀態、異常報警等關鍵節點的推送機制。 本文主要圍繞通知場景、通知內容、通知渠道、自動化集成等方面展開&#xff0c;適用于…

    MySQL 9.4.0創新版發布,AI開始輔助編寫發布說明

    2025 年 7 月 22 日&#xff0c;MySQL 9.4.0 正式發布。 作為一個創新版&#xff0c;MySQL 9.4.0 最大的創新應該就是使用 Oracle HeatWave GenAI 作為助手幫助編寫版本發布說明了。難道下一步要開始用 AI 輔助編寫數據庫文檔了&#xff1f; 該版本包含的核心功能更新以及問題修…

    基于WebSockets和OpenCV的安卓眼鏡視頻流GPU硬解碼實現

    基于WebSockets和OpenCV的安卓眼鏡視頻流GPU硬解碼實現 前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家&#xff0c;覺得好請收藏。點擊跳轉到網站。 1. 項目概述 本項目旨在實現一個通過WebSockets接收…

    人大金倉 kingbase 連接數太多, 清理數據庫連接數

    問題描述 kingbase 連接數太多, 清理數據庫連接數 [rootFCVMDZSZNST25041 ~]# su root [rootFCVMDZSZNST25041 ~]# [rootFCVMDZSZNST25041 ~]# su kingbase [kingbaseFCVMDZSZNST25041 root]$ [kingbaseFCVMDZSZNST25041 root]$ ksql could not change directory to "/r…

    SpringMVC相關基礎知識

    1. servlet.multipart 大小配置 SpringBoot 文件上傳接口中有 MultipartFile 類型的文件參數,上傳較大文件時報錯: org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size exceeded; nested exception is java.lang.IllegalStateExceptio…

    HCIP第一次實驗報告

    一.實驗需求及拓撲圖&#xff1a;二.實驗需求分析根據提供的網絡拓撲圖和實驗要求&#xff0c;以下是對實驗需求的詳細分析&#xff1a;R5作為ISP:R5只能進行IP地址配置&#xff0c;其所有接口均配置為公有IP地址。認證方式:R1和R5之間使用PPP的PAP認證&#xff0c;R5為主認證方…

    React入門學習——指北指南(第五節)

    React 交互性:過濾與條件渲染 在前文我們學習了 React 中事件處理和狀態管理的基礎。本節將聚焦兩個重要的進階技巧 ——條件渲染(根據狀態動態顯示不同 UI)和列表過濾(根據條件篩選數據),這兩者是構建交互式應用的核心能力,能讓界面根據用戶操作呈現更智能的響應。 條…

    學習嵌入式的第二十九天-數據結構-(2025.7.16)線程控制:互斥與同步

    以下是您提供的文本內容的排版整理版本。我已根據內容主題將其分為幾個主要部分&#xff08;互斥鎖、信號量、死鎖、IPC進程間通信、管道操作&#xff09;&#xff0c;并使用清晰的結構組織信息&#xff1a;代碼片段用代碼塊格式&#xff08;指定語言為C&#xff09;突出顯示。…

    COZE官方文檔基礎知識解讀第六期 ——數據庫和知識庫

    一&#xff0c;一鍵直連數據上傳&#xff0c;存儲&#xff0c;使用 火山方舟的數據庫和知識庫的核心&#xff0c;都是基于開源的數據庫產品&#xff08;mysql&#xff0c;向量數據庫等&#xff09;&#xff0c;將數據庫交互的邏輯封裝在后端&#xff0c;與前端做耦合&#xff0…

    生產環境使用云服務器(centOS)部署和使用MongoDB

    部署MongoDB流程1. ?安裝MongoDB?版本選擇建議?CentOS 7?&#xff1a;推薦MongoDB 4.4.x&#xff08;兼容性好&#xff09;?CentOS 8/9?&#xff1a;建議最新穩定版&#xff08;如6.0&#xff09;&#xff0c;需單獨安裝mongodb-database-tools安裝步驟1.添加官方倉庫# 添…

    思博倫第二到三層測試儀(打流儀)TestCenter 2U硬件安裝及機箱加電_雙極未來

    &#xff08;1&#xff09;安裝板卡&#xff1a;上圖中共 4 個紅色線框&#xff0c;上邊兩個紅色線條框住的是機箱的左右兩側導軌&#xff0c;下邊兩條紅色 線條框住的是板卡拉手條&#xff08;用于承載板卡PCB的金屬板&#xff09;左右兩邊的邊沿。 安裝時將拉手條兩邊的邊沿與…

    【華為】筆試真題訓練_20250611

    本篇博客旨在記錄自已的筆試刷題的練習&#xff0c;里面注有詳細的代碼注釋以及和個人的思路想法&#xff0c;希望可以給同道之人些許幫助。本人也是小白&#xff0c;水平有限&#xff0c;如果文章中有什么錯誤或遺漏之處&#xff0c;望各位可以在評論區指正出來&#xff0c;各…