在python2.7中用numpy.reshape 對圖像進行切割的方法

今天小編就爲大家分享一篇在python2.7中用numpy.reshape 對圖像進行切割的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

遇到這麼個需求:把圖片按照定義的patchsize切塊,然後按照z軸順序疊放小塊,如下圖(僅考慮灰度圖像)

python2.7 numpy.reshape 對圖像進行切割

圖片im,設size爲(h,w),patchsize爲(ph,pw),則處理後大小(爲簡化描述,假設可以整除)爲(ph,pw,w*h/ph/pw)。

爲簡化描述,後面用h=300,w=300,ph=100,pw=100 爲例,即處理後d=9。

numpy.reshape 的文檔:點擊打開鏈接

特別注意第三個參數 order,其默認取值爲 order=‘C',表示最後一個維度的元素在reshape時優先重排位置。而order=‘F'時則相反,第一個維度的元素優先重排位置。

例子如下,得到的im2就是這麼一個tensor

import cv2
import numpy as np
 
im=cv2.imread('animal007.jpg',cv2.IMREAD_GRAYSCALE)
h= 300
w= 300
patchsize=100
d=h*w/patchsize/patchsize
print d
 
#crop the image to h x w
im=np.array(im[: h ,: w ])
 
#this gets wrong answer
im_wrong1=im.reshape((patchsize,patchsize,-1))
im_wrong7= im.reshape((patchsize,patchsize,-1),order='F')
im_wrong2=im.reshape(( h ,patchsize,-1)).reshape((patchsize,patchsize,-1))
im_wrong3=im.reshape((patchsize, w ,-1)).reshape((patchsize,patchsize,-1))
im_wrong4= im.reshape(( h ,patchsize,-1),order='F').reshape((patchsize,patchsize,-1))
im_wrong5= im.reshape(( h ,patchsize,-1),order='F').reshape((patchsize,patchsize,-1),order='F')
im_wrong6= im.reshape((patchsize, w ,-1),order='F').reshape((patchsize,patchsize,-1),order='F')
 
#this only works for h=w, i dont know why 
im2= im.reshape((patchsize, w ,-1),order='F').reshape((patchsize,patchsize,-1))
im2_0=im2[:,:,no]
cv2.imwrite('im2_0.jpg',im2_0)
 
no=4;
imw=im_wrong1[:,:,no]
cv2.imwrite('imw1_0.jpg',imw)
imw=im_wrong2[:,:,no]
cv2.imwrite('imw2_0.jpg',imw)
imw=im_wrong3[:,:,no]
cv2.imwrite('imw3_0.jpg',imw)
imw=im_wrong4[:,:,no]
cv2.imwrite('imw4_0.jpg',imw)
imw=im_wrong5[:,:,no]
cv2.imwrite('imw5_0.jpg',imw)
imw=im_wrong6[:,:,no]
cv2.imwrite('imw6_0.jpg',imw)
imw=im_wrong7[:,:,no]
cv2.imwrite('imw7_0.jpg',imw)
 

以上這篇在python2.7中用numpy.reshape 對圖像進行切割的方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持神馬文庫。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章