OpenCV day5

函數內容接上文:OpenCV day4-CSDN博客

目錄

9.cv2.adaptiveThreshold():

10.cv2.split():

11.cv2.merge():

12.cv2.add():

13.cv2.subtract():

14.cv2.multiply():

15.cv2.divide():

16.cv2.bitwise_and():

17.cv2.bitwise_or():

18.cv2.inRange():

19.cv2.getRotationMatrix2D():

21.cv2.flip():

22.cv2.resize():

23.cv2.getPerspectiveTransform():

24.cv2.warpPerspective():

透視變換練習1:

透視變換練習2:


9.cv2.adaptiveThreshold():

功能對圖像進行局部自適應閾值化,解決光照不均問題,生成二值圖像。
參數1.?src:輸入灰度圖像(單通道)。
2.?maxValue:滿足條件時賦予的像素值(如255)。
3.?adaptiveMethod:閾值計算方式(ADAPTIVE_THRESH_MEAN_C?或?ADAPTIVE_THRESH_GAUSSIAN_C)。
4.?thresholdType:二值化類型(THRESH_BINARY?或?THRESH_BINARY_INV)。
5.?blockSize:局部鄰域大小(奇數,如11)。
6.?C:從均值/高斯均值中減去的常數(用于微調閾值)。
返回值二值化后的圖像(numpy.ndarray)。

關鍵區別

  • 普通閾值(如cv2.threshold):全局統一閾值。

  • 自適應閾值:每個像素的閾值根據周圍像素動態計算,適合光照不均的圖像。

10.cv2.split():

功能將多通道圖像(如BGR)拆分為單通道數組。
參數src:輸入的多通道圖像(numpy.ndarray,如BGR格式的3通道圖像)。
返回值返回單通道數組的元組(如BGR圖像返回(B, G, R)三個通道)。

11.cv2.merge():

功能將多個單通道數組合并成一個多通道圖像(如合并 B、G、R 通道成彩色圖像)。
參數mv:一個包含單通道數組的列表或元組(如?[B, G, R])。
返回值合并后的多通道圖像(numpy.ndarray)。

關鍵點

  • 通常與?cv2.split()?配合使用,用于通道分離后的重新合并。

  • 輸入的通道順序決定輸出圖像的格式(如?[R, G, B]?會生成 RGB 圖像,而 OpenCV 默認是 BGR)。

12.cv2.add():

功能對兩張圖像(或圖像與標量)進行飽和加法運算(像素值超過最大值時截斷)。
參數1.?src1:第一張輸入圖像或標量值。
2.?src2:第二張輸入圖像或標量值。
3.?mask(可選):掩膜,指定操作區域。
4.?dtype(可選):輸出數據類型(如?cv2.CV_8U)。
返回值加法結果圖像(numpy.ndarray)。

關鍵特性

  • 飽和運算:結果超出范圍時自動截斷(如?uint8?超過 255 則取 255)。

  • 與?numpy.add()?區別:NumPy 是模運算(256 → 0),而 OpenCV 是截斷(256 → 255)。

13.cv2.subtract():

功能對兩張圖像(或圖像與標量)進行飽和減法運算(像素值低于最小值時截斷為0)。
參數1.?src1:被減圖像或標量值。
2.?src2:減數圖像或標量值。
3.?mask(可選):掩膜,指定操作區域。
4.?dtype(可選):輸出數據類型(如?cv2.CV_8U)。
返回值減法結果圖像(numpy.ndarray)。

14.cv2.multiply():

功能對兩張圖像(或圖像與標量)進行飽和乘法運算(像素值超過最大值時截斷)。
參數1.?src1:第一張輸入圖像或標量值。
2.?src2:第二張輸入圖像或標量值。
3.?scale(可選):縮放因子(默認1.0)。
4.?dtype(可選):輸出數據類型(如?cv2.CV_32F)。
返回值乘法結果圖像(numpy.ndarray)。

15.cv2.divide():

功能對兩張圖像(或圖像與標量)進行除法運算(支持飽和處理和類型轉換)。
參數1.?src1:被除數圖像或標量值。
2.?src2:除數圖像或標量值。
3.?scale(可選):縮放因子(默認1.0)。
4.?dtype(可選):輸出數據類型(如?cv2.CV_32F)。
返回值除法結果圖像(numpy.ndarray)。

16.cv2.bitwise_and():

功能對兩張圖像(或圖像與標量)進行按位與運算(像素級二進制AND操作)。
參數1.?src1:第一張輸入圖像或標量值。
2.?src2:第二張輸入圖像或標量值。
3.?mask(可選):掩膜,指定操作區域(僅對掩膜非零區域操作)。
4.?dst(可選):輸出數組。
返回值按位與結果圖像(numpy.ndarray)。

關鍵特性

  • 二進制操作:對每個像素的二進制值逐位進行AND運算(同1得1,否則得0)。

  • 掩膜應用:可通過?mask?參數限定操作區域(非掩膜區域輸出為0)。

  • 典型用途:圖像掩膜提取、ROI操作、位平面分析。

17.cv2.bitwise_or():

功能對兩張圖像(或圖像與標量)進行按位或運算(像素級二進制OR操作)。
參數1.?src1:第一張輸入圖像或標量值。
2.?src2:第二張輸入圖像或標量值。
3.?mask(可選):掩膜,指定操作區域(僅對掩膜非零區域操作)。
4.?dst(可選):輸出數組。
返回值按位或結果圖像(numpy.ndarray)。

對比其他位操作

  • cv2.bitwise_and():邏輯與(交集)

  • cv2.bitwise_or():邏輯或(并集)

  • cv2.bitwise_xor():邏輯異或(差異)

  • cv2.bitwise_not():邏輯非(取反)

18.cv2.inRange():

功能檢查圖像中像素值是否位于指定范圍內,生成二值掩膜(符合范圍=255,否則=0)。
參數1.?src:輸入圖像(單通道或多通道)。
2.?lowerb:范圍下限(標量或數組,如?[min_B, min_G, min_R])。
3.?upperb:范圍上限(標量或數組,如?[max_B, max_G, max_R])。
返回值二值掩膜圖像(numpy.ndarray,符合范圍=255,否則=0)。

關鍵特性

  • 多通道支持:可直接處理彩色圖像(需為?lowerb?和?upperb?提供每個通道的閾值)。

  • 典型用途:顏色過濾、背景分割、對象檢測(如提取綠色區域)。

19.cv2.getRotationMatrix2D():

功能生成一個?2D旋轉矩陣,用于圖像的旋轉操作(圍繞指定中心點旋轉)。
參數1.?center:旋轉中心坐標?(x, y)
2.?angle:旋轉角度(順時針為正,單位:度)。
3.?scale:縮放因子(1.0表示不縮放)。
返回值2×3的仿射變換矩陣(numpy.ndarray,可直接用于?cv2.warpAffine())。

關鍵特性

  • 旋轉方向:角度為正值時順時針旋轉,負值逆時針旋轉。

  • 中心點:旋轉圍繞該點進行,若設為圖像中心則保持旋轉后內容在視野內。

  • 縮放:可同時縮放圖像(如?scale=0.5?旋轉并縮小一半)。

功能對圖像應用仿射變換(旋轉、平移、縮放、傾斜等線性變換)。
參數1.?src:輸入圖像。
2.?M:2×3仿射變換矩陣(如?cv2.getRotationMatrix2D()?生成的矩陣)。
3.?dsize:輸出圖像尺寸?(width, height)
4.?flags(可選):插值方法(如?cv2.INTER_LINEAR)。
5.?borderMode(可選):邊界填充方式(如?cv2.BORDER_CONSTANT)。
6.?borderValue(可選):填充邊界時的顏色(默認為黑色)。
返回值變換后的圖像(numpy.ndarray)。

關鍵特性

  • 仿射變換:保持直線和平行性,適用于旋轉、平移、縮放等操作。

  • 插值方法:推薦?cv2.INTER_LINEAR(平衡速度與質量)或?cv2.INTER_CUBIC(高質量)。

  • 邊界處理:超出原圖范圍的區域默認填充黑色,可通過?borderValue?修改(如填充白色)。

21.cv2.flip():

功能對圖像進行翻轉操作(水平、垂直或雙向翻轉)。
參數1.?src:輸入圖像。
2.?flipCode:翻轉方向控制:
  ??0:垂直翻轉(沿X軸)
  ??1:水平翻轉(沿Y軸)
  ??-1:雙向翻轉(先水平后垂直)
返回值翻轉后的圖像(numpy.ndarray)。

關鍵特性

  • 原地操作:不修改原圖,返回新圖像。

  • 無插值:直接像素映射,速度極快。

  • 多通道支持:彩色圖像(BGR/RGB)也可直接翻轉。

22.cv2.resize():

項目說明
功能調整圖像尺寸(放大或縮小)。
參數1.?src:輸入圖像。
2.?dsize:目標尺寸?(width, height)
3.?fx,?fy(可選):沿x/y軸的縮放因子(與dsize二選一)。
4.?interpolation(可選):插值方法(默認cv2.INTER_LINEAR)。
返回值縮放后的圖像(numpy.ndarray)。

常用插值方法

  • cv2.INTER_NEAREST:最近鄰(速度快,質量低)。

  • cv2.INTER_LINEAR:雙線性(默認,平衡速度與質量)。

  • cv2.INTER_CUBIC:雙三次(高質量,適合放大)。

  • cv2.INTER_AREA:區域插值(適合縮小)。

注意

  • dsize?參數格式為?(寬度, 高度),與 numpy 的?(行, 列)?相反。

  • 同時指定?dsize?和?fx/fy?時,dsize?優先生效。

23.cv2.getPerspectiveTransform():

功能計算?透視變換矩陣(從4個源點映射到4個目標點的3×3變換矩陣)。
參數1.?src:源圖像中4個點的坐標(np.float32格式,形如[[x1,y1],...,[x4,y4]])。
2.?dst:目標圖像中對應的4個點坐標(格式同src)。
返回值3×3透視變換矩陣(numpy.ndarray,用于cv2.warpPerspective())。

關鍵特性

  1. 點對要求

    • 需要?精確4組對應點(不能多或少)。

    • 點順序需一致(如左上、右上、左下、右下)。

注意事項

  • 輸入點類型:必須是np.float32,否則報錯。

  • 點順序一致性:若源點與目標點順序不匹配,會導致扭曲異常。

  • 與仿射變換區別:透視變換需要4個點(仿射變換僅需3個點)。

24.cv2.warpPerspective():

功能對圖像應用透視變換(將圖像投影到新的視角平面,如傾斜矯正、視角轉換)。
參數1.?src:輸入圖像。
2.?M:3×3透視變換矩陣(來自cv2.getPerspectiveTransform())。
3.?dsize:輸出圖像尺寸?(width, height)
4.?flags(可選):插值方法(如?cv2.INTER_LINEAR)。
5.?borderMode(可選):邊界填充方式(如?cv2.BORDER_CONSTANT)。
6.?borderValue(可選):填充顏色(默認為黑色)。
返回值透視變換后的圖像(numpy.ndarray)。

核心特性

  1. 透視變換矩陣

    • 需通過?cv2.getPerspectiveTransform()?或手動計算得到3×3矩陣。

  2. 插值方法

    • cv2.INTER_LINEAR(默認):平衡速度與質量。

    • cv2.INTER_CUBIC:高質量,適合放大。

    • cv2.INTER_NEAREST:速度快但鋸齒明顯。

  3. 邊界處理

    • 默認填充黑色(borderValue=(0, 0, 0)),可設置為白色或其他顏色。

透視變換練習1:

import cv2
import numpy as npimg = cv2.imread('../images/youhua.png')
cv2.imshow("original image", img)
h, w, _ = img.shape# 源圖像中四個角點
src = np.array([[170, 140],[630, 40],[80, 500],[660, 560]], dtype="float32")# 目標圖像中四個點
dst = np.array([[50, 10],[700, 10],[50, 550],[700, 550]], dtype="float32")# 計算透視變換矩陣
M = cv2.getPerspectiveTransform(src, dst)# 指定背景為白色
per_img = cv2.warpPerspective(img, M, (w, h), borderValue=(255, 255, 255))cv2.imshow("perspective image", per_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

透視變換練習2:

import cv2
import numpy as npimg = cv2.imread('../images/hello.png')
cv2.imshow("original image", img)
h, w, _ = img.shape# 源圖像中四個角點
src = np.float32([[80, 240],[350, 120],[200, 430],[450, 258]])# 目標圖像中四個點
dst = np.float32([[0, 0],[450, 0],[0, 330],[450, 330]
])# 計算透視變換矩陣
M = cv2.getPerspectiveTransform(src, dst)# 指定背景為白色
per_img = cv2.warpPerspective(img, M, (450, 330), borderValue=(255, 255, 255))cv2.imshow("perspective image", per_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

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

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

相關文章

智能運維新范式

在制造業、設備制造、工業物聯網等領域,“服務周期長、響應效率低” 始終是產品運維的痛點 —— 設備故障突發時,工程師千里奔赴現場的耗時耗力;非計劃停機帶來的生產損失;客戶對服務體驗的更高期待…… 傳統運維模式早已難以適應…

實現定時發送郵件,以及時間同步

定時發送郵件 部署郵件服務 查看有沒有安裝mailx,安裝了 [root192 ~]# rpm -q mailx mailx-12.5-43.fc38.x86_64去網易拿一下授權碼,寫到配置文件里 vim /etc/mail.rcset fromxxxxxxx163.com set smtpsmtp.163.com set smtp-auth-userxxxxxxx163.com set smtp-auth-passwor…

狀態模式:有限狀態機在電商訂單系統中的設計與實現

狀態模式:有限狀態機在電商訂單系統中的設計與實現 一、模式核心:用狀態切換驅動行為變化 在電商訂單系統中,訂單狀態會隨著用戶操作動態變化:「已創建」的訂單支付后變為「已支付」,發貨后變為「已發貨」&#xff0…

ubuntu 24.02部署java web服務

ubuntu 24.02 版本推薦使用jdk 21版本部署java web服務,開發后先使用sudo java -jar xxx.jar驗證運行結果。 jdk安裝:sudo apt install openjdk-21-jdk-headless 編輯服務文本 [Unit] DescriptionWebMgr Java Application Afternetwork.target mysql.…

深入淺出:LDAP 協議全面解析

在網絡安全和系統管理的世界中,LDAP(輕量級目錄訪問協議,Lightweight Directory Access Protocol)是一個不可忽視的核心技術。它廣泛應用于身份管理、認證授權以及目錄服務,尤其在企業級環境中占據重要地位。本文將從基…

AI書籍大模型微調-基于亮數據獲取垂直數據集

大模型的開源,使得每位小伙伴都能獲得AI的加持,包括你可以通過AIGC完成工作總結,圖片生成等。這種加持是通用性的,并不會對個人的工作帶來定制的影響,因此各個行業都出現了垂直領域大模型。 垂直大模型是如何訓練出來…

【2025軟考高級架構師】——計算機系統基礎(7)

摘要 本文主要介紹了計算機系統的組成,包括硬件和軟件兩大部分。硬件由處理器、存儲器、總線、接口和外部設備等組成,軟件則涵蓋系統軟件和應用軟件。文章還詳細闡述了馮諾依曼計算機的組成結構,包括 CPU、主存儲器、外存等,并解…

AI大模型之模型幻覺

模型幻覺(Model Hallucination)是大模型生成內容時脫離事實、虛構信息的一種現象,尤其在語言模型、圖像生成模型等中較為常見。為了更深入地理解這一現象,我們可以將其分為兩個維度進行分析:內在幻覺(Intrinsic Hallucination) 和 外在幻覺(Extrinsic Hallucination)。…

spring Ai---向量知識庫(一)

在一些垂直領域以及公司內部信息相關或者實時性相關的大模型應用,就無法直接使用chatGPT。 這個時候,向量知識庫就進入了。 通過坐標向量最接近的即為匹配相關答案。 向量模型定義:將文檔向量化,保證內容越相似的文本,…

Viper配置管理筆記

一、什么是 Viper? Viper 是 Go 語言的一個強大工具,就像一個超級管家,專門負責幫你打理程序的各種配置。它能把配置文件(比如 JSON、YAML、TOML 等格式)里的內容讀出來,還能監控配置文件的變化&#xff0…

實現對象之間的序列化和反序列化

1.什么是序列化? 在項目的開發中,為了讓前端更好的分析后端返回的結果,我們一般會將返回的信息進行序列化,序列化就是將返回對象的狀態信息轉換為一種標準化的格式,方便在網絡中傳輸也方便打印日志時號觀察&#xff0…

ThreadLocal - 原理與應用場景詳解

ThreadLocal 的基礎概念 在 Java 的多線程世界里,線程之間的數據共享與隔離一直是一個關鍵話題。如果處理不當,很容易引發線程安全問題,比如數據混亂、臟讀等。而 ThreadLocal 這個工具類,就像是為線程量身定制的 “私人儲物柜”…

iwebsec靶場 文件包含關卡通關筆記11-ssh日志文件包含

目錄 日志包含 1.構造惡意ssh登錄命令 2.配置ssh日志開啟 (1)配置sshd (2)配置rsyslog (3)重啟服務 3.寫入webshell木馬 4.獲取php信息滲透 5.蟻劍連接 日志包含 1.構造惡意ssh登錄命令 ssh服務…

Diamond軟件的使用--(4)搭建Modelsim仿真庫

使用Modelsim仿真的原因 由于diamond自帶的仿真軟件Active-HDL需要另一套Lisence,所以我們使用第三方仿真軟件Modelsim來進行仿真。 Modelsim10.5下載鏈接如下:https://pan.baidu.com/s/1G9699ocWm1UTqK2yS2igyQ 提取碼:lewa 一、Lattice仿…

2025年4月19日,四月第三周,C++,字符串數組答案解析

答案與解析 1. 輸出字符串數組所有元素 cpp 復制 下載 #include <iostream> using namespace std;int main() {string arr[] = {"apple", "banana", "cherry"};int n = sizeof(arr)/sizeof(arr[0]); // 計算數組長度for (int i = 0; …

C語言之高校學生信息快速查詢系統的實現

&#x1f31f; 嗨&#xff0c;我是LucianaiB&#xff01; &#x1f30d; 總有人間一兩風&#xff0c;填我十萬八千夢。 &#x1f680; 路漫漫其修遠兮&#xff0c;吾將上下而求索。 C語言之高校學生信息快速查詢系統的實現 目錄 任務陳述與分析 問題陳述問題分析 數據結構設…

【網絡篇】TCP vs UDP底層區別+網絡編程概念

大家好呀 我是浪前 今天講解的是網絡篇的第三章&#xff1a;網絡編程概念和TCP&UDP的區別 網絡編程概念TCP和UDP的區別 跨主機通信:網絡編程插座&#xff1a;網絡編程的本質&#xff1a; 網絡編程的重要概念&#xff1a;客戶端和服務器&#xff1a; 客戶端和服務器的交互模…

EMIF詳解

一、EMIF的基本定義 EMIF&#xff08;External Memory Interface&#xff0c;外部存儲器接口&#xff09; 是嵌入式處理器&#xff08;如DSP、FPGA、SoC&#xff09;用于連接外部存儲器的專用硬件接口模塊&#xff0c;負責管理處理器與存儲器之間的地址/數據總線、控制信號及時…

Keil MDK 編譯問題:function “HAL_IncTick“ declared implicitly

問題與處理策略 問題描述 ..\..\User\stm32f1xx_it.c(141): warning: #223-D: function "HAL_IncTick" declared implicitlyHAL_IncTick(); ..\..\User\stm32f1xx_it.c: 1 warning, 0 errors問題原因 在 stm32f1xx_it.c 文件中調用了 HAL_IncTick()&#xff0c;但…

Java Web項目(一)

框架 java web項目總工分為兩部分&#xff1a;客戶端&#xff08;前端&#xff09;和服務端&#xff08;后端&#xff09; 客戶端發起請求&#xff0c;服務端接受請求并進行處理 發起請求的方式&#xff1a;from表單、jQuery ajax from表單 造成全局的變化&#xff0c;在發…