一、实验目的
利用python 语言编程实现缩小放大,对比两种方法得到放大图像的差异,进一步理解计算机视觉中图像缩小及放大的各种方法及其原理。同时培养学生的编程能力。
2. 实验软硬件环境
笔记本电脑、windows10系统,Visual Studio Code编辑器,opencv视觉库,numpy库, matplolib库。
三、实验内容及步骤
(一)实验内容
使用python编程,实现图片的缩小与放大。
(2) 实验过程
1. python编程实现图像的缩小。
基于opencv读取包含个人人脸的图像。
调用opencv中的库函数,使用图像的缩小。
img=cv2.imread(‘xiao.jpg’)
y ,x = img.shape[0:2]
图片太小,缩小后作为基础图片,确定宽高。
while x>=500:
img2=cv2.resize(img,(int(0.5*x),int(0.5*y)))
y ,x = img2.shape[0:2]
img=img2
cv2.imshow(‘img2’,img2)
H,W=img2.shape[0:2]
连续缩小
while x>=200:
img3=cv2.resize(img2,(int(0.5*x),int(0.5*y)))
cv2.imshow(‘showing’,img3)
y ,x = img3.shape[0:2]
img2=img3
H1,W1=img3.shape[0:2]
s=H/H1
print(s)
最近邻插值放大
Iimg4=cv2.resize(img3,(0,0),fx=int(s),fy=int(s),interpolation=cv2.INTER_NEAREST) #缩放图像
cv2.imshow(‘最近邻插值’,img4)
双线性插值
img5=cv2.resize(img3,(0,0),fx=int(s),fy=int(s),interpolation=cv2.INTER_LINEAR) #缩放图像
cv2.imshow(‘双线性插值法’,img5)
将缩小后的图像保存到文件夹中。
2. 基于双线性插值对1中缩小后的图像进行放大。
3. 基于最近邻插值法对1,中的缩小的图像进行放大。
4.记录原图,缩小后的图像,两种方法放大的图像。
5.上述得到的图像均保存到文件夹中。命名格式 **人基准图,缩小图,最近邻放大图,双线性放大图
人类基准:
缩小:
最近的邻居放大:
双线性放大:
(3)对比分析两幅放大图像的差异,分析原因。与原图对比,分析原因。
答:这两张放大后的图像分辨率不高,特别是最近邻插值有严重的混叠现象,灰度值不连续,而双线性插值的灰度值是连续的,图像比较平滑连续。
附test1.py:(记得和照片放一个文件夹)
from imp import reload
from re import S
import cv2
img=cv2.imread(‘ xiao.jpg ‘) #读取图像
#sc =[1,0.2,0.5,1.5,2] #设置图像放缩比例
cv2.imshow(‘showimg’,img) #显示图像
y ,x = img.shape[0:2]
#图片太小,缩小后作为基础图,确定宽高
while x>=500:
img2=cv2.resize(img,(int(0.5*x),int(0.5*y))) #缩放图像
cv2.imwrite(‘xiao1.jpg’,img2)
y ,x = img2.shape[0:2]
img=img2
#cv2.imwrite(‘xiao.jpg’,img2)
cv2.imshow(‘img2’,img2) #显示图像
H,W=img2.shape[0:2]
#####不断减少
while x>=200:
img3=cv2.resize(img2,(int(0.5*x),int(0.5*y))) #缩放图像
cv2.imshow(‘showing’,img3) #显示图像
#cv2.imwrite(‘xiao1.jpg’,img2)
y ,x = img3.shape[0:2]
img2=img3
cv2.imwrite(‘xiao2.jpg’,img3)
H1,W1=img3.shape[0:2]
s=H/H1
print(s)
####连续放大最近邻值
img4=cv2.resize(img3,(0,0),fx=int(s),fy=int(s),interpolation=cv2.INTER_NEAREST) #缩放图像
cv2.imshow(‘zuijinlingchazhi最近邻插值’,img4)
cv2.imwrite(‘zuijin.jpg’,img4)
##连续放大双线性插值法
img5=cv2.resize(img3,(0,0),fx=int(s),fy=int(s),interpolation=cv2.INTER_LINEAR) #缩放图像
cv2.imshow(‘双线性插值法’,img5)
cv2.imwrite(‘shuangxian.jpg’,img5)
##连续放大 3次样插值法
img6=cv2.resize(img3,(0,0),fx=int(s),fy=int(s),interpolation=cv2.INTER_CUBIC) #缩放图像
cv2.imshow(‘ 3次样插值法’,img6)
cv2.imwrite(‘3ciyang.jpg’,img6)
img7=cv2.resize(img3,(0,0),fx=int(s),fy=int(s),interpolation=cv2.INTER_LANCZOS4) #缩放图像
cv2.imshow(‘ 3’,img7)
cv2.waitKey()
文章出处登录后可见!