본문 바로가기

Programming/#Python

[Python] 튜플과 디지털 사진 변환

(출처) edwith 파이썬으로 배우는 프로그래밍 기초, 김문주 교수 

 

: 빨간색, 초록색, 파란색, 3개의 값을 가진 튜플로 표현 

☞ 3개의 값들은 해당 색의 빨간색, 초록색, 파란색 세기/ 강도를 의미

red = (255, 0, 0)
blue = (0, 0, 255)
white = (255, 255, 255) #3색 모두 가장 밝은 세기
black = (0, 0, 0) #빛이 하나도 없는 상태
yellow = (255, 255, 0)
purple = (128, 0, 128)

from cs1media import * #화면에 그래픽을 표현하기 위한 함수
img = create_picture(100, 100, purple) # (넓이, 높이, 색)
img.show() #화면에 출력
img.set_pixels(yellow) #픽셀의 색 지정
img.show()

 


 


파이썬에서 디지털 사진을 나타내는 방법
  • 좌측 상단 기준, x 좌표는 좌 → 우로 증가, y 좌표는 위 → 아래로 증가
  • img.get(250, 188) : 해당 좌표의(R, G, B) 색을 받아옴
  • img.set(250, 188, (255, 0, 0)) : set 명령으로 업데이트
  • 디지털 사진은 수많은 점들로 구성되며 이를 자동으로 읽고 쓰기 위해 반복문 사용
for i in range(4):    
	print(i) #0부터 3까지 i에 대입하면서 총 4번 반복
for i in range(7):
	print("*" * i) #총 7번 반복, i값은 0~6
	#i=0이면 * 출력되지 않음

 

반복문

for 반복문

: 주어진 명령어를 반복

  • 반복되는 명령에 변수 i를 통해 다른 값을 사용
  • 0부터 시작해서 range의 인자로 주어진 값보다 하나 작은 값까지 i값이 변함 
  • 변수에 정수 값 대입
 for i in range(7):
	print("*" * i) #i = 0~6까지 총 7번 불림

 

픽셀의 색 변화에 적용
from cs1media import *
img = load_picture("../photos/geowi.jpg")
w, h = img.size() #튜플 리턴 (가로폭, 세로폭)

for y in range(h): #y는 0~h-1까지 변화
	for x in range(w): #x는 0~w-1까지 변화
    r, g, b = img.get(x, y) #모든 픽셀값에 대한 색 추출
    r, g, b = 255 - r, 255 - g, 255 - b #최고세기 - 현재세기 (약하면 강하게, 강하면 약하게 반전)
    img.set(x, y, (r, g, b)) #새로운 값으로 업데이트 
    
img.show() #negative 음영사진처럼 보임
  • h = 3, y = 0, 1, 2
  • w= 3, x = 0, 1, 2
  1. x= 0, y =0 픽셀을 79, 126, 66 → 255-r, 255-g, 255-b로 색 반전
  2. x = 1, y= 0 픽셀을 동일 매커니즘으로 색 반전
  3. 반복
  4. for x 반복문 종료
  5. x = 0, y =1 픽셀부터 동일 매커니즘으로 수행

 


이미지 반전할 9개의 픽셀

 


이미지 흑백 변환
from cs1media import * 
threshold = 100
white = (255, 255, 255)
black = (0, 0, 0)

img =load_picture("../photos/yuna1.jpg")
w, h = img.size()

for y in range(h):
	for x in range(w):
    	r, g, b = img.get(x, y)
        v = (r + g + b) // 3 #r, g, b의 평균값 계산
        if	v > threshold: #기준(threshold)보다 픽셀의 빛의 세기가 강할 때
        	img.set(x, y, white) #하얀색으로 출력
        else:
        	img.set(x, y, black) #기준보다 픽셀의 세기가 약할 때 검정색 출력
            
 img.show() #흑백 사진 출력
 

☞ 명령을 white or black 두 가지 경우로만 지정해주었으므로 완벽한 흑백 사진이 아닌 거친 흑백사진으로 출력됨

 

 

 

 

 

 


정리하기
  1. 여러 가지 픽셀들로 구성된 디지털 사진 이해하기
  2. 튜플로 구성된 red, green, blue, 3가지 픽셀들의 색 이해하기
  3. 디지털 사진의 색 반전과 회색 계열 제외 흑백 사진으로 바꾸는 작업 이해하기

 

I'm a Senior Student in Data Science ! 

데이터 사이언스를 공부하고 있는 4학년 학부생의 TIL 블로그입니다. 게시글이 도움 되셨다면 구독과 좋아요 :)