眾所周知,mat是opencv最核心的核心資料結構,沒有這個靈活高效的mat,opencv也就沒有了靈魂。
作為乙個初學者,只需要會簡單用一下mat當然就夠了,但是作為乙個有理想的程式猿,我們還是要挖掘挖掘,看看mat裡面還藏著什麼寶藏。
我們將目光投向opencv/modules/core/include/opencv2/core/mat.hpp
,這個3600多行(v3.4.1)的標頭檔案,就藏著opencv最深處的秘密,我們嘗試逐步揭開它!
首先我們需要關注的是,究竟有哪些類?
這個檔案中一共有20個class宣告的結構,其中16個class的名字中有"mat",其餘四個都是"array"。
class
基類_outputarray
_inputarray
_inputoutputarray
_outputarray
mat_
matsparsemat_
sparsemat
matconstiterator_
matconstitrator
matiterator_
matconstiterator_<_tp>
sparsematiterator
sparsematconstiterator
sparsematconstiterator_
sparsematconstiterator
sparsematiterator_
sparsematconstiterator_<_tp>
可以看到他們之間的關係還是比較簡單的,最多有兩層繼承關係,且有繼承關係的,名字都長得差不多,這減少了我們認知的難度。
在得到他們的關係之後,我們要開始逐個擊破了,對這些c++的類,我們已經找到了宣告,接下來就要找找他們的實現了。繼續搜!
class
實現_inputarray
matrix_wrap.cpp
_outputarray
matrix_wrap.cpp
_inputoutputarray
mat.inl.hpp
matallocator
matrix.cpp
matcommainitializer_
mat.inl.hpp
matmatrix.cpp
mat_
mat.inl.hpp
umat
umatrix.cpp
sparsemat
mat.inl.hpp
sparsemat_
mat.inl.hpp
matconstitrator
mat.inl.hpp
matconstiterator_
mat.inl.hpp
matiterator_
mat.inl.hpp
sparsematconstiterator
mat.inl.hpp
sparsematiterator
mat.inl.hpp
sparsematconstiterator_
mat.inl.hpp
sparsematiterator_
mat.inl.hpp
narymatiterator
matrix_iterator.cpp
matop
matrix_expressions
matexpr
matrix_expressions
我們可以看到,這些類主要是包含在6個檔案中,其中mat和mat_主要是在matrix.cpp和umatrix.cpp中,還有一些也是在mat.inl.hpp中,矩陣操作相關的,大部分在matrix_expressions.cpp中,其餘的實現都在mat.inl.hpp中。
我們嘗試對opencv的核心資料結構mat及其相關類做乙個介紹,在本文中我們主要是列出來有哪些類,並整理了他們的關係,還找到他們各自的實現。接下來我們就要逐個擊破,爭取能對所有類都能有個深入的認識。
結構體相關知識
include include struct 關鍵字 struct student 可以看做將多種型別打包帶走,看做乙個包裹 int main 兩種定義方式。2 struct student str 初始化結構體 str.a 100 給結構體裡面的資料賦值 str.c b strcpy str.st...
結構體相關概念
struct 結構體名 成員列表 1 先宣告結構體型別再定義變數。struct 結構體名 變數名 struct product product1 struct product 是結構體型別名,而product1是結構體變數名。定義乙個基本型別的變數與定義結構體型別變數的不同之處在於,定義結構體變數不...
結構體定義 結構體指標相關用法
結構體 是一種自定義資料結構。結構體的形式 struct 型別名 結構體的結尾必須加上分號 結構體的定義以及初始化 struct student 定義student資料型別 定義完成,其地位和內建型別一樣 int main struct student stu2 struct student stu...