remap()函数
常见应用:图像翻转,图像缩小。
void remap(InputArray src, //输入图像
OutputArraydst, //输出图像
InputArray map1,//第一个映射
InputArray map2, //第二个映射
int interpolation, //插值
intborderMode=BORDER_CONSTANT,
const Scalar& borderValue=Scalar()
)
调用remap前,要先设置好map1和map2
对应关系 map 1-----map_x;
map2------map_y;
/上下翻转//
for (int j = 0; j < srcImage.rows; j++)
{
for (int i = 0; i < srcImage.cols; i++)
{
map_x.at<float>(j, i) = static_cast<float>(i);//行不变
map_y.at<float>(j, i) = static_cast<float>(srcImage.rows - j);//列翻转
}
}
/左右翻转//
for (int j = 0; j < srcImage.rows; j++)
{
for (int i = 0; i < srcImage.cols; i++)
{
map_x.at<float>(j, i) = static_cast<float>(srcImage.cols - i);//行翻转
map_y.at<float>(j, i) = static_cast<float>(j);//列不变
}
}
/缩小为原来的一般,并在中间显示//
for (int j = 0; j < srcImage.rows; j++)
{
for (int i = 0; i < srcImage.cols; i++)
{
if(i > srcImage.cols*0.25 && i < srcImage.cols*0.75 && j > srcImage.rows*0.25 && j < srcImage.rows*0.75)
{
map1_x.at<float>(j, i) = 2*(i - srcImage.cols*0.25) + 0.5;
map2_y.at<float>(j, i) = 2*(j - srcImage.rows*0.25) + 0.5;
}
else
{
map1_x.at<float>(j, i) = 0;
map2_y.at<float>(j, i) = 0;
}
}
}