图像放大和缩小
圖像放大和縮小
- 1. 圖像的縮小
- 2. 圖像的放大
- 3. 用python實現圖像的縮放
- 3.1 方法一:PIL庫實現
- 3.2 方法二:cv庫實現
1. 圖像的縮小
圖像縮小分為按比例縮小和不按比例縮小兩種。圖像向縮小后,因為承載的信息量減少,所以畫布可相應縮小。圖像縮小實際上就是對原圖數據進行挑選和處理,獲得期望縮小尺寸的數據,并盡量保持原有特征不丟失。最簡單的方法就是等間隔地選取數據。
設原始圖像大小為MN,縮小為k1Mk2N,(k1,k2 均小于1)。
設原始圖像為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時,有
那么,得到的G圖像行和列數為x=[1,60.6]=[1,4],四舍五入,最后留下4行,y=[1,60.75]=[1,5],最后留下5列。而行列所對應的值為原始F保留的對應目標像素的值,即G(x,y) = F(c1x,c2y)。
2. 圖像的放大
圖像放大從信息處理的角度來看,與圖像縮小難易程度完全不一樣,圖像縮小是從眾多信息中選出需要的信息,而圖像放大則是需要對多出的空位填入適當的值,是信息的估計。
當放大倍數為整數時,最簡單的方法是將原圖像中的像素值,填在新圖像中對應的kk大小的子塊中。
設原始圖像為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實現圖像的縮放
3.1 方法一:PIL庫實現
相關庫PIL,PIL(Python Imaging Library,圖像處理庫)提供了通用的圖像處理功能,主要包括圖像存儲、圖像顯示、格式轉換以及基本的圖像處理操作。
應用PIL下Image類:
| src | <PIL.PngImagePlugin.PngImageFile image mode=RGB size=512x512 at 0x20AF35975C8> |
| resized | resized: <PIL.Image.Image image mode=RGB size=307x384 at 0x20AF4266AC8> |
| thumbnail | thumbnail: <PIL.PngImagePlugin.PngImageFile image mode=RGB size=307x307 at 0x20AF35975C8> |
thumbnail 縮略圖是網絡開發或圖像軟件預覽常用的一種基本技術。thumbnail 方法直接修改原圖為縮略圖,不會另外創建新內存。resized會在創建新的內存保存縮放數據。
代碼實現:
注意:返回的out3與out4是PIL Image的實例,直接調用show方法顯示,不能和cv中的imshow混用。
3.2 方法二:cv庫實現
cv2.resize(src,dsize[,dst[,fx[,fy[,interpolation]]]]) -> dst
interpolation - 插值方法。共有5種:
1)INTER_NEAREST - 最近鄰插值法
2)INTER_LINEAR - 雙線性插值法(默認)
3)INTER_AREA - 基于局部像素的重采樣(resampling using pixel area relation)。對于圖像抽取(image decimation)來說,這可能是一個更好的方法。但如果是放大圖像時,它和最近鄰法的效果類似。
4)INTER_CUBIC - 基于4x4像素鄰域的3次插值法
5)INTER_LANCZOS4 - 基于8x8像素鄰域的Lanczos插值
實現縮放:
代碼:
總結
- 上一篇: Unity学习——射箭游戏
- 下一篇: 2022年C++学习路线以及知识整理汇总