使用Python进行图像缩放处理
生活随笔
收集整理的這篇文章主要介紹了
使用Python进行图像缩放处理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
使用Python進行圖像縮放處理
(感謝前輩)轉自:https://zhuanlan.zhihu.com/p/26446550
最近要進行數據預處理,所以要將讀取的圖片進行縮放才能使用,所以就來學一學圖像的縮放。
圖像的縮放主要包括兩種,一種是全比例縮放,即把圖像x,y方向都進行等比例縮放,另外一種是非全比例縮放。
比例縮放矩陣:
其代數式:
兩種縮小變換方法:
基于等間隔采樣的圖像縮小方法。
基于局部均值的圖像縮小方法。
等間隔采樣方法顧名思義,就是每隔固定的距離進行采樣,這樣就選擇一些點,舍棄一些點,最后就能得到最終結果,使其效果和原來差不多。若比例因子為m和n,原圖的矩陣為 f[M×N],縮小后的矩陣為 g [(M*m)×(N*n)],由于原圖像素點多,映射到g后會出現多點對一點的現象所以我們從g映射到f,則有g(i,j) = f(i/m,j/n)
代碼:
實驗效果
第二種縮放方法是基于局部均值的圖像縮放方法
前面一種方法舍棄了很多點的信息,而局部均值法可以解決這個問題,我們說過f到g是一個多對一的映射前面的方法,我們簡單的選取了其中的一個來映射到g,而這里,我們將找出所有映射到g(i,j)上的點,然后對他們的值取均值,好啦,具體思路如下:
此時g(i,j)不只是簡單映射到f(i/m,j/n)了,而是可以映射到如下矩陣:
import cvdef JReduce(image,m,n):H = int(image.height*m)W = int(image.width*n)size = (W,H)iJReduce = cv.CreateImage(size,image.depth,image.nChannels)for i in range(H):for j in range(W):x1 = int(i/m)x2 = int((i+1)/m)y1 = int(j/n)y2 = int((j+1)/n)sum = [0,0,0]for k in range(x1,x2):for l in range(y1,y2):sum[0] = sum[0]+image[k,l][0]sum[1] = sum[1]+image[k,l][1]sum[2] = sum[2]+image[k,l][2]num = (x2-x1)*(y2-y1)iJReduce[i,j] = (sum[0]/num,sum[1]/num,sum[2]/num)return iJReducec參考文獻:python 簡單圖像處理(5) 縮放
這篇文章我先留個坑,有時間再把代碼改下。
總結
以上是生活随笔為你收集整理的使用Python进行图像缩放处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网络安全进阶篇(十一章-6)APP渗透测
- 下一篇: python课堂笔记手抄图片报_安全手抄