OpenCv之图像缩放翻转和拼接

📄 AI 智能文档扫描仪 -

📄 AI 智能文档扫描仪 -

图片编辑
Python
PyTorch

基于OpenCV透视变换算法,提供文档自动扫描与矫正服务,支持边缘检测、歪斜拉直及去阴影增强,集成WebUI,纯算法零依赖版

目录

一、图像插值原理(缩放 / 旋转的基础)

1.1 问题由来

1.2. 常见插值方法

1.3. 双线性插值原理

二、图像缩放:cv::resize()

2.1. 函数原型

2.2. 应用场景

三、图像翻转:cv::flip()

3.1. 函数原型

3.2. 应用场景

四、图像拼接

4.1. 函数原型

4.2. 应用场景

五、应用代码举例

5.1缩放反转和拼接代码举例

5.2 实际效果展示


一、图像插值原理(缩放 / 旋转的基础)

1.1 问题由来

        当我们把图像放大 / 缩小 / 旋转时,目标图像的像素坐标会对应到原图像的非整数坐标(比如 (120.3, 45.7)),而原图像只有整数坐标的像素值,这就需要通过插值算法来估算这个非整数坐标的像素值。

1.2. 常见插值方法

插值方法核心逻辑优点缺点适用场景
最近邻插值(INTER_NEAREST)取最近的整数坐标像素值速度最快,计算简单边缘锯齿明显,画质差放大图标 / 文字、实时性要求高的场景
线性插值(INTER_LINEAR)取 2 个邻点的线性加权平均速度快,效果比最近邻好边缘仍有轻微模糊图像缩小、实时视频流
双线性插值(INTER_LINEAR,OpenCV 默认)取 4 个邻点的二维线性加权效果平滑,无锯齿计算稍慢通用缩放、日常图像处理(默认选择)
双三次插值(INTER_CUBIC)取 16 个邻点的三次多项式拟合画质最优,边缘清晰计算最慢高清图像放大、摄影后期
Lanczos 插值(INTER_LANCZOS4)基于 sinc 函数的高阶插值细节保留最好计算最慢,易产生振铃专业图像修复、超分辨率

1.3. 双线性插值原理

目标点 p(u,v) 落在 4 个已知点 p(u₀,v₀)p(u₁,v₀)p(u₀,v₁)p(u₁,v₁) 之间:

  1. 先在水平方向做两次线性插值,得到 p(u,v₀)p(u,v₁)
  2. 再在垂直方向做一次线性插值,得到最终的 p(u,v)
  • f(u,v0​)f(u,v1​)f(u,v)​=(u1​−u)f(u0​,v0​)+(u−u0​)
  • f(u1​,v0​)=(u1​−u)f(u0​,v1​)+(u−u0​)
  • f(u1​,v1​)=(v1​−v)f(u,v0​)+(v−v0​)f(u,v1​)​

二、图像缩放:cv::resize()

2.1. 函数原型

void cv::resize(
    InputArray src,        // 输入图像
    OutputArray dst,       // 输出图像(类型与src一致)
    Size dsize,            // 目标尺寸(Size(w,h))
    double fx = 0,         // 水平缩放比例(优先dsize)
    double fy = 0,         // 垂直缩放比例(优先dsize)
    int interpolation = INTER_LINEAR  // 插值方法
);
  • 两种传参方式
    1. 直接指定目标尺寸:dsize = Size(640, 480)
    2. 指定缩放比例:fx=0.5, fy=0.5(缩小为原来的 1/2),此时 dsizeSize()

2.2. 应用场景

  • 适配显示:将高分辨率图像缩放到适合屏幕 / 控件的尺寸;
  • 减少计算:将大图缩小后再做特征检测 / 深度学习,提升速度;
  • 图像放大:将小图放大用于预览 / 打印(需配合高质量插值)。

三、图像翻转:cv::flip()

3.1. 函数原型

void cv::flip(
    InputArray src,    // 输入图像
    OutputArray dst,   // 输出图像(尺寸/类型/通道数与src一致)
    int flipCode       // 翻转方式
);
  • flipCode 取值
    • flipCode > 0:绕 Y 轴 翻转(水平翻转,左右镜像);
    • flipCode = 0:绕 X 轴 翻转(垂直翻转,上下颠倒);
    • flipCode < 0:同时绕 X、Y 轴翻转(180° 旋转)。

3.2. 应用场景

  • 数据增强:深度学习训练时,翻转图像增加样本多样性;
  • 镜像预览:相机预览 / 自拍时,显示镜像效果更符合直觉;
  • 图像校正:扫描 / 拍摄时方向颠倒,用翻转校正。

四、图像拼接

4.1. 函数原型

// 水平拼接(左右拼):要求两张图**高度一致**
void cv::hconcat(InputArray src1, InputArray src2, OutputArray dst);
// 垂直拼接(上下拼):要求两张图**宽度一致**
void cv::vconcat(InputArray src1, InputArray src2, OutputArray dst);
  • 注意:拼接的图像必须通道数相同、数据类型相同

4.2. 应用场景

  • 结果对比:将原图 / 处理后图并排展示,方便调试;
  • 全景拼接:多张相邻图像拼接成全景图;
  • 多图排版:生成对比报告、海报排版。

五、应用代码举例

5.1缩放反转和拼接代码举例

void testResize()
{
	Mat GrayMat = imread(R"(D:\Study\OpenCvStudy\lean.jpg)", ImreadModes::IMREAD_GRAYSCALE);
	//图像缩放
	Mat resizeMat1, resizeMat2, resizeMat3;
	resize(GrayMat, resizeMat1, Size(200, 400), 0, 0, INTER_NEAREST);
	resize(GrayMat, resizeMat2, Size(200, 400), 0, 0, INTER_LINEAR);
	resize(GrayMat, resizeMat3, Size(200, 400), 0, 0, INTER_CUBIC);


	//图像反转
	Mat flipH,flipV,flipHV;
	flip(GrayMat, flipH, 0);//0 x 正值 y  负值 xy中心对称
	flip(GrayMat, flipV, 1);
	flip(GrayMat, flipHV, -1);

	//图像拼接
	Mat catH,catV;
	hconcat(GrayMat, flipV, catH);
	vconcat(GrayMat, flipH, catV);

	waitKey();

}

5.2 实际效果展示

翻转

拼接

缩放

您可能感兴趣的与本文相关的镜像

📄 AI 智能文档扫描仪 -

📄 AI 智能文档扫描仪 -

图片编辑
Python
PyTorch

基于OpenCV透视变换算法,提供文档自动扫描与矫正服务,支持边缘检测、歪斜拉直及去阴影增强,集成WebUI,纯算法零依赖版

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值