目錄
- 1.
cv::Point
- 1.1 主要屬性:
- 1.2 示例:
- 1.3 用途:
- 2.
cv::Rect
- 2.1 主要屬性:
- 2.2 主要方法:
- 2.3 示例:
- 2.4 用途:
- 3.
cv::Mat
- 3.1 主要屬性:
- 3.2 主要方法:
- 3.3 示例:
- 3.4 用途:
- 4. 總結
在OpenCV中,cv::Point
、cv::Rect
和 cv::Mat
是三個常用的類,分別用於表示點、矩形和影像/矩陣資料。
1. cv::Point
cv::Point
類用於表示二維空間中的一個點,有兩個常用的型別:
cv::Point
: 用於儲存整型的點座標(x, y)
。cv::Point_<T>
: 模板類,允許使用其他資料型別(如float
或double
)。
1.1 主要屬性:
x
: 點的 x 座標。y
: 點的 y 座標。
1.2 示例:
cv::Point p1(10, 20); // 建立一個點 (10, 20)
cv::Point2f p2(10.5f, 20.5f); // 建立一個浮點型別的點
1.3 用途:
cv::Point
常用於表示影像中的座標位置,如畫素位置、直線的端點、形狀的頂點等。
2. cv::Rect
cv::Rect
類用於表示矩形,透過其左上角的點和尺寸來定義矩形。常用於表示影像中的一個區域(ROI, Region of Interest)。
2.1 主要屬性:
x
: 矩形左上角的 x 座標。y
: 矩形左上角的 y 座標。width
: 矩形的寬度。height
: 矩形的高度。
2.2 主要方法:
contains(const cv::Point& pt)
: 判斷點是否在矩形內部。area()
: 計算矩形的面積。tl()
: 返回矩形的左上角座標。br()
: 返回矩形的右下角座標。
2.3 示例:
cv::Rect r1(10, 10, 50, 50); // 建立一個矩形,左上角為 (10, 10),寬度為 50,高度為 50
cv::Point p(15, 15);
if (r1.contains(p)) {
std::cout << "Point is inside the rectangle!" << std::endl;
}
2.4 用途:
- 在影像處理中用於定義感興趣區域(ROI),比如裁剪影像、繪製矩形、檢測到的物體邊界框等。
3. cv::Mat
cv::Mat
類是 OpenCV 中最基礎和核心的資料結構之一,用於儲存影像和矩陣資料。它可以儲存不同型別的資料(如 8 位無符號整型、浮點型等)和多維陣列(如灰度圖、彩色圖、三維資料等)。
3.1 主要屬性:
rows
: 矩陣的行數(影像的高度)。cols
: 矩陣的列數(影像的寬度)。data
: 指向矩陣資料的指標。type()
: 返回矩陣元素的資料型別(如CV_8UC1
,CV_32FC3
等)。
3.2 主要方法:
at<T>(int y, int x)
: 訪問矩陣中(x, y)
位置的元素。clone()
: 深複製矩陣。copyTo()
: 將當前矩陣的內容複製到另一個矩陣。zeros()
,ones()
: 建立全零矩陣或全一矩陣。reshape()
: 改變矩陣的維度。convertTo()
: 轉換矩陣的資料型別。
3.3 示例:
cv::Mat img = cv::imread("image.jpg"); // 讀取影像檔案
cv::Mat gray;
cv::cvtColor(img, gray, cv::COLOR_BGR2GRAY); // 轉換為灰度影像
int pixelValue = gray.at<uchar>(10, 10); // 訪問 (10, 10) 處的畫素值
3.4 用途:
cv::Mat
是所有影像處理操作的基礎,可以用於儲存影像、影片幀、點雲、核矩陣等各種資料。- 它支援各種型別的資料操作,如畫素級別的操作、過濾、變換、特徵提取等。
4. 總結
cv::Point
: 表示二維空間中的點,用於表示畫素位置、形狀頂點等。cv::Rect
: 表示矩形區域,通常用於定義影像中的興趣區域或檢測到的物體邊界。cv::Mat
: OpenCV 中最核心的資料結構,用於儲存影像、矩陣、影片幀等多維陣列資料。
它們共同構成了 OpenCV 中大部分影像處理任務的基礎,彼此之間可以協同工作。例如,使用 cv::Rect
定義的 ROI 可以用來從 cv::Mat
影像中裁剪子區域,cv::Point
可以指定 ROI 的頂點位置等。