0
我有一個jpg圖像,使用PIL我正在獲取圖像的像素數據,對某些像素進行一些更改(循環排列RGB值)(使其他像素不變),然後將其保存爲新圖像。但是,其他像素的數據似乎正在發生變化?問題是什麼?這裏是代碼附加Python成像庫破壞像素數據
import numpy as np
import Image as img
def NumOcurr(DigArray,i):
val = DigArray[i]
count=0
for j in np.arange(i):
if (DigArray[j]==val):
count=count+1
return count
def CycPermuteR(A):
t1 = A[0]
t2 = A[1]
t3 = A[2]
A[0] = t3
A[1] = t1
A[2] = t2
return A
##################################
### put the number in an array ###
##################################
number = np.loadtxt("C:\Users\Sthitadhi Roy\Documents\Pixel Data Encryption\Number.txt")
DigArray = np.zeros(16)
for i in np.arange(16):
DigArray[-1-i] = number%10
number = int(number/10)
print DigArray
##################################
## Pixel Data for original #######
##################################
OrigImg = img.open("C:\Users\Sthitadhi Roy\Documents\Pixel Data Encryption\Nondescript.jpg")
PixelData = OrigImg.load()
print PixelData[0,0]
#################################
## Change Pixel Data ############
#################################
for i in range(16):
TempPixelData = PixelData[i,DigArray[i]]
TempPixelData = np.array(TempPixelData)
TPD = TempPixelData.copy()
CycPermuteR(TPD)
PixelData[i,DigArray[i]] = (TPD[0],TPD[1],TPD[2])
print PixelData[0,0]
OrigImg.save("C:\Users\Sthitadhi Roy\Documents\Pixel Data Encryption\Modified.jpg")
NewImg = img.open("C:\Users\Sthitadhi Roy\Documents\Pixel Data Encryption\Modified.jpg")
PixelDataN = NewImg.load()
print PixelDataN[0,0]
這裏是輸出
[ 5. 2. 3. 6. 4. 5. 8. 7. 4. 5. 8. 3. 1. 2. 4. 8.]
(148, 136, 98)
(148, 136, 98)
(146, 137, 108)
正如你所看到的DigArray
第0個元素是5,所以它應該離開[0,0]
像素不變。用於更改像素數據的操作是正確的,因爲它也會使其保持不變,如輸出的第三行所示。但是在將它保存爲新圖像並重新加載之後,[0,0]
像素不再具有相同的數據。
爲什麼會發生這種情況,如何解決?