這個鏈接非常有用
http://www.cnblogs.com/Key-Ky/p/4150531.html
新手常用的一些轉換:
1.CvMat*和Iplimage*的轉換關係
CvMat* pic =cvLoadImageM("ubuntu.png");
IplImage*pic1=cvCreateImage(cvGetSize(pic),IPL_DEPTH_8U,3);
//IplImage->cvmat
//這個函數直接講圖像載入矩陣中
//cvmat*->iplimage*
cvGetImage(pic,pic1);
//iplimage*->cvmat*
cvGetMat(pic1,pic);
//iplimage*<->cvmat*
cvConvert( pic,pic1 );
2.CvMat*和Iplimage*->Mat(指針轉換成矩陣)
這裏要注意了,新舊版本的opencv的在這裏的處理辦法會不一樣(wtf),可以參考鏈接:
http://www.cnblogs.com/edver/p/5187190.html
對於opencv3.0以上的版本,可以:
//Cvmat*->mat(iplimage*同理)
CvMat* pic=cvLoadImageM("ubuntu.png");
Mat pic1=cvarrToMat(pic);
對於老版的opencv可以:
//Cvmat*->mat
CvMat* pic=cvLoadImageM("ubuntu.png");
Mat a(pic);
3.mat->const cvarr*(矩陣轉換成指針)
//mat->const cvarr*
CvMat* pic=cvLoadImageM("ubuntu.png");
Mat pic1=cvarrToMat(pic);
const CvMat* s=(CvMat*) &pic1;
寫代碼的時候不要忘記上面的取值運算符&,先是取址,然後進行強制類型轉換。
4.對於新手來說,理解CvMat和Mat的區別真的是wtf,看了很多資料,覺得最有用的是這個句子
CvMat* m=cvCreateMat(int cows,int cols,int types);
這裏types可以是任意的預定義類型,如rgb或者是別的多通道的數據,這用的目的是讓CvMat更好地表示一幅圖像,而不是想只是像Mat一樣只能用簡單的基本數據類型。
總結:千里之行,始於足下!