2021. 3. 15. 23:25ㆍ카테고리 없음
패스트캠퍼스 6개월 치 업무를 하루 만에 끝내는 업무자동화 올인원 패키지 Online
학습강의
저작권은 무서움 - 저작원 없는 이미지 1 (이미지파일의 구조)
저작권은 무서움 - 저작원 없는 이미지 2 (이미지 텐서, 언패킹, numpy,uint8)
저작권은 무서움 - 저작원 없는 이미지 3 (이미지 저장하기)
pip install numpy pillow
디자인 라이브러리 설치
이미지 파일의 구조와 픽셀
이미지를 무리하게 학대하면 이미지가 깨진다.
정사각형 점 하나를 픽셀이라고 부르면 정사각형 픽셀이 모여 우리가 알고 있는 이미지가 된다
픽셀의 구조?
픽셀에는 색상 정보만이 있다
RGB?
빛의 삼원색 모든 색상은 비율의 조합으로 이루어진다
RGB 비율로 색이 결정되며 0~255 사이 값을 통해 색이 정해진다.
RGB(255, 0, 0)
RGB(0, 255, 0)
RGB(0, 0, 255)
그림판을 활용하면 픽셀을 가장 쉽게 체험해 볼 수 있다
이미지파일은 2차원 데이터를 포함하고 있다 (너비와 높이, 색상)
또 3차원 데이터도 포함되어 있다 (RGB)
이미지 텐서 / 코드 설계 과정
3차원 이상의 데이터를 배열할 때 텐서라고 지칭
(순서와 자기위치가 정해진 채로 데이터가 배열되어 있다)
Uint8 (8bit 숫자, 2의 8승)
0~255 숫자를 입력 안했을경우 오류 표시됨
목표
1.라이브러리 설치 PIL, numpy
2. 가로 세로 길이 랜덤으로 정하기
3. 이미지 내용물을 랜덤으로 칠하기
In [1]: import numpy as np
넘파이라는 라이브러리는 불러오고 넘피라고 부르겠다
In [3]: np.random.randint(100,400)
Out[3]: 102
np에 랜덤을 입력하고 randint (정수)인트를 붙인다
In [4]: np.random.randint(100,400)
Out[4]: 339
x = [1,2][0]
y = [1,2][1]
x = 1
y = 2
언패킹 처리 시
x, y = [1,2]
x=1
y=2
In [6]: np.random.randint(100,400, size=2)
Out[6]: array([373, 323])
사이즈에 숫자을 붙이면 랜덤하게 원하는 갯수만큼 출력된다
넘파이와 언패킹으로 랜덤 숫자 만들기
In [7]: x, y = np.random.randint(100,400, size=2)
언패킹을 이용해 x,y 값을 랜덤하게 각각 저장
In [8]: x
Out[8]: 159
In [9]: y
Out[9]: 383
이미지 텐서를 랜덤하게
In [13]: image_tensor = np.random.randint(256, size=(x, y, 3))
x는 가로 y세로 3은 색상값 RGB
In [14]: image_tensor
Out[14]:
array([[[ 21, 76, 99],
[ 7, 75, 243],
[245, 31, 212],
...,
[195, 223, 128],
[123, 255, 0],
[199, 56, 186]],
[[122, 100, 123],
[ 36, 103, 40],
[196, 29, 246],
...,
[203, 177, 71],
[123, 147, 118],
[ 85, 65, 6]],
[[184, 110, 104],
[137, 192, 160],
[ 15, 38, 130],
...,
[ 7, 200, 212],
[233, 155, 152],
[ 60, 220, 212]],
...,
[[128, 92, 215],
[218, 43, 33],
[ 99, 32, 232],
...,
[220, 31, 138],
[109, 2, 191],
[ 25, 10, 28]],
[[ 87, 139, 34],
[102, 20, 112],
[182, 39, 250],
...,
[164, 38, 69],
[ 3, 241, 73],
[226, 31, 102]],
[[ 84, 150, 14],
[185, 248, 28],
[202, 93, 191],
...,
[155, 16, 104],
[201, 48, 77],
[168, 224, 185]]])
In [15]: image_tensor.shape
Out[15]: (159, 383, 3)
텐서는 많은 데이터가 모여있기 때문 한눈에 보기 쉽지 않다
shape 입력하면 방금 만든 사이즈를 볼 수 있다
오류가 나지 않게 포맺을 유인트 8로 변경해 준다
astype ~타입을 바꿔준다
In [16]: image_tensor.astype('uint8')
Out[16]:
array([[[ 21, 76, 99],
[ 7, 75, 243],
[245, 31, 212],
...,
[195, 223, 128],
[123, 255, 0],
[199, 56, 186]],
[[122, 100, 123],
[ 36, 103, 40],
[196, 29, 246],
...,
[203, 177, 71],
[123, 147, 118],
[ 85, 65, 6]],
[[184, 110, 104],
[137, 192, 160],
[ 15, 38, 130],
...,
[ 7, 200, 212],
[233, 155, 152],
[ 60, 220, 212]],
...,
[[128, 92, 215],
[218, 43, 33],
[ 99, 32, 232],
...,
[220, 31, 138],
[109, 2, 191],
[ 25, 10, 28]],
[[ 87, 139, 34],
[102, 20, 112],
[182, 39, 250],
...,
[164, 38, 69],
[ 3, 241, 73],
[226, 31, 102]],
[[ 84, 150, 14],
[185, 248, 28],
[202, 93, 191],
...,
[155, 16, 104],
[201, 48, 77],
[168, 224, 185]]], dtype=uint8)
결합해서 한번에 하는법
image_tensor = np.random.randint(256, size=(x, y, 3)).astype('uint8')
결과물을 PIL Image 형태로 만듭니다.
result = Image.fromarray(image)
넘파이에 있는 프로세스로 이미지 형태로 변경해 저장해준다