PIL
Jupyter Notebook
이번 시간에는 파이썬으로 이미지를 어떻게 처리하느냐
이런거를 좀 잠깐 해볼 건데요 그 이게 시작 버튼이 왼쪽에 있어가지고 아 모니터가 2개 있으니까 좋은 점도 있는데 나쁜 놈 되구요
그 시작 버튼 눌러 가셨고 어 제이 유피 이런식으로 치시면 주피터 노트북 이라는 앱이 아마 깔려 있을 겁니다 설치되어 있으시죠
그래서 요거를 이제 실행을 하시면 이렇게 까만 창이 하나 뜨구요
그 다음에 인터넷 창이 이런 식으로 조금 기다리시면 이렇게 인터넷 창이 또 하나 이렇게 뜹니다
다시 설명드리면 시작 버튼 누르시고 어 제이 유피 요런식으로 쓰시면 주피터 노트북 이란 앱이 나올 거거든요
요거를 켜시면 이렇게 까만창이 하나 뜨고 그 다음에 인터넷 창이 이런식으로 요거를 켜시면 이렇게 까만 창이 하나 뜨고 그 다음에 인터넷 창이 하나 뜨고 그 다음에 인터넷 창이 이런식으로 띄웁니다
그 다음에 그 아까 데이터 파일 다운 받은 거를 바탕화면에다가 폴더를 하나 만들어서 컴퓨터 비전 이렇게 하나 만들어 가지고 여기다가 이제 실습 데이터를 풀어 주시면 되겠죠
일단 이거 풀어놓고 그 다음에 아까 이제 인터넷 창이 이렇게 있는데 요 창이 뭐냐
주피터 노트북은 뭐냐 요 얘기를 잠깐 드리면 우리가 그 파이썬을 쓸 건데 파이썬이라는 거는 이제 언어거든요
언어라는 게 뭐냐
우리가 이제 컴퓨터하고 대화를 해야 됩니다
컴퓨터하고 프로그램이라는 게 결국 이제 컴퓨터랑 대화를 하는데 컴퓨터가 알아들을 수 있는 말로 대화를 해야겠죠
그래서 이제 컴퓨터와 대화할 수 있는 언어가 여러 가지가 있습니다
그래서 좀 쉬운 말로 할 수도 있고 조금 어려운 말로 할 수도 있는데 파이썬은 쉬운 말이에요
어려운 말로 하면은 장점이 컴퓨터한테 좀 정확하게 우리가 얘기를 할 수 있기 때문에 컴퓨터가 빨리빨리 작동하게 할 수 있습니다
근데 그 대신에 우리가 좀 어렵죠
우리랑 컴퓨터는 생각하는 방식이 다르니까 컴퓨터에 맞춰서 말을 해주면 컴퓨터가 빨리빨리 이해하고 빨리빨리 돌아갈 수 있지만 우리가 코드를 짜기가 어렵습니다
파이썬은 쉬워요
우리가 좀 쉽게 쓸 수 있고 근데 컴퓨터는 처리를 좀 더 많이 해야겠죠
그 말을 이해하기 위해서 그래서 조금 느립니다
쉽지만 좀 느려요
근데 보통 우리가 파이썬으로 하는 종류의 작업들은 코드를 짜는 시간을 많이 할 수 있겠죠
그래서 조금 느립니다
쉽지만 좀 느려요
근데 보통 우리가 파이썬으로 하는 종류의 작업들은 코드를 짜는 시간을 많이 할 수 있어요
코드 시간은 길고 돌리는 시간은 짧아요
그러면 컴퓨터가 5% 10% 빨리 돌아가 봤자 어차피 그렇게 오래 걸릴 작업이 아니란 말이에요
그러면 여기서 시간을 아껴봤자 총 작업 시간에는 별 이득이 없는 거죠
근데 코드를 짜는 시간은 컴퓨터는 빨라 봤자 5% 10% 차이지만 사람은 생각하는 시간이 5% 10% 차이니까 사이가 아니거든요
그래서 한 시간 걸릴 거를 5분 만에 짤 수 있느냐
이러면 총 작업 시간이 예를 들면 한 시간 걸려서 짜가지고 이거를 1분 만에 돌려봤자 5분 걸려서 짜고 2분 걸려서 돌리는 게 총 작업시간이 훨씬 적게 걸린단 말이에요
그래서 효율성 측면에서 우리가 이제 약간 느리더라도 쉬운 파이썬 언어를 보통 데이터 처리하는 그런 종류 아니면 AI 이런 종류의 작업에 굉장히 많이 사용을 합니다
그래서 우리가 이제 파이썬을 사용을 할 거고요
그럼 이제 언어니까 컴퓨터랑 대화를 하려면 우리가 다른 사람하고 이야기를 하려면 예를 들면 카톡 같은 앱을 써서 대화를 하죠
그래서 너도 카톡이 있고 나도 카톡이 있어야 카톡으로 대화가 되잖아요
근데 대화를 할 때는 한국말로 대화를 하죠
앱은 카톡을 쓰고 말은 한국말로 하듯이 우리가 파이썬이라는 건 언어기 때문에 말은 파이썬으로 하는 데 그 말을 컴퓨터랑 주고받을 프로그램이 필요합니다
그래서 이제 주피터 노트북은 뭐냐 하면 컴퓨터와 파이썬으로 대화를 하기 위한 앱이다
이렇게 생각을 하시면 됩니다
우리가 마치 카톡으로 다른 사람과 대화하듯이 컴퓨터와 대화할 때는 꼭 주피터 노트북만 써도 되죠?
주피터 노트북만 써도 되죠?
이제 이제 다 써야 되는 건 아닌데 그 외에도 여러 가지 툴이 있습니다
근데 우리가 다른 사람과 대화할 때 문자를 보낼 수도 있고 라인을 쓸 수도 있고 카톡을 쓸 수도 있고 텔레그램을 쓸 수도 있고 앱은 여러 가지지만 보통 카톡을 쓰듯이 파이썬을 쓸 때도 여러 가지 앱들이 있는데 보통 주피터 노트북을 가장 많이 사용을 합니다
그래서 이거를 써볼 거고요 그래서 여기 보시면 인터넷 창이 뜨기는 하는데 실제로 인터넷을 하는 건 아니고 그냥 화면을 구성하기 위해서 인터넷 창을 사용을 하는 거예요
그래서 주소를 보시면 주소가 특이하게 로컬 호스트 이렇게 나오는데 로컬 호스트라는 건 뭐냐면 내 컴퓨터를 말합니다
여러분 컴퓨터 안에서 마치 인터넷을 하는 것처럼 흉내를 내고 있는 거예요
그래서 아까 떴던 이 까만 창 있죠
인터넷을 하면 원래 먼 거리에 있는 서버에 접속을 하는데 이 까만 창이 서버 역할을 하는 창입니다
이 창을 닫으시면 안 돼요
이 창을 닫으시면 서버가 없어지니까 안 되고 여기서 이제 하시면 되고요 그 다음에 여기 보시면 폴더들이 있는데 이 폴더들이 여러분 컴퓨터 안에 있는 폴더들입니다
그 중에 보시면 위에서 세 번째 데스크탑이라고 있거든요
그게 여러분 컴퓨터의 바탕화면이에요
그래서 데스크탑으로 더블클 릭해서 들어가시면 아까 만들었던 컴퓨터 비전 폴더가 여기에 있을 겁니다
그래서 그래서 그래서 이 폴더로 다시 더블클릭해서 들어가주세요 그래서 사실 우리 어디 갔습니까
우리 여기 홈페이지에 실습 및 Q&A가 제가 써놨는데 주프터 노트북 켜고 그 다음에 데스크탑 고르시고 컴퓨터 비전 골라서 들어가시면 됩니다
만약에 폴더를 나는 다른 이름으로 해놨다 폴더 이름으로 해놨다 폴더 이름으로 바꿔주시면 되겠죠
컴퓨터 비전까지 들어간 다음에 오른쪽 상단에 보시면 New라고 있어요
좀 키워드리면 New라고 있는데 이걸 누르시면 노트북이라고 있습니다
그래서 이거를 누르시면 됩니다
그 다음에 여기 셀렉트 커널 이렇게 뜨면 셀렉트 누르시면 됩니다
제가 여기다 써놓은 거랑 좀 다릅니다
여기 중간에가 좀 빠졌는데 New 누르시고 New 누르고 노트북 그 다음에 셀렉트 커널이라고 뜨면은 그냥 셀렉트 누르시면 됩니다
그러면은 이제 이런 화면이 뜰 겁니다 여기까지 오셨으면은 우리의 실습할 준비가 다 된 거예요
네 받을게요 다른 분들도 데스크탑 없나요?
네 그러면은 다운로드로 하시죠
그리고 바탕화면이 있는 거를 제가 한번 해볼게요
그러면 우리가 실제로 한번 컴퓨터로 대화를 해보도록 하겠습니다.
파이썬을 안 써보신 분도 있으니까 첫 번째 우리 대화는 아주 간단한 대화를 해보죠.
1 더하기 2 이렇게 한 다음에 여기 상단에 보시면 재생 버튼 같이 생긴 게 있거든요.
이거를 눌러주시면 3이라고 대답을 합니다.
카톡이랑 똑같아요.
여러분이 말을 거시면 컴퓨터가 대답을 합니다.
대답을 재깍재깍 하죠.
여러분이 말 을 걸지 않으면 컴퓨터는 대답을 합니다.
그래서 여기다 1 더하기 2 이런 식으로 4의식을 쓰시고 재생 버튼을 누르시면 한 번에 대화가 끝난 거예요.
여기 보시면은 untitled.ipymb 라는 파일이 생겨있을 겁니다
이게 뭐냐면 여러분이 주피터 노트북에서 컴퓨터랑 파이썬으로 대화를 하면 자동으로 대화 기록이 여기 저장이 돼요
그래서 내일 다시 열어보실 수도 있고 나중에 다시 대화 내용을 볼 수가 있습니다
근데 파일 이름이 untitled 이래가지고서야 나중에 찾아보기가 좀 불편하겠죠
그래서 이름을 바꾸시려면 어떻게 하면 되냐면 여기 상단의 메뉴에서 저는 가려져 있는데 view를 누르면 view 누르면 위에서 하나 둘 셋 네번째 show header 라고 있습니다
이걸 누르면은 이렇게 표시가 떠요
이미 떠있으신 분들은 이제 체크를 풀면은 없어집니다
다시 여기 메뉴에서 file edit view view에서 누르면 show header 라고 있는데 이걸 켜주면은 이렇게 상단에 header가 보이는데 평소에 쓸 때는 사실 필요가 없으니까 가려놓으시면 되는데 이렇게 켜주면은 이렇게 상단에 header가 보이는데 여기 보시면 untitled 라고 있죠
그래서 요걸 누르면 이름을 바꿀 수가 있습니다
파일 이름을 그래서 오늘이 첫날이니까 day1 이렇게 바꿀 수가 있겠죠
여기서 바꿔주면은 컴퓨터에서도 day1으로 자동으로 이름이 바뀝니다
그래서 이렇게 바꾸시면 된다 자 some 그래서 요거를 적어드리면 메뉴에서 view 하고 show header 한 다음에 untitled를 클릭을 하고 이렇게 바꾸시면 됩니다
평소에는 화면만 차지하니까 화면을 넓게 쓰려면 숨겨놓으면 편하겠죠
PIL 라이브러리
자 그러면은 우리가 이제 본격적으로 한번 파이썬으로 이미지 처리를 하는 걸 해볼건데 우리가 이제 PIL이라는 라이브러리를 써볼겁니다
일단 라이브러리는 PIL이라는 라이브러리를 써볼겁니다
라이브러리라는 용어가 나오는데요
라이브러리는 뭐냐면 라이브러리가 도서관이잖아요
도서관에는 책들이 모여있죠
프로그래밍에서 라이브러리는 기능의 모음 이런거라고 생각하시면 될 것 같아요
우리가 언어만 있으면 말이 통하는게 아니고 어떤 표현들을 알아야 되죠
잘 모르는 분야에 가면 한국말로 하는데 뭔소리인지 알아들을 수가 없잖아요
용어를 모르니까 그러니까 프로그래밍에서도 말만 있으면 되는게 아니라 어떤 기능이 필요한데 그 기능들을 모아놓은게 라이브러리입니다
그래서 우리가 이제 이번 수업에서 사실 쓸거는 PIL이 아니라 오픈CV인데 PIL이 가장 기본적인 기능을 쉽게 쓸 수 있게 제공을 하기 때문에 요것도 가볍게 한번 알아볼거에요
이미지 열기
그래서 이제 PIL을 써볼건데 일단 이제 문법을 모르시는 분들이 있으니까 문법을 좀 알아볼게요
문법을 설명을 드리면 먼저 우리가 어떤 라이브러리를 쓰려면 라이브러리를 불러와야 됩니다
from PIL import Image
불러오는데 어떻게 불러오느냐 그냥 영어처럼 생각하시면 되요
보시면 from 어디어디에서 이런 뜻이죠
PIL 대문자로 쓰셔야 됩니다
파이썬에서는 대소문자를 구별을 하기 때문에 대문자랑 소문자랑 다른 글자에요 대문자로 단 대문자 대문자로 PIL이라고 쓰시고 그 다음에 import 이거는 이제 직역하면 수입하다
이런 뜻인데 우리가 포트에 임하는 거니까 수입을 하는 거죠
수입하다인데 파이썬에서는 가져와라
이런 뜻입니다
뭘 가져오냐면 I가 대문자입니다
이거는 대문자 이미지를 가져와라
근데 여기서 이제 이미지라는 거를 그리기 위해서는 그림을 가져오라는 게 아니라 이미지를 관리하는 어떤 도구를 가져오라는 겁니다
저기 PIL에 가서 이미지 관리하는 도구 좀 가져와라
이렇게 시키는 거예요
그래서 여기 이제 뒤에서부터 보시면 이미지점 오픈 한다는 거 이렇게 나오는데 그래서 얘가 그림도 열어주고 이런 거를 합니다
여기서도 플레이 버튼을 누르면 실행이 되죠
그래서 아무 말이 없으면 실행이 잘 된 겁니다
만약에 이제 PIL이라고 쳐야 되는데 손이 약간 미끄러져서 PIK 뭐 이런 식으로 잘못 눌렀어요 실행을 해보면 뭔가 에러가 나죠
에러가 나면은 안 됐다는 얘기인데 파이썬에서는 보통 성공하면 아무 말이 없습니다
딱히 뭐 일각일 계산 결과가 있는 경우가 아니라면 잘 됐으면 아무 말이 없고 뭐가 안 됐을 때 에러가 나죠.
그래서 아무 말이 없으면 잘 된 건데 에러가 나면은 어떻게 하시면 될까요?
저한테 얘기하시면 됩니다
손 들고 얘기하시면 돼요
그래서 에러가 안 났으면은 잘 된 겁니다.
img = Image.open("balloon.webp")
그러면은 우리가 파일 중에 balloon이라는 이미지 파일이 있어요
요런 애들을 함수라고 부르고요 쉽게 생각하면 일종의 명령이라고 생각하시면 됩니다
엑셀에도 함수라고 해서 합계를 구한다던가 이런 기능을 사용할 수 있잖아요
프로그래밍에서 함수는 어떤 기능 또는 명령이라고 생각하시면 됩니다
그래서 이제 뭘 열거냐 하면 괄호하고 여기에 뭘 열지가 들어가는데 파일 이름을 여기다 써주면 되겠죠
파일 이름을 써주는데 앞뒤로 이렇게 따옴표를 붙여줍니다
왜냐하면 따옴표를 안 붙이면 이게 지금 여기도 보시면 image.open 이런식으로 쓰잖아요
따옴표를 안 쳐주면 이게 명령인지 뭔지 알 수가 없어요
그래서 이거는 무슨 명령이나 이런게 아니라 글자 그대로 berlun.wp 라는 어떤 파일 이름이다
그래서 따옴표는 이거는 그냥 문자라는 표시입니다
이거는 어떤 명령으로 해석할 수 있습니다
그래서 따옴표는 이거는 그냥 문자라는 표시입니다
이거는 어떤 명령으로 해석할 수 있습니다 생각하지 말고 b-a-l-l-o-o-n.w-e-b-p 라는 글자 그대로 니가 이해를 해라
이런 이름의 파일을 열어라
이런 얘기입니다
그 다음에 여기 는이 나오는데 는은 수학기호의 등호가 아니라 오른쪽에서 처리한 결과를 왼쪽에다가 집어넣어라
이런 얘기입니다
img
그래서 이 파일을 열었으면 그 파일의 내용이 있겠죠
그래서 그 파일의 내용이 그림의 내용이 요 img 라는 여기에 들어가게 됩니다
그래서 이제부터는 img 라고 하면 요 파일의 내용 즉 그림을 가리키게 됩니다
그래서 우리가 그냥 img 라고 치면 은 어떻게 된지 한번 봅시다
그래서 이렇게 그림을 보여줍니다.
마치 1 더하기 1은 3을 하는 것과 마찬가지로 컴퓨터 입장에서는 1 더하기 1이나 그림이나 어차피 그냥 어떤 숫자들일 뿐이에요.
화면에 뿌려주는 것은 1 더하기 1을 하는 것과 그림을 불러오는 것은 똑같은 겁니다.
그래서 이렇게 하시면 이렇게 그림이 뜹니다.
그림을 열어오는 데까지 해보시면 되겠고요.
그 다음에 프로그래밍 경험이 없으시거나 하신 분들은 타이핑이 생각보다 시간이 많이 걸리거든요.
타이핑하는데 시간이 너무 많이 걸립니다.
그러면 강의 자료를 제가 PDF로 드렸으니까 강의 자료에서 그냥 복사해서 붙여 넣으셔도 됩니다.
사실 타이핑보다 이렇게 아 이게 뭘까요?
아 이게 뭘까요?
뭘 하는 코드구나.
이거 이해하시는 게 더 중요해요.
타이핑에 시간이 너무 많이 걸리시면 그냥 복사해서 붙여 넣으셔도 됩니다.
그 다음 우리가 지금 수업은 볼륨점 외피로 하는데 파일을 꼭 이걸로 해야 되는 건 아닙니다.
img2 = Image.open("balloon.webp")
img2
그림 파일을 많이 드렸으니까 우리가 다른 그림을 한번 열어볼까요?
그림 중에 뭘로 할까요?
그림 중에 뭐 하나 있 어요?
지금 이 그림을 열고 있는데 지금 이 그림을 열고 있는데 에어포트 jpg 이걸 열고 싶다.
그럼 이거를 여기 들어가는 글자를 바꾸면 되겠죠?
에어포트 점 jpg 이렇게 하면은 공항 사진이 불러와지겠죠.
이렇게 하면은 공항 사진이 불러와지겠죠.
그래서 이 그림을 바꾸면은 또 다운표 안에 들어가는 파일 이름만 바꾸시면은 원하시는 파일을 넣을 수가 있습니다.
원하시는 파일을 넣을 수가 있습니다.
아 자 우리 19쪽까지 해봤구요
그 다음에 이제 요 파일을 어떤 형식인지 보고 싶다 그러면은 여기도 보면은 이제 img 했는데 요 img 는 우리가 연 파일의 내용이 되겠죠
그래서 지금 img 라고 했는데 요거는 꼭 img 라고 해야 되는 건 아닙니다
이거는 우리가 요 앞에서 요 시점에 새로 만든 거거든요
만들 때는 여러분이 만든 거니까 여러분이 이름을 붙이는 건 여러분 마음이겠죠
그러니까 예를 들면 여기서 제가 img 했는데 뭐 img야
기네 그냥 i로 줄여야겠다 이렇게 해도 됩니다 실행해 보시면 결과는 똑같아요
그러니까 여기를 뭐 i라고 부르던 img 라고 부르던 이거는 여러분 마음입니다 는 기호로 만들어주세요
만드는 거에요
만들어서 여기다 넣는거에요
이미지 파일 형식
img.format
그래서 우리가 이제 img 를 만들었는데 img 점 포맷 하면은 점은 항상 뭐의 이렇게 읽으시면 됩니다
img의 포맷 img의 포맷이 뭐냐 를 물어보는 거죠
그러면은 그것은 webp 입니다
이렇게 대답을 해주게 됩니다
그리고 그래서 일단 여기까지 img 점 포맷 까지 해보시면 되겠습니다
컴퓨터 그래픽에는 방식이 여러가지가 있어요.
방식들을 잠깐 좀 알아보면 비트맵 방식이 있고요.
벡터 방식이 있고 포인트 클라우드 방식이 있습니다.
비트맵은 뭐냐면 이미지를 점으로 찍어서 표시를 하는 것.
예를 들면 가로 세로 4개의 점이 있다.
숫자 1을 그리고 싶으면 여기는 다 까만색으로 채우고 여기만 하얀색으로 채우면 지금 멀리서 보면 멀리서 보면 이렇게 1처럼 보이겠죠.
그래서 픽셀들이 굉장히 작은 점들로 이미지가 이루어져 있습니다.
이런 비트맵 방식이 있고요.
벡터 방식은 뭐냐면 이미지를 표현을 할 때 선으로 표현을 하는 것.
선이라는 것은 결국 점과 점을 이렇게 이으면 선이 됩니다.
벡터 방식의 장점은 뭐냐면 그림을 확대해도 깨지지 않습니다.
왜냐하면 점과 점을 이은 것이기 때문에 확대하고 싶으면 점과 점을 이렇게 멀리 떨어뜨려 놓고 이걸 선으로 이렇게 이으면 반듯하게 됩니다.
그 다음 포인트 클라우드 방식은 점의 3차원 좌표로 표현을 이렇게 했는데 이거는 이제 주로 어디서 쓰냐면 라이다 같은 장비를 할 때 라 이다는 라이다가 L로 시작하거든요.
L이 레이저입니다.
레이저를 쏴서 반사가 돼서 튕겨 나오는데 그럼 시간을 재보면 그 거리를 알 수 있을 거 아니에요.
빛의 속도가 고정돼 있으니까.
그러면 반사돼서 찍고 돌아오는 그 점이 있겠죠.
그 점의 좌표로 표현하는 방식이 포인트 클라우드.
그래서 이 점들을 이렇게 뿌려 놓으면 구름 같다고 해서 점의 구름.
포인트 클라우드 이렇게 얘기하는데 우리가 보통 컴퓨터 비전에서는 비트맵 방식을 사용합니다.
그래서 이제 벡터나 포인트 클라우드는 잘 쓰진 않아요.
포인트 클라우드도 근데 이제 우리 라이다 같은 걸 처리하려면 써야겠죠.
비트맵
그런 경우가 아니면 보통은 왜냐면 우리가 제일 많이 쓰는 게 카메라인데 일반적인 그 카메라는 빅트맵으로 원본 데이터가 비트맵이기 때문에 비트맵으로 처리를 합니다.
그래서 이제 비트맵은 픽셀이라고 하는 점들로 저장을 하고 그 다음에 각각의 픽셀마다 밝기가 있어요.
픽셀이 꺼지면 밝기가 0이 되고 그러면 어두우니까 검은색이 되겠죠.
그리고 픽셀이 최대한 밝게 켜지면 흰색이 됩니다.
그래서 중단에서는 회색.
그래서 사실 검은색, 흰색, 회색은 엄밀한 의미에서는 우리가 빨주노초파남보 할 때 색상하고는 다르게 그냥 밝기에 빛이 밝으냐 어두우냐
이런 거고.
그래서 점마다 빛이 밝기도 하고 어둡기도 하고 그랬습니다.
그래서 여기도 보면은 이 화면이 있으면.
이 화면을 이루는 수많은 점 들이 있어가지고 이 점 중에 밝은 데는 흰색 어두운 데는 검은색 이렇게 되는 거죠.
그래서 이제 대부분 컴퓨터 비전에서 사용을 하는데 이 비트맵의 약점 중에 하나가 이미지를 확대하거나 축소하는 거에 약합니다.
왜냐하면 점이 커지면 그래서 어차피 점이 사각형이니까 확대를 하면 사각형이 점점 커지겠죠.
그래서 이제 요거를 보관하기 위해서 약간 확대할 때.
점과 점 사이의 색깔을 평균을 내가지고 메꾸는데 평균이란 건 뭐에요?绝
이 색도 아니고 저 색도 아닙니까 애매한 색으로 채우는 거죠.
그래서 보통 작은 이미지를 크게 키워보면 이미지가 약 검에 보이는거.
그 다음에 또 다른 문제는 이미지의 크기가 커지면 점 의 개수가 늘어난 이유가 용량이 커진다는 그런 문제가 있습니다.
그래서 그렇고 그 다음에 이제 이미지를 그럼 컬러로 표현할 때는 어떻게 하느냐 컬러로 표현하면은 픽셀을 여러개 합쳐 가지고 표현을 하는데 우리가 보통 이제 칼라 라고 하면 여러가지 방식으로 할 수 있는데 빛의 3원색이 있어요 빛의 3원색을 RGB 이렇게 쓰는데요 RGB란 말은 많이 들어보셨죠
빨강 레드 초록 그린 파랑 블루 그래서 RGB 세가지 색을 섞으면 이렇게 다양한 색상이 되고 여기서 이제 비율을 조정을 하면은 모든 색상을 표시를 할 수 있습니다
그래서 실제로는 빨간색 픽셀이 있어 가지고 빨간색 픽셀이 최대한 밝아지면 빨간색이 되고 초록색 픽셀이 최대한 밝아지면 초록색이 되고 파란색 픽셀이 최대한 밝아지면 파란색이 되는데 그러면은 파란색 픽셀이랑 빨간색 픽셀을 최대한 둘다 밝게 해주면 보라색이 나오겠죠
그래서 이런식으로 RGB를 RGB 세가지 픽셀을 실제로 액정에 서 액정에 물을 한번 묻혀 보시면 빨강 초록 파랑 이렇게 분리되서 보이거든요
평소에는 너무 가까이 붙어 있어 가지고 얘네가 구별이 안되는데 물 같은거 화면에 묻으면 RGB가 색깔이 꺾이는 각도가 달라서 픽셀이 분리되서 보입니다
그래서 정말인가 궁금하시면 저기 화장실 가서 핸드폰에 물 뿌려보세요 화면에 그러면은 RGB로 되어 있구나
이걸 알 수 있구요 그래서 컬러 이미지는 사실은 그냥 RGB 세가지의 밝기를 가지고 있습니다
실제로 이미지가 세 장이 있는거에요
그 다음에 인쇄용 이미지는 색의 삼원색을 사용하는데 물감 같은 경우는 다릅니다
빛은 섞으면 섞을수록 밝아지지만 물감은 섞으면 섞을수록 어두워지거든요
그래서 이제 CMYK 하는데 C는 하늘색이고 M은 자주색 Y 는 노란색 그래서 이거를 이제 여기 오른쪽에 보시면 이거를 섞으면 다른 색깔이 되고 그 다음 이제 까만색을 만들려면 물감 세 개를 다 섞으면 되는데 그러면 이제 종이에다 인쇄를 보통 하니까 물감을 3개 섞으면 돈도 많이 들고 보통 검은색을 제일 많이 써죠
여기서도 보면 검은색이 제일 많잖아요
물감을 3배로 써야 되니까 돈이 아깝단 말이에요
까만색은 물감을 따로 씁니다
그래서 보통 인쇄는 4배 정도를 써야 돼요.
3배집에서 1배 정도는 까만색을 같이 섞으면 이제 물감이 더足니다.
그런데 보통 검은색을 제일 많죠
여기서도 검은색이 제일 많잖아요
물감을 3배로 써야 되니까 돈이 아깝단 말이에요.
그래서 까만색은 물감을 따로 씁니다.
그래서 보통 인쇄는 4가지 색을 써요.
4색으로.
그래서 까만색은 물감을 아끼기 위해서 따로 잉크를 씁니다.
그래서 제일 많이 쓰는 까만색을 따로 하죠.
그래서 프린터 잉크 같은 것도 보시면 아마 4색 토너가 4종류로 되어 있거든요.
까만색 토너는 따로 씁니다.
그래서 이제 보통 컬러 이미지는 RGB로 되어 있거나 인쇄용이면은 물감 색깔에 맞춰서 CMYK 해가지고 4가지로 되어 있습니다.
우리가 색상이 중요한 경우도 있고 중요하지 않은 경우도 있는데 우리 앞에서 얘기했던 일을 좀 작업자가 자리에 앉아 있는 거냐 그럴 때는 색상이 별로 안 중요하죠.
사람 모양이기만 하면 됐지 색깔이 뭔지는 별로 안 중요하죠.
그러니까는 색상이 안 중요하면 우리가 이미지를 흑백으로 변환하면 용량을 1분의 3로 줄일 수가 있습니다.
파일 용량도 줄어들고 계산량도 1분의 3로 줄어드니까 빨리빨리 계산할 수 있겠죠.
그래서 다 그런 거고요.
그 다음에 이제 약간 재밌는 잡지식 하나 우리가 보라색이라고 하는 표현하는 말이 두 가지가 있거든요.
영어로 퍼플이 있고 바이올렛이 있는데 이게 좀 달라요.
실제로는 우리말로는 둘 다 보라색이라고 하는데 실제로는 다른 색입니다.
뭐가 다를까요?
보통 퍼플이라고 하는 보라색은 빨강하고 파랑을 섞은 거를 퍼플이라고 해요.
이게 퍼플입니다.
그 다음에 보라색은 뭐냐면 결국에는 빨주노초파남보가 결국에는 빛의 파장이거든요.
빨강이 파장이 긴 거고 파란색은 파장이 짧은 거죠.
그래서 바이올렛은 뭐냐면 파란색보다 더 파장이 짧은 겁니다.
그래서 빛을 주파수를 보면은 바이올렛은 주파수가 이렇게 돼 있는데 주파수가 일정해요.
근데 퍼플은 빨간색의 주파수랑 파란색의 주파수가 섞여있는 형태입니다.
그래 서 실제로는 다른 색이다.
영어로 그래서 우리가 자외선이라고 하는 거잖아요.
그래서 우리가 자외선이라고 하는 거잖아요.
자외선이라고 하면은 자외선의 자가 바이올렛이거든요.
그래서 울트라 바이올렛 돼가지고 UV라고 하잖아요.
퍼플이 아닙니다.
UP가 아니고 UV. 그래서 이거는 약간 잡지식인데 영어로 퍼플하고 바이올렛은 그런 차이가 있다.
그다음에 우리가 비트맵 파일을 저장할 때 포맷이 여러 가지가 있는데 JPG가 있고요.
GIF가 있고 그다음에 PNG가 있고 그다음에 WEPI, TIFF, RAW 이런 포맷들이 있는데요.
이게 뭐가 다르냐면 보통 JPG는 손실 압축이라는 걸 씁니다.
손실 압축이란 건 뭐냐면 이미지를 픽셀 그대로 저장을 해버리면 용량이 너무 많아요.
그래서 용량을 좀 줄이는데 JPG는 화질이 약간 떨어지더라도 용량을 줄일 수 있으면 그 방식을 씁니다.
그래서 JPG로 저장하면 화질이 떨어져요.
근데 우리 눈에 보일 만큼 떨어지진 않아요.
근데 약간 미세하게 떨어집니다.
근데 이제 문제가 뭐냐면 JPG로 저장을 할 때 화질이 약간 떨어져요.
그냥 그대로 놓고 쓰면 상관없는데 이 파일을 다시 포토샵 같은 데서 열어가지고 또 편집을 하고 또 저장을 하면 그때 저장을 하면서 화질이 또 조금 떨어집니다.
그럼 그걸 열었다 닫았다 열었다 닫았다 하면서 그냥 열었다 닫으면 상관없는데 열어서 편집하고 닫고 열어서 편집하고 닫고 이걸 계속 반복하면 그때마다 화질이 조금 조금 조금 떨어져가지고 어느 순간 되면 화질이 굉장히 많이 떨어져요.
그래서 가끔 인터넷 같은 데 보면은 뭐 디지털 풍화 이런 식으로 얘기해가지고 여기 보면
스티브 잡스 사진인데 화질이 굉장히 묘하게 많이 떨어져 있죠.
그리고 여기 오른쪽 보면 사진이 막 초록색으로 가끔 인터넷 하다 보면은 이렇게 옛날 유머 같은 경우에 이런 식으로 화질이 굉장히 떨어져 있는 경우가 있잖아요.
왜 디지털 파일인데 화질이 이렇게 떨어져 있냐 그러면 이게 왜 그러냐면 원본이 JPG로 돼 있었는데 누가 JPG를 캡쳐하고 있는 경우가 있어요.
캡쳐를 해요.
그럼 캡쳐를 한다는 거는 이 화면의 옆에 있는 다른 픽셀들까지 같이 캡쳐가 되거든요.
그걸 저장을 하면 그것도 일종의 편집이죠.
왜냐면 다른 픽셀이 들어가니까 그때 화질이 좀 떨어집니다.
그걸 그대로 복사해가지고 붙여넣기를 해야 되는데 또 캡쳐를 해요.
그러면서 그때 또 화질이 떨어집니다.
그걸 계속 반복을 하니까 화질이 이런 식으로 떨어지는 거예요.
그러니까는 그냥 오른쪽 우클릭해서 저장하면 화질이 안 떨어지는데 캡쳐 같은 식으로 하면 그 캡쳐도 일종의 편집이라서 화질이 떨어집니다.
그 다음에 GIF나 PNG는 비손실 압축이라서 화질이 떨어지지 않습니다.
그 대신에 압축할 수 좀 불리하겠죠.
용량 측면에서 그 다음에 웹피는 뭐냐면 우리 방금 실습했던 웹피 같은 경우는 구글에서 만든 건데 이름에도 웹이 들어가는 걸 보시면 아시겠지만 구글이 검색을 해가지고 사람들이 인터넷을 많이 써야 결국 광고로 돈을 버는 회사인데 보통 인터넷을 할 때 제일 느린 게 뭐냐면 이미지가 로딩되는 시간이 제일 오래 걸린단 말이에요.
이미지가 로딩이 천천히 되면 사람들이 인터넷 하다가 짜증나가지고 인터넷을 안 하든가 아니면 광고 하나라도 더 봐야 되는데 이미지 뜨는 거 기다 리니까 인터넷을 빨리빨리 못해서 광고를 안 보겠죠.
그래서 구글이 어떻게 하면 사람들이 인터넷을 더 쾌적하게 해서 결국 자기네 광고를 더 많이 볼까
생각을 하다가 이미지 파일의 포맷이 너무 구리다 해서 만든 게 웹피라는 포맷입니다.
그래서 이 웹피는 기존의 JPG, PNG, GIF의 장점을 다 합쳐가지고 손실 압축하고 비손실 압축을 다 섞어서 씁니다.
손실해도 되는 거면 손실을 하고 손실을 하면 안 되는 건 비손실을 하고 이런 식으로 하고 압축 알고리즘도 더 개선을 해가지고 같은 크기면 더 화질이 좋아요.
그리고 같은 화질이면 용량이 더 작습니다.
그래서 이거는 여러분들이 최근에 나온 포맷이라서 보실 일이 좀 없었는데 요즘에 많이 쓰는 포맷입니다.
TIFF나 RAW는 거의 보실 일이 없는데 이거는 사진 전문가들이 디지털 카메라 대포라고 하죠.
그런 데서 쓰는 거기 때문에 사실 이거는 우리가 별로 볼 일은 없습니다.
그래서 이런 포맷들이 있다.
정리하면 JPG는 손실 압축 방식 약간 화질이 떨어지는 그런 방식이고 GIF나 PNG는 화질이 안 떨어지는 웹피는 최신 포맷 이 정도로 기억을 하시면 되겠습니다.
벡터
그다음에 벡터는 우리가 사실 거의 컴퓨터 비전에서는 쓰지 않지만 쓰지 않는 방식이기 때문에 상관없고 여러분들이 잘 아시는 PDF 같은 게 벡터 방식이에요.
그래서 우리 강의 자료를 PDF로 봤는데 교환을 보면 그래서 여기 지금 보시면 글자가 있는데 확대를 해도 글자가 안 깨지죠.
축소를 하든 확대를 하든 지금 보시면 은 막 빨리 키우면은 잠깐 화질이 너무 빨라서 잘 안 보시는데 막 빨리 키우면은 잠깐 화질이 떨어졌다가 다시 보이셨나요?
글자가 잠깐 화질이 떨어졌다가 다시 깨끗해지는 걸 볼 수 있습니다.
그러니까 막 확대를 하면은 잠깐 비트맵을 확대를 했다가 다시 그리는 거예요.
방이라는 글자를 이루고 있는 점들의 위치를 이용해서 방이라는 글자를 다시 그려버려요.
그래서 아무리 확대를 해도 깨지지 않습니다.
깨끗하게 나온다는 장점이 있는데 근데 이거는 이미 이거 자체가 이미 한번 처리된 결과이기 때문에 컴퓨터 비전에서는 보통 이제 카메라로 찍은 걸 가지고 뭔가 하는데 벡터라는 거 자체가 이미 한번 처리된 거라서 이걸 가지고 컴퓨터 비전을 하지는 잘 않아요.
근데 이런 포맷도 있다
정도로 기억을 하시면 될 것 같고요.
포인트 클라우드
그다음에 포인트 클라우드는 아까 얘기 드렸듯이 라이다 같은 장비로 찍으면 우리가 여기다 의자랑 기둥을 하나 넣고 라이다로 이렇게 찍으면 레이저 같다가 반사기 같은 장비로 찍으면 이렇게 한 단에서 튕겨 나오면서 이런 점들로 표시됩니다.
그러면 예를 들면 이 기둥 뒤쪽은 레이저가 뚫고 들어가지는 못하니까 여기가 텅 빈 것처럼 나오겠죠.
그래서 이런 방식이 포인트 클라우드인데 이거는 우리 수업에서는 다루지 않겠습니다.
그래서 아까 보니까 포인트 클라우드 데이터 다루시는 분이 계시던데요.
안타깝게도 포인트 클라우드 방 식의 데이터를 다루는 거는 우리 수업에서는 약간 다루지 않고 우리 수업에서는 비트맵 방식의 데이터를 다루는 데까지만 가도록 하겠습니다.
이미지 파일의 크기
자 이렇게 해서 우리가 이제 PIL 기본적으로 이미지 파일 여는 거까지 해 봤고요.
자 그 다음에 이미지 파일의 크기도 한 번 보면 아까 img.format 했죠?
img.size
img.size 하면 말 그대로 사이즈를 줍니다.
그래서 img. size 하면 숫자가 두 개가 나오는데 가로 세로가 각각 몇 픽셀로 이루어져 있느냐 그래서 가로 1024 픽셀, 세로 1024 픽셀로 되어 있다.
지금 이 이미지는 가로 세로가 모양이 똑같아 가지고 구별이 잘 안 되는데 그림이 좀 길쭉한 이미지를 하나 열어보죠.
볼륨 말고 옆으로 긴 거.
에어포트로 바꿔서 열어볼게요.
이거 열어보면 이거는 가로가 길고 세로가 짧죠.
이거를 다시 실행해보면 4096, 2554 이렇게 나오는데 4096, 2554 이렇게 나오는데 가로가 길잖아요.
가로가 4096개의 픽셀로 되어 있고 세로는 2654개의 픽셀로 되어 있다.
그래서 가로 세로 이렇게 길이가 나오게 됩니다.
파일을 다른 걸로 바꿔 가지고 그 위에 거를 고친다고 아래께 다시 자동으로 바뀌진 않거든요.
위의 것을 고쳐서 실행을 하셨으면 아래 것도 다시 실행을 하셔야 결과가 위의 것에 맞춰서 바뀝니다.
그래서 우리가 이제 이거를 바꿔서 돌려보면 어떤 숫자인지 의미할 수 있겠죠.
그 다음에 이제 실행 버튼에 마우스를 얹고 잠깐 기다려 보시면 run this cell and advance 한 다음에 바로 shift 엔터 이렇게 나오는데 저 shift 엔터가 단축 키에요.
그래서 매번 매번 요거 안 누르셔도 여기 명령을 친 다음에 shift 하고 엔터를 같이 누르시면 실행이 됩니다.
그렇게 하셔도 돼요.
그래서 img.size에서 요거 사이즈 한번 확인하고 그래서 img.size에서 요거 사이즈 한번 확인하고 확인해 보시면 될 것 같구요.
이미지 파일의 색상 모드
img.mode
그 다음에 img.mode도 해보시면은 요거부터는 뭐 별거 없죠.
img.mode 해보면 rgb 라고 나오는데 요거는 컬러가 rgb 세가지 3색 모드다.
요런 얘기입니다.
그래서 요것도 자료에 써놨는데 rgb 돼 있으면은 빨강 초록 파랑 레드 그린 블루고 rgb a 라고 돼 있는 이미지도 가끔 있는데 a는 뭐냐면 알파 라고 해서 투명도를 같이 하는거에요.
그래서 가끔 그림 중에 이렇게 ppt가 있는데 얹어 보면은 뒤에가 이제 투명하게 나오는 게 있거든요.
실제로 투명한 건 아니고 그 알파 채널이라는 값이 있어 가지고 그 알파 채널 값이 0으로 돼 있으면은 거기에는 그림을 아예 그려야 되거든요.
색깔이 없는 건 아닌데 뒤에 뭐가 그림이 있으면 그 부분 픽셀은 그림을 안 그리도록 그 정보가 추가적으로 있는거에요.
그 다음에 이제 흑백은 bw 이렇게 안 써 있고 l 한 글자로 돼 있는데 왜 그러냐면 이제 채널 수 색깔이 몇 개인지를 구별을 하려고 글자수를 거기다 맞추거든요.
근데 블랙 앤 화이트 이렇게 쓰면은 두 글자잖아요.
근데 색깔은 사실 하나밖에 없기 때문에 한 글자로 l로 줄여놨는데 왜 l이냐면 루미넌스 밝기거든요.
밝기라는 뜻입니다.
그래서 뭐에 약산지는 뭐 기억 안 하셔도 되고 하여간 l이라고 돼 있으면 아 이거 흑백이구나
이렇게 생각을 하시면 될 것 같고요.
그 다음에 cmi-k는 아까 얘기 드렸듯이 이제 이건 인쇄용인데 우리가 인쇄용 파일을 가지고 이미지 처리 할 일은 별로 없기 때문에 이것도 뭐 그냥 이런 게 있다 정도로 생각을 해주시면 될 것 같고요.
이미지 크기 변경
img = img.resize((256, 256))
그 다음에 이제 이미지를 우리가 크기를 바꿀 때는 리사이즈를 쓰시면 됩니다.
리사이즈는 말 그대로 리사이즈 하라는 얘기죠.
여기 보시면은 괄호가 이렇게 두 겹으로 돼 있어요.
왜 두 겹으로 돼 있냐.
기본적으로 파이썬에 있는 함수들 일종의 명령들은 무조건 괄호를 붙여서 이 안에다가 이제 인자를 넣게 돼 있습니다.
그래서 아까 오픈 같은 경우는 보면은 오픈을 할 때 여기 파일 이름이 들어가게 돼 있어요.
리사이즈를 할 때는 크기가 들어가야겠죠.
근데 크기라는 거는 가로와 세로가 있기 때문에.
가로와 세로를 괄호로 묶어줘야 됩니다.
그래서 이 안쪽에 있는 괄호는 튜플이라고 하는데 우리가 학교 다닐 때는 순서쌍이라고 배우거든요.