我正在玩Python中的腳本,我想查找大量相同尺寸的圖像的中值。也就是說,我不想採用位置[x,y]上的所有(紅色,綠色和藍色)像素,並用它們的中值構造新圖像。查找多個RGB圖像的中值的有效方法
我目前的方法使用Python PIL(圖像庫),但它很慢!我非常想使用OpenCV(cv2)接口,因爲它直接將每個圖像作爲一個numpy數組加載。但是,當堆疊尺寸爲(2560,1920,3)的x圖像時,我不斷收到索引錯誤。任何幫助?
我現在,與PIL低效的代碼,如下所示:
from PIL import Image, ImageChops,ImageDraw,ImageFilter,cv
import sys,glob,sys,math,shutil,time,os, errno,numpy,string
from os import *
inputs =()
path = str(os.getcwd())
BGdummyy=0
os.chdir(path)
for files in glob.glob("*.png"):
inputs = inputs + (str(str(files)),)
BGdummy=0
for file in inputs:
BGdummy=BGdummy+1
im = cv.LoadImage(file)
cv.CvtColor(im, im, cv.CV_BGR2RGB)
img = Image.fromstring("RGB", cv.GetSize(im), im.tostring())
vars()["file"+str(BGdummy)] = img.load()
imgnew = Image.new("RGB", (2560,1920))
pixnew = imgnew.load()
for x in range(2560):
for y in range(1920):
R=[];G=[];B=[];
for z in range(len(inputs)):
R.append(vars()["file"+str(z+1)][x,y][0])
G.append(vars()["file"+str(z+1)][x,y][1])
B.append(vars()["file"+str(z+1)][x,y][2])
R = sorted(R)
G = sorted(G)
B = sorted(B)
mid = int(len(inputs)/2.)
Rnew = R[mid]
Gnew = G[mid]
Bnew = B[mid]
pixnew[x,y] = (Rnew,Gnew,Bnew)
BGdummyy = BGdummyy+1
imgnew.save("NewBG.png")
我從來沒有使用它,但它可能值得檢查'scipy' - http://docs.scipy.org/doc/scipy/reference/ndimage.html - 它會加載它作爲一個數組,您可以使用對於操縱 – 2013-04-21 20:22:10