前言
在图像处理任务中,图像的放缩操作是非常常见的需求,例如调整图像大小以适配显示区域、数据增强或改变分辨率。OpenCV 提供了强大的图像放缩功能,并支持多种插值方法。
完整代码
import cv2 as cv
def resize_demo():
# 加载图像
image = cv.imread('images/test.png')
if image is None:
raise FileNotFoundError("图像路径错误,请检查路径是否正确!")
# 获取图像的尺寸
h, w, c = image.shape
# 创建显示窗口
cv.namedWindow("resize_demo", cv.WINDOW_AUTOSIZE)
# 方法1:按目标尺寸放大图像(宽高均为原始的2倍)
result1 = cv.resize(image, (w * 2, h * 2), interpolation=cv.INTER_NEAREST)
# 方法2:按目标尺寸缩小图像(宽高均为原始的一半)
result2 = cv.resize(image, (w // 2, h // 2), interpolation=cv.INTER_NEAREST)
# 方法3:使用缩放因子调整大小(75% 原始尺寸)
result3 = cv.resize(image, (0, 0), fx=0.75, fy=0.75, interpolation=cv.INTER_NEAREST)
# 显示结果
cv.imshow("Original Image", image)
cv.imshow("Upscaled (2x)", result1)
cv.imshow("Downscaled (0.5x)", result2)
cv.imshow("Scaled (0.75x)", result3)
# 等待按键退出
cv.waitKey(0)
cv.destroyAllWindows()
# 调用函数
resize_demo()
图像放缩方法
方法1:按目标尺寸调整大小
result1 = cv.resize(image, (w * 2, h * 2), interpolation=cv.INTER_NEAREST)
cv.resize
:调整图像大小。(w * 2, h * 2)
:指定目标尺寸(宽、高)。cv.INTER_NEAREST
:最近邻插值方法,快速但图像可能较为锯齿化。
方法2:按目标尺寸缩小
result2 = cv.resize(image, (w // 2, h // 2), interpolation=cv.INTER_NEAREST)
- 将目标尺寸设置为原图的宽高各一半,实现图像缩小。
方法3:使用缩放因子
result3 = cv.resize(image, (0, 0), fx=0.75, fy=0.75, interpolation=cv.INTER_NEAREST)
- 设置
fx
和fy
分别表示水平方向和垂直方向的缩放因子。 - 当目标尺寸为
(0, 0)
时,fx
和fy
会直接控制最终的缩放大小。
插值方法解析
常用插值方法
cv.INTER_NEAREST
(最近邻插值):- 最简单、最快速的插值方法。
- 图像可能出现锯齿或块状效果,适用于简单场景。
cv.INTER_LINEAR
(双线性插值,默认值):- 在放缩过程中计算像素的加权平均值。
- 通常用于实时图像处理,性能与效果平衡。
cv.INTER_CUBIC
(双三次插值):- 基于像素周围的 4×4 像素块进行插值。
- 图像质量更高,但计算开销较大。
cv.INTER_LANCZOS4
(Lanczos 插值):- 使用像素周围的 8×8 像素块进行插值。
- 适合对质量要求较高的静态图像处理。
应用场景
- 图像增强:
- 放大图像时,可以结合插值算法提升图像质量。
- 数据预处理:
- 将不同分辨率的图像统一到相同大小,以适配深度学习模型。
- 分辨率调整:
- 在图像显示或存储时,调整大小以优化资源使用。
运行效果
© 版权声明
转载请注明出处,并标明原文链接。
本网站尊重知识产权,如有侵权,请及时联系我们删除。
本站所有原创内容仅用于学习和交流目的,未经作者和本站授权不得进行商业使用或盈利行为。
本网站尊重知识产权,如有侵权,请及时联系我们删除。
本站所有原创内容仅用于学习和交流目的,未经作者和本站授权不得进行商业使用或盈利行为。
THE END
暂无评论内容