做公司网站别人能看到吗6,好玩的手机网页游戏,做房产必知的发布房源网站,给个网站手机能看的cvRemap 对图像进行普通几何变换 函数 cvRemap 利用下面指定的矩阵变换输入图像: dst(x,y)-src(mapx(x,y),mapy(x,y)) 与其它几何变换类似#xff0c;可以使用一些插值方法#xff08;由用户指定#xff0c;同cvResize#xff09;来计算非整数坐标的像素值 vo… 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 flagsCV_INTER_LINEARCV_WARP_FILL_OUTLIERS,CvScalar fillvalcvScalarAll(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 *MatDstcvCreateMat(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::coutMatSrc\#\ //打印mapx
std::coutmapx:std::endl;
for(int rows0;rowsmapx.height;rows)
{
float *DataPt(float*)(mapx.data.ptrrows*mapx.step);
for(int cols0;colsmapx.width;cols)
{
float data*(DataPtcols);
std::cout(float)data ;
}
std::coutstd::endl;
}
//打印mapy
std::coutmapy:std::endl;
for(int rows0;rowsmapy.height;rows)
{
float *DataPt(float*)(mapy.data.ptrrows*mapy.step);
for(int cols0;colsmapy.width;cols)
{
float data*(DataPtcols);
std::cout(float)data ;
}
std::coutstd::endl;
}
//打印结果矩阵
std::coutMatDst:std::endl;
for(int rows0;rowsMatDst-height;rows)
{
uchar *DataPt(uchar*)(MatDst-data.ptrrows*MatDst-step);
for(int cols0;colsMatDst-width;cols)
{
uchar data*(DataPtcols);
std::cout(int)data ;
}
std::coutstd::endl;
}
return 0;
}