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

来源:互联网 发布:js图片翻转效果 编辑:程序博客网 时间:2024/06/07 05:01

        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_32FC1float 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=\'#\'" //打印mapxstd::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;}//打印mapystd::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 0
原创粉丝点击