首页 > 代码库 > 重映射 cvRemap
重映射 cvRemap
核心函数:cvRemap
原理:
dst(x,y)<-src(mapx(x,y),mapy(x,y))
如果src(mapx(x,y),mapy(x,y))在src中不存在,那么用0代替
程序:
#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=http://www.mamicode.com/‘#/‘" //打印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=http://www.mamicode.com/*(DataPt+cols);" "; } 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=http://www.mamicode.com/*(DataPt+cols);" "; } 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=http://www.mamicode.com/*(DataPt+cols);" "; } std::cout<<std::endl; } return 0; }
本文出自 “flyclc” 博客,请务必保留此出处http://flyclc.blog.51cto.com/1385758/1539817
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。