最近需要使用到Mat和IplImage互相轉換,可是看了網路上許多人的文章,都只是互相複製貼上而已,完全無法解決我的問題,自行研究後找到方法了!

P.S.使用OpenCV 2

 

這裡會示範四種轉換的方式,並且在轉換後顯示出來

  1. IplImage* To Mat*
  2. IplImage* To Mat
  3. Mat To IplImage
  4. Mat To IplImage*

 


#include <iostream>
#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;

int main()
{
    string fileName = { "D:/birthday.jpg" };//要載入的圖片路徑和檔名

    // IplImage* To Mat*,但是這個方式並不安全,偶爾會出現寫入存取違規的錯誤
    IplImage *img1 = cvLoadImage(fileName.c_str());//由於參數必須為char[],於是將string轉型
    Mat* mat1 = new Mat[0];
    mat1[0] = cvarrToMat(img1);
    imshow("IplImage* to Mat*", mat1[0]);//顯示圖片
    waitKey(0);//延遲,建議參數時間延長或者設置為0讓圖片繪製完畢。0的意思為等待使用者按下任意鍵才往下執行
    destroyWindow("IplImage* to Mat*");//關閉名為 IplImage* to Mat* 的視窗

    // IplImage* To Mat
    IplImage *img2 = cvLoadImage(fileName.c_str());//由於參數必須為char[],於是將string轉型
    Mat mat2 = cvarrToMat(img2);
    imshow("IplImage* to Mat", mat2);//顯示圖片
    waitKey(0);//延遲,建議參數時間延長或者設置為0讓圖片繪製完畢。0的意思為等待使用者按下任意鍵才往下執行
    destroyWindow("IplImage* to Mat");//關閉名為 IplImage* to Mat 的視窗

    // Mat to IplImage
    Mat mat3 = imread(fileName, CV_LOAD_IMAGE_COLOR);//有兩個參數,第一個參數為圖片檔案路徑(string)、第二個參數為影像格式,預設為CV_LOAD_IMAGE_COLOR。詳情可查看 imgcodes_c.h
    IplImage img3 = IplImage(mat3);
    imshow("Mat to IplImage", mat3);//顯示圖片
    waitKey(0);//延遲,建議參數時間延長或者設置為0讓圖片繪製完畢。0的意思為等待使用者按下任意鍵才往下執行
    destroyWindow("Mat to IplImage");//關閉名為 Mat to IplImage 的視窗

    // Mat to IplImage*
    Mat mat4 = imread(fileName, CV_LOAD_IMAGE_COLOR);//有兩個參數,第一個參數為圖片檔案路徑、第二個參數為影像格式,預設為CV_LOAD_IMAGE_COLOR。詳情可查看 imgcodes_c.h
    IplImage *img4 = &IplImage(mat4);
    imshow("Mat to IplImage*", mat4);//顯示圖片
    waitKey(0);//延遲,建議參數時間延長或者設置為0讓圖片繪製完畢。0的意思為等待使用者按下任意鍵才往下執行
    destroyWindow("Mat to IplImage*");//關閉名為 Mat to IplImage* 的視窗

    return 0;
}

arrow
arrow
    全站熱搜

    Yang 發表在 痞客邦 留言(0) 人氣()