OpenCV(cv::Point、cv::Rect、cv::Mat)

做梦当财神發表於2024-08-28

目錄
  • 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::Pointcv::Rectcv::Mat 是三個常用的類,分別用於表示點、矩形和影像/矩陣資料。

1. cv::Point

cv::Point 類用於表示二維空間中的一個點,有兩個常用的型別:

  • cv::Point: 用於儲存整型的點座標 (x, y)
  • cv::Point_<T>: 模板類,允許使用其他資料型別(如 floatdouble)。

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 的頂點位置等。



相關文章