복붙노트

[PYTHON] PIL (Python-Imaging)을 사용하여 이미지의 색상을 반전하는 방법은 무엇입니까?

PYTHON

PIL (Python-Imaging)을 사용하여 이미지의 색상을 반전하는 방법은 무엇입니까?

흰색과 검정색이 뒤집힌 이미지 (음수)로 검은 배경 문자에 흰색으로 그려진 일련의 이미지를 이미지로 변환해야합니다. PIL을 사용하여 어떻게 이것을 할 수 있습니까?

해결법

  1. ==============================

    1.docs에서 다음을 시도하십시오. http://effbot.org/imagingbook/imageops.htm

    docs에서 다음을 시도하십시오. http://effbot.org/imagingbook/imageops.htm

    from PIL import Image
    import PIL.ImageOps    
    
    image = Image.open('your_image.png')
    
    inverted_image = PIL.ImageOps.invert(image)
    
    inverted_image.save('new_name.png')
    

    참고 : "ImageOps 모듈에는 많은 '기성품'이미지 처리 작업이 포함되어 있습니다.이 모듈은 다소 실험적이며 대부분의 운영자는 L 및 RGB 이미지에만 작동합니다."

  2. ==============================

    2.이미지가 RGBA 투명하면이 실패합니다 ...이 작동합니다.

    이미지가 RGBA 투명하면이 실패합니다 ...이 작동합니다.

    from PIL import Image
    import PIL.ImageOps    
    
    image = Image.open('your_image.png')
    if image.mode == 'RGBA':
        r,g,b,a = image.split()
        rgb_image = Image.merge('RGB', (r,g,b))
    
        inverted_image = PIL.ImageOps.invert(rgb_image)
    
        r2,g2,b2 = inverted_image.split()
    
        final_transparent_image = Image.merge('RGBA', (r2,g2,b2,a))
    
        final_transparent_image.save('new_file.png')
    
    else:
        inverted_image = PIL.ImageOps.invert(image)
        inverted_image.save('new_name.png')
    
  3. ==============================

    3."1"모드 (즉, 1 비트 픽셀, 흑백, 1 바이트 당 1 픽셀로 저장 됨 - docs 참조)로 이미지를 사용하는 사용자는 PIL.ImageOps를 호출하기 전에 이미지를 "L"모드로 변환해야합니다 .거꾸로 하다.

    "1"모드 (즉, 1 비트 픽셀, 흑백, 1 바이트 당 1 픽셀로 저장 됨 - docs 참조)로 이미지를 사용하는 사용자는 PIL.ImageOps를 호출하기 전에 이미지를 "L"모드로 변환해야합니다 .거꾸로 하다.

    그러므로:

    im = im.convert('L')
    im = ImageOps.invert(im)
    im = im.convert('1')
    
  4. ==============================

    4.누군가 CMYK 이미지를 반전하는 경우 PIL 및 Pillow의 현재 구현이이를 지원하지 않는 것으로 보이고 오류가 발생합니다. 그러나이 편리한 기능 (본질적으로 위의 Greg Sadetsky의 게시물 확장)을 사용하여 이미지의 개별 밴드를 뒤집어서이 문제를 쉽게 피할 수 있습니다.

    누군가 CMYK 이미지를 반전하는 경우 PIL 및 Pillow의 현재 구현이이를 지원하지 않는 것으로 보이고 오류가 발생합니다. 그러나이 편리한 기능 (본질적으로 위의 Greg Sadetsky의 게시물 확장)을 사용하여 이미지의 개별 밴드를 뒤집어서이 문제를 쉽게 피할 수 있습니다.

    def CMYKInvert(img) :
        return Image.merge(img.mode, [ImageOps.invert(b.convert('L')) for b in img.split()])
    
  5. ==============================

    5.

    from PIL import Image
    
    img = Image.open("archive.extension") 
    
    pixels = img.load()
    
    for i in range(img.size[0]):
        for j in range(img.size[1]):
            x,y,z = pixels[i,j][0],pixels[i,j][1],pixels[i,j][2]
            x,y,z = abs(x-255), abs(y-255), abs(z-255)
            pixels[i,j] = (x,y,z)
    
    img.show()
    

    `

  6. from https://stackoverflow.com/questions/2498875/how-to-invert-colors-of-image-with-pil-python-imaging by cc-by-sa and MIT license