搜尋
首頁科技週邊人工智慧弄清楚OpenCV中的CvType各種參數意義以及相關方法

1. 前言

本篇內容基於java環境下,介紹OpenCV 4.6.0v 中建立 Mat 物件時傳遞的 CvType 參數。

如果你不太能理解CvType.CV_8UCX,CvType.CV_8SCX,CvType.CV_16UCX,CvType.CV_16SCX等

#等參數的作用與意義。

那麼,這篇文章 一文弄清楚 OpenCV Mat 中通道channels的作用 可以幫你解惑。

以下內容是基於OpenCV SDK 4.6.0v

#2. CvType

這個類型主要是用來定義Mat中的資料類型的。常見使用場景就是在創建Mat的時候,進行定義。

那麼CvType這個類型會定義哪些參數呢?很簡單它決定了Mat中的圖片資料的兩個基本指標:

  1. 通道channels:也就是mat.channels() 傳回的值只能是1~4 這三個參數。
  2. 深度depth:也就是mat中每個像素參數的儲值範圍。該值儲存在每個通道中的byte[]數組中,每個數組中的數值的範圍就是由深度決定的。

關於通道的概念,我前面有篇文章介紹過https://zinyan.com/?p=493。如果不太了解通道的概念可以閱讀上篇內容。

2.1 深度-depth

我們透過CvType原始碼可以看到,OpenCV已經定義好了8種深度參數:

public static final int
 CV_8U = 0,
 CV_8S = 1,
 CV_16U = 2,
 CV_16S = 3,
 CV_32S = 4,
 CV_32F = 5,
 CV_64F = 6,
 CV_16F = 7;

上面名稱中的8U,8S,16U,16S,32S,64F,16F等等前面的數字代表了位元數

也就是說:8bite,16bite,32bite ,64bite。用來定義取值範圍,後面的字母U,S,F代表了符號和精確度。

  • U : unsigned int , 無符號整形,也就正整數
  • S : signed int , 有符號整形,包括負數和正數,但是都是整數
  • #F : float , 單精確度浮點型,也就是帶小數點。 (PS:Float型別本身是支援負數的)

所以結合定義我們就能理解:

    ##CV_8U :是一個8位正整數,代表參數的取值範圍0~255
  • CV_8S:是一個8位正負數,代表參數的值範圍-128~127
  • #CV_16U :是16位元正整數,代表參數的取值範圍0~65535
  • CV_16S:是一個16位元正負數,代表參數的取值範圍-32768~32767
  • CV_16F :是一個16位浮點數,代表參數的取值範圍-65504 ~ 65504
  • CV_32S:是一個32位正整數,代表參數的取值範圍2147483648~2147483647
  • CV_32F:是一個32位元浮點數,代表參數的取值範圍1.18x10^-38^~3.40x10^38^
  • CV_64F:是一個64位元浮點數,代表參數的取值範圍2.23x10^- 308^~1.79x10^308^
PS:關於浮點數的精確度問題和範圍問題,大家可以搜尋更詳細的。上面的參數範圍透過網路匯總得到的。

2.2 通道-channels

在OpenCV定義中,通道數最大為4,最小為1.體現在程式碼中,也就是CvType類別中定義的C1,C2, C3,C4了。

    C1:代表單通道
  • C2:代表雙通道
  • C3:代表三通到
  • C4:代表四通道
在OpenCV中,一個像素點的顏色值採用duble[] 雙精確度浮點陣列儲存。

而通道就定義了這個double[] 陣列的長度。

例如圖片是一個RGB格式的彩色圖片,那麼圖片中的一個像素就需要R,G,B三個值混合才能確定特定顏色。

我們就需要一個double[3]的陣列來記錄下分別記錄下該像素點下面的R,G,B的值分別是多少。

所以這張圖片採用的就是C3三聲道。

而RGB通常是0~255範圍的整數。

OpenCV就透過我們上面介紹的深度來表示顏色的取值範圍。

兩者結合起來就是:

CvType.CV_8UC3 :表示三通道,每個通道內參數的值範圍為8位正整數,也就是0 ~255

最後,我們結合Mat創建時的參數來理解就是:

#
//zinyan:创建了一个4*4尺寸的图片。每个像素点存储了一个double[1]的数组,该数组中值的范围为0~255
Mat mat = new Mat(4, 4, CvType.CV_8UC1); //通常用来表示灰度图或黑白图

//zinyan:创建了一个5*5尺寸的图片。每个像素点存储了一个double[3]的数组,该数组中值的范围为0~255
Mat mat1 = new Mat(5, 5, CvType.CV_8UC3); //通常用来表示彩色图

//zinyan:创建了一个6*6尺寸的图片。每个像素点存储了一个double[3]的数组,该数组中值的范围为0~65535
Mat mat1 = new Mat(6, 6, CvType.CV_16UC3); //通常用来表示彩色图,颜色值范围更广。

##歸納一下,CvType定義的都是Mat中的資料儲存的類型。

定義了Mat儲存的像素值是由多少個,每個像素值的取值範圍是多少。

因為針對Mat的各種演算法都是處理的每個像素點的數值。處理數值進行計算,就需要告訴演算法每個數值的取值範圍是多少。

3. 其他

假如Mat是透過外部傳入過來的。我們如何確定Mat的通道數和每個數值的值範圍呢?

CvType中提供了相關的查詢方法,可以讓我們透過type類型轉換為對應的類型值。

範例如下:

Mat mat = new Mat(4, 4, CvType.CV_8UC3);
int depth = CvType.depth(mat.type()); //输出结果值为 0 == CvType.CV_8U

Mat mat1 = new Mat(4, 4, CvType.CV_16SC1);
depth = CvType.depth(mat1.type()); //输出结果值为 3 == CvType.CV_16S

除此之外還可以進行通道數查詢。

Mat mat1 = new Mat(4, 4, CvType.CV_16SC1);
int channels = CvType.channels(mat1.type());//该值为1

3.1 廢棄 CV_USRTYPE1

關於CvType.CV_USRTYPE1 的值已經等同於CV_16F了。所以該參數也被打上了@deprecated註解。代表已經被廢棄

建議大家不要使用。

3.2 ELEM_SIZE 方法

CvType中的其他方法都比較好理解。最後就有一個public static final int ELEM_SIZE(int type) 方法

該方法傳遞type值。也就是所謂的CvType.CV_8UC1等參數值。

然後回傳的是一個int變數。

該方法傳回的變數是為了表示每個通道中的參數的位元組數。 1位元組表示8bit,也就是8位元。

所以我們如果是CV_8U,CV_8S,直接回傳通道數就可以了。

如果是16位元的數據,就需要回傳2*channels,32位元就需要4*channels,64位元需要8*channels。

4.小結

到這裡關於OpenCV中的CvType的介紹就結束了。

我們如果在使用過程中出現了有關於CvType的錯誤。那麼大部分情況下都在於我們對於CvType的陌生所造成的。

或使用了對於通道和深度有要求的演算法造成錯誤。

以上是弄清楚OpenCV中的CvType各種參數意義以及相關方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:51CTO.COM。如有侵權,請聯絡admin@php.cn刪除
及時工程中的思想圖是什麼及時工程中的思想圖是什麼Apr 13, 2025 am 11:53 AM

介紹 在迅速的工程中,“思想圖”是指使用圖理論來構建和指導AI的推理過程的新方法。與通常涉及線性S的傳統方法不同

優化您的組織與Genai代理商的電子郵件營銷優化您的組織與Genai代理商的電子郵件營銷Apr 13, 2025 am 11:44 AM

介紹 恭喜!您經營一家成功的業務。通過您的網頁,社交媒體活動,網絡研討會,會議,免費資源和其他來源,您每天收集5000個電子郵件ID。下一個明顯的步驟是

Apache Pinot實時應用程序性能監視Apache Pinot實時應用程序性能監視Apr 13, 2025 am 11:40 AM

介紹 在當今快節奏的軟件開發環境中,確保最佳應用程序性能至關重要。監視實時指標,例如響應時間,錯誤率和資源利用率可以幫助MAIN

Chatgpt擊中了10億用戶? Openai首席執行官說:'短短幾週內翻了一番Chatgpt擊中了10億用戶? Openai首席執行官說:'短短幾週內翻了一番Apr 13, 2025 am 11:23 AM

“您有幾個用戶?”他扮演。 阿爾特曼回答說:“我認為我們上次說的是每週5億個活躍者,而且它正在迅速增長。” “你告訴我,就像在短短幾週內翻了一番,”安德森繼續說道。 “我說那個私人

pixtral -12b:Mistral AI'第一個多模型模型 - 分析Vidhyapixtral -12b:Mistral AI'第一個多模型模型 - 分析VidhyaApr 13, 2025 am 11:20 AM

介紹 Mistral發布了其第一個多模式模型,即Pixtral-12b-2409。該模型建立在Mistral的120億參數Nemo 12B之上。是什麼設置了該模型?現在可以拍攝圖像和Tex

生成AI應用的代理框架 - 分析Vidhya生成AI應用的代理框架 - 分析VidhyaApr 13, 2025 am 11:13 AM

想像一下,擁有一個由AI驅動的助手,不僅可以響應您的查詢,還可以自主收集信息,執行任務甚至處理多種類型的數據(TEXT,圖像和代碼)。聽起來有未來派?在這個a

生成AI在金融部門的應用生成AI在金融部門的應用Apr 13, 2025 am 11:12 AM

介紹 金融業是任何國家發展的基石,因為它通過促進有效的交易和信貸可用性來推動經濟增長。交易的便利和信貸

在線學習和被動攻擊算法指南在線學習和被動攻擊算法指南Apr 13, 2025 am 11:09 AM

介紹 數據是從社交媒體,金融交易和電子商務平台等來源的前所未有的速度生成的。處理這種連續的信息流是一個挑戰,但它提供了

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器