1.2 Python图像的坐标变换-尺度变换
1 算法原理
图像的几何变换,也就是矩阵乘法。
尺度变换是在原来像素(x0,y0)乘以一个倍数,矩阵公式:
2 代码
运行代码说明
1.要改变代码中的地址,我的地址说明,我是把待处理图片统一放在一个(同级)image文件夹,用os.listdir(base)读取图片名称列表,base是存放图片文件夹的相对路径,也可以是绝对路径
最后在
os.path.join(base,path)
代码中合并base和图片名称,得到完整图片地址2.如果想更改为读取同目录下图片,可以将读取图片路径的几句代码可以改为
原来
base = r'../image' paths = os.listdir(base) for path in paths: img = cv.imread(os.path.join(base,path), 1)
改为
paths = ['img1.jpg','img2.jpg','img3.png'......] for path in paths: print(path) # 读取图片 1 是加载彩色图像。任何图像的透明度都会被忽视。它是默认标志。 img = cv.imread(path, 1)
3.注意最后的
plt.savefig('1.new' + path)
是保存plt图像,如果不使用可以注释掉
import os
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号
base = r'../image'
paths = os.listdir(base)
for path in paths:
img = cv.imread(os.path.join(base,path), 1)
new_img1 = cv.resize(img,None,fx=0.5,fy=0.5,interpolation=cv.INTER_CUBIC)
height,width = img.shape[:2]
new_img2 = cv.resize(img,(2*width,2*height),interpolation=cv.INTER_CUBIC)
# 画图
plt.figure()
plt.suptitle('尺度变换')
plt.subplot(131)
plt.title('原图')
plt.imshow(cv.cvtColor(img, cv.COLOR_BGR2RGB))
plt.subplot(132)
plt.title('新图:缩放一倍')
plt.imshow(cv.cvtColor(new_img1, cv.COLOR_BGR2RGB))
plt.subplot(133)
plt.title('放大一倍')
plt.imshow(cv.cvtColor(new_img2, cv.COLOR_BGR2RGB))
# plt.savefig('2.new' + path) # 保存图片
plt.show()