opencv--图像重映射函数 remap
一、什么叫重映射:就是把一幅图像中某位置的像素放置到另一个图片指定位置的过程。
二、映射原理:
x轴:遍历 原图x轴 取出每个像数元素,复制到 新图像x轴
y轴:遍历 原图y轴 取出每个像数元素,复制到 新图像y轴
三、应用场景:
-》放大:
-》缩小
-》翻转
-》对调
四:函数说明:
void remap(
InputArray src, // 输入图像,即原图像,需要单通道8位或者浮点类型的图像
OutputArray dst, // 输出图像,即目标图像,需和原图形一样的尺寸和类型
InputArray map1, // 它有两种可能表示的对象:(1)表示点(x,y)的第一个映射;(2)表示CV_16SC2,CV_32FC1等
InputArray map2, // 它有两种可能表示的对象:(1)若map1表示点(x,y)时,这个参数不代表任何值;(2)表示 CV_16UC1,CV_32FC1类型的Y值
int interpolation, // 插值方式,有四中插值方式:(1)INTER_NEAREST——最近邻插值
(2)INTER_LINEAR——双线性插值(默认)
(3)INTER_CUBIC——双三样条插值(默认)
(4)INTER_LANCZOS4——LANCZOS插值(默认)
intborderMode = BORDER_CONSTANT, // 边界模式,默认BORDER_CONSTANT
const Scalar& borderValue = Scalar() // 边界颜色,默认Scalar()黑色
)
四、应用例子:
Mat image = imread("C:/Users/CH210315/Desktop/tmp/img/3.jpg");
Mat img_dst,img_x,img_y;
img_dst.create(image.size(),image.type());
img_x.create(image.size(), CV_32FC1);
img_y.create(image.size(), CV_32FC1);
//双层循环,遍历每一个像素点,改变map_x和map_y的值
for (int j = 0; j < image.rows; j++)
{
for (int i = 0; i < image.cols; i++)
{
//改变img_x和img_y的值
img_x.at<float>(j, i) = static_cast<float>(image.rows - i);
img_y.at<float>(j, i) = static_cast<float>(image.rows - j);
}
}
//进行重映射操作
remap(image, img_dst, img_x, img_y, INTER_LINEAR, BORDER_CONSTANT, Scalar(255, 0, 0));
//显示效果图
imshow("效果图", img_dst);
imshow("image", image);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 提示词工程——AI应用必不可少的技术
· 地球OL攻略 —— 某应届生求职总结
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界