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


5 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 값을 가진 픽셀을 '씁니다'?

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




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




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




당신은 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(" ")))



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)

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




Dave Webb이 말했듯이 :

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

import os, sys
import Image

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

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


Related