重映射公式:
dst(x,y) = src(mapx(x,y),mapy(x,y))
重映射函数:remap
void remap( InputArray src,
OutputArray dst,
InputArray map1,
InputArray map2,
int interpolation,
int borderMode=BORDER_CONSTANT,
const Scalar& borderValue=Scalar());
参数5 interpolation:插值方式,不支持resize中的CV_INTER_AREA
//! interpolation algorithm
enum
{
INTER_NEAREST =CV_INTER_NN, 最邻近插值 //!< nearest neighbor interpolation
INTER_LINEAR =CV_INTER_LINEAR, 线性插值 //!< bilinear interpolation
INTER_CUBIC =CV_INTER_CUBIC, 三次样条插值 //!< bicubic interpolation
INTER_AREA =CV_INTER_AREA, 区域插值 //!< area-based (or super) interpolation
INTER_LANCZOS4=CV_INTER_LANCZOS4, Lanczos插值 //!< Lanczos interpolation over 8x8 neighborhood
INTER_MAX =7,
WARP_INVERSE_MAP=CV_WARP_INVERSE_MAP
};
例:
dst(x,y) = src(mapx(x,y),mapy(x,y))
重映射函数:remap
void remap( InputArray src,
OutputArray dst,
InputArray map1,
InputArray map2,
int interpolation,
int borderMode=BORDER_CONSTANT,
const Scalar& borderValue=Scalar());
参数5 interpolation:插值方式,不支持resize中的CV_INTER_AREA
//! interpolation algorithm
enum
{
INTER_NEAREST =CV_INTER_NN, 最邻近插值 //!< nearest neighbor interpolation
INTER_LINEAR =CV_INTER_LINEAR, 线性插值 //!< bilinear interpolation
INTER_CUBIC =CV_INTER_CUBIC, 三次样条插值 //!< bicubic interpolation
INTER_AREA =CV_INTER_AREA, 区域插值 //!< area-based (or super) interpolation
INTER_LANCZOS4=CV_INTER_LANCZOS4, Lanczos插值 //!< Lanczos interpolation over 8x8 neighborhood
INTER_MAX =7,
WARP_INVERSE_MAP=CV_WARP_INVERSE_MAP
};
例:
Mat src,dst;
Mat mapx,mapy;
src = imread("1.jpg");
dst.create(src.size(), src.type());
mapx.create(src.size(), CV_32FC1);
mapy.create(src.size(), CV_32FC1);
for(int j=0; j<src.rows; j++)
{
for(int i=0; i<src.cols; i++)
{
mapx.at<float>(j,i) = static_cast<float>(i);
mapy.at<float>(j,i) = static_cast<float>(src.rows-j);
}
}
remap(src,
dst,mapx,
mapy,
CV_INTER_LINEAR,
BORDER_CONSTANT,
Scalar(0,0,0));