cvRemap 对图像进行普通几何变换
生活随笔
收集整理的這篇文章主要介紹了
cvRemap 对图像进行普通几何变换
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
??????? cvRemap 對圖像進行普通幾何變換
??????? 函數 cvRemap 利用下面指定的矩陣變換輸入圖像:
dst(x,y)<-src(mapx(x,y),mapy(x,y))
與其它幾何變換類似,可以使用一些插值方法(由用戶指定,同cvResize)來計算非整數坐標的像素值
dst?????????? ? 輸出圖像.
mapx??????? x坐標的映射 (32fC1 image).
mapy??????? y坐標的映射 (32fC1 image).
flags???????? 插值方法和以下開關選項的組合:
????????????????? CV_WARP_FILL_OUTLIERS - 填充邊界外的像素. 如果輸出圖像的部分象素落在變換后的邊界外,那么它們的值設定為 fillval。
#include "cv.h" #include "cxcore.h" #include "highgui.h" #include <iostream> int Remap(int argc,char** argv) { uchar DataSrc[]={1,2,3,4,5,6,7,8,9 }; CvMat MatSrc; cvInitMatHeader(&MatSrc,3,3,CV_8UC1,DataSrc); //初始化矩陣 CvMat *MatDst=cvCreateMat(3,3,CV_8UC1); //創建矩陣 //cvInitMatHeader(&MatDst,3,3,CV_8UC1); float DataMapx[]={1,2,0, //cvRemap函數的mapx一定要為float型1,2,0,1,2,0 }; CvMat mapx; cvInitMatHeader(&mapx,3,3,CV_32FC1,DataMapx); //注意類型是CV_32FC1 float DataMapy[]={0,0,1,1,1,2,2,2,0 }; CvMat mapy; cvInitMatHeader(&mapy,3,3,CV_32FC1,DataMapy); cvRemap(&MatSrc,MatDst,&mapx,&mapy,CV_INTER_LINEAR | CV_WARP_FILL_OUTLIERS); //打印原矩陣 std::cout<<"MatSrc=\'#\'" //打印mapx std::cout<<"mapx:"<<std::endl; for(int rows=0;rows<mapx.height;rows++) { float *DataPt=(float*)(mapx.data.ptr+rows*mapx.step); for(int cols=0;cols<mapx.width;cols++) { float data=*(DataPt+cols); std::cout<<(float)data<<" "; } std::cout<<std::endl; } //打印mapy std::cout<<"mapy:"<<std::endl; for(int rows=0;rows<mapy.height;rows++) { float *DataPt=(float*)(mapy.data.ptr+rows*mapy.step); for(int cols=0;cols<mapy.width;cols++) { float data=*(DataPt+cols); std::cout<<(float)data<<" "; } std::cout<<std::endl; } //打印結果矩陣 std::cout<<"MatDst:"<<std::endl; for(int rows=0;rows<MatDst->height;rows++) { uchar *DataPt=(uchar*)(MatDst->data.ptr+rows*MatDst->step); for(int cols=0;cols<MatDst->width;cols++) { uchar data=*(DataPt+cols); std::cout<<(int)data<<" "; } std::cout<<std::endl; } return 0; }
總結
以上是生活随笔為你收集整理的cvRemap 对图像进行普通几何变换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux中常用命令(文件与目录)
- 下一篇: 【自我解析】2020年华为杯数学建模比赛