[Python] 파이썬에서 주어진 픽셀의 RGB 값을 읽으려면 어떻게해야합니까?



Answers

PyPNG - 경량 PNG 디코더 / 인코더

질문이 JPG에 암시 되더라도, 나는 나의 응답이 어떤 사람들에게 유용 할 것이라는 점을 희망한다.

PyPNG 모듈을 사용하여 PNG 픽셀을 읽고 쓰는 방법은 다음과 같습니다.

import png, array

point = (2, 10) # coordinates of pixel to be painted red

reader = png.Reader(filename='image.png')
w, h, pixels, metadata = reader.read_flat()
pixel_byte_width = 4 if metadata['alpha'] else 3
pixel_position = point[0] + point[1] * w
new_pixel_value = (255, 0, 0, 0) if metadata['alpha'] else (255, 0, 0)
pixels[
  pixel_position * pixel_byte_width :
  (pixel_position + 1) * pixel_byte_width] = array.array('B', new_pixel_value)

output = open('image-with-red-dot.png', 'wb')
writer = png.Writer(w, h, **metadata)
writer.write_array(output, pixels)
output.close()

PyPNG는 테스트 및 주석을 포함하여 4000 줄 미만의 단일 순수 Python 모듈입니다.

PIL 은보다 포괄적 인 이미징 라이브러리이지만 상당히 무겁습니다.

Question

open("image.jpg") 이미지를 open("image.jpg") 픽셀의 좌표를 가지고 있다고 가정하면 픽셀의 RGB 값을 어떻게 얻을 수 있습니까?

그렇다면 이걸 어떻게 반전 할 수 있습니까? 빈 그래픽으로 시작하여 특정 RGB 값을 가진 픽셀을 '씁니다'?

추가 라이브러리를 다운로드 할 필요가 없다면 더 좋아할 것입니다.




당신은 Tk GUI 툴킷에 대한 표준 파이썬 인터페이스 인 Tkinter 모듈을 사용할 수 있으며 추가 다운로드가 필요하지 않습니다. https://docs.python.org/2/library/tkinter.html 참조 https://docs.python.org/2/library/tkinter.html .

(파이썬 3의 경우, Tkinter는 tkinter로 이름이 바뀜)

RGB 값을 설정하는 방법은 다음과 같습니다.

#from http://tkinter.unpythonic.net/wiki/PhotoImage
from Tkinter import *

root = Tk()

def pixel(image, pos, color):
    """Place pixel at pos=(x,y) on image, with color=(r,g,b)."""
    r,g,b = color
    x,y = pos
    image.put("#%02x%02x%02x" % (r,g,b), (y, x))

photo = PhotoImage(width=32, height=32)

pixel(photo, (16,16), (255,0,0))  # One lone pixel in the middle...

label = Label(root, image=photo)
label.grid()
root.mainloop()

그리고 RGB :

#from http://www.kosbie.net/cmu/spring-14/15-112/handouts/steganographyEncoder.py
def getRGB(image, x, y):
    value = image.get(x, y)
    return tuple(map(int, value.split(" ")))



이미지 작업하기 wiki.wxpython.org에 정말 좋은 기사가 있습니다. 이 기사에서는 wxWidgets (wxImage), PIL 또는 PythonMagick 사용의 가능성에 대해 언급합니다. 개인적으로 필자는 PIL과 wxWidgets를 사용하여 이미지 조작을 매우 쉽게 처리했습니다.




RGB 색상 코드의 형태로 세 자리 숫자를 찾으려면 다음 코드를 사용해야합니다.

i = Image.open(path)
pixels = i.load() # this is not a list, nor is it list()'able
width, height = i.size

all_pixels = []
for x in range(width):
    for y in range(height):
        cpixel = pixels[x, y]
        all_pixels.append(cpixel)

이것은 당신을 위해 일할 수 있습니다.




이미지 조작은 복잡한 주제이므로 라이브러리를 사용하는 것이 가장 좋습니다. 나는 파이썬 안에서 다양한 이미지 포맷에 쉽게 접근 할 수있는 gdmodule 을 추천 할 수있다.




Dave Webb이 말했듯이 :

다음은 이미지의 픽셀 색상을 인쇄하는 작업 코드 스 니펫입니다.

import os, sys
import Image

im = Image.open("image.jpg")
x = 3
y = 4

pix = im.load()
print pix[x,y]



Links