重映射 cvRemap

来源:互联网 发布:数据机房管理制度 编辑:程序博客网 时间:2024/05/16 05:23

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://flyclc.blog.51cto.com/1385758/1539817


核心函数: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_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;}

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

0 0
原创粉丝点击