日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

图像放大和缩小

發(fā)布時(shí)間:2023/12/20 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 图像放大和缩小 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

圖像放大和縮小

    • 1. 圖像的縮小
    • 2. 圖像的放大
    • 3. 用python實(shí)現(xiàn)圖像的縮放
      • 3.1 方法一:PIL庫(kù)實(shí)現(xiàn)
      • 3.2 方法二:cv庫(kù)實(shí)現(xiàn)

1. 圖像的縮小

圖像縮小分為按比例縮小和不按比例縮小兩種。圖像向縮小后,因?yàn)槌休d的信息量減少,所以畫(huà)布可相應(yīng)縮小。圖像縮小實(shí)際上就是對(duì)原圖數(shù)據(jù)進(jìn)行挑選和處理,獲得期望縮小尺寸的數(shù)據(jù),并盡量保持原有特征不丟失。最簡(jiǎn)單的方法就是等間隔地選取數(shù)據(jù)。
設(shè)原始圖像大小為MN,縮小為k1Mk2N,(k1,k2 均小于1)。
設(shè)原始圖像為F(i,j),i=1,2,…,M j=1,2,…,N;
壓縮后的圖像為G(x,y),,x=1,2,…,k1M y=1,2,…,k2N;
則有G(x,y) = F(c1x,c2y),其中c1 = 1/k1,c2=1/k2;
示例:檔F(i,j)為6X6,k1=0.6,k2=0.75時(shí),有

那么,得到的G圖像行和列數(shù)為x=[1,60.6]=[1,4],四舍五入,最后留下4行,y=[1,60.75]=[1,5],最后留下5列。而行列所對(duì)應(yīng)的值為原始F保留的對(duì)應(yīng)目標(biāo)像素的值,即G(x,y) = F(c1x,c2y)。

2. 圖像的放大

圖像放大從信息處理的角度來(lái)看,與圖像縮小難易程度完全不一樣,圖像縮小是從眾多信息中選出需要的信息,而圖像放大則是需要對(duì)多出的空位填入適當(dāng)?shù)闹?#xff0c;是信息的估計(jì)。
當(dāng)放大倍數(shù)為整數(shù)時(shí),最簡(jiǎn)單的方法是將原圖像中的像素值,填在新圖像中對(duì)應(yīng)的kk大小的子塊中。
設(shè)原始圖像為F(i,j),i=1,2,…,M j=1,2,…,N;
放大后的圖像為G(x,y),,x=1,2,…,k1M y=1,2,…,k1N;
則有G(x,y) = F(c1i,c2*j),其中c1 = 1/k1,c2=1/k2

3. 用python實(shí)現(xiàn)圖像的縮放

3.1 方法一:PIL庫(kù)實(shí)現(xiàn)

相關(guān)庫(kù)PIL,PIL(Python Imaging Library,圖像處理庫(kù))提供了通用的圖像處理功能,主要包括圖像存儲(chǔ)、圖像顯示、格式轉(zhuǎn)換以及基本的圖像處理操作。
應(yīng)用PIL下Image類(lèi):

變換結(jié)果數(shù)據(jù)屬性以及內(nèi)存地址
src<PIL.PngImagePlugin.PngImageFile image mode=RGB size=512x512 at 0x20AF35975C8>
resizedresized: <PIL.Image.Image image mode=RGB size=307x384 at 0x20AF4266AC8>
thumbnailthumbnail: <PIL.PngImagePlugin.PngImageFile image mode=RGB size=307x307 at 0x20AF35975C8>

thumbnail 縮略圖是網(wǎng)絡(luò)開(kāi)發(fā)或圖像軟件預(yù)覽常用的一種基本技術(shù)。thumbnail 方法直接修改原圖為縮略圖,不會(huì)另外創(chuàng)建新內(nèi)存。resized會(huì)在創(chuàng)建新的內(nèi)存保存縮放數(shù)據(jù)。

代碼實(shí)現(xiàn):

def ChangeSizeofImg(imgDress,wRate=0.6,hRate=0.75):img = Image.open(imgDress)print("src:",img)new_x, new_y = img.sizenew_x, new_y = int(wRate*new_x),int(hRate*new_y)# 得到修改數(shù)據(jù)resized = img.resize((new_x, new_y),resample=Image.LANCZOS)print("resized:",resized)# 修改原始數(shù)據(jù)img.thumbnail((new_x, new_y),resample=Image.LANCZOS)print("thumbnail:",img)return resized, imgif __name__ == "__main__":out3,out4 = ChangeSizeofImg("./data/lena.png")# 數(shù)據(jù)格式非mat,不能有cv.show顯示。out3與out4是PIL Image的實(shí)例,直接調(diào)用方法顯示。out3.show()out4.show()

注意:返回的out3與out4是PIL Image的實(shí)例,直接調(diào)用show方法顯示,不能和cv中的imshow混用。

3.2 方法二:cv庫(kù)實(shí)現(xiàn)

cv2.resize(src,dsize[,dst[,fx[,fy[,interpolation]]]]) -> dst

interpolation - 插值方法。共有5種:
1)INTER_NEAREST - 最近鄰插值法
2)INTER_LINEAR - 雙線性插值法(默認(rèn))
3)INTER_AREA - 基于局部像素的重采樣(resampling using pixel area relation)。對(duì)于圖像抽取(image decimation)來(lái)說(shuō),這可能是一個(gè)更好的方法。但如果是放大圖像時(shí),它和最近鄰法的效果類(lèi)似。
4)INTER_CUBIC - 基于4x4像素鄰域的3次插值法
5)INTER_LANCZOS4 - 基于8x8像素鄰域的Lanczos插值

實(shí)現(xiàn)縮放:


代碼:

#!/usr/bin/python # -*- coding = utf-8 -*- # author: beauthy # date: 2020.3.27 # version: 1.0.0 """ 輸出縮放圖像OutResizeImage """ __author__ = 'beauthy'import cv2 import osdef OutResizeImage(img,wRate=0.6,hRate=0.75):"""縮小圖像比例為(0.6,0.75)放大圖像比例為(1.5,1.2)"""height, width = img.shape[:2]if (wRate<1) & (hRate<1):# 縮小圖像size = (int(width*wRate),int(height*hRate))shrink = cv2.resize(img,size,interpolation=cv2.INTER_AREA)return shrinkelse:# 放大圖像fx,fy = wRate,hRateenlarge = cv2.resize(img,(0,0),fx=fx,fy=fy,interpolation=cv2.INTER_CUBIC)return enlargeif __name__ == "__main__":im = cv2.imread("./data/lena.png",-1)# if im == None:# print("Error:could not load image")# os._exit(0)# 縮小out1 = OutResizeImage(im)# 放大out2 = OutResizeImage(im,1.5,1.2)# 顯示cv2.imshow("src",im)cv2.imshow("out1",out1)cv2.imshow("out2",out2)cv2.waitKey(0)

總結(jié)

以上是生活随笔為你收集整理的图像放大和缩小的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。