Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python图像库会破坏像素数据_Python_Python Imaging Library_Pixel - Fatal编程技术网

Python图像库会破坏像素数据

Python图像库会破坏像素数据,python,python-imaging-library,pixel,Python,Python Imaging Library,Pixel,我有一个jpg图像,使用PIL获取图像的像素数据,对某些像素进行一些更改(循环排列RGB值)(保持其他像素不变),然后将其保存为新图像。然而,其他像素的数据似乎正在改变?有什么问题?这是附加的代码 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]

我有一个jpg图像,使用PIL获取图像的像素数据,对某些像素进行一些更改(循环排列RGB值)(保持其他像素不变),然后将其保存为新图像。然而,其他像素的数据似乎正在改变?有什么问题?这是附加的代码

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]
像素不再具有相同的数据


为什么会发生这种情况?如何解决?

您正在保存图像,它是一种压缩且有损的格式

尝试将图像另存为,这是一种无损格式

import os
imagedir = "C:\Users\Sthitadhi Roy\Documents\Pixel Data Encryption"

OrigImg.save(os.path.join(imagedir, "Modified.jpg"))