图像缩放

# 1 load 2 info 3 resize 4 check

import cv2

img = cv2.imread(r"D:\PythonCode\neuron\image0.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\neuron\image0.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)

  

 

 
posted @ 2019-07-19 20:56  青衫客36  阅读(168)  评论(0编辑  收藏  举报