首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

OpenCV cvGetSize 與 cvSize 區別詳解:ROI 影響下的尺寸獲取

     編輯:關於C語言

OpenCV cvGetSize 與 cvSize 區別詳解:ROI 影響下的尺寸獲取

在 OpenCV 1.x/2.x C 接口中,cvGetSize 與 cvSize 都涉及圖像/矩陣尺寸,但語義截然不同。混淆二者會導致 ROI (Region of Interest) 設置錯誤、內存越界等問題。

核心區別

函數/結構性質返回/構造內容受 ROI 影響
CvSize cvSize(int w, int h)構造函數/宏根據參數構造 {width, height}否
CvSize cvGetSize(const CvArr* arr)函數返回數組/圖像**當前有效區域**尺寸是**

結構體定義

typedef struct CvSize {
    int width;   // 寬度 (列數)
    int height;  // 高度 (行數)
} CvSize;

// 構造宏
inline CvSize cvSize(int width, int height);

關鍵行為差異

IplImage* src = cvLoadImage("test.jpg");  // 假設 640x480
cvSetImageROI(src, cvRect(100, 100, 200, 150)); // 設置 ROI

CvSize sz1 = cvSize(src->width, src->height);   // {640, 480} 整圖尺寸
CvSize sz2 = cvGetSize(src);                    // {200, 150} **ROI 尺寸**

IplImage* dst1 = cvCreateImage(cvSize(src->width, src->height), IPL_DEPTH_8U, 1); // 全圖大小
IplImage* dst2 = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1);                   // ROI 大小

實戰避坑指南

  1. 創建目標圖像:若需與源圖**同尺寸**,用 cvGetSize(src);若需**全圖尺寸**忽略 ROI,用 cvSize(src->width, src->height);
  2. ROI 重置:cvResetImageROI(src) 後 cvGetSize 回傳全圖尺寸;
  3. 矩陣運算:cvGetSize 也適用於 CvMat*,返回有效行列數;
  4. 現代 C++ 接口:OpenCV 2.0+ 推薦用 cv::Mat,尺寸獲取為 mat.size() (返回 cv::Size),ROI 為 mat(cv::Rect) 子矩陣,語義更清晰。

總結口訣

cvSize 是「造」,cvGetSize 是「量」。
量時看 ROI,造時看參數。

搞清這一對,能避免 80% 的 OpenCV C 接口尺寸相關 Bug。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved