Task1:图像插值算法
学习自:https://github.com/datawhalechina/team-learning/blob/master/%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%A7%86%E8%A7%89%E5%9F%BA%E7%A1%80%EF%BC%9A%E5%9B%BE%E5%83%8F%E5%A4%84%E7%90%86%EF%BC%88%E4%B8%8A%EF%BC%89/Task01%20%E5%9B%BE%E5%83%8F%E6%8F%92%E5%80%BC%E7%AE%97%E6%B3%95.md
-
插值算法原理介绍
- 最近邻插值算法
- 双线性插值算法
-
OpenCV代码实践
- cv.resize()各项参数及含义
cv2.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]])
参数:
参数 | 描述 |
---|---|
src | 【必需】原图像 |
dsize | 【必需】输出图像所需大小 |
fx | 【可选】沿水平轴的比例因子 |
fy | 【可选】沿垂直轴的比例因子 |
interpolation | 【可选】插值方式 |
插值方式:
interpolation | |
---|---|
cv.INTER_NEAREST | 最近邻插值 |
cv.INTER_LINEAR | 双线性插值 |
cv.INTER_CUBIC | 基于4x4像素邻域的3次插值法 |
cv.INTER_AREA | 基于局部像素的重采样 |
通常,缩小使用cv.INTER_AREA,放缩使用cv.INTER_CUBIC(较慢)和cv.INTER_LINEAR(较快效果也不错)。默认情况下,所有的放缩都使用cv.INTER_LINEAR。
3. 动手实现
import cv2
import matplotlib.pyplot as plt
img = cv2.imread('2010_005480.jpg', cv2.IMREAD_UNCHANGED)
print('Original Dimensions : ',img.shape)
scale_percent = 30 # percent of original size
width = int(img.shape[1] * scale_percent / 100)
height = int(img.shape[0] * scale_percent / 100)
dim = (width, height)
# resize image
resized = cv2.resize(img, dim, interpolation = cv2.INTER_LINEAR)
fx = 1.5
fy = 1.5
resized1 = cv2.resize(resized, dsize=None, fx=fx, fy=fy, interpolation = cv2.INTER_NEAREST)
resized2 = cv2.resize(resized, dsize=None, fx=fx, fy=fy, interpolation = cv2.INTER_LINEAR)
print('Resized Dimensions : ',resized.shape)
# cv.imread 读取的是BGR,plt.imshoe的是RGB格式
# 进行转换
resized_c = resized[:,:,[2,1,0]]
resized1_c = resized1[:,:,[2,1,0]]
resized2_c = resized2[:,:,[2,1,0]]
# plt.figure(figsize=(15, 18))
plt.imshow(resized_c)
plt.title('Resized image')
plt.show()
Original Dimensions : (375, 500, 3)
Resized Dimensions : (112, 150, 3)
plt.imshow( resized1_c)
plt.title('INTER_NEAREST image')
plt.show()
plt.imshow(resized2_c)
plt.title('INTER_LINEAR image')
plt.show()