2013-05-05 1 views
0

PIL을 사용하여 jpg 이미지를 얻었습니다. 특정 픽셀에 대해 약간의 변경 (순환 적으로 RGB 값 바꾸기)을하고 (다른 픽셀은 그대로 둡니다) 이미지의 픽셀 데이터를 얻습니다. 새로운 이미지로 저장합니다. 그러나 다른 픽셀의 데이터가 변경되고있는 것 같습니다. 문제가 무엇입니까? 다음 코드는 출력Python 이미징 라이브러리가 픽셀 데이터를 손상시킵니다.

[ 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) 

여기

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] 

이다 부착하면 DigArray의 0 번째 요소가 5를 참조 할 수 있으므로이 [0,0] 화소 그대로 남겨 두어야한다. 픽셀 데이터를 변경하는 데 사용되는 연산은 출력의 세 번째 행에 표시된 것처럼 변경되지 않으므로 정확합니다. 그러나 새 이미지로 저장 한 다음 다시로드하면 [0,0] 픽셀에 동일한 데이터가 더 이상 없습니다.

왜 이런 일이 발생하며 어떻게 해결 될 수 있습니까?

답변

2

JPEG format에 이미지를 저장하는 것은 압축 된 형식과 손실이 많은 형식입니다.

이미지를 무손실 형식 인 PNG으로 저장해보십시오.

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

OrigImg.save(os.path.join(imagedir, "Modified.jpg")) 
관련 문제