Opencv的resize( )函数在缩放图像时如何减少图像失真问题 | 您所在的位置:网站首页 › opencv降低图片分辨率 › 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()原始图像如下: 基于5种缩放方法生成的缩放图像如下: 【结论】 经过实验对比发现,cv2.INTER_AREA方法能够最大程度保证图像的缩放质量。 |
CopyRight 2018-2019 实验室设备网 版权所有 |