欢迎访问我的网站,希望内容对您有用,感兴趣的可以加入我们的社群。

OpenCV中的图像插值

OpenCV 迷途小书童 2年前 (2022-07-16) 1563次浏览 0个评论

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

opencv

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

opencv

这里仅列出常用的几种

  • cv2.INTER_LINEAR:双线形插值法,默认值
  • cv2.INTER_NEAREST:最近邻插值法,找到与之距离最相近的邻居(原来就存在的像素点),赋值与其相同
  • cv2.INTER_AREA:区域插值法,基于局部像素的重采样。常用于图像抽取,如果是图像放大的话,效果和最近邻插值法差不多
  • cv2.INTER_CUBIC:基于 4*4 像素邻域的3次插值法
  • cv2.INTER_LANCZOS4:兰索斯插值法,由相邻的 8*8 像素计算得出,公式类似于双线性插值

示例

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()

opencv

参考资料

喜欢 (0)

您必须 登录 才能发表评论!