資源描述:
《OpenCV學(xué)習(xí)之CvMat的用法詳解及實(shí)例》由會(huì)員上傳分享,免費(fèi)在線(xiàn)閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、OpenCV學(xué)習(xí)之CvMat的用法詳解及實(shí)例目錄1.初始化矩陣:...................................22.IplImage到cvMat的轉(zhuǎn)換.........................23.cvArr(IplImage或者cvMat)轉(zhuǎn)化為cvMat...........24.圖像直接操作...................................35.cvMat的直接操作................................36.間接訪(fǎng)問(wèn)cvMat..................................57.修改矩陣的
2、形狀——cvReshape的操作..............68.計(jì)算色彩距離...................................8CvMat是OpenCV比較基礎(chǔ)的函數(shù)。初學(xué)者應(yīng)該掌握并熟練應(yīng)用。但是我認(rèn)為計(jì)算機(jī)專(zhuān)業(yè)學(xué)習(xí)的方法是,不斷的總結(jié)并且提煉,同時(shí)還要做大量的實(shí)踐,如編碼,才能記憶深刻,體會(huì)深刻,從而引導(dǎo)自己想更高層次邁進(jìn)。1.初始化矩陣:方式一、逐點(diǎn)賦值式:CvMat*mat=cvCreateMat(2,2,CV_64FC1);cvZero(mat);cvmSet(mat,0,0,1);cvmSet(mat,0,1,2);cvmSet(mat,1,0,3);cvm
3、Set(mat,2,2,4);cvReleaseMat(&mat);方式二、連接現(xiàn)有數(shù)組式:doublea[]={1,2,3,4,5,6,7,8,9,10,11,12};CvMatmat=cvMat(3,4,CV_64FC1,a);//64FC1fordouble//不需要cvReleaseMat,因?yàn)閿?shù)據(jù)內(nèi)存分配是由double定義的數(shù)組進(jìn)行的。2.IplImage到cvMat的轉(zhuǎn)換方式一、cvGetMat方式:CvMatmathdr,*mat=cvGetMat(img,&mathdr);方式二、cvConvert方式:CvMat*mat=cvCreateMat(img->height,i
4、mg->width,CV_64FC3);cvConvert(img,mat);//#definecvConvert(src,dst)cvConvertScale((src),(dst),1,0)3.cvArr(IplImage或者cvMat)轉(zhuǎn)化為cvMat方式一、cvGetMat方式:intcoi=0;cvMat*mat=(CvMat*)arr;if(!CV_IS_MAT(mat)){mat=cvGetMat(mat,&matstub,&coi);if(coi!=0)reutn;//CV_ERROR_FROM_CODE(CV_BadCOI);}寫(xiě)成函數(shù)為://Thisisjustanexa
5、mpleoffunction//tosupportbothIplImageandcvMatasaninputCVAPI(void)cvIamArr(constCvArr*arr){CV_FUNCNAME("cvIamArr");__BEGIN__;CV_ASSERT(mat==NULL);CvMatmatstub,*mat=(CvMat*)arr;intcoi=0;if(!CV_IS_MAT(mat)){CV_CALL(mat=cvGetMat(mat,&matstub,&coi));if(coi!=0)CV_ERROR_FROM_CODE(CV_BadCOI);}//Processascv
6、Mat__END__;}4.圖像直接操作方式一:直接數(shù)組操作intcol,row,z;ucharb,g,r;for(y=0;rowheight;y++){for(col=0;colwidth;col++){b=img->imageData[img->widthStep*row+col*3]g=img->imageData[img->widthStep*row+col*3+1];r=img->imageData[img->widthStep*row+col*3+2];}}方式二:宏操作:introw,col;ucharb,g,r;for(row=0;rowh
7、eight;row++){for(col=0;colwidth;col++){b=CV_IMAGE_ELEM(img,uchar,row,col*3);g=CV_IMAGE_ELEM(img,uchar,row,col*3+1);r=CV_IMAGE_ELEM(img,uchar,row,col*3+2);}}注:CV_IMAGE_ELEM(img,uchar,row,col*img->nChan