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

OpenCV C/C++ 介面互轉:cv::Mat 與 IplImage 雙向轉換程式碼範例

     編輯:關於C++

兩大影像資料結構

  • IplImage:OpenCV C 介面(舊版)影像容器。
  • cv::Mat:OpenCV C++ 介面(新版)影像容器,支援參考計數、自動記憶體管理。

1. cv::Mat → IplImage

cv::Mat matImg = cv::imread("heels.jpg");
IplImage* iplImg = new IplImage(matImg);  // 建構函數轉換
// 使用 iplImg...
delete iplImg;  // 手動釋放

或使用舊式寫法:IplImage iplImg = matImg; IplImage* ptr = &iplImg;(注意生命週期)。

2. IplImage → cv::Mat

IplImage* iplImg = cvLoadImage("heels.jpg");
cv::Mat matImg = cv::Mat(iplImg);  // 建構函數轉換
// 使用 matImg...
cvReleaseImage(&iplImg);  // 釋放 C 介面資源

注意事項

  1. 資料共享:轉換預設共享影像資料(淺拷貝),修改其中一個會影響另一個。需深拷貝請用 clone() 或 copyTo()。
  2. 記憶體管理:IplImage* 需手動 cvReleaseImage/delete;cv::Mat 由 RAII 自動管理。
  3. 版本相容:OpenCV 2.x/3.x/4.x 均支援雙向建構函數,但建議新專案全面使用 cv::Mat。

最佳實務

新代碼請直接使用 cv::Mat 及 C++ 介面(cv::imread、cv::imshow 等),僅在維護舊有 C 介面代碼時才需互轉。

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