Opencv的resize( )函数在缩放图像时如何减少图像失真问题

【问题发现】一次项目开发中,需要利用Python+Opencv将透明的png图像叠加到jpg图像上,过程中利用了resize( )函数将png图像缩放一定尺寸,叠加后发现png图像轮廓锯齿化严重。发现resize( )的参数设置对图像质量影响较大。

【函数分析】

cv2.resize(img, (w, h), interpolation)

img: 输入图像

w, h: 缩放后的图像尺寸

interpolation: 缩放图像的方法,Opencv提供了5中方法,如下:

cv2.INTER_NEAREST # 最邻近差值法
cv2.INTER_LINEAR # 双线性差值法
cv2.INTER_AREA # 基于局部像素的重采样法
cv2.INTER_CUBIC # 三次差值法
cv2.INTER_LANCZOS4 # 基于8*8像素邻域的Lanczos差值法

本人基于以上5种差值方法,对图像进行缩放,并保存结果图像。运行代码如下:

import cv2 as cv 

def img_resize(img, scale=0.5, interpolation=cv.INTER_LINEAR):
	img = cv.resize(img, (int(img.shape[1]*scale), int(img.shape[0]*scale)), interpolation=interpolation)

	return img

if __name__ == '__main__':
	# 读取图像
	img = cv.imread('imgs/origin_img.png')

	# 利用resize()函数,对图像进行缩放
	img_new = img_resize(img, interpolation=cv.INTER_AREA)

	# 显示图像
	cv.imshow('origin', img)
	cv.imshow('new', img_new)

	cv.imwrite('imgs/out_imgs/area_img.jpg', img_new)

	if cv.waitKey(0) & 0xFF == 27:
		cv.destroyAllWindows()

原始图像如下:

Opencv的resize( )函数在缩放图像时如何减少图像失真问题_第1张图片

基于5种缩放方法生成的缩放图像如下:

Opencv的resize( )函数在缩放图像时如何减少图像失真问题_第2张图片

【结论】

经过实验对比发现,cv2.INTER_AREA方法能够最大程度保证图像的缩放质量。

你可能感兴趣的:(图像处理,python,opencv,图像处理)