cvRemap 对图像进行普通几何变换

        cvRemap 对图像进行普通几何变换

        函数 cvRemap 利用下面指定的矩阵变换输入图像:
  dst(x,y)<-src(mapx(x,y),mapy(x,y))
  与其它几何变换类似,可以使用一些插值方法(由用户指定,同cvResize)来计算非整数坐标的像素值

void cvRemap( const CvArr* src, CvArr* dst,const CvArr* mapx, const CvArr* mapy,int flags=CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS,CvScalar fillval=cvScalarAll(0) );
        src             输入图像.
  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;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值