NumPyã®arrayã¨PILã®å¤æ
Python Imaging Libraryã®Imageã¯ã©ã¹ã®ãã¼ã¿ãNumpyã®arrayã¨ãã¦æ±ãããã®æ¹æ³ã«ã¤ãã¦ã
Numpyã®é¢æ°ã使ã£ã¦ç´æ¥pixelå¤ãæ¸ãæãããã¨ãç®æ¨ã§ãã
ã¾ãã¯ä¸¡æ¹ã®ã©ã¤ãã©ãªãã¤ã³ãã¼ããã¦ããã¾ãã
import numpy import Image
PILããNumpyã®arrayã¸ã®å¤æ
numpyã§ç¨æããã¦ããasarrayé¢æ°ã使ãã¨ãPILã®Imageãªãã¸ã§ã¯ããé åã«å¤æãããã¨ãã§ãã¾ãã
imgArray = numpy.asarray(pilImg)
ããã«é åã®å¤ãæ¸ãå¤ããããããã«ããããã«ã¯ãwriteableãã©ã°ãTrueã«ããå¿ è¦ãããããã§ãã
imgArray.flags.writeable = True
Numpyã®arrayããPILã¸ã®å¤æ
PILã®fromarrayã¡ã½ããã«ãã£ã¦ãé åã®åå¤ã1byteæ´æ°å(0ã255)ã¨ãã¦ç»åã®pixelå¤ã«å¤æãããã¨ãã§ãã¾ãã
pilImg = Image.fromarray(numpy.uint8(imgArray))
RGBã¢ã¼ãã®ç»åå¦ç
3Ã4pixã®RGBç»åãèªã¿è¾¼ãã é åã表示ãããã¨ä¸ã®ããã«å¤ãæ ¼ç´ããã¦ãã¾ãã
import numpy import Image pilIN = Image.open("small.bmp") imgArray = numpy.asarray(pilIN) print imgArray
1pixã®æ å ±ã[R,G,B]ã¨ãããªã¹ãã§ä¸ãããã¦ãã¦ããããåæ¹åã«3,è¡æ¹åã«4ã ãæ ¼ç´ããã¦ãããã¨ããããã¾ãã
[ [ [100 161 217] â[0][0]
[104 163 218] â[0][1]
[114 169 221] â[0][2]
[105 164 218] ] â[0][3][ [169 203 234] â[1][0]
[160 197 231] â[1][1]
[117 171 220] â[1][2]
[167 201 233] ] â[1][3][ [124 175 221] â[2][0]
[158 195 230] â[2][1]
[ 80 147 209] â[2][2]
[158 195 230] ] ] â[2][3]
ãã®æ å ±ãæ±ãã«ã¯ããµã¤ãºãåå¾ãã¦foræã®ä¸ã§[å][è¡][è²]ã®ããã«ã¢ã¯ã»ã¹ããã¨è¯ãã§ãã
ä¸ã®ä¾ã¯å ¥åç»åããã¬å¤æ(RGBå ¨ã¦ã®ã¢ã¼ãã§å転)ãã¦ãPILç»åã«æ»ãã¦è¡¨ç¤ºããä¾ã§ãã
import numpy import Image pilIN = Image.open("small.bmp") imgArray = numpy.asarray(pilIN) #PILToNumpy maxcol , maxrow = pilIN.size #get size imgArray.flags.writeable = True for i in range(maxrow): for j in range(maxcol): imgArray[i,j][0] = 255-imgArray[i,j][0] #R imgArray[i,j][1] = 255-imgArray[i,j][1] #G imgArray[i,j][2] = 255-imgArray[i,j][2] #B pilOUT = Image.fromarray(numpy.uint8(imgArray)) #NumpyToPIL pilOUT.show()
RGBAã¢ã¼ãã®ç»åå¦ç
RGBAã¢ã¼ãã§ã¯ééæ
å ±ãå«ã¾ãã¦ããããã1pixelã«4ã¤ã®æ
å ±ãä¿åããã¦ãããã¨ã«ãªãã¾ãã
3Ã4pixã®RGBAç»åãèªã¿è¾¼ã¿ããã®é
åã表示ãããã¨ä¸ã®ããã«[R,G,B,A]ã¨ãã4ã¤ã®å¤ãæ ¼ç´ããã¦ãããã¨ãåããã¾ãã
import numpy import Image pilIN = Image.open("small.bmp").convert("RGBA")#RGBAã«å¤æ imgArray = numpy.asarray(pilIN) print imgArray
RGBAã®å¤ã«ã¢ã¯ã»ã¹ããã«ã¯æ¬¡ã®ããã«ããããã®ãªã¹ãã®å¤ãåå¾ããã¨ããã§ããããæ·»ãåãæå®ããã«ã¯[i][j][k],[i,j][k],[i,j,k]ãªã©ããã¤ãã®æ¸ãæ¹ãããã¾ãã
[ [ [100 161 217 255]
[104 163 218 255]
[114 169 221 255]
[105 164 218 255] ][ [169 203 234 255]
[160 197 231 255]
[117 171 220 255]
[167 201 233 255] ][ [124 175 221 255]
[158 195 230 255]
[ 80 147 209 255]
[158 195 230 255] ] ]
imgArray[i,j][0] #or imgArray[i,j,0] #R imgArray[i,j][1] #or imgArray[i,j,1] #G imgArray[i,j][2] #or imgArray[i,j,2] #B imgArray[i,j][3] #or imgArray[i,j,3] #A
ã°ã¬ã¼ã¹ã±ã¼ã«ç»åå¦ç
3Ã4pixã®ã°ã¬ã¼ã¹ã±ã¼ã«ç»åãé åã¨ãã¦è¡¨ç¤ºãããã¨ä¸ã®ããã«ãªãã¾ãã
import numpy import Image pilIN = Image.open("small.bmp").convert("L")#ã°ã¬ã¼ã¹ã±ã¼ã«ã«å¤æ imgArray = numpy.asarray(pilIN) print imgArray
ãã®å ´åã¯ç´ã«[å][è¡]ã¨ãã¦ã¢ã¯ã»ã¹ããã°å¤ãæ¸ãæãããã¾ãã
[ [149 151 158 152]
[196 189 160 194]
[164 187 134 187] ]
ã°ã¬ã¼ã¹ã±ã¼ã«ç»åã«å¯¾ãã¦50ãé¾å¤ã¨ãã¦2å¤åãè¡ãã³ã¼ãã§ãã
import numpy import Image pilIN = Image.open("small.bmp").convert("L") imgArray = numpy.asarray(pilIN) print imgArray maxcol , maxrow = pilIN.size imgArray.flags.writeable = True for i in range(maxrow): for j in range(maxcol): if(imgArray[i,j] > 50): imgArray[i,j] = 1 else: imgArray[i,j] = 0 pilOUT = Image.fromarray(numpy.uint8(imgArray)) pilOUT.show()
2å¤ç»å
2å¤ç»åã®å ´åã¯boolåã§å¤ãæ ¼ç´ããã¦ãã¾ããnumpyã§ã¯boolåã¯numpy.bool8ã¨ãã¦å®ç¾©ããã¦ãã¾ãã
ä¸ã®ä¾ã¯ä¸åº¦é
åã«å¤æãã¦æ»ããç»åããããä¸åº¦é
åã«ç´ãã¦åºåãããã®ã§ãã
import numpy import Image pilIN = Image.open("small.bmp").convert("1") imgArray = numpy.asarray(pilIN,numpy.bool8) print imgArray pilOUT = Image.fromarray(numpy.uint8(imgArray)) imgArray2 = numpy.asarray(pilOUT,numpy.bool8) print imgArray2
é åã«èªã¿è¾¼ãéã«ã¯èªã¿è¾¼ã¿ã¢ã¼ãã¨ãã¦bool8ãæå®ãã¾ããç»åã«å¤æããå ´åã¯fromarrayã§uint8ãæå®ããã¨ãã¾ãããã¿ããã§ãã
[ [ True True True False]
[ True True True True]
[ True True True True] ][ [ True True True False]
[ True True True True]
[ True True True True] ]