學習Opencv(蝴蝶書/C++)——3. OpenCV的數據類型

文章目錄

  • 1. 總覽
  • 2. 基礎類型
    • 2.0 基礎類型總覽
    • 2.1 cv::Vec<>類
    • 2.2 cv::Matx<>類
    • 2.3 cv::Point類(cv::Point3_< >和cv::Point_< >)
    • 2.4 cv::Scalar(cv::Scalar_)類
    • 2.5 cv::Size(cv::Size_)類、cv::Rect(cv::Rect_)類和cv::RotatedRect 類
    • 2.6 基礎類型支持的操作
      • 2.6.1 cv::Point
      • 2.6.2 cv::Scalar
      • 2.6.3 cv::Size類
      • 2.6.4 cv::Rect類
      • 2.6.5 cv::RotateRect類
      • 2.6.6 cv::Matx類
      • 2.6.7 cv::Vec類
      • 2.6.8 cv::Complex_
  • 3. 輔助對象
    • 3.1 cv::TermCriteria
    • 3.2 cv::Range
    • 3.3 cv::Ptr模版和垃圾回收
    • 3.4 cv::Exception類和異常處理
    • 3.5 cv::DataType<> 模板(traits)
    • 3.6 cv::InputArray和cv::OutputArray以及cv::_InputOutputArray類
      • 3.6.1 cv::InputArray(cv::InputArrayOfArrays)
      • 3.6.2 cv::OutputArray(cv::OutputArrayOfArrays)
  • 4. 工具函數(系統函數)
  • 5. 總結
  • X. 其他
    • X.1 OpenCV_cheatsheet中的關鍵數據類型
    • X.2 C++開發桌面程序和js開發
    • X.3 開源庫的組織(如何更好的看文檔)

1. 總覽

關于OpenCV的數據結構,官方文檔位于:Core functionality

主要就是下面這幾項內容:
在這里插入圖片描述

注意,下文中提到的C語言中的結構:例如:CvPoint和CvPoint2D32f
位于C structures and operations,4.x之后的文檔就沒有這些內容了
雖然文檔沒有了,但是源文件里依然有opencv-4.8.0/modules/core/include/opencv2/core/types_c.h相應的頭文件

根據Learning OpenCV3,可知:
在這里插入圖片描述

2. 基礎類型

2.0 基礎類型總覽

在這里插入圖片描述

參考:

  • https://docs.opencv.org/4.x/dc/d84/group__core__basic.html
  • https://docs.opencv.org/4.x/d2/d75/namespacecv.html中 搜索即可,這個網頁中黑色無鏈接的類/結構是:“black box”與磁盤相關的文件存儲。

2.1 cv::Vec<>類

cv::Vec<>——固定向量類(所存儲的元素長度固定),用于維度固定的小型向量

cv::Vec< _Tp, cn > Class Template Reference

  • 尖括號是模板類的意思,
  • 相對于普通的STL的向量類,固定向量類在編譯時就已知向量的維度,這樣代碼處理起來就會更高效。

雖然cv::Vec<>本身已經是模版形式了,但是實際上并不會直接使用這個形式。而是使用typedef定義的別名來使用一些更為通用/專門的實例。

  • 例如:cv::Vec2i就表示有兩個元素的整型向量
  • 任何有著cv::Vec{2,3,4,6}{b,w,s,i,f,d}形式的聲明,表示6種數據類型中某個具有2~6個元素數量的向量類型。
    • b: unsigned char
    • w: unsigned shor
    • s: short
    • i: int
    • f: float
    • d:double
  • 注意,cv::Vec最長的元素不止是6個,在cv::Vec< _Tp, cn > Class Template Reference中,可以看到cv::Vec<>的構造函數最長可以有14個元素。同時,還可以接受矩陣的某行作為參數。
  • 在Shorter aliases for the most popular specializations of Vec<T,n>中,有:在這里插入圖片描述

另外,需要注意的一點是,在cv::Vec< _Tp, cn > Class Template Reference中,有:
在這里插入圖片描述
即 cv::Vec< >模版類繼承自cv::Matx< >模板類。

代碼中可以看到:
在這里插入圖片描述

2.2 cv::Matx<>類

除了cv::Vec<>固定向量類,還有cv::Matx<>固定矩陣類,
與cv::Vec<>類似,cv::Matx<>也是用于特定的一些小型矩陣中。
(cv::Mat類是用于任意維度的矩陣,一般用在大矩陣,比如存儲圖像等)

在計算機視覺中,有很多2X2,3X3以及少量的4X4矩陣(例如:3*3的卷積核,3*3或者2*2的變換矩陣等),cv::Matx<>用于設計容納這些對象。

與cv::Vec<>類似,cv::Matx<>通常也是用別名的形式進行使用,其形式為:
cv::Matx{1,2,3,4,5,6}{1,2,3,4,5,6}{f,d},只有浮點數類型和雙浮點數類型。

  • f: float
  • d:double

在OpenCV——Basic structures——Typedefs中,可以看到:
在這里插入圖片描述

固定矩陣類的維度在編譯前已知,因此其運算效率高,消除很多動態內存分配操作。

2.3 cv::Point類(cv::Point3_< >和cv::Point_< >)

typedef Point2i Point;
默認使用cv::Point時其實調用的是cv::Point2i
cv::Point2itypedef cv::Point_<int>

cv::Point_類和cv::Point3_類

  • 與cv::Vec<>固定向量類很像。
  • cv::PointX類是用來存儲2~3個原語類型的容器,用來表示2d或者3d的點
  • 不是從cv::Vec<>類繼承的,是由自己的模板派生的,但也可以由固定向量類轉變得到
  • cv::Point和cv::Vec<>最大的區別是:
    • 成員通過變量名稱訪問,如point.x,point.y,而不是通過下標訪問,如vec[0],vec[1]等

OpenCV中的Point類包括cv::Point3_和cv::Point_

  • cv::Point3_< >:3D點坐標x,y,z的模板,這個結構可以與C語言中的結構CvPoint2D32f互換。
  • cv::Point_< >:2D點坐標x,y的模板,可以與C語言中的結構:CvPoint和CvPoint2D32f

與cv::Vec<>類似,cv::PointX通常也通過別名調用,

  • cv::Point{2,3}{i,d,f,I}
    • i: int
    • f: float
    • d:double
    • I: int64
  • 在OpenCV——Basic structures——Typedefs中,可以看到:
    在這里插入圖片描述
    實際上是分別來自兩個3d和2d的模板類構成的cv::PointXX。

2.4 cv::Scalar(cv::Scalar_)類

在OpenCV——Basic structures——Typedefs中,有:
在這里插入圖片描述

在cv::Scalar_< _Tp > Class Template Reference中,可以看到:
在這里插入圖片描述

cv::Scalar_繼承自cv::Vec<_Tp,4>,即本質上是一個4維的固定向量。

代碼中可以也看到:
在這里插入圖片描述

cv::scalar類直接繼承自cv::Vec4d(cv::Vec<double,4>)

2.5 cv::Size(cv::Size_)類、cv::Rect(cv::Rect_)類和cv::RotatedRect 類

typedef cv::Point2i cv::Point
typedef cv::Size2i  cv::Size
typedef cv::Rect2i  cv::Rect

cv::Size類和cv::Rect類與cv::Point類類似,但是也并不繼承自cv::Point類,而是繼承自己的模板類

  • 主要區別在于cv::Size有width和height這兩個屬性,而不是cv::Point_類的x和y
  • cv::Rect則是包含width、height、x和y這四個屬性。

cv::Size_類和cv::Rect_一般也是通過別名使用,比如:

  • 在OpenCV——Basic structures——Typedefs中,可以看到:
    在這里插入圖片描述
  • 最常見的就是直接使用整數型的cv::Sizecv::Rect

cv::RotatedRect類表示非軸對稱的矩形,即矩形的四條邊不與所在坐標軸平行,表示旋轉的矩形。其包括:

RotatedRect (const Point2f &center, const Size2f &size, float angle)
1. Point2f類型的中心點
2. Size2f類型的高寬
3. float的角度

2.6 基礎類型支持的操作

2.6.1 cv::Point

在這里插入圖片描述
Cast to the fixed vector classes,映射成固定向量類,類似強制類型轉換。

根據cv::Point3_< >和 cv::Point_< >的Public Member Functions可知:
cv::Point_< >類的對象有inside方法,cv::Point_< >類的對象是沒有該方法的

2.6.2 cv::Scalar

在這里插入圖片描述

  • Quaternion四元數,
  • conjugation共軛,連接
  • iff 當且僅當,if and only if
  • cv::Scalar可以和舊的C語言的接口類CvScalar自由轉換

根據cv::Scalar_< _Tp > Class Template Reference可知,

  • scalar類除了有自己的一些方法,還有繼承自cv::Vec以及更上層的cv::Matx的方法。
  • 例如:
    #include <iostream>
    #include <opencv2/opencv.hpp>
    int main(int argc, char 

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

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

相關文章

常見面試題-Redis 主從復制原理以及痛點

Redis 主從復制如何同步數據呢&#xff1f; 參考文章&#xff1a;https://blog.csdn.net/Seky_fei/article/details/106877329 https://zhuanlan.zhihu.com/p/55532249 https://cloud.tencent.com/developer/article/2063597 https://xie.infoq.cn/article/4cffee02a2a12c2…

LongAccumulator

原子操作之LongAccumulator 和LongAdder的區別在于&#xff0c;LongAdder是在Cell里面只能做加減操作&#xff0c;不能乘除&#xff0c;而LongAccumulator就可以定義乘除操作。原理和LongAdder都是一樣的&#xff0c;一個Base和一個Cells數組。 原文跳轉地址

pyqt5的組合式部件制作(四)

對組合式部件的制作又改進了一版&#xff0c;組合式部件的子部件不再需要單獨“提升為”&#xff0c;如果在模板文件的提升部件窗口內選擇了“全局包含”&#xff0c;那么只需要在模板文件和應用文件中直接復制粘貼即可&#xff0c;部件的應用更為簡便。如下圖&#xff1a;按住…

2023秋招上岸必備軟件測試面試題

1、請結合你熟悉的項目&#xff0c;介紹一下你是怎么做測試的&#xff1f; -首先要自己熟悉項目&#xff0c;熟悉項目的需求、項目組織架構、項目研發接口等 -功能 接口 自動化 性能 是怎么處理的&#xff1f; -第一步&#xff1a; 進行需求分析&#xff0c;需求評審&#…

【Delphi】開發IOS 程序,TLabel 中英文字對齊(水平),一行代碼解決顯示對齊問題!

目錄 一、問題現象&#xff1a; 二、解決方案&#xff08;一行代碼解決ios對齊問題&#xff09;&#xff1a; 三、解決后效果&#xff1a; 四、后記&#xff1a; 一、問題現象&#xff1a; 在用 Delphi 開發ios程序時&#xff0c;使用TLabel控件顯示&#xff0c;會出現中英…

WiFi 6的數據在發送端分片和在接收端重組的理解

802.11ax是WiFi 6標準&#xff0c;其引入了一些新的特性和技術來提升無線網絡的性能&#xff0c;其中包括幀聚合和幀分片。以下是它們的詳細處理流程&#xff1a; 1. 幀聚合 幀聚合是一種提高傳輸效率的技術&#xff0c;它允許多個數據幀被聚合到一起&#xff0c;然后作為一個…

layui(2.8.18)生成驗證碼

<!DOCTYPE html> <html> <head><meta charset"utf-8"><title>登入</title><meta name"renderer" content"webkit"><meta http-equiv"X-UA-Compatible" content"IEedge,chrome1&quo…

Go 工具鏈詳解(七):模塊緩存清理工具

go mod 緩存 在 Golang 中&#xff0c;模塊是對一組版本化的包的集合的描述。Go 1.11 版本引入了模塊支持&#xff0c;通過 go mod 命令提供了對模塊的管理。Go 模塊的一個重要特性是依賴管理&#xff0c;可以清晰地定義項目所依賴的模塊及對應的版本&#xff0c;并確保代碼使…

電磁優化的并行空間映射方法

空間映射(SM)是一種公認的加速電磁優化的方法。現有的SM方法大多基于順序計算機制。本文提出了一種用于電磁優化的并行SM方法。在該方法中&#xff0c;每次迭代開發的代理模型被訓練以同時匹配多個點的精細模型。多點訓練和SM使代理模型在比標準SM更大的鄰域內有效。本文提出的…

[補題記錄] Complete the Permutation(貪心、set)

URL&#xff1a;https://codeforces.com/group/OcmZ7weh45/contest/487583/problem/J 目錄 Problem/題意 Thought/思路 Code/代碼 Problem/題意 給出一個長度為 N 的序列&#xff0c;其中的元素都是奇數。 現在要求在兩個奇數之間插入一個偶數&#xff0c;使得這三個數遞增…

信息壓縮模型在自然語言處理中的應用和探討

信息壓縮模型在自然語言處理中的應用和探討 摘要:正文:結論:附錄:摘要: 隨著人工智能和深度學習的發展,自然語言處理(NLP)在信息處理中的角色變得越來越重要。然而,海量的自然語言數據為信息處理帶來了挑戰——更多的信息通常意味著更高的處理成本,并可能導致效率降低。為…

一個工具讓你明白“萬丈高樓平地起”,拒絕重復造輪子!

大家在公司工作當中是不是很多時間裝環境很麻煩&#xff0c;一個項目要上線了&#xff0c;開始網上搜了一邊又一遍的環境搭建教程&#xff1f;等到下一個項目要上線了&#xff0c;又上網上搜了一邊又一遍的環境搭建教程。關鍵天花亂墜的互聯網&#xff0c;找不到很靠譜的呀。有…

數組的移動

設計程序&#xff0c;給定包含N個整數的數組array&#xff0c;實現操作&#xff1a;前面各個整數順序向后移動m個位置&#xff0c;最后的m個整數移動到最前面。方法&#xff1a;void move(int array[], int n,int m ) 輸入要求 第一行輸入兩個整數N(1<N<1e6)和m(0<m&…

webpack 配置

1、基礎配置 // node js核心模塊 const path require(path) // 插件是需要引入使用的 const ESLintPlugin require(eslint-webpack-plugin) // 自動生成index.html const HtmlWebpackPlugin require(html-webpack-plugin); // 將css文件單獨打包&#xff0c;在index.html中…

如何做好項目管理?年薪百萬項目大佬一直在用這11張圖

大家好&#xff0c;我是老原。 日常工作中&#xff0c;我們會遇到各種大大小小的工作項目&#xff0c;如何能讓項目保質保量的完成&#xff0c;是我們項目經理的目標。 項目管理的流程可以說是由一系列的子過程組成的&#xff0c;它是一個循序漸進的過程&#xff0c;所以不能…

python數字

目錄 整數&#xff08;如&#xff0c;2、4、20 &#xff09;的類型是 int&#xff0c;帶小數&#xff08;如&#xff0c;5.0、1.6 &#xff09;的類型是 float。 Python 用 ** 運算符計算乘方 1&#xff1a; 等號&#xff08;&#xff09;用于給變量賦值。 解釋器像一個簡單…

進程API

linux下進程的api forkwaitexec fork #include <stdio.h> #include <stdlib.h> #include <unistd.h>/* linux環境運行 子進程并不是完全拷貝了父進程。具體來說&#xff0c;雖然它擁有自己的 地址空間&#xff08;即擁有自己的私有內存&#xff09;、寄存器…

【Delphi】使用TWebBrowser執行JavaScript命令傳入JSON參數執行出錯解決方案

目錄 一、問題背景&#xff1a; 二、實際示例&#xff1a; 三、解決方案&#xff1a; 1. Delphi 代碼&#xff1a; 2. javaScript代碼&#xff1a; 一、問題背景&#xff1a; 在用Delphi開發程序&#xff0c;無論是移動端還是PC端&#xff0c;都可以很方便的使用TWebBrows…

Postman如何使用(一):導入導出和發送請求查看響應

一、Postman如何導入導出打包的應用 在Postman中導入導出我們的 測試數據包 和 工作環境 非常的方便&#xff1a; 導出數據包的方法如下&#xff1a; 如果你想學習自動化測試&#xff0c;我這邊給你推薦一套視頻&#xff0c;這個視頻可以說是B站播放全網第一的自動化測試教程…