python-opencv 缩小图片尺寸失真
时间: 2024-12-30 15:28:44 浏览: 13
### 如何在使用 Python OpenCV 缩放图像时避免失真
为了减少缩放过程中产生的失真现象,在使用Python和OpenCV进行图像缩小时,可以选择更合适的插值方法而不是默认的最近邻插值法。最临近插值虽然简单快速但是容易造成明显的质量下降[^4]。
对于缩小操作来说,推荐采用`cv2.INTER_AREA`插值方式,这种方式能够更好地保持原有图像的质量并降低锯齿效应的影响。下面是一个具体实现的例子:
```python
import cv2
def resize_image(input_path, output_path, width=None, height=None, interpolation=cv2.INTER_AREA):
image = cv2.imread(input_path)
# 获取原始尺寸
(h, w) = image.shape[:2]
# 如果既没有指定宽度也没有指定高度则返回原图
if width is None and height is None:
return image
# 只指定了宽度的情况下按比例调整高度
elif width is not None and height is None:
ratio = width / float(w)
dim = (width, int(h * ratio))
# 只指定了高度的情况同理
elif height is not None and width is None:
ratio = height / float(h)
dim = (int(w * ratio), height)
resized = cv2.resize(image, dim, interpolation=interpolation)
# 显示结果(可选)
cv2.imshow("Resized Image", resized)
cv2.waitKey(0)
# 保存文件
cv2.imwrite(output_path, resized)
# 调用函数实例化
resize_image('input.jpg', 'output.jpg', width=800)
```
这段代码定义了一个名为`resize_image`的功能函数,该函数接收输入图片路径、输出图片路径以及其他几个参数用于控制最终得到的新尺寸,并且允许用户自定义使用的插值算法,默认设置为`INTER_AREA`以优化缩小过程中的画质表现[^5]。
阅读全文