Just My Life & My Work

[OpenCV] IplImage 和 Mat 互轉

OpenCV相關程式,我會使用兩種IDE,一是為了簡單方便用Dev C++,二是為了測試高竿程式用Visual C++。前者我通常用C來寫,後者則以C++來寫,更有時候會把兩者兜在一起。

就如同string 和 char[]互轉這篇文章一樣,時常需要將字串來回轉換,在OpenCV中處理對象為影像,有時也需要來回轉換,於是我想記錄一下:P

比較專業的講法是:將IplImage圖形資料空間(imageData)轉成CvMat空間(data),或是將CvMat矩陣空間轉成IplImage的圖形空間。

程式碼相當簡單,如下:

// IplImage to Mat
IplImage *img;

cv::Mat mat(img, 0);

// Mat to IplImage
cv::Mat mat;

IplImage *img = IplImage(mat);

需要注意的是,兩者互轉皆為共用記憶體位置

參考:Mat and IplImage 換轉資料結構操作與運算-IplImage,CvMat的空間轉換

Comments on: "[OpenCV] IplImage 和 Mat 互轉" (10)

  1. […] (Transform Image to Gray Level) https://blog.csdn.net/kuweicai/article/details/73414138 [OpenCV] IplImage 和 Mat 互轉 IplImage 和 Mat 互轉 // IplImage to Mat IplImage *img; cv::Mat mat(img, 0); // Mat to IplImage […]

  2. 想請問一下我打了您這篇轉換的指令
    但會出現如下錯誤訊息:
    undefined reference to `cv::Mat::operator _IplImage() const’
    不知道是不是有什麼函式庫沒include到
    Thx

  3. 您好:
    請問一下
    IplImage* 與 IplImage 該怎麼轉換
    如下程式碼產生錯誤
    IplImage* pImg_skin= IplImage(src);
    一直試很久都無法解決@@

  4. 請問一下有沒有CvMat 轉Mat的方法??

    • 嗨~我查到的語法是這樣:

      將CvMat類型轉換為Mat類型 // CvMat to Mat
      Mat::Mat(const CvMat* imgCvMat, bool copyData=false);
      將Mat類型轉換為CvMat類型 // Mat to CvMat
      CvMat cvMat = imgMat;

      請你自己試試看囉!

      • 你好再請問一下,我想把IplImage從函數回傳回來為什麼傳不回來,舉例如下:
        int main()
        {

        IplImage *img = NULL;
        load_image(img);
        cvNamedWindow(“img");
        cvShowImage(“img",img);

        }

        void load_image( IplImage *img )
        {

        img = cvLoadImage(“圖片路徑");
        }

        • 剛試了一下,
          應該是送過去的指標運作屬於「複製」,
          你可以用return把資料回傳~
          IplImage * loadImage(IplImage *img){
          img = cvLoadImage(“night.jpg");
          return img;
          }

隨意留個言吧:)~

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料

標籤雲