原理
雙線性內插法是使用目標點四周最近的四個點,沿距目標點x方向、y方向的權重關係,去分配給目標點顏色值
如圖,P點是目標點,Q1、Q2、Q3、Q4是目標點周圍的四個點,先分別對Q1、Q2和Q3、Q4沿x方向進行內插,得到R1、R2兩個點,再對R1、R2沿y方向進行內插,得到目標點P
計算公式如下
注意:上面點p(x,y)裏的x爲換算到原圖的(pos_x - 1),y爲換算到原圖後的(pos_y - 1)
代碼(還沒寫好。)
# -*- coding: utf-8 -*-
"""
@File : 雙線性內插法.py
@Time : 2020/6/24 14:15
@Author : Dontla
@Email : [email protected]
@Software: PyCharm
"""
import cv2 as cv
import numpy as np
def BI(img, resolution):
srcH, srcW, _ = img.shape
dstH, dstW = resolution
img_ = np.zeros((dstH, dstW, 3), dtype=np.uint8)
# 列外層,行內層
for y in range(dstH):
for x in range(dstW):
pos_y = (y + 1) / dstH * srcH # 比較的時候要以像素實際的位置,不能以像素下標
if pos_y % 1 == 0: # 判斷是否爲整數
y_min = y_max = y
else:
if y - 1 < 0:
y_min
fq1, fq2, fq3, fq4 = img[y - 1, x - 1], img[y - 1, x + 1], img[y + 1, x - 1], img[y + 1, x + 1]
img_[y, x] = 0
return img_
# 在這裏設置圖片最終分辨率(縱,橫)
resolution = 300, 600
# print(type(scale)) # <class 'tuple'>
img = cv.imread('Lenna_clip.jpg')
img_ = BI(img, resolution)
cv.imshow('win1', img)
cv.imshow('win2', img_)
cv.waitKey(0)