站点图标 迷途小书童的Note

OpenCV中的图像插值

在仿射变换中,比如 resize 其实已经用到了插值 interpolation。一个图片从 100×100 放大到 200*200 的时候,就会产生新的像素点(下图中的红色点),新的像素点值是多少,这就是插值要做的事情。

OpenCV 4.x 版本支持的插值算法有很多,如下图

这里仅列出常用的几种

示例

import cv2

image = cv2.imread('lenna.png')
cv2.imshow("original image", image)

h, w = image.shape[:2]

dst = cv2.resize(image, (w*2, h*2), fx=0.75, fy=0.75, interpolation=cv2.INTER_NEAREST)
cv2.imshow("INTER_NEAREST", dst)

dst = cv2.resize(image, (w*2, h*2), interpolation=cv2.INTER_LINEAR)
cv2.imshow("INTER_LINEAR", dst)

dst = cv2.resize(image, (w*2, h*2), interpolation=cv2.INTER_AREA)
cv2.imshow("INTER_AREA", dst)

dst = cv2.resize(image, (w*2, h*2), interpolation=cv2.INTER_CUBIC)
cv2.imshow("INTER_CUBIC", dst)

dst = cv2.resize(image, (w*2, h*2), interpolation=cv2.INTER_LANCZOS4)
cv2.imshow("INTER_LANCZOS4", dst)

cv2.waitKey(0)
cv2.destroyAllWindows()

退出移动版