포테이토 주식회사_IT 개발블로그
파이썬 이미지 프로세싱 하드코딩 본문
이 강좌는 여태까지 배운 것의 종합판이었어요. 더군다나 사진 편집이라 예제에 사용된 cs1media 모듈의 몇 가지 기능을 알아야 해요. 그래서 여지껏 배운 내용 + 사진 편집 모듈 기능까지 알아야 해서~ 조금 어려웠습니다. 아마 프로그래밍을 처음 배우는 분이 이 강좌까지 했다면 정말 잘한 것일거에요. 오히려 다음 강좌가 이 강좌보다 더 쉬워요!
저는 이 강좌 이해하는데 좀 오래 걸렸습니다. 알아야 할게 많았습니다.
이미지 각 픽셀의 색상 값인 튜플의 값을 바꾸는데 필요한 사진, 그 사진을 불러오는 cs1media 의 load_picture() 경로 잘 설정하기(불러올 사진 경로 작성부터 막히면 그림을 못 불러서 실습을 못해요. 이전 강좌인 3-3의 댓글에 관련 내용 PDF 있으니 필요하신 분은 가서 보시기를 바랍니다),
마찬가지로 cs1media 모듈의 .get() 멤버 함수 역할(해당 픽셀의 색상튜플 반환) 이해하기, .set() 멤버함수 이해하기 (이미지에 특정 색상 덮어씌우기)를 알아야 하더군요. 이 함수 역할을 잘 몰라서 help(cs1media)를 무척 많이 열어봤습니다. 멤버 함수 역할을 보는 help도 import cs1media로 불러와야 열리더군요. from csmedia import *로 하면 help(cs1media)가 안됩니다.
중첩 for in 문은 당연히 알야야 하고요. 색상 RGB의 값에 대한 이해가 있어야 하고, 튜플 사용법도 당연히 알아야 합니다.
그래서 이제까지 배운 내용이 이번 강좌에 골고루 적용되었고, 실습하려면 알아야 할 것도 많았습니다. 그래서 이번 강좌는 전 과정들을 돌아보느라고 조금 오래 걸렸습니다.
저는 이렇게 하드 코딩했네요. 그래서 샘플 이미지만 크로마키 할 수 있어요. 여러 이미지를 다 크로마키 하려면 3차원 공간 두점 사이의 거리 공식을 사용해야 할텐데요. 일단은 넘어갈렵니다.
import cs1media
import cs1graphics
pic1 = cs1media.load_picture('/home/android2/사진/koreapeace.jpg')
#pic1.show1()
pic1_x,pic1_y = pic1.size() # 가로 세로 사진의 픽셀 개수
pic2 = cs1media.load_picture('/home/android2/사진/statue1.jpg')
#pic2.show1()
pic1.set_title('pic1') # 사진에 제목 넣기
pic2.set_title('pic2')
def combine(p1 = pic1, p2 = pic2):
p1_x,p1_y = p1.size() #사진 1 가로 세로 픽셀 개수
p2_x,p2_y = p2.size() # 사진 2 가로 세로 픽셀 개수
for y in range(p1_y): # 이중 for 문으로 사진 1의 가로 세로 픽셀 하나씩 다 방문
for x in range(p1_x):
if (y<p2_y)&(x<p2_x): # 사진1 픽셀을 사진2 가로세로 픽셀수보다 작은 픽셀들만 사진2 픽셀로 바꾸기
p2_color = p2.get(x,y)
a,b,c = p2_color
if not ((a>20)&(a<60)&(b>40)&(b<100)&(c>100)&(c<180)): #3차원 두점 거리 공식 몰라서 하드코딩 (파란색 비슷한 색이 아닐 경우만 덮어쓰기)
# print(p2_color)
p1.set(x,y,p2_color)
combine()
pic1.show()
파이썬 사진경로 찾아넣기
'Programming' 카테고리의 다른 글
C언어 Visual Studio scanf 에러 해결 방법 (0) | 2021.05.16 |
---|---|
개발자의 포트폴리오・이력서 작성법, 면접을 잘 보는 법 (1) | 2021.05.12 |
알고리즘 문제풀이를 함에 있어서 자주 접하게 될 용어들 (0) | 2021.05.12 |
코드포스 레이팅과 롤 티어의 비교 (0) | 2021.05.12 |
[네이버] 2020 개발자 공채 지원 및 면접 후기 (0) | 2021.05.12 |