二次线性插值实现图像放大

二次线性插值实现图像放大,第1张


一、实验目的

利用python 语言编程实现缩小放大,对比两种方法得到放大图像的差异,进一步理解计算机视觉中图像缩小及放大的各种方法及其原理。


同时培养学生的编程能力。



二、实验硬、软件环境

笔记本电脑、windows10系统,Visual Studio Code编辑器,opencv视觉库,numpy库, matplolib库。



三、实验内容及步骤

(一)实验内容 

使用python编程,实现图片的缩小与放大。


(二)实验过程

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.上述得到的图像均保存到文件夹中。


命名格式  **人基准图,缩小图,最近邻放大图,双线性放大图

人基准图:

缩小图:

最近邻放大图:

双线性放大图:

(三)比较分析两种放大结果图像的差异,并分析原因。


比较与原图的差异,分析原因。


答:这两放大的图像清晰度都不高,特别是最近邻插值有严重的锯齿现象,灰度值不连续,而双线性插值灰度值连续,图像比较平滑连续

附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()

 

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/570973.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-09
下一篇 2022-04-09

发表评论

登录后才能评论

评论列表(0条)

保存