我想在Python中使用圖像切片器分割圖像,然後在每個圖像上應用直方圖均衡並將它們合併回來。我能夠將圖像分成更小的塊,我可以看到它們正在更新,但是在將它們拼接在一起後,我會得到與原始圖像相同的圖像。有人能指出我做錯了什麼嗎?文件名watch.png在Python中分割並加入圖像
import cv2
import numpy as np
from matplotlib import pyplot as plt
from scipy.misc import imsave
# import scipy
from scipy import ndimage
from scipy import misc
import scipy.misc
import scipy
import sys
import argparse
import image_slicer
from image_slicer import join
img = 'watch.png'
num_tiles = 64
tiles = image_slicer.slice(img, num_tiles)
file = "watch"
k = 0
filelist =[]
for i in range(1,9):
for j in range(1,9):
filelist.insert(k, file+"_"+str(i).zfill(2)+"_"+str(j).zfill(2)+".png")
k=k+1
for i in range(0,num_tiles):
img = scipy.misc.imread(filelist[i])
hist,bins = np.histogram(img.flatten(),256,[0,256])
cdf = hist.cumsum()
cdf_normalized = cdf *hist.max()/ cdf.max()
plt.plot(cdf_normalized, color = 'g')
plt.hist(img.flatten(),256,[0,256], color = 'g')
plt.xlim([0,256])
plt.legend(('cdf','histogram'), loc = 'upper left')
cdf_m = np.ma.masked_equal(cdf,0)
cdf_o = (cdf_m - cdf_m.min())*255/(cdf_m.max()-cdf_m.min())
cdf = np.ma.filled(cdf_o,0).astype('uint8')
img3 = cdf[img]
cv2.imwrite(filelist[i],img3)
image = join(tiles)
image.save('watch-join.png')
你的例子似乎是不完整的,因爲你永遠不會將你的瓷磚存儲在'filelist'中插入的文件中。然而,從代碼猜測我確實認爲你這樣做,因爲你似乎能夠閱讀不同的圖像。但我的猜測是,你忘了在最後更新'tiles'so,你只是'加入'原始的,未修改的(因此未更新)瓷磚,這當然會再次給你原始圖像。 – JohanL
@JohanL我正在將修改後的圖像塊寫回相同的文件名,所以我認爲它不應該有所作爲。我試過打印瓷磚,它給了我所指的文件名列表,並指向正確的文件名。有沒有其他的方法可以在我將圖像拼接之前更新瓷磚 – user2808264