opencv学习4——图像缩放

一、通过调用api实现尺寸的改变

cv2.resize(src,dsize,dst=None,fx=None,fy=None,interpolation=None) 图像尺寸改变

scr:原图片;dsize:输出图像尺寸;fx:沿水平轴的比例因子;fy:沿垂直轴的比例因子;interpolation:插值方法,包括:

cv2. INTER_LINEAR,双线性插值(缺省);

cv2.INTER_NEAREST,最近邻域插值;

cv2. INTER_CUBIC,4x4像素邻域的双三次插值;

cv2. INTER_LANCZOS4,8x8像素邻域的Lanczos插值;

cv2. INTER_AREA 像素关系重采样

 

二、最近邻域插值法

1.确定图像缩放比例,将原图像像素位置乘以缩放比例得到新图像像位置,如果出现小数,取最近邻的像素位置(四舍五入)

2.numpy是科学计算中的常用库,对于矩阵运算等十分方便

3.np.zeros(shape, dtype=float, order='C') 生成全零数组

Shape,数组尺寸,在此程序中设置为图像的高、宽、通道三维数组

Dtype,数组元素类型,此代码中这设置为无符号8位整数

Order,c代表与c语言类似,行优先;F代表列优先

 

三、双线性插值法

 

四、代码实现

1.api

# API 实现图像尺寸改变

import cv2

img = cv2.imread('image01.jpg',1)
imgHeight,imgWidth,imgMode = img.shape
# 图像长、宽、通道数值获取

# 压缩比设置
coe1 = 0.5
coe2 = 2
dst1Height = int(imgHeight*coe1)
dst1Width  = int(imgWidth*coe1)
dst2Height = int(imgHeight*coe2)
dst2Width  = int(imgWidth*coe2)


dst1 = cv2.resize(img,(dst1Width,dst1Height))
dst2 = cv2.resize(img,(dst2Width,dst2Height))
cv2.imshow('image',dst1)
cv2.imshow('image',dst2)

cv2.waitKey(0)
cv2.destroyAllWindows()

2.最近邻域插值法

# 最近邻域插值法
# 实现过程:
# 1.获取原图像信息,并设置缩放比
# 2.创建目标图像尺寸的数组
# 3.确定像素对应关系并赋值

import cv2
import numpy as np

img = cv2.imread('image01.jpg',1)
imgHeight,imgWidth,imgMode = img.shape
coe = 0.5

dstHeight = int(imgHeight*coe)
dstWidth = int(imgWidth*coe)
dstImg = np.zeros((dstHeight,dstWidth,imgMode),np.uint8)

# 像素值确定,使用最近邻域插值
for i in range(dstHeight):
    for j in range(dstWidth):
        y = int(i/coe + 0.5)                #图像改变后图像中的位置 = 图像改变前图像中的位置 * 缩放比,改变前位置 = 改变后位置/缩放比以找到原像素值
        x = int(j/coe + 0.5)                #原图像A中的点a(x,y),对应的,改变后图像B中的点a'(x',y')=(x*coe,y*coe)
        dstImg[i,j] = img[y,x]              #所以,x = x'/coe,得到对应的原图像中的位置,并将原像素中的值赋给改变后的像素

cv2.imshow('image',dstImg)

cv2.waitKey(0)
cv2.destroyAllWindows()

3.双向线性插值法

猜你喜欢

转载自blog.csdn.net/nominior/article/details/82730557
今日推荐