二次线性插值实现图像放大(计算机视觉)
一、實驗目的
利用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()
?
總結
以上是生活随笔為你收集整理的二次线性插值实现图像放大(计算机视觉)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 你说的等保3.0,是不是等保三级测评
- 下一篇: 病毒防火墙推荐 - avast! ant