# 1 load 2 info 3 resize 4 check import cv2 img = cv2.imread(r"D:PythonCode euronimage0.jpg", 1) imgInfo = img.shape # shape (行[height], 列[width]) print(imgInfo) height = imgInfo[0] width = imgInfo[1] mode = imgInfo[2] # 放大 缩小 # 等比例缩放/非等比例缩放 dstHeight = int(height * 0.5) dstWidth = int(width * 0.5) # 最近邻域插值/双线性插值(默认)/像素关系重采样/立方插值 dst = cv2.resize(img, (dstWidth, dstHeight)) cv2.imshow('image', dst) cv2.waitKey(0)
# 最近邻域插值法 原理
# src 10*20 dst 5*10
# dst <- src
# (1, 2) <- (2, 4)
# dst x 1 -> src x 2 newX
# newX = x * (src 行/目标 行) newX = 1 * (10 / 5) = 2
# newY = y * (src 列/目标 列) newY = 2 * (20 / 10) = 4
# 12.3 -> 12
# 双线性插值
# A1 = 20% * 上 + 80% * 下 A2 ...
# B1 = 30% * 左 + 70% * 右 B2....
# 1. 最终的点 = A1 * 30% + A2 * 70%
# 2. 最终的点 = B1 * 20% + B2 * 80%
# 1 info 2 空白模板 3 xy # 最近邻域插值法 算法实现 import cv2 import numpy as np img = cv2.imread(r"D:PythonCode euronimage0.jpg", 1) imgInfo = img.shape height = imgInfo[0] width = imgInfo[1] dstHeight = int(height/2) dstWidth = int(width/2) dstImage = np.zeros((dstHeight, dstWidth, 3), np.uint8) # uint8是无符号八位整型,表示范围是[0, 255]的整数 for i in range(0, dstHeight): # 行 for j in range(0, dstWidth): # 列 iNew = int(i*(height*1.0/dstHeight)) jNew = int(j*(width*1.0/dstWidth)) dstImage[i, j] = img[iNew, jNew] cv2.imshow('dst', dstImage) cv2.waitKey(0)