2017-12-17 23 views
-4

여기에 이미지 설명을 입력하십시오. Image from PIL module누군가 나를 이미지의 다른 유형의 모드라고 설명 할 수 있습니까?

이 이미지 처리 작업에는 새로운 것이 있습니다. 왜 내가 RGB 모드에서 작동하지만 P 모드에서는 작동하지 않는 코드가 있기 때문에이 질문을하고 있습니까? 그래서 나는 모드와 관련된 것이라고 결론을 내 렸습니다. 모드에 관한 기본적인 연구를했는데 간단한 설명을 찾지 못했습니다. 누군가가 나를 이해하도록 도울 수 있다면 도움이 될 것입니다.

CODE :가 (이것은 가장자리에 잘림 다음 이미지 같아야

Image_1 출력 : 화상 다음 코드

image=Image.open('image.png') 
image.load() 

image_data = np.asarray(image) 
image_data_bw = image_data.max(axis=2) 
non_empty_columns = np.where(image_data_bw.max(axis=0)>0)[0] 
non_empty_rows = np.where(image_data_bw.max(axis=1)>0)[0] 
cropBox = (min(non_empty_rows), max(non_empty_rows), min(non_empty_columns), max(non_empty_columns)) 

image_data_new = image_data[cropBox[0]:cropBox[1]+1, cropBox[2]:cropBox[3]+1 , :] 

new_image = Image.fromarray(image_data_new) 
new_image.save('cropped_image.png') 

Codesource

입력 사진을 클릭하시면됩니다.) :

RGBA 코드는 이미지에 잘 작동 mode.so에 6,

Cropped_Image

이 이미지입니다. 그러나 P 모드의 이미지가 아닙니다.

ERROR : 나는 P 모드를 얻을 오류 : 축 2는 크게 발견 대답은 NumPy와를 사용하여 프로세스를 overcomplicates 차원이

+0

이러한 모드는 PNG 이미지와 관련이 없습니다. 그것들은 디지털 형식으로 이미지 데이터를 표현하는 다른 방법 일뿐입니다. –

+0

당신은 그것을 들여다 볼 수 있습니까? – Sushant

+0

팔레트 이미지에는 픽셀 당 ** 값이 ** 있습니다 (RGB 색상 정보는 팔레트에 저장되므로 공간이 절약됩니다). 찾은 코드는 픽셀 당 * 3 * 값을 가정합니다. –

답변

1

의 배열 범위를 벗어났습니다. PIL 라이브러리는 image.getbbox()image.crop() 방법으로, 기본적으로이 유스 케이스를 지원합니다 : 이것은 모든 다른 모드 작동

cropbox = image.getbbox() 
new_image = image.crop(cropbox) 

에 관계없이. image.getbbox()에 의해 생성 된 cropbox는 numpy 경로에 의해 생성 된 것과 동일한 크기입니다.

+0

고맙습니다 Martijn. 위의 것은 매력처럼 작용했습니다. 알파 채널에 대해서는 작동하지 않는다고 생각합니다. 그래서 먼저 getbbox를 사용하여 이미지를 잘라내야합니다. 그러나 P 모드의 경우 완벽하게 작동합니다. 감사 !! – Sushant

0
from PIL import Image 

img = Image.open('Image.png') 

print(x,y) 
img.show() 
cropbox_1 = img.getbbox() 
new_image_1 = img.crop(cropbox_1) 
new_image_1.save('Cropped_image,png') 
new_image_1.show() 

이 코드는 이미지를 가장자리로 완전히 자릅니다. 이미지에 알파 채널이있는 경우에만 해당 채널을 변환하여 제거해야 할 수 있습니다.

ex. RGBA 모드 인 경우 RGB로 설정 한 다음 getbbox()을 사용하십시오.

img = image.convert('RGB') 
cropbox = img.getbbox() 
image_1 = img.crop(cropbox) 

이 작업을 추가해야합니다.