Just a Computer Graphics Studio & My Life

[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的空間轉換

Advertisements

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

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

    喜歡

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

    喜歡

  3. 請問一下有沒有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;
          }

          喜歡

發表留言

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s

標籤雲

%d 位部落客按了讚: