首页 > 其他 > 详细

重映射 cvRemap

时间:2014-08-14 17:04:59      阅读:493      评论:0      收藏:0      [点我收藏+]

核心函数:cvRemap

原理:

dst(x,y)<-src(mapx(x,y),mapy(x,y))

如果src(mapx(x,y),mapy(x,y))在src中不存在,那么用0代替

程序:

bubuko.com,布布扣

#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;
}


本文出自 “flyclc” 博客,请务必保留此出处http://flyclc.blog.51cto.com/1385758/1539817

重映射 cvRemap,布布扣,bubuko.com

重映射 cvRemap

原文:http://flyclc.blog.51cto.com/1385758/1539817

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!